今回はラズベリーパイのカメラモジュールを使用して、動画を撮る方法について解説していきます。
撮影には画像処理ライブラリOpenCVを使用します。
また、OpenCVの活用事例についても以下の記事で解説していますので、あわせてご覧ください。
Raspberry Pi(ラズベリーパイ)とは
Raspberry Pi(ラズベリーパイ)はイギリスのラズベリーパイ財団が教育用に開発したボードコンピュータです。
最新のRaspberry Pi 4では、ARMアーキテクチャを採用したBroadcom製の高性能SoC BCM2711を搭載しており、1.5GHzで動作するARM Cortex-A72が4コアとマイコンボードの中では非常に高速な処理能力を持っています。また、ユーザーがアクセス可能な40ピンのGPIOも搭載しており、外部ハードウェアを制御することが可能です。
詳細なスペック等は以下の記事で解説していますので、あわせてご覧ください。
使用するカメラ
今回はこのブログで製作している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になっているので変更します。
「インタフェイス」タブのカメラの項目が「無効」になっているので、「有効」に変更します。
ちなみに私はこの設定をするのを忘れて実行してしまったのですが、以下のようなエラーが発生しました。
[ 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キーが押下されたら終了します。
実際にカメラを動作させた動画
先ほどのプログラムを実際に実行した動画です。今回はワンコに協力してもらいました。
犬の様子をカメラで撮影してウィンドウ上に表示することができました。
\ Pythonを自宅で好きな時に学べる! /
まとめ
いかがだったでしょうか?
OpenCVのライブラリを使ってカメラモジュールにアクセスすることで、動画を撮影することができました。今後はこのカメラを使ってディープラーニングで画像の識別をするプログラムを作成していく予定です。
また、OpenCVをさらに詳しく学びたい方には、Udemyの以下の講座もお勧めです。
【Pythonで学ぶ】OpenCVでの画像処理入門また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
\ Raspberry Piを使ったアプリ開発を学びたい人には自宅で学べるUdemyがおすすめ! /
講座単位で購入できます!
コメント