ラズパイ + OpenCVで画像AI
ラズパイのイメージ作るところからやる
pythonのバージョン管理はryeでやる
vscodeからsshでラズパイに入ってリモートで開発
pythonのバージョンを3.11にする
[project]
name = "hack-opencv"
version = "0.1.0"
description = "Add your description here"
dependencies = []
readme = "README.md"
- requires-python = ">=3.8"
+ requires-python = ">=3.11,<3.12"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.rye]
managed = true
dev-dependencies = []
[tool.hatch.metadata]
allow-direct-references = true
opencvをインストール
rye add opencv-python
rye sync
取り敢えず、これを動かす。
picameraインストール
rye add picamera
rye sync
エラー
Traceback (most recent call last):
File "/home/pi/hack-opencv/src/hack_opencv/camface.py", line 2, in <module>
import picamera
File "/home/pi/hack-opencv/.venv/lib/python3.11/site-packages/picamera/__init__.py", line 72, in <module>
from picamera.exc import (
File "/home/pi/hack-opencv/.venv/lib/python3.11/site-packages/picamera/exc.py", line 41, in <module>
import picamera.mmal as mmal
File "/home/pi/hack-opencv/.venv/lib/python3.11/site-packages/picamera/mmal.py", line 49, in <module>
_lib = ct.CDLL('libmmal.so')
^^^^^^^^^^^^^^^^^^^^^
File "/home/pi/.rye/py/cpython@3.11.6/install/lib/python3.11/ctypes/__init__.py", line 376, in __init__
self._handle = _dlopen(self._name, mode)
^^^^^^^^^^^^^^^^^^^^^^^^^
エラー
Traceback (most recent call last):
File "/home/pi/hack-opencv/src/hack_opencv/camface.py", line 2, in <module>
import picamera
File "/home/pi/hack-opencv/.venv/lib/python3.11/site-packages/picamera/__init__.py", line 72, in <module>
from picamera.exc import (
File "/home/pi/hack-opencv/.venv/lib/python3.11/site-packages/picamera/exc.py", line 41, in <module>
import picamera.mmal as mmal
File "/home/pi/hack-opencv/.venv/lib/python3.11/site-packages/picamera/mmal.py", line 49, in <module>
_lib = ct.CDLL('libmmal.so')
^^^^^^^^^^^^^^^^^^^^^
File "/home/pi/.rye/py/cpython@3.11.6/install/lib/python3.11/ctypes/__init__.py", line 376, in __init__
self._handle = _dlopen(self._name, mode)
^^^^^^^^^^^^^^^^^^^^^^^^^
64bitOSでカメラが認識されない問題?
サポートされたみたいなことも書いてあるが、実際問題として認識されない。
コレが理由で止まるのも嫌なので、今回は追求せずに32bitOSでやる。
Bookworm だと動かない?
32bitのbullseyeで作り直す。。。
ここまでの学び : 安易に最新OSを使うのはやめよう
各種ソフトウェアの更新
sudo apt-get update
sudo apt-get upgrade
カメラ有効化
ファームウェアのアップデート
sudo rpi-update
/boot/config.txt
の最後に追記する
[all]
dtoverlay=imx708
imx708はRaspberrypi Camera Module 3
libcamera-jpeg -n -o test.jpg
写真が撮れた
32bit OSにしたらryeが動かないので、poetryに切り替える
opencvのインストールでエラー
このへん見ながら、色々試す。。。
手順まとめ
-
Raspberry Pi OSは、Bullseye 64bit を使用
- 最新のbookwormはカメラを認識しないので駄目
- 32bitは、opencvのインストールが上手く行かないので駄目
- あと、ryeも動かない
-
各種ソフトウェアの更新
sudo apt-get update
sudo apt-get upgrade
- カメラ有効化
sudo raspi-config
Interface Options
-> Legacy Camera
- センサーの型番を読み込ませる
- /boot/config.txtの最後に追記する
[all]
dtoverlay=imx708
- カメラの動作確認
libcamera-jpeg -n -o test.jpg
- ryeのインストール
- opencvのインストール
- pycameraのインストール
rye add opencv-python
rye add picamera
rye sync
ラズパイOS
- bookworm64bit: カメラが読み込まれない。
- bookworm32bit: カメラが読み込まれない。
- bullseye32bit: カメラは読み込める。が、OpenCVがinstallできない。ryeが対応していない。
- bullseye32bit: カメラもOpenCVもインストールOK。
opencv でカメラ画像を取得する
- 新しいカメラのインターフェスを使うにはpicameraでなく、picamera2を使う
- picamera2はpipでインストールできない(なぜ?)
- 直接ラズパイのパッケージに放り込まれているので、仮想環境を使わないければ取り敢えず動きそう
ryeを使わずに、素のpythonと apt-get pipを使用してpicamera2とopencvをインストールするとエラーは無くなって実行(pythonファイル実行してカメラ映ること確認)できた。
→pipだとpicamera2がインストールできない?
pipで両方インストールできたので、aptでのライブラリ管理では無くpipで管理した。
→仮想環境で管理できない?依存関係の解決が難しそう
pythonで、ラズパイ4 + ラズパイカメラ3 + OpenCV動かなかった要因。
- 最新のOS (bookworm) を使う ✗
- カメラを認識してくれない。1個前のBullseyeを使うのが正解
- 32bit OSを使う ✗
- OpenCVのインストールでハマる。64bit OSが正解
- カメラをレガシーモードで使う ✗
- カメラは認識するが動画を取得出来ない。新しい方(libcamera)を使う
- OpenCVのVideoCaptureで画像を取得する✗
- libcameraに対応していない。picamera2を使う
- picamera (pythonのライブラリ) で画像を取得する✗
- 64bitに対応していない。picamera2を使う
- ryeを使って、仮想環境でpythonを動かす✗
- なぜかpicamera2がインストールできない。素の環境にはインストールできる。
rye add picamera2
を実行して、rye sync
を実行するとエラーになる。
pip install picamera2
を実行するとインストールできる。
→仮想環境だとpicamera2がなんか無理そう。
※picameraはそもそも64bitが対応してなさそう。
pythonで、ラズパイ4 + ラズパイカメラ3 + OpenCVが動くには
- ラズパイOSは、Bullseye 64bit版
-
/boot/config.txt
に以下の記載を追加することで、libcamera
を使えるようにする
[all]
dtoverlay=imx708
-
pythonは、仮想環境では動かさない。直接インストールする
-
picamera2を使ってカメラ画像を取得し、opencvで画像処理をする
streamlitでweb化する
まともなパッケージ管理すると動かない罠があるので、requirements.txtを残しておく
pythonは、3.9.2
opencv-python
picamera2
streamlit
streamlit-webrtc
streamlit_server_state
streamlitだとセッション毎に最初から動くので、誰かがカメラを使っていると他の人が使えない。
→カメラを全てのセッションで共有化するためにこのライブラリを入れる
ラズパイがオーバーヒートする。冷却が課題。。。
パッケージ管理(memo)
-
pyenv:Pythonのバージョン管理ツール。
-
pip:Pythonのライブラリ管理ツール。pyenv毎に独立したpip環境を持つ。
-
rye:pyenvとpipのセット版みたいなイメージ
-
apt:OSやコアアプリケーションを含む、ライブラリやソフトウェアのバージョン管理ツール。
LinuxやUbuntuで使用できるコマンド。
- ラズパイOSの焼き込み時にSSH接続有効にする
- VSCodeの拡張機能「Remote Exploere」をインストール
- VSCodeからSSH接続
- 撮影画像とかをディスプレイ表示したい場合のみ、ラズパイ上で実行する必要あり
- ラズパイ用のディスプレイ、キーボード、マウスは必須
【料金】
-
AWS Rekognition Video
-
Amazon Rekognition ストリーミング動画イベントは、新規または既存の Kinesis Video Streams からの動画を処理します。Rekognition は、動画分析を開始するための通知を送信した場合にのみ、Kinesis Video ストリームの処理を開始し、イベントごとに最大 120 秒の動画を分析できます。Amazon Rekognition によって処理された動画の量に対してのみ支払います。注: Amazon Kinesis Video Streams サービスは別途お支払いいただきます。
- 顔検索 : 0.15USD/1 分
- リアルタイム動画60分 → ≒1300円 / 1h → ≒ 31,200円/24h
- 動画は高い。画像での検索ならそこまで。
- Kinesis Video Streamsと併用するなら、Kinesis Video Streamsの料金もかかる。(これはかなり安めなのでそこまで負荷にならなそう)
-
- ラズパイ
- 基本の動画からの検索費用は無料。
- 本体代と冷却装置とかの物理的な管理はかかる。初回のみ。
- 故障とかの場合どうする?とかの他の観点の懸念点はAWSと違って発生するが、、
顔認証とかだと基本的には上記二つは同様のことが可能なはず。
運用方法や要件次第だが、値段だけを考えるならラズパイの方が安い。
備考
公式の料金シミュレート例には画像の顔認証しかなく、動画は無かった。
一旦closeでよいかな