在过去的十年中,深度学习(DL)在许多领域都取得了巨大的成功,尤其是在人脸识别系统方面。目前,最先进的人脸识别系统能够在图像和视频中识别人脸,其精确度与人类相当,甚至更高。本文将分为两部分,分别介绍人脸检测和人脸识别。
人脸检测是人脸识别系统的第一步,客户端应用程序需要在图像或视频流中检测到人脸,对检测到的人脸图片进行对齐,并将其提交到服务器。这个过程通常在客户端完成,以减轻服务器的负担。
人脸识别是服务器端应用程序的任务,它负责识别提交的人脸图片。假设读者已经熟悉深度神经网络(DNN)、Python、Keras和TensorFlow。欢迎下载本项目的代码。
在之前的文章中,学习了如何在Docker容器中运行人脸识别服务器。容器化允许在预定义的环境中开发和测试应用程序,然后轻松部署软件。本文将介绍如何在本地Kubernetes集群中运行人脸识别Web服务器。
Kubernetes是一组服务,旨在管理一组协调的Docker容器。它简化了软件部署、网络路由和服务器负载均衡。当需要在生产环境中部署人脸识别系统时,Kubernetes是一个很好的选择,因为它可以帮助扩展人脸识别服务器,以服务于多个客户端应用程序(运行人脸检测的边缘设备)。
要在Kubernetes上运行AI人脸识别容器,需要对其进行一些修改。当容器启动时,它必须运行创建的服务器端Python应用程序。让创建一个新的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"]
Dockerfile是一个用于从现有镜像创建新镜像的指令集。在案例中,文件只包含四行:
现在可以通过命令行构建新镜像。将创建的Dockerfile放在终端的当前目录中,并执行以下命令:
docker build -t "frrun:v1" .
这将创建一个名为frrun的镜像,标签为v1。容器启动时,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
发出命令后,查看Containers/Apps标签。将看到正在运行的Kubernetespods。