65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Kubernetes 上运行人脸识别

2021 年 8 月 3 日

CPOL

3分钟阅读

viewsIcon

10452

在本系列的下一篇文章中,我们将展示如何在 Kubernetes 上运行人脸识别服务器。

引言

人脸识别是人工智能 (AI) 的一个领域,在过去十年中,深度学习 (DL) 的现代方法取得了巨大的成功。最好的人脸识别系统可以像人类一样精确地识别图像和视频中的人物,甚至更好。

我们关于这个系列文章分为两部分

  • 人脸检测,客户端应用程序在图像或视频源中检测人脸,对检测到的人脸图像进行对齐,并将它们提交给服务器。
  • 人脸识别(本部分),服务器端应用程序执行人脸识别。

我们假设您熟悉 DNN、Python、Keras 和 TensorFlow。 欢迎您下载此项目代码...

之前的文章中,我们学习了如何在 Docker 容器中运行人脸识别服务器。容器化允许我们在预定义的环境中开发和测试应用程序,然后轻松地部署软件。在本文中,我们将在本地 Kubernetes 集群中运行我们的人脸识别 Web 服务器。

Kubernetes 是一组旨在管理 Docker 容器的协调集群的服务。Kubernetes 简化了软件部署、网络路由和服务器负载均衡。这是在生产环境中部署人脸识别系统时需要使用的,在生产环境中,您需要扩展人脸识别服务器以服务于许多客户端应用程序(运行人脸检测的边缘设备)。

修改 Kubernetes 的容器

要在 Kubernetes 上运行我们的 AI 人脸识别容器,我们需要稍微修改它。当容器启动时,它必须运行我们创建的服务器端 Python 应用程序。 让我们使用 Dockerfile 创建一个新的 Docker 镜像。Dockerfile 是一组从现有镜像创建镜像的指令。 在我们的例子中,该文件只包含四行

FROM sergeylgladkiy/fr:v1

RUN rm /home/pi_fr/rec/*

EXPOSE 50

CMD ["python", "/home/pi_fr/pi_fr_facenet.run_align_dock_flask.lnx.py", "0.0.0.0", "50"]
  • 第 1 行:指定基础镜像。
  • 第 2 行:清理 /home/pi_fr/rec/ 目录。
  • 第 3 行:使容器使用端口 50。
  • 第 4 行:使用指定的参数运行 Python 应用程序。

现在我们可以通过命令行构建一个新的镜像。将创建的 Dockerfile 放在终端的当前目录中并执行以下命令

docker build -t "frrun:v1" .

这会创建一个名为 frrun 的镜像,标签为 v1。在容器启动时,将执行 Python 代码,并且人脸识别 Web 服务器已准备好接收人脸图像。

安装 Kubernetes

下一步是安装 Kubernetes。转到 Docker Desktop 中的设置/Kubernetes 选项卡,然后选中启用 Kubernetes 复选框。

因为我们将要运行一个 Web 应用程序,所以我们必须为 Kubernetes 创建一个服务和一个部署。我们可以将这两者都放入一个 YAML 文件中

apiVersion: v1
kind: Service
metadata:
  name: face-rec-service
spec:
  selector:
    app: face-rec
  ports:
  - protocol: "TCP"
    port: 5050
    targetPort: 50
  type: LoadBalancer

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: face-rec
spec:
  selector:
    matchLabels:
      app: face-rec
  replicas: 2
  template:
    metadata:
      labels:
        app: face-rec
    spec:
      containers:
      - name: face-rec
        image: frrun:v1
        imagePullPolicy: Never
        ports:
        - containerPort: 50

YAML 文件描述了具有适当端口的负载平衡的 face-rec-service 服务,以及运行两个基于 frrun:v1 镜像的容器副本的 face-rec 部署。

在 Kubernetes 上运行容器

现在我们可以使用以下命令在 Kubernetes 上运行我们的系统

kubectl apply -f C:\PI_FR\fr_deploy.yaml

发出命令后,查看容器/应用选项卡。您会看到正在运行的 Kubernetes Pod。

让我们测试一下我们的负载平衡服务如何工作并管理已部署的人脸识别 Web 应用程序。我们将在两台 PC 上运行客户端应用程序。每个客户端应用程序都会检测视频文件中的人脸,并将人脸图像发送到同一个 IP 地址。我们可以在为每个容器提供的日志中查看识别结果。以下是两个容器的生成图像列表。

结果表明负载均衡器如何将请求几乎均匀地分配到两个 Pod 上:第一个容器接收并处理了 252 张人脸图像,而第二个容器处理了 223 张。您可以看到使用 Kubernetes 管理我们的服务器以及将系统扩展到任意数量的客户端应用程序是多么容易。

下一步

下一篇文章中,我们将讨论从头开始开发人脸识别系统的一些方面。 敬请关注!

© . All rights reserved.