今回は画像処理ライブラリOpenCVをエッジデバイス、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も搭載しており、外部ハードウェアを制御することが可能です。
詳細なスペックは以下の通りです。
CPU | Broadcom BCM2711 プロセッサクワッドコア A72 ( ARM v8 )1.5GHz 64 ビット SoC |
メモリ | 2/4/8GB LPDDR4 SDRAM |
Wifi | 2.4 GHz / 5.0 GHz IEEE 802.11ac |
USB | USB 2.0 ポート x 2 、 USB 3.0 ポート x 2 |
Bluetooth | Bluetooth 5.0 |
GPIO | 40 ピン 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本体は以下の記事でレビューをしていますので、あわせてご覧ください。
また、過去にRaspberry Piを使って開発したアプリケーションを以下のページでまとめていますので、あわせてご覧ください。
OpenCVでの画像処理に使うカメラ
OpenCVでは画像ファイルをプログラムに読み込み処理を行いますが、Raspberry PiやJetsonなどのエッジデバイスの場合、本体にカメラを接続しておくことでリアルタイムにその場の映像を取り込んでOpenCVで処理することが可能になります。
当記事でRaspberry Piに接続して使用しているカメラは、カメラ専用コネクタに接続して使用するカメラモジュールとUSBコネクタに接続して使用するWebカメラの2パターンがあります。
カメラモジュール
高いフレームレート(30fps)で画像を撮影して処理したい場合はカメラモジュールを使用する必要があります。
私はSunfounder社のカメラモジュールを使用していますが、Raspberry Pi公式からも発売されており使用方法は同じです。
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での画像処理入門また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
\OpenCVを使った画像処理を学びたい人には自宅で学べるUdemyがおすすめ! /
講座単位で購入できます!
コメント