今回はRaspberry Piのカメラで撮影した映像を動画ファイルとして出力する方法を解説します。ファイル出力することで監視カメラやペットの見守りカメラとして、後日映像を確認できるようになりますのでぜひ活用してみてください。
Raspberry Pi(ラズベリーパイ)とは
Raspberry Pi(ラズベリーパイ)はイギリスのラズベリーパイ財団が教育用に開発したボードコンピュータです。
最新のRaspberry Pi 4では、ARMアーキテクチャを採用したBroadcom製の高性能SoC BCM2711を搭載しており、1.5GHzで動作するARM Cortex-A72が4コアとマイコンボードの中では非常に高速な処理能力を持っています。また、ユーザーがアクセス可能な40ピンのGPIOも搭載しており、外部ハードウェアを制御することが可能です。
詳細なスペック等は以下の記事で解説していますので、あわせてご覧ください。
OpenCVとは
OpenCVは半導体メーカーインテルが開発し、オープンソースとして無料公開している正式名称Open Source Computer Vision Libraryという画像処理、解析用のライブラリです。
以下のページでOpenCVの詳細をまとめていますので、あわせてご覧ください。
使用するカメラ
今回は監視カメラ等で使用することを想定し、フレームレートは10FPSで録画するため市販のWebカメラを使用します。当ブログではおなじみのロジクールC270nです。アマゾン等で2000円程度で手に入ります。
監視カメラなどで長時間録画するケースでは高フレームレートで録画してしまうとすぐにストレージがいっぱいになってしまうことと、市販のWebカメラであればカメラのケースやケーブルもしっかりしているのでおすすめです。
高フレームレートで録画したい場合は、Raspberry Pi用のカメラモジュールを使用してください。
OpenCVのインストール
続いてRaspberry PiにOpenCVをインストールします。
インストール方法については、以下のページで解説していますので、説明に沿ってに進めてください。またRaspberry Piのカメラ設定も変更してください。
CV2のキャプチャに関する設定
キャプチャ設定
VideoCaptureオブジェクトのsetメソッドで動画サイズとフレームレートを設定します。
cap.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, HEIGHT)
cap.set(cv2.CAP_PROP_FPS, FPS)
ファイル出力設定
VideoCaptureオブジェクトのVideoWriterメソッドでどのような形でファイル出力するかを設定します。
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
out = cv2.VideoWriter(path, fourcc, FPS, (WIDTH, HEIGHT))
今回はファイル形式はmpeg4とし、ファイル名は当日の日付、時間として保存するようにしました。
作成したソースコード
実際に作成したソースコードは以下の通りです。
import cv2
from datetime import datetime
#定数定義
WIDTH = 640 #幅
HEIGHT = 480 #高さ
FPS = 10 #フレームレート
#VideoCaptureオブジェクト取得
cap = cv2.VideoCapture(0, cv2.CAP_V4L2)
#キャプチャパラメータ設定
cap.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, HEIGHT)
cap.set(cv2.CAP_PROP_FPS, FPS)
#ファイル名生成
date = datetime.now().strftime("%Y%m%d_%H%M%S")
path = "./" + date + ".mp4"
#出力ファイル設定
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
out = cv2.VideoWriter(path, fourcc, FPS, (WIDTH, HEIGHT))
#キャプチャ実行
while(True):
#フレームを取得
ret, frame = cap.read()
#読み込めない場合エラー処理
if not ret:
print("not capture")
break
#フレームを出力
out.write(frame)
#画像表示
cv2.imshow("Frame", frame)
#キーボード入力処理
key = cv2.waitKey(1)
if key == 13: #enterキーの場合処理を抜ける
break
#カメラデバイスクローズ
cap.release()
out.release()
#ウィンドウクローズ
cv2.destroyAllWindows()
実行結果
プログラムを実行すると録画が開始され、Enterキーで録画を終了すると同じディレクトリ内に日付と時間がファイル名となったmp4ファイルが生成されました。
mp4ファイルを実行すると正しく動画が再生されました。
\ Pythonを自宅で好きな時に学べる! /
まとめ
いままではカメラの映像をデスクトップ上に移したり機械学習のアルゴリズムを使って処理したりしてきましたが、今回はmpeg4の動画ファイルとして出力する方法を解説してみました。ファイル出力して保存することで監視カメラのログなどにも使用できるかと思いますので、ぜひ活用してみてください。
また、OpenCVをさらに詳しく学びたい方には、Udemyの以下の講座もお勧めです。
【Pythonで学ぶ】OpenCVでの画像処理入門また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
コメント