我开发了一个应用程序,该应用程序可以使用Google Vision API(离线)检测人脸,然后将检测到的图像发送到Microsoft Azure以获取该人脸的信息(年龄,性别...)。 就我而言,我还需要计算(至少近似)相机和检测到的脸部之间的距离,我在Microsoft Azure文档中没有看到此选项,所以我想这没有实现。如何计算相机和脸部之间的距离?我可以使用OpenCV或另一个OpenSource库实现此目标吗?
我在此处(How to measure height, width and distance of object using camera?中看到了这个答案 但就我而言,我没有设备的高度,所以我认为我无法实现此解决方案(第一个答案-drulabs的答案)。
答案 0 :(得分:0)
这个问题可以追溯到一年多以前,但是最近我也在寻找这个问题的答案,我找到了一个对我有用的简单解决方案。
在this article中,作者描述了一种基于人眼之间的距离(以像素为单位)计算照相机与人之间距离的估计值的方法。
本文中我唯一使用的是第31页的图形,该图形建议(但未提及)眼睛距离(dE)与相机距离(dC)之间的反比关系:
dC = some_constant / dE
我使用这个简单的公式估算距离。我使用人脸识别软件返回的人脸宽度估算值,而不是眼睛距离。您可以放心地这样做,因为第35页上的文章指出,“不管人的身高如何,眼距和脸部尺寸之间的关系都是线性的。”
经过一些实验,我发现some_constant
的一个值对我来说运作良好,足以发挥作用。对于5米以内的距离,与实际距离的偏差约为15%(我没有进行测试)。精度显然还取决于人脸识别软件报告的人脸尺寸(宽度)的精度。