目录
介绍
为Kubernetes修改容器
安装Kubernetes
在Kubernetes上运行容器
下一步
在这里,我们给出了需要使用Kubernetes在真实生产环境中扩展和部署我们的AI解决方案时的实际案例,并展示了如何在本地Kubernetes计算机中运行容器化API。
下载 net.zip - 80.9 MB
介绍人脸识别是人工智能(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" .
这将创建以标签v1命名的frrun镜像。在容器启动时,执行Python代码,人脸识别Web服务器准备接收人脸图像。
下一步是安装Kubernetes。转到Docker Desktop中的Settings/Kubernetes选项卡并选中Enable 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上运行我们的系统:
kubectl apply -f C:\PI_FR\fr_deploy.yaml
发出命令后,查看容器/应用程序选项卡。您将看到运行Kubernetes pod。
让我们测试我们的负载平衡服务如何工作和管理部署的人脸识别Web应用程序。我们将在两台PC上运行客户端应用程序。每个客户端应用程序将检测视频文件中的人脸并将人脸图像发送到相同的IP地址。我们可以在为两个容器提供的日志中看到识别结果。该过程完成后,我们可以为容器运行终端并分析结果。以下是两个容器的结果图像列表。
结果显示负载均衡器如何将请求几乎均匀地分布在两个Pod中:第一个容器接收并处理了252张人脸图像,而第二个容器接收并处理了223张。您可以看到使用Kubernetes管理我们的服务器并将系统扩展到任意数量的客户端应用程序。
下一步在接下来的文章中,我们将讨论从头开始开发一个面部识别系统的某些方面。
https://www.codeproject.com/Articles/5305706/Running-Face-Recognition-on-Kubernetes