【Raspberry Pi】ラズパイのカメラモジュールで動画撮影をする方法

  • URLをコピーしました!

今回はラズベリーパイのカメラモジュールを使用して、動画を撮る方法について解説していきます。
撮影には画像処理ライブラリOpenCVを使用します。

また、OpenCVの活用事例についても以下の記事で解説していますので、あわせてご覧ください。

目次

使用するカメラ

今回はこのブログで製作しているRaspberry Piベースのスパイダーロボット、PiCrawlerに搭載されているロボットのカメラを例に紹介します。Raspberry Pi純正のカメラモジュールと同じCMOSセンサーですので、ロボットを持っていない方でも同じ方法で使用できます。

カメラモジュール

現在は画像のようにロボットに組み込まれています。

ロボットに組み込まれたカメラ

動作環境

今回のシステムの動作環境は以下の通りです。

ハードウェア:Raspberry Pi 3 ModelB
OS:Raspbian 10.11
OpenCV:4.1.0.25
カメラ:OV5647

OpenCVとは

インテルが開発・公開したオープンソースのコンピュータビジョン向けライブラリです。画像処理・画像解析および機械学習等の機能をC/C++、Java、Python、MATLABなどから使用することができます。
今回はPython用モジュールcv2を使ってカメラの画像を取り込みます。

OpenCVのインストール

OpenCVは以下の手順でインストールします。
まずはpipを最新にアップグレードします。

pip3 install --upgrade pip

続いてOpenCVをインストールします。スパイダーロボット PiCrawlerで使用されているOSはRaspbianの少し古いバージョンのものです。最新のopenCVをインストールしようとしたのですが、インストール中にエラーで止まってしまうためRaspbianにはインストールできないようです。
というわけでopenCVのバージョンを指定して、古いバージョンをインストールします。

sudo pip3 install opencv-python==4.1.0.25

これでOpenCVはインストールできたのですが、私の環境ではプログラムを実行するとimportの部分で以下のようなエラーが出てしまいました。

ImportError: libjasper.so.3: cannot open shared object file: No such file or directory

エラー文から、ライブラリが不足しているようなので必要なライブラリをインストールします。

sudo apt-get install libatlas-base-dev

これでライブラリ不足のエラーは解消されました。

Paspberry Pi OSのカメラ設定を変更する

続いてRaspberry PiのOSのカメラ設定がデフォルトではOFFになっているので変更します。

Raspberry Piの設定画面

「インタフェイス」タブのカメラの項目が「無効」になっているので、「有効」に変更します。

ちなみに私はこの設定をするのを忘れて実行してしまったのですが、以下のようなエラーが発生しました。

[ WARN:0] global /tmp/pip-wheel-qd18ncao/opencv-python/opencv/modules/videoio/src/cap_v4l.cpp (893) open VIDEOIO(V4L2:/dev/video0): can't open camera by index

このようにカメラデバイスにアクセスできないといエラーで悩まれている方は、一度Raspberry Piのカメラ設定を見直してみてください。

作成したソースコード

さて、環境構築が終わったら、実際に動かすPythonのソースコードを見ていきましょう。

import cv2

#VideoCaptureオブジェクト取得
cap = cv2.VideoCapture(-1)

print("start")

while(True):
    #フレームを取得
    ret, frame = cap.read()
    
    if not ret:
        print("not capture")
        break
        
    #画面サイズを指定
    print(frame.shape)
    frame = cv2.resize(frame, (640, 480))
    
    #取得したフレームをウインドウ上に表示する
    cv2.imshow("frame", frame)
    
    #キーボード入力処理
    key = cv2.waitKey(1)
    if key == 13: #enterキーの場合処理を抜ける
        break
        
#カメラデバイスクローズ
cap.release()

#ウィンドウクローズ
cv2.destroyAllWindows()

9行目:
カメラの画像を読み込みます。

16行目:
読み込んだ画像を指定したサイズに変更します。

19行目:
画像をウィンドウ上に表示します。

22行目:
Enterキーが押下されたら終了します。

実際にカメラを動作させた動画

先ほどのプログラムを実際に実行した動画です。今回はワンコに協力してもらいました。

犬の様子をカメラで撮影してウィンドウ上に表示することができました。

まとめ

いかがだったでしょうか?
OpenCVのライブラリを使ってカメラモジュールにアクセスすることで、動画を撮影することができました。今後はこのカメラを使ってディープラーニングで画像の識別をするプログラムを作成していく予定です。

また、ラズベリーパイの画像認識について学びたい方にはUdemyの以下の講座がおすすめです。

【初心者向けAI・IoT講座】 ラズベリーパイ(Raspberry Pi)とOpenCVで作る簡単画像認識システム icon


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

おすすめ記事

参考

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