【问题标题】:Python face_recognition takes too long to process each framePython face_recognition 处理每一帧耗时太长
【发布时间】:2019-11-22 09:11:59
【问题描述】:

嘿,我正在使用来自 face_recognition github 的以下代码:code 除了检测到人脸时我得到 2 fps/sec 之外,一切正常,当没有检测到人脸时,帧速率约为 30。

我查看了任务管理器以查看我的计算机运行情况如何,CPU 和 GPU 都在约 15% 上,所以这不是硬件问题。我也尝试将分辨率更改为 320x240,但没有出现同样的问题。

如何提高 fps? 编辑: 我只有一种编码要处理,所以多线程可能无济于事

【问题讨论】:

    标签: python face-recognition cv2


    【解决方案1】:

    这个程序有两个处理步骤:

    1. 在 while 循环中,face_detection 在帧中搜索人脸,然后对其进行编码(使用线性代数将人脸数据简化为唯一向量)。

    2. 在 for 循环中(仅在检测到人脸时运行),程序针对所有其他“已知”编码运行步骤 1 中的编码,如果满足默认的确定性阈值,则返回最佳匹配。

    如果您完全修改了代码,增加了“已知”面孔的数量,则会减慢一些处理速度。另外,我不知道线程的优化程度。某些程序可能在单个线程上运行,这会显示 CPU 使用率较低,即使该程序正在最大化其有效访问的内容。

    故障排除步骤:在循环 #2(for 循环)内部,首先注释掉框架行(或 compare_faces 之后的所有内容),然后查看它是否加快了速度。这样,您可以缩小处理能力最强的范围。如果您发现 compare_faces IS 是瓶颈,请尝试减少“已知”面孔的数量。如果这会大幅提高 fps,那么您可能会受到内核/线程数量的限制。


    您使用的示例代码是优化程度较低的版本。 Here 是一个稍快的版本。调整包括:

    1. 以 1/4 分辨率处理每个视频帧(尽管仍以全分辨率显示)

    2. 仅检测每隔一帧视频中的人脸。

    基本上通过减少处理量会加快处理速度。

    【讨论】:

    • 谢谢你的信息,但不幸的是它没有解决问题,我尝试使用优化版本并评论你所说的,我得到相同的结果,我敢打赌问题是核心使用我我只用了一个。
    • 您是否只加载示例代码中的“obama”和“biden”这两个面孔?如果只是比较两张脸,我认为多线程不会帮助你。你也试过python profiler吗?
    • 其实我正在加载一个 xD 有什么问题嗯
    • 也有可能是在while循环的编码阶段减速(因为它只在找到人脸时运行)
    • 我最后的想法是启用 CUDA(如果您有兼容的 GPU)并使用 CUDA 特定版本的 opencv 库。
    【解决方案2】:

    我在装有 OSX 的 Windows PC 和 Macbook pro 上尝试了相同的项目。我发现 MacBook Pro 上的 FPS 可以达到 30 FPS 以上,而 windows PC 只能以 2 FPS 运行。我的 Windows PC 上的 CPU 是 Ryzen 3900X,我的 MacBook 使用 i9 CPU。在我看来,瓶颈不是CPU本身,应该是操作系统的主要问题。尝试安装基于 Linux 的操作系统并再次安装。我不知道原因,但 Linux 确实有这些优势。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      相关资源
      最近更新 更多