簡體   English   中英

在 Raspberry Pi 上運行的 Docker 容器中訪問 picamera 時出錯

[英]Error accessing picamera in Docker container running on Raspberry Pi

我在 Raspberry Pi 4 上使用docker-compose運行一個 Docker 容器,並想使用 Python 中的picamera模塊來訪問 PiHQCam。 我嘗試使用本教程讓它工作: https://www.losant.com/blog/how-to-access-the-raspberry-pi-camera-in-docker 但是,在嘗試構建圖像時,它給了我這個錯誤:

ValueError: This system does not appear to be a Raspberry Pi

然后我嘗試了自己的解決方案(見下文),但遇到了這個錯誤:

picamera.exc.PiCameraMMALError: Failed to create MMAL component b'vc.camera_info': I/O error

這是我的設置:

docker-compose.yml

version: '3.8'

services: 
  camera:
    build: camera
    image: eye_camera     
    devices:
      - /dev/vchiq

Dockerfile :

FROM balenalib/rpi-raspbian:latest

RUN apt-get update && \
    apt-get upgrade && \
    apt-get install -y python3 \
      python3-pip

WORKDIR /app

COPY requirements.txt .
RUN pip3 install -r requirements.txt

COPY . .

RUN groupadd -r -g 888 app && \
    useradd -r -u 888 -g app -d /app app && \
    chown -R app:app /app && \
    usermod -a -G video app
USER app

CMD ["python3", "./main.py"]

main.py

import picamera

def main():
    print("Hello World!")

    cam = picamera.PiCamera()
    img = picamera.array.PiRGBArray(cam)
    cam.capture(img)
    cam.close()

if __name__ == '__main__':
    main()

PiCameraMMALError在初始化相機時發生。 這是完整的錯誤 output:

camera_1 | Hello World!
camera_1 | Traceback (most recent call last):
camera_1 |   File "main.py", line 19, in <module>
camera_1 |     main()
camera_1 |   File "main.py", line 12, in main
camera_1 |     cam = picamera.PiCamera()
camera_1 |   File "/usr/local/lib/python3.7/dist-packages/picamera/camera.py", line 367, in __init__
camera_1 |     with mo.MMALCameraInfo() as camera_info:
camera_1 |   File "/usr/local/lib/python3.7/dist-packages/picamera/mmalobj.py", line 2346, in __init__
camera_1 |     super(MMALCameraInfo, self).__init__()
camera_1 |   File "/usr/local/lib/python3.7/dist-packages/picamera/mmalobj.py", line 633, in __init__
camera_1 |     prefix="Failed to create MMAL component %s" % self.component_type)
camera_1 |   File "/usr/local/lib/python3.7/dist-packages/picamera/exc.py", line 184, in mmal_check
camera_1 |     raise PiCameraMMALError(status, prefix)
camera_1 | picamera.exc.PiCameraMMALError: Failed to create MMAL component b'vc.camera_info': I/O error
camera_1 | mmal: mmal_vc_shm_init: could not initialize vc shared memory service
camera_1 | mmal: mmal_vc_component_create: failed to initialise shm for 'vc.camera_info' (7:EIO)
camera_1 | mmal: mmal_component_create_core: could not create component 'vc.camera_info' (7)

這里有什么問題? 感謝您的幫助:我很樂意提供更多信息 :)

由於一些完全無法理解的原因,您需要魔法咒語“READTHEDOCS=True”來避免此問題,以下 Dockerfile 在 Raspberry Pi 4 上運行良好:但沒有它,Docker 圖像構建失敗並出現您看到的錯誤:

FROM arm32v7/python:latest

# Set in container
ENV TZ=Europe/London

# See https://github.com/waveform80/picamera/issues/578
ENV READTHEDOCS=True

COPY ./src /app    

WORKDIR /app

RUN pip install --upgrade pip setuptools wheel

RUN pip install picamera

VOLUME ["/data"]

CMD ["/usr/bin/python", "camera.py"]

我使用docker build命令構建了它:

docker build -t jrcamera:latest .

並使用docker run命令運行它:

docker run --privileged=true -v /opt/vc:/opt/vc --env LD_LIBRARY_PATH=/opt/vc/lib --device /dev/vchiq -it jrcamera:latest

它在 src 目錄中運行了以下 python 腳本 camera.py(復制到 Docker 圖像中的 /app):

from time import sleep
from datetime import datetime
from picamera import PiCamera

camera = PiCamera()

camera.resolution = (1280, 720)

camera.annotate_text_size = 16  # Can be in range 6 to 160 inclusive, with default 32

MAX_ITER = 5

for iter_no in range(0,MAX_ITER):

    camera.start_preview()

    #  It is important to sleep for at least two seconds before capturing an image,
    #  because this gives the cameras sensor time to sense the light levels
    #
    sleep(3)

    # Annotate image with current datetime, to nearest millisecond
    #
    date_time = datetime.utcnow().strftime('%Y-%m-%d_%H-%M-%S.%f')[:-3]

    camera.annotate_text = date_time

    camera.capture("/data/image_{0:}.jpg".format(date_time))

    camera.stop_preview()

(現在我只需要弄清楚如何將我的圖像大小從大得離譜的 710 MBytes 減小,但這是另一個問題。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM