首页 > 解决方案 > Python3 - 无法根据来自对象检测过程的输入正确启动输出设备

问题描述

首先,我在这篇文章的最后附上了我项目的一些通用规范。

我项目的主要目标是通过摄像头视觉检测面罩的使用,然后相应地执行某些动作。例如,如果它检测到有人没有戴口罩,蜂鸣器将开始持续蜂鸣,红色 LED 开始闪烁,大门不会打开。

到目前为止,我设法实现了对象检测过程,它能够充分检测面罩的使用。对象检测过程应该在无限循环中连续运行,没有任何延迟,并且会停止,直到我按下特定键。

问题是当我尝试在同一个循环中合并驱动过程的延迟时,例如闪烁的 LED。由于延迟,对象检测过程的视频流冻结。

因此,我尝试了一些方法来确保输出驱动过程不会中断对象检测过程,例如通过实现多处理以及 pickle 文件作为缓冲存储器存储,存储对象检测过程产生的信息。但是,我仍然没有设法解决这个问题。我在从两个不同的进程同时写入/读取泡菜文件时遇到问题。

工艺要求如下。

流程一(主流程)

  • 在无限循环中
  • 没有延迟,迭代速度受硬件和操作系统的限制
  • 检测到口罩后立即写入输出信号

流程2(二级流程)

  • 一旦收到来自主进程的信号,就开始运行程序
  • 能够读取主进程的输出信号
  • 能够在不中断主进程的情况下延迟操作
  • 能够删除/编辑主进程的输出信号
  • 一旦主进程终止就被杀死

因此,我想知道是否有任何方法/库/函数能够同时独立地运行两个进程,具有不同的时间,并能够在这些进程中检索/传输信息。如果有必要分享我的代码,请通知我。

谢谢你。

我的项目的一般规格:

标签: python-3.xmultiprocessingobject-detectionsimultaneousnvidia-jetson

解决方案


在阅读和搜索有关多处理的更多信息后,我设法找到了对我的项目有用的东西,它是“使用服务器进程共享数据”和“进程同步”的方法,有关此功能的更多详细信息,您可以参考下面的 YouTube 视频。强烈建议您观看完整的播放列表,以便您对多处理有更广泛的了解,这可能会简化您的工作。

使用服务器进程共享数据 https://youtu.be/v5u5zSYKhFs

进程同步 https://youtu.be/-zJ1x2QHTKE

这两种方法都成功地解决了我的问题,我认为我之前的问题是由于两个进程同时写入和读取泡菜文件的问题而引起的。


推荐阅读