如何在没有延迟的情况下处理人脸识别(通过api调用处理)

2024-05-19 03:03:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用flaskpython框架、opencv和face_识别库来进行人脸识别。我尝试使用python-opencv运行网络摄像头,如果在帧中检测到人脸,它会被发送到后端,在那里处理帧并执行对人的识别,但是这个api调用和响应需要大约0.3秒,这个延迟导致了网络摄像头流畅性的滞后。在

我想要的是网络摄像头连续运行,当在帧中检测到人脸时,它不应阻止网络摄像头流的自由流动,而是应在后台单独处理此帧的处理,而主线程正在运行网络摄像头。在

在这方面的任何帮助都是非常感谢的


Tags: 网络框架apiopencv主线后台人脸face
1条回答
网友
1楼 · 发布于 2024-05-19 03:03:28

你可以做很多事情来解决这个问题

  1. 不要把每一帧都传送到检测中,很有可能你使用的是一个好的摄像头,它能给你30帧或更高的帧速率,你不需要这么高的帧速率来进行实时检测,你可以做的是,只需每3或4帧发送一次检测,而对于其他帧,只需将旧的框绘制到流中,这将为您提供足够准确的预测

  2. 将您的模型转换为GPU,人脸识别使您可以在使用CPU和GPU(仅限cnn)之间进行选择,将其转换到任何可用的GPU上将加快该过程

  3. 调整你的输入帧大小,你真的不需要1080p高清帧来检测帧,任何更小的如480p也可以(尽管这完全取决于你的问题),调整你的帧并使其更小,输入矩阵越小,它就越快。

  4. 矢量化你的操作,而不是使用默认的人脸识别API进行身份比较,我建议你用numpy编写一个矢量化版本的比较,在大矩阵中计算L2距离,而不是必须在循环中进行,这将节省大量的计算成本。

  5. 限制每人的比较次数。您可以有10个person A嵌入和10个person B嵌入,用这20个嵌入中的每一个找到未知嵌入的距离,可能会花费大量的计算,通过聚类来获取平均嵌入或这些嵌入的质心

相关问题 更多 >

    热门问题