【发布时间】:2021-11-25 04:44:58
【问题描述】:
我正在使用 opencv 和 openvino 并试图弄清楚何时检测到人脸,使用 cv2.rectangle 并发送我的坐标,但仅限于以框为界的第一个人,因此它可以移动电机,因为当它看到多个人它发送多个坐标,从而导致伺服和步进电机发疯。任何帮助,将不胜感激。谢谢
【问题讨论】:
我正在使用 opencv 和 openvino 并试图弄清楚何时检测到人脸,使用 cv2.rectangle 并发送我的坐标,但仅限于以框为界的第一个人,因此它可以移动电机,因为当它看到多个人它发送多个坐标,从而导致伺服和步进电机发疯。任何帮助,将不胜感激。谢谢
【问题讨论】:
通常,每个代码都会逐行运行。您需要为每个场景创建一个适当的函数,以便正确处理和处理数据。简而言之,您需要实现error handling 和数据处理(可能不止这些,具体取决于您的软件/硬件设计)。如果你想同时实现多个执行线程,最好使用多线程。
此外,您正在使用 2 种类型的电机。简单地获取所有数据效率低下,容易导致数据丢失。您需要清楚伺服电机和步进电机任务是什么,坐标之间的关系,谁将触发什么,如果出现故障或缺少某些序列,则执行任务 X 等。
例如,数据 A 的序列应该产生结果 A,但由于数据 B 进入缓冲区并干扰结果 A,同时又拧紧了预期发生的结果 B,因此它中途停止了。 (这就是你的程序中发生的事情)
最好通过创建coding flowchart(表示算法的图表)来审查和设计整个流程。它将让您清楚地了解每个代码序列应该发生什么。然后,为每种情况设计一个合适的处理程序。
【讨论】:
您能否分享您对(伪)代码的更多见解?
这听起来很简单 - 你触发一个面部检测推理请求,你会得到一个包含所有检测到的面部的列表/向量(每个检测到的面部的感兴趣区域)(包括误报和误报,需要一些一致性检查来过滤这些)。
如果您只对第一个检测到的人脸感兴趣 - 那么它可能只是处理从列表/向量返回的第一个结果。
但是,您会看到有时结果的顺序可能会发生变化,即当检测到 2 个面孔 A 和 B 时,在下一次运行中它仍然可以返回面孔,但首先是 B,然后是 A。 您可以在人脸检测之上添加对象跟踪,以确保您始终处理同一张脸。 (但即使这样有时也会失败)
【讨论】: