right(engineer)です。
今回はRaspberryPi(以降ラズパイ)で監視カメラを作成してみました。
1.環境
- Raspberry Pi3 Model B+
- カメラモジュール(感光チップOV5647センサー)[ブランド:LOTW]
- Python3 (Ver.3.9.2)
- pip3 (Ver.22.2.2)
- OpenCV2 (Ver.4.6.0)
- NumPy (Ver.1.23.1)
$ git --version
Python 3.9.2
$ pip3 --version
pip 22.2.2 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)
$ python3
>>> import cv2
>>> cv2.__version__
'4.6.0'
>>> import numpy
>>> numpy.__version__
'1.23.1'
>>> exit()
2.事前準備
今回はプログラミング言語としてPython3を使用した。
2.1.pip更新
pipを最新版に更新する。
$ sudo python -m pip install --upgrade pip
2.2.OpenCV インストール
OpenCVをインストールする。
OpneCV:画像解析ライブラリ
今回はPythonでOpenCV2をインストールする。
$ sudo pip3 install opencv-python==4.6.0
2.3.NumPy更新
NumPyを最新版に更新する。
NumPy:数値計算ライブラリ
$ sudo pip3 install -U numpy
3.仕様
ラズパイに接続したカメラモジュールの映像をモニタする。
プログラム実行後、ウィンドウ上にモニタ映像が表示される。
ESCキーを押すとウィンドウを閉じて、プログラムを終了する。
4.実装
以下ソースコードをラズパイ上で作成した。
import cv2
camera_no = 0 #Camera No.
window_title = "Window" #Window name
camera = cv2.VideoCapture(camera_no)
while True:
ret, frame = camera.read()
if not ret:
break
cv2.imshow(window_title, frame)
key = cv2.waitKey(1)
if key == 27: #Push Esc kye if you want to close the window.
break
camera.release()
cv2.destroyAllWindows()
GitHub URL
5.ソースコード解説
OpenCV2のライブラリを呼び出す。
import cv2
使用するカメラを選択する。
カメラが1台しか接続されていない場合はcamera_noを0に設定する。
camera = cv2.VideoCapture(camera_no)
カメラが複数台ある場合はターミナルに以下コマンドを入力して、カメラのNo.を確認する。
$ v4l2-ctl --list-devices
UVC Camera:/dev/video0
カメラから1フレーム分の画像を保存する。
ret:カメラ画像取得結果が入る。True、falseが入る。
img_src:1フレーム分の画像データが入る。
ret, frame = camera.read()
上記で取得したカメラ画像を表示する。
第一引数:表示ウィンドウ名。
第二引数:表示するカメラ画像(1フレーム分)
cv2.imshow(window_title, frame)
1m秒間キーが押下されるのを待つ。
keyには押下されたキー入力の10進アスキーコードが入る。
例)ESCキーが押下された場合、key=27となる。
key = cv2.waitKey(1)
カメラのキャプチャを終了し、
表示ウィンドウを閉じる。
camera.release()
cv2.destroyAllWindows()