深度学习在人脸识别中的应用

在过去的十年中,深度学习(DL)取得了巨大的成功。最好的人脸识别系统可以在图像和视频中识别人脸,其精度与人类相当,甚至更高。本文分为两部分:人脸检测和人脸识别。假设熟悉DNN、Python、Keras和TensorFlow。欢迎下载本项目代码以跟随学习。

客户端应用程序

从在边缘设备上运行的客户端部分开始。首先,编写一个简单的类,该类将人脸图像发送到服务器:

class ImgSend: def __init__(self, host, port, debug_mode=False): self.host = host self.port = port self.url = host + ":" + str(port) + "/api/faceimg" self.dbg_mode = debug_mode def send(self, img): # 省略部分代码... response = requests.post(self.url, data=data, headers=headers) # 省略部分代码... return result

构造函数接收host和port参数,并形成最终的URL,带有特殊路径/api/faceimg,以将请求路由到面部识别方法。在send方法中,将图像编码为png格式,将其转换为字符串,并使用requests.post函数将字符串发送到服务器。

服务器端应用程序

让转向服务器应用程序。使用Flask微框架将面部识别代码包装在Web API中:

from flask import Flask, request, Response app = Flask(__name__) @app.route("/api/faceimg", methods=['POST']) def test(): # 省略部分代码... response = { "message": "RECOGNIZED", "name": name, "percent": str(percent) } # 省略部分代码... return Response(response=response_pickled, status=r_status, mimetype="application/json")

在初始化Flask应用程序后,应用route装饰器以触发test方法与指定的URL(客户端应用程序使用的URL相同)。在这个方法中,解码收到的人脸PNG图像,获取嵌入,识别面部,并将响应发送回客户端。

在容器中运行系统

最后,这是运行Web应用程序的代码:

if __name__ == "__main__": # 省略部分代码... app.run(host=host, port=port, threaded=False)

由于将在创建的Docker容器中运行Web应用程序,因此需要使用适当的网络设置启动此容器。使用以下命令从映像创建新容器:

c:\>docker network create my-net c:\>docker create --name FR_2 --network my-net --publish 5050:50 sergeylgladkiy/fr:v1

当FR_2容器启动时,它将主机机器的5050端口转发到容器的内部端口50。现在可以在容器中运行应用程序(注意,因为它在容器内,指定内部端口50):

# python /home/pi_fr/pi_fr_facenet.run_align_dock_flask.lnx.py 0.0.0.0 50

当服务器启动时,可以在Raspberry Pi设备上运行客户端。以下是用来启动应用程序的代码:

if __name__ == "__main__": # 省略部分代码... (f_count, rec_count, fps) = vr.process(v_file, True, save_path) print("Face detections: " + str(f_count)) print("Face recognitions: " + str(rec_count)) print("FPS: " + str(fps))
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485