- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试构建一个将在 Raspberry Pi 上运行的多进程应用程序。其中一个进程应该从 rpi 相机获取一帧并将其保存到磁盘以供其他进程之一使用。但是,python multiprocessing.Process
的运行方式有些奇怪。类正在处理 rpi 相机模块。
基本上,如果我尝试在 Process
中运行 rpi 相机模块, 它卡住在 for frame in self.camera.capture_continuous
行。
下面是一些示例代码:
主要.py
from multiprocessing import Process
import camera as c
import time, atexit, sh
def cleanUp():
print("Killed the following processes:\n{}".format(
sh.grep(sh.ps("aux", _piped=True), "python3")))
sh.pkill("python3")
# Used to keep any of the processes from being orphaned
atexit.register(cleanUp)
proc = Process(target=c.run)
proc.start()
while True:
time.sleep(1)
print("main")
相机.py
from picamera.array import PiRGBArray
from picamera import PiCamera
import cv2
camera = PiCamera()
camera.resolution = (1280, 720)
camera.framerate = 30
rawCapture = PiRGBArray(camera, size=(1280, 720))
def run():
print("run function started")
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
print("this never runs")
cv2.imwrite('frame.jpg', frame.array)
rawCapture.truncate(0)
有什么见解吗?
最佳答案
问题似乎是您有两个不同的进程访问 PiCamera 模块,这在 Section 5.16 的常见问题解答中被明确禁止。在文档中:
The camera firmware is designed to be used by a single process at a time. Attempting to use the camera from multiple processes simultaneously will fail in a variety of ways (from simple errors to the process locking up).
我将您的代码减少到最低限度以显示问题,即在第一个进程中导入 camera.py
模块时执行相机初始化,但读取图像是在第一个进程中执行的生成的子进程 - 因此有两个进程正在访问相机。
#!/usr/bin/env python3
from multiprocessing import Process
import camera as c
import time
proc = Process(target=c.run)
proc.start()
while True:
time.sleep(1)
print("main")
和 camera.py
模块:
#!/usr/bin/env python3
import os
print('Running in process: {}'.format(os.getpid()))
print('camera = PiCamera()')
print('camera.resolution = (1280, 720)')
print('camera.framerate = 30')
print('rawCapture = PiRGBArray(camera, size=(1280, 720))')
def run():
print("run function started")
print('Running in process: {}'.format(os.getpid()))
当你运行它时,你会看到报告了两个不同的进程ID:
示例输出
Running in process: 51513
camera = PiCamera()
camera.resolution = (1280, 720)
camera.framerate = 30
rawCapture = PiRGBArray(camera, size=(1280, 720))
run function started
Running in process: 51514
main
main
main
一种解决方案是在 run()
函数中初始化相机。
关于python - Raspi 相机模块无法在单独的进程中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53561122/
我拥有一台连接树莓的3d打印机。为了远程控制打印机(例如通过中继来关闭和关闭打印机),我制作了一个小的python脚本。 控制它的一种可能性是使用似乎可以正常工作的Telegram Bot(电茶壶)。
我正在尝试构建一个将在 Raspberry Pi 上运行的多进程应用程序。其中一个进程应该从 rpi 相机获取一帧并将其保存到磁盘以供其他进程之一使用。但是,python multiprocessin
我在尝试通过 USB 在 teensy 和 Raspberry Pi3 之间进行通信时遇到了一些问题。 当我发送 unsigned int 时,我收到所有包含字节值 13 的数字的错误数字,该字节已更
运行钴的 raspi-2_gold 时,无法播放选定的视频。它卡在黑屏上。 什么有效: 它最初能够加载所有缩略图 可以选择视频 所有视频控件工作正常 尝试过 Nerd 统计,否 接收到的帧,显示编解码
我目前正在开发基于 JavaFX 的跨平台应用程序。在 Windows 上它运行流畅,但在 Linux 上的 Raspberry Pi 3 上,阶段(又名 JFX 窗口)没有窗口框架。取而代之的是,在
我正在修补我的 RaspberryPi 和我的 Arduino 以通过 I2C 发送一些文本。到目前为止我已经开始工作了,但是出现了一个不应该存在的数字。 我正在发送“Hello”,将其转换为 int
我在 RasPi 4 (redis:6-alpine) 上的 docker 容器中运行 redis。 Nextcloud 在另一个容器中使用它(通过 docker-compose)。 由于几天 red
对不起我的英语水平。我想制作一个流式传输视频并运行多种功能的网页。我正在使用 python 和 flask 服务器。但是,有些问题我无法单独解决。我有源代码。这几乎是完美的。 源代码。 import
我创建了一个干净的Raspi安装,并刚刚开始安装nginx,但由于错误,我无法启动它,对于没有任何更改的新安装,这对我来说是不太符合逻辑的……。这里的错误:。也许有人可以帮助我,遗憾的是,我对Linu
我想在 Raspi 上安装 TensorFlow Lite。 我假设我可以首先pip install为 Raspi 预构建的 TensorFlow。我正在阅读交叉编译 TensorFlow Lite
实际上,我正在“魔镜”工作,现在我遇到了 python 脚本问题,应该打开/关闭我的显示器。 I copied the python script from this site #!/usr/bin/
我正在尝试在 Raspi (Pololu VL53L1X) 上使用飞行时间传感器,但 python 中没有该传感器的库。原始制造商为传感器提供了 C API,但我不知道如何在我的 python 代码中
我在 RASP PI 2B [Jessie lite] 上有一个 python 程序,它从终端命令行运行得很好。但是,当尝试从 cron 运行时,它会失败,如下所述。我已经设置了 mta 和日志记录。
我想安装 psutil 模块来读取 CPU 数据。不幸的是,安装后执行代码时仍然显示以下内容。 导入 psutil 导入错误:没有名为“psutil”的模块 如我所见,安装是在 Python 2.7
我买了 PiFace,我想关注 this指南,但我没有 raspi-blacklist.conf。 到目前为止我的步骤是: 我已经按照this安装了我的rpi指导。 我已执行sudo rpi-upda
我正在尝试在我的旧 Raspberry Pi B+ 第一代上安装“.NET Core 3.0”运行时,但由于运行 dotnet 命令时出现段错误,我无法让它运行。 首先,我使用arm32版本的二进制文
我在使用 Java 从 Raspi 中获得良好的声音时遇到了很大的问题。 我想为我用 Java 编写的媒体服务器编写一个小型 AirPlay 客户端。我开始使用 javazoom 中的 Player
我有一个 Raspberry Pi 3B,我想使用它来控制电机 PWM .在 Python 中,这非常适合将 GPIO 引脚的电压从 0% 逐渐增加到 100% (100% == 3.3V): imp
我想通过网络界面控制我的树莓派的 GPIO 引脚。通常的解决方案是使用 apache 运行 Linux 并通过 Web 界面启动一些 python 脚本。 但我想使用运行 Windows 10 iot
对于一个学校项目,我们正在尝试在 ntag213(Mifare Ultralight C 180Bytes)上写入,但我们无法在其上写入。除此之外,该库在读取 Ultralight C/ntag213
我是一名优秀的程序员,十分优秀!