使用Azure Face API进行实时面部检测时出现性能问题

时间:2019-08-13 12:05:54

标签: python opencv python-requests azure-cognitive-services

我想使用Azure认知服务的人脸api做一个实时人脸识别器。但是api调用要花很多时间。我该怎么办?

我在简单的while循环中编写了代码。抓住框架并检测该框架中的脸部。但是检测面部的请求部分大约需要2.5秒。因此,它离实时检测还很远:) 我在他们的网站上找到了一个C#示例,但我无法处理。链接为:https://docs.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 个答案:

答案 0 :(得分:0)

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

  1. 每个请求的响应网络延迟,以同时使用基于aiohttp的{​​{1}}来减少间隔请求的时间成本。
  2. 这是一个在单个线程上运行的循环过程,等待返回响应,然后再执行下一个。由于Python没有GIL真正的并发机制,因此无法并行或并发地通过Parallel Pythonray请求远程面部检测api。

基本上,以上两项与官方文档Example: How to Analyze Videos in Real-time的思想相同,用于加速视频流面部检测。

否则,如果您只需要进行实时人脸检测,我认为基于ageitgey/face_recognitiondlib可能是您在没有云的情况下的更好解决方案。

希望有帮助。