Raspberry PiでOpenCVを使って画像処理をする方法

  • URLをコピーしました!

今回は画像処理ライブラリOpenCVをエッジデバイス、Raspberry Piで実装する方法について解説していきたいと思います。

また、過去にRaspberry Piを使って開発したアプリケーションを以下のページでまとめていますので、あわせてご覧ください。

目次

OpenCVとは

OpenCVは半導体メーカーインテルが開発し、オープンソースとして無料公開している正式名称Open Source Computer Vision Libraryという画像処理、解析用のライブラリです。
最近ではディープラーニングの登場により、機械学習などで画像を扱う際にもよく利用されます。
言語はC/C++、Java、Python、MATLABに対応しており、当サイトではPythonを使って実装した例を紹介していきます。

Raspberry Piとは

出典:ラズベリーパイ財団

ラズベリーパイ(Raspberry Pi)はイギリスのラズベリーパイ財団が教育用に開発したボードコンピュータです。

最新(2022/07/現在)のRaspberry Pi 4では、ARMアーキテクチャを採用したBroadcom製の高性能SoC BCM2711を搭載しており、1.5GHzで動作するARM Cortex-A72が4コアとマイコンボードの中では非常に高速な処理能力を持っています。また、ユーザーがアクセス可能な40ピンのGPIOも搭載しており、外部ハードウェアを制御することが可能です。

詳細なスペックは以下の通りです。

CPUBroadcom BCM2711 プロセッサクワッドコア A72 ( ARM v8 )1.5GHz 64 ビット SoC
メモリ2/4/8GB LPDDR4 SDRAM
Wifi2.4 GHz / 5.0 GHz IEEE 802.11ac
USBUSB 2.0 ポート x 2 、 USB 3.0 ポート x 2
BluetoothBluetooth 5.0
GPIO40 ピン GPIO ヘッダ
ビデオmicro HDMI ポート x 2(最大 4Kp60 をサポート)、 2 レーン MIPI CSI カメラポート
オーディオ4 極ステレオ出力およびコンポジットビデオポート
マルチメディアH.265 ( 4Kp60 デコード)、 H.264 ( 1080p60 デコード、 1080p30 エンコード)、OpenGL ES 3.0グラフィックス

今回はOpenCVを使った画像処理アプリケーションを実行するデバイスとしてRaspberry Pi 4を使用します。Raspberry Piを使用することで、場所を選ばずに設置でき、カメラなどと組み合わせてIoTやエッジAIのアプリケーションを構築できます。

Raspberry Pi本体は以下の記事でレビューをしていますので、あわせてご覧ください。

OpenCVでの画像処理に使うカメラ

OpenCVでは画像ファイルをプログラムに読み込み処理を行いますが、Raspberry PiやJetsonなどのエッジデバイスの場合、本体にカメラを接続しておくことでリアルタイムにその場の映像を取り込んでOpenCVで処理することが可能になります。

当記事でRaspberry Piに接続して使用しているカメラは、カメラ専用コネクタに接続して使用するカメラモジュールとUSBコネクタに接続して使用するWebカメラの2パターンがあります。

カメラモジュール

高いフレームレート(30fps)で画像を撮影して処理したい場合はカメラモジュールを使用する必要があります。

私はSunfounder社のカメラモジュールを使用していますが、Raspberry Pi公式からも発売されており使用方法は同じです。

created by Rinker
¥6,164 (2022/09/30 06:09:45時点 楽天市場調べ-詳細)

Webカメラ

もう1つは市販のWebカメラを使う方法です。当サイトではいつもロジクール社のWebカメラ C270nを使用しています。

それほど高いフレームレートが必要ない場合には価格も安く、USBコネクタに接続するだけで簡単に着脱できますのでおすすめです。OpenCVからの画像取り込み方法はカメラモジュールと変わりません。

Raspberry Piのセットアップ

まずはRaspberry Piをブートするため、Raspberry Pi OSのイメージが入ったSDカードを作る必要があります。
セットアップ方法については以下のページで解説しています。

OpenCVのインストール

続いてRaspberry PiにOpenCVをインストールします。
インストール方法については、以下のページで解説していますので、説明に沿ってに進めてください。またRaspberry Piのカメラ設定も変更してください。

カメラの画像をOpenCVを使って取り込む

ここからは実際にOpenCVの活用法について解説していきます。
まずはカメラを使って画像を撮影し、取り込む方法についてです。今回は市販のUSBカメラを使って画像を取り込む方法を解説しています。

また撮影した映像をmpeg4形式の動画ファイルとして出力、保存する方法を以下の記事で解説しています。
監視カメラ等で映像をログとして残し、あとで確認したい場合などに活用できます。

OpenCVを使った応用アプリケーション

オブジェクト位置検出

以下の記事ではカメラから取り込んだ画像から機械学習モデルを使って物体検出を行い、検出した物体の画面上の座標をOpenCVを使って取得しています。取得した位置情報を元に画面中心からの距離を描画する処理を実装したプログラムを公開しています。

先ほどの位置検出のプログラムを4足歩行型のロボットに搭載し、ロボットのカメラに写り込んだ人間を識別しています。OpenCVで取得した人間の位置情報を元にロボットの動作を制御し、人間のいる方に常にロボットが向くように制御している動画を公開しています。

動体検知

USB接続タイプのWebカメラを使って動体検知する機能を実装する方法を解説しました。画面に写り込んだ動体をOpenCVで検出し、動体の周りに境界線を表示するプログラムを公開しています。
安価なUSBカメラとRaspberry Piを使って監視カメラなどを製作したい方におすすめです。

骨格検出

OpenCVを使ってカメラに映った人物の骨格検出する方法を2回にわたって解説しています。spmallick氏がGithubで公開しているディープニューラルネットワークを使った学習モデル、OpenPoseを使用して画像に写っている人物の骨格を検出して描画します。

Part 1ではOpenPoseを動作させるプログラムを作成し、PC上で静止画に対して骨格検出を行うためのテストプログラムを公開しています。

Part 2ではPart1でPC上で試したOpenPoseのアプリケーションをRaspberry Pi 4に実装できる形にコードを変更し、Raspberry Pi 4に接続されたWebカメラで取り込んだ映像に対して骨格検出を行いました。
エッジデバイスで実装したい方におすすめです。

まとめ

今回は画像処理ライブラリOpenCVを使ったアプリケーションを解説してみました。Pythonから手軽に画像を扱うプログラムを実装できることを見て頂けたかと思います。今後も当ブログではOpenCVを活用した事例を公開していく予定です。

また、OpenCVをさらに深く学びたい方にはUdemyの講座もお勧めです。

【Pythonで学ぶ】OpenCVでの画像処理入門 icon



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

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