OpenCVを使ってRaspberry Piに接続したカメラで撮影した映像をファイル出力する方法

  • URLをコピーしました!

今回はRaspberry Piのカメラで撮影した映像を動画ファイルとして出力する方法を解説します。ファイル出力することで監視カメラやペットの見守りカメラとして、後日映像を確認できるようになりますのでぜひ活用してみてください。

目次

Raspberry Piとは

ラズベリーパイ(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ファイルを実行すると正しく動画が再生されました。

まとめ

いままではカメラの映像をデスクトップ上に移したり機械学習のアルゴリズムを使って処理したりしてきましたが、今回はmpeg4の動画ファイルとして出力する方法を解説してみました。ファイル出力して保存することで監視カメラのログなどにも使用できるかと思いますので、ぜひ活用してみてください。

それでは、また次の記事でお会いしましょう。

参考

よかったらシェアしてね!
  • URLをコピーしました!
目次