今回はRaspberry Piのカメラで撮影した映像を動画ファイルとして出力する方法を解説します。ファイル出力することで監視カメラやペットの見守りカメラとして、後日映像を確認できるようになりますのでぜひ活用してみてください。
Raspberry Pi(ラズベリーパイ)とは
Raspberry Pi 5は、Raspberry Pi財団が開発した最新のシングルボードコンピュータで、従来モデルよりも大幅な性能向上を実現しています。
搭載される64ビットクアッドコアプロセッサは、クロック速度が最大2.4GHzに達し、前世代よりも処理速度が格段に向上しました。また、4GBまたは8GBのRAMを選択できるため、教育用途からリソースを必要とするプロジェクトまで幅広く対応可能です。
グラフィックス性能も強化され、4K解像度でのデュアルディスプレイ出力をサポートしています。さらに、新たにPCIeインターフェイスが追加され、外部ストレージや高速デバイスとの接続が容易になりました。Wi-Fi 6やBluetooth 5.2の導入により、無線通信も高速かつ安定。
教育、IoT、AI開発、メディア再生など、多様な用途に対応するRaspberry Pi 5は、初心者から上級者まで幅広いユーザーにとって魅力的な選択肢となっています。
Raspberry Piでできることについては以下の記事で解説していますので、あわせてご覧ください。
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円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
コメント