python - 使用 azure face api 进行实时人脸检测时的性能问题
问题描述
我想用 azure 认知服务的人脸 API 制作一个实时人脸识别器。但是api调用需要很多时间。我能做些什么?
我在简单的 while 循环中编写了我的代码。抓住一个框架并检测该框架中的人脸。但是检测人脸的请求部分大约需要 2.5 秒。所以,它与实时检测相去甚远 :) 我在他们的网站上找到了 ac# 示例,但我无法处理。链接是: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 的东西,我应该使用它吗?
解决方案
根据我的经验,您的性能问题是由两个原因引起的。
aiohttp
每个请求响应的网络延迟,使用基于asyncio
并发来降低间隔请求的时间成本。- 这是一个在单个线程上运行的循环过程,等待响应返回然后执行下一个。由于 Python 没有真正的并发机制,通过或
GIL
并行或并发请求远程人脸检测 api 。Parallel Python
ray
Example: How to Analyze Videos in Real-time
基本上,以上两点与官方文档中关于视频流人脸检测加速的思路是一样的。
否则,如果您只需要进行实时人脸检测,我认为ageitgey/face_recognition
基于dlib
可能是您没有云的场景的更好解决方案。
希望能帮助到你。
推荐阅读
- r - 当某些观察值少于 n 行时,使用 dplyr 在数据帧中对每组随机采样 n 行
- python - OpenCV中PIL库函数ImageEnhance.Contrast(image).enhance(param)的等价物是什么?
- c# - 无法将列表附加到现有文件。C#
- r - 使用点 (...) 将不同的参数传递给内部函数
- jenkins - 错误无法建立一个或多个指定的浏览器连接。这可能是由网络问题或远程设备故障引起的
- reflection - Threejs:glb文件反映环境但不反映自身
- kubernetes - 如何在不丢失集群数据的情况下重启 kube apiserver
- python - Python:当我们在特定列中有重复项时合并行
- javascript - How to convert an object with arrays as values to an array of objects
- java - cucumber-junit-platform-engine 中的@CucumberOptions