Processingでデジタル画像・デジタル動画/映像認識(コンピュータビジョン)ライブラリOpenCVを使ってみるページ。
今回は、Processing用OpenCVライブラリの全サンプルの実行と何のためのサンプルなのかの確認に留めるものとします。
尚、このページのくくりとしては、ArduinoとProcessingの連携についてなのですが、Arduino側については、とりあえず、さておくものとします。
今回、さておいてしまったArduinoの回路はなく、Processing 3をインストールしたPCがあればよいでしょう。
今日時点最新のProcessing 3.4に、以前、Processing 3対応videoライブラリに行き着く過程で知ったOpenCVライブラリを追加すること自体は簡単でしたが、最新のライブラリにたどり着くには、注意が必要でした。
結果からすると最新版は、https://github.com/atduskgreg/opencv-processing/releasesで取得することができます。
これは、https://processing.org/reference/libraries/からリンクが張られたライブラリhttps://github.com/atduskgreg/opencv-processingではありますが、そのトップディレクトリからgit cloneしたり、zipダウンロードするのではない点に注意。
Processing/OpenCVサンプルスケッチBackgroundSubtractionは、車や人などが行き交うオフィス街らしき交差点の映像・動画において動体を検知・追尾するサンプルとなっています。
尚、このサンプルではVideoライブラリを要しますが、相変わらず、Processing公式Videoライブラリをインストールしてもエラーになるので代替としてProcessing 3対応videoライブラリの通り、執筆時点ではTest releaseのvideo.zipをダウンロード・展開のこと。
また、draw()内20行めでimage(video, 0, 0);となっていますが、いずれも1以上の適切な値を与えないとエラーになります。
Processing/OpenCVサンプルスケッチBrightestPointは、画像内で最も明るい点(場所)を検知してくれます。
Processing/OpenCVサンプルスケッチBrightnessContrastは、画像上でマウスポインターを移動すると白黒(モノクロ)の対比(コントラスト)が変わります。
Processing/OpenCVサンプルスケッチCalibrationDemoは、較正/校正というか、目盛り認識、四方で色の異なる矩形領域の四隅を認識している模様。
Processing/OpenCVサンプルスケッチColorChannelsは、RGB色成分の異なる画像比較を意図している模様。
Processing/OpenCVサンプルスケッチDepthFromStereoは、3D(立体)の奥行き(z軸)を白と黒色で表現した深度を左右方向からの見える向きの違い(視差)及びBM/Block Matching法、SGBM/Semi-Global Block Matching法による画像の比較を意図している模様。
Processing/OpenCVサンプルスケッチDelationAndErosionは、オリジナル画像とモルフォロジー変換における二値画像の膨張(Dilation)と収縮(Erosion)、膨張後、収縮させた画像の比較。
Processing/OpenCVサンプルスケッチFaceDetectionの画像ファイルだけ差し替えて実行してみました。
最初、GIMPで人に見えるか見えないか程度の極めて幼稚な絵を描いて試してみましたが、全く認識されませんでした。
そこで今度は、[人]をキーに画像検索した結果にGIMPで[ツール] => [ぼかし] => [モザイク処理](0-10で調整)の内、モザイク度を7に設定した複数の人々が写った画像に差し替えてみました。
モザイク処理前のオリジナルでは、2段めの右から2つめにあたる明らかに人間ではない2体の絵と向かって左端の横顔以外は、すべて顔が緑の四角で囲われ、正確に認識されました。
この後、試しにモザイクをかけていない[動物]をキーに画像検索した結果の画像に差し替えてみましたが、顔認識はされませんでした。
よってOpenCVは、何らかの方法により、人間の顔を認識するように作られていますが、1段めの左から3つめの画像のように多少加工が為されていても人と認識、限りなく、正面を向いたものの認識率が高く、横顔は不得手か、もしくは、そもそも正面のみ認識する機能か、モザイクの度合いに応じて認識度合いが異なることから、モザイクにより判断材料とすべき、人間の顔の何らかの特徴要素が得られなくなる(ある意味、人間の視覚に近い)ことが推測されます。
Processing/OpenCVサンプルスケッチFilterImagesは、ソースとなるオリジナル画像、閾値(Thresholding)処理、ぼかし(blur)処理、適応的閾値(Adaptive Thresholding)処理した画像の比較。
Processing/OpenCVサンプルスケッチFindContoursは、画像の輪郭(Contours)抽出。
Processing/OpenCVサンプルスケッチFindEdgesは、画像の境界・端(Edge)検出におけるソース画像とフィルタCanny、Scharr、Sobelの比較。
Processing/OpenCVサンプルスケッチFindHistogramは、画像のモノクロ?とRGBそれぞれのヒストグラム(度数分布)比較。
Processing/OpenCVサンプルスケッチHistogramSkinDetectionは、画像から人間の肌を検出。
Processing/OpenCVサンプルスケッチHoughLineDetectionは、画像からHough変換により直線を抽出。
Processing/OpenCVサンプルスケッチHSVColorTrackingは、映像のリアルタイム動体検知と色相/彩度/明度からなる色空間HSVモデルによる動体検知・追尾の対比。
Processing/OpenCVサンプルスケッチHSVColorTrackingは、映像のリアルタイム動体検知と色相/彩度/明度からなる色空間HSVモデルによる動体検知・追尾の対比。
このサンプルでもVideoライブラリを要しますが、執筆時点、Processing公式Videoライブラリをインストールしてもエラーになるので代替としてProcessing 3対応videoライブラリの通り、執筆時点ではTest releaseのvideo.zipをダウンロード・展開のこと。
Processing/OpenCVサンプルスケッチHueRangeSelectionは、Hue・色調・色合い比較。
Processing/OpenCVサンプルスケッチImageDiffは、画像の差分表示。
Processing/OpenCVサンプルスケッチImageFilteringは、ソース画像、前処理を施した(Pre-processed)画像、処理後(Processed)の画像、動体検知点(Tracked Points)抽出の画像の対比表示とスライダによるコントラストや閾値など各種設定変更が可能。
尚、実行には、[スケッチ] => [ライブラリをインクルード] => [ライブラリの追加]の[Libraries]タブからControlP5ライブラリのインストールが必要。
また、このサンプルでもVideoライブラリを要しますが、執筆時点、Processing公式Videoライブラリをインストールしてもエラーになるので代替としてProcessing 3対応videoライブラリの通り、執筆時点ではTest releaseのvideo.zipをダウンロード・展開のこと。
Processing/OpenCVサンプルスケッチImageFilteringWithBlobPersistenceは、データベースのデータ型の1つLOB/Large OBjectの内、BLOB/Binary LOBを永続化した場合のソース画像、前処理を施した(Pre-processed)画像、処理後(Processed)の画像、動体検知点(Tracking Points)抽出の画像の対比表示とスライダによるコントラストや閾値など各種設定変更が可能。
尚、実行には、[スケッチ] => [ライブラリをインクルード] => [ライブラリの追加]の[Libraries]タブからControlP5ライブラリのインストールが必要。
また、このサンプルでもVideoライブラリを要しますが、執筆時点、Processing公式Videoライブラリをインストールしてもエラーになるので代替としてProcessing 3対応videoライブラリの通り、執筆時点ではTest releaseのvideo.zipをダウンロード・展開のこと。
Processing/OpenCVサンプルスケッチLiveCamTestは、ライブカメラ映像テスト。(ですが、緑の枠が出たりしてモーショントラッキングもしている?)
このサンプルでもVideoライブラリを要しますが、執筆時点、Processing公式Videoライブラリをインストールしてもエラーになるので代替としてProcessing 3対応videoライブラリの通り、執筆時点ではTest releaseのvideo.zipをダウンロード・展開のこと。
Processing/OpenCVサンプルスケッチLoadAndDisplayImageは、画像の読み込み・表示サンプル。
Processing/OpenCVサンプルスケッチLumaVsGrayは、輝度(LUMA)調整によるグレー調の画像とグレースケール画像の対比。
Processing/OpenCVサンプルスケッチMarkerDetectionは、マーカー検出のサンプル。
Processing/OpenCVサンプルスケッチMorphologyOperationsは、形態素操作による画像比較のサンプル。
Processing/OpenCVサンプルスケッチMultipleColorTrackingは、映像上で1〜4までの数値キーのいずれかを押しながら、クリックすることでトラッキング(追従枠は常に赤色)を開始すると同時に数値に応じて右側に線形画像?が表示されるサンプル。
このサンプルでもVideoライブラリを要しますが、執筆時点、Processing公式Videoライブラリをインストールしてもエラーになるので代替としてProcessing 3対応videoライブラリの通り、執筆時点ではTest releaseのvideo.zipをダウンロード・展開のこと。
Processing/OpenCVサンプルスケッチOpticalFlowは、オプティカルフロー(物体やカメラの移動によって生じる隣接フレーム間の物体の動きの見え方のパターン)を利用したサンプル。
もし、widthやhightは0以下だとダメなんてエラーやエラーもないのに、何も表示されない場合には、一度、23行めのtranslate(video.width,0);においてゼロを1以上の値に修正すると実行できる可能性が...、ただし、その後は、ゼロに戻しても何事もなかったかのように再生されるという謎な挙動...。
また、このサンプルでもVideoライブラリを要しますが、執筆時点、Processing公式Videoライブラリをインストールしてもエラーになるので代替としてProcessing 3対応videoライブラリの通り、執筆時点ではTest releaseのvideo.zipをダウンロード・展開のこと。
Processing/OpenCVサンプルスケッチOpticalFlowは、オプティカルフロー(物体やカメラの移動によって生じる隣接フレーム間の物体の動きの見え方のパターン)を利用したサンプル(音声付き)。
Processing/OpenCVサンプルスケッチRegionOfInterestは、画像上の関心のある部分をマウスでポイントすると矩形領域としてポイントに連動した位置と右上の位置に二値画像?を表示。
Processing/OpenCVサンプルスケッチWarpPerspectiveは、画像上の対象物の反りや歪みを補正して正面から見たように透視変換?を行なうサンプル。
Processing/OpenCVサンプルスケッチWhichFaceは、永続化した顔の情報と映像上に登場した顔を比較し、新たな顔をカウントアップする?(1人でもあれこれやってるとカウントアップするが...)。
このサンプルでもVideoライブラリを要しますが、執筆時点、Processing公式Videoライブラリをインストールしてもエラーになるので代替としてProcessing 3対応videoライブラリの通り、執筆時点ではTest releaseのvideo.zipをダウンロード・展開のこと。
Processing/OpenCVサンプルスケッチWorkingWithColorImagesは、(デフォルト)カラー処理、適宜閾値(Thresholding)処理しつつ、ぼかし(blur)処理、適応的閾値(Adaptive Thresholding)、グレースケール処理した画像の比較。