Raspberry Pi 3 Model B + Camera V2.1 picamera2 web.py 失敗 [プログラミング]
前回は、libcamera-stillで静止画が撮れるところまでを記録した。 次に、カメラで撮影した画像を、外から見られるようにしたくなった。動画として見られるとよいのだが、まずは静止画がみられることを目標にした。 まずは、pythonのpicamera2とwebpyで、あるurlにアクセスしたら静止画を撮ってそれを返すプログラムを作ることにした。 1. picamera2 このページを参考に環境を構築した。 https://github.com/raspberrypi/picamera2
- sudo apt install -y python3-pyqt5 python3-opengl
- sudo apt install -y python3-picamera2 --no-install-recommends
2. web.py
- pip install web.py==0.61
- app.py
- "==0.61"の意味はわかってない。
- import web
- import io
- import time
- from picamera2 import Picamera2
- urls = (
- "/",
- "index"
- )
- class index:
- def __init__(self):
- self.cam = Picamera2()
- self.capture_config = self.cam.create_still_configuration()
- self.cam.configure(self.cam.create_preview_configuration())
- def GET(self):
- self.cam.start()
- time.sleep(1)
- data = io.BytesIO()
- self.cam.capture_file(data, format='jpeg')
- self.cam.stop()
- return(data.getvalue())
- #image = open("/home/python/Pictures/camera.jpg", "rb").read()
- #return image
- if __name__ == '__main__':
- app = web.application(urls, globals())
- app.run()
- 実行 最初のアクセスには、正しく静止画を返してくれたが、2回目のアクセスで落ちる。
- ファイルに保存してからそれを返すのではなく、メモリ中にjpgイメージを作ってそれをかえすことで、ディスクの寿命を延ばす作戦。
- $ python app.py
- [1:43:46.506893147] [2163] INFO Camera camera_manager.cpp:297 libcamera v0.0.5+83-bde9b04f
- [1:43:46.598907128] [2180] WARN RPI vc4.cpp:383 Mismatch between Unicam and CamHelper for embedded data usage!
- [1:43:46.600689216] [2180] INFO RPI vc4.cpp:437 Registered camera /base/soc/i2c0mux/i2c@1/imx219@10 to Unicam device /dev/media3 and ISP device /dev/media1
- [1:43:46.600802029] [2180] INFO RPI pipeline_base.cpp:1101 Using configuration file '/usr/share/libcamera/pipeline/rpi/vc4/rpi_apps.yaml'
- [1:43:46.616782902] [2163] INFO Camera camera.cpp:1033 configuring streams: (0) 640x480-XBGR8888 (1) 640x480-SBGGR10_CSI2P
- [1:43:46.618274573] [2180] INFO RPI vc4.cpp:565 Sensor: /base/soc/i2c0mux/i2c@1/imx219@10 - Selected sensor format: 640x480-SBGGR10_1X10 - Selected unicam format: 640x480-pBAA
- 192.168.10.23:56710 - - [09/Oct/2023 13:40:27] "HTTP/1.1 GET /" - 200 OK
- 192.168.10.23:56710 - - [09/Oct/2023 13:40:27] "HTTP/1.1 GET /favicon.ico" - 404 Not Found
- [1:45:28.564968768] [2165] ERROR Camera camera.cpp:525 Camera in Configured state trying acquire() requiring state Available
- Camera __init__ sequence did not complete.
- Traceback (most recent call last):
- File "/usr/lib/python3/dist-packages/picamera2/picamera2.py", line 242, in __init__ self._open_camera() File "/usr/lib/python3/dist-packages/picamera2/picamera2.py", line 446, in _open_camera self.camera.acquire() RuntimeError: Failed to acquire camera: Device or resource busy
- During handling of the above exception, another exception occurred:
- Traceback (most recent call last):
- File "/home/python/.local/lib/python3.9/site-packages/web/application.py", line 280, in process
- return self.handle()
- File "/home/python/.local/lib/python3.9/site-packages/web/application.py", line 271, in handle
- return self._delegate(fn, self.fvars, args)
- File "/home/python/.local/lib/python3.9/site-packages/web/application.py", line 514, in _delegate
- return handle_class(cls)
- File "/home/python/.local/lib/python3.9/site-packages/web/application.py", line 491, in handle_class
- tocall = getattr(cls(), meth)
- File "/home/python/Documents/prog/webpy/app.py", line 13, in __init__
- self.cam = Picamera2()
- File "/usr/lib/python3/dist-packages/picamera2/picamera2.py", line 254, in __init__
- raise RuntimeError("Camera __init__ sequence did not complete.")
- RuntimeError: Camera __init__ sequence did not complete.
- 192.168.10.23:56740 - - [09/Oct/2023 13:42:08] "HTTP/1.1 GET /" - 500 Internal Server Error
次回は、これの修正を試みる。
コメント 0