使用 Azure 人脸 API 进行实时人脸检测时出现性能问题



我想使用 Azure 认知服务的人脸 API 制作实时人脸识别器。但是 api 调用需要很多时间。我能做什么?

我在简单的 while 循环中编写了代码。抓取一个帧并检测该帧中的人脸。但是检测人脸的请求部分需要~2.5秒。因此,它离实时检测还很远:) 我在他们的网站上找到了一个 c# 示例,但我无法处理。链接是:https://learn.microsoft.com/en-us/azure/cognitive-services/face/face-api-how-to-topics/howtoanalyzevideo_face

while True:
image = getCapture()
cv2.imshow('image', image)
image = cv2.imencode('.jpg', image)[1].tostring()
response = requests.post(vision_analyze_url,
params=params,
headers=headers,
data=image)
print(response.json())
key = cv2.waitKey(1) & 0xFF

顺便说一句,我什至可以使用 2 fps。我应该使用什么概念?我看到了类似 asyncio 的东西,我应该使用它吗?

根据我的经验,您的性能问题是由两个原因引起的。

  1. 每个请求响应的网络延迟,通过使用基于并发asyncioaiohttp来降低间隔请求的时间成本。
  2. 这是一个在单个线程上运行的循环进程,等待响应返回,然后执行下一个响应。由于Python没有真正的并发机制,通过GIL、并行或并发请求远程人脸检测apiParallel Pythonray

基本上,上述两个与官方文档Example: How to Analyze Videos in Real-time使用视频流加速人脸检测的想法相同。

否则,如果你只需要做实时人脸检测,我认为基于dlibageitgey/face_recognition可能是更好的解决方案,适合你的场景没有云。

希望对您有所帮助。

最新更新