カメラ応用GUIプログラムその1
カメラを利用した密集度測定
OpenCVを使えば豊富なライブラリ(OpenCVの関数)で簡単に顔や目をバウンディ
ングボックスで囲んで検出することを知って3年が経ちました。
顔検出はすでに用意されている学習済のカスコードフィルターを使用します。その後、DetectorのYOLOなどを知り検出できるカテゴリ数が100個近くあることに驚きました。
今回はpythonで公開されている顔検出プログラムを改造して人(顔や目)をカウント
することに加え検出数をグラフ表示するプログラムを製作することにしました。
過去にも同様なプログラムで「ゴーストカウンタ」という定点カメラでのモニターシス
テムを作りましたが、pysimpleGUIにより操作性を上げました。
また、python環境がない場合でも対応できるようにpyinstallerで実行形式(.exe)に
コンパイルを行いました。
(プログラム概要)動作確認のため以下2STEPに分けて開発しました。
Opencvの既存カスコードフィルタ(haarcascade_frontalface_alt.xml等)を使用して人体
を検出カウントすることで密集度を定義し定間隔でログファイルに書き出します。
pysimpleGUIを活用して、以前に作成したpythonコードを再活用しGUIで動かせるように
アレンジしました。
(STEP1:capture_faceGUI.exe)
単純にUSBカメラの画像をキャプチャし、顔部分を検出し枠を合成し画像を表示します。
startボタンで上記操作を開始し繰り返します。stopボタンで一時停止、exitボタンでエラー
なく終了します。
(STEP2:densityGUI.exe)
約2秒毎に人関係のカスコードフィルタの検出値をモニタしログファイルに保存します。
検出値のトレンドをグラフ(トータル、顔、目検出数)表示します。
トータル検出数に閾値設定を行い、検出数が閾値を超えた場合はタイムスタンプで画像を保
存します。
①GUIを起動してstartボタンを押します。
②ゆっくりしたLive画像と顔検出枠が表示されます。
STEP2: densityGUI.exe
約2秒毎に人関係のカスコードフィルタの検出値をモニタしログファイルに保存します。
検出値のトレンドをグラフ(トータル、顔、目検出数)表示します。
トータル検出数に閾値設定を行い検出数が閾値を超えた場合はタイムスタンプで画像を保存します。
「densityGUI.exe」の操作方法
人密度検出のGUIプログラム「CFsimple.py」のプログラム全体構造
pysimpleGUIプログラムのGUIパラメータと出力
GUIとパラメータ設定
保存データ(csvファイルと画像ファイル)
カメラ応用GUIプログラムその2
Optical FlowのGUIプログラム開発
参考 http://www.thothchildren.com/chapter/5bcc61fb51d9305189030d50
Optical Flowの概要
Optical Flow処理
Optical FlowのGUIプログラム開発
任意のログファイルに最大値、画面全体の平均変位値を保存(最小で4秒間隔)
リアルタイム表示は、opticalflow画像とログファイルの変化グラフ(スクロール対応)を表示
変位閾値はGUIでユーザー入力
閾値を超えた画像の保存はログファイル名+タイムスタンプをファイル名として保存
起動後の設定変更を可能にするためStart/Stopボタンを配し測定条件変更の途中変更を可能に
長時間測定に対応し測定間隔(delay時間の設定)設定を可能にします。
Optical FlowのGUIプログラム「OFsimple.py」
Optical FlowのGUIプログラムの主な機能
GUIとパラメータ設定
測定時のGUI表示
ログデータの保存
カメラ応用GUIプログラムその3
RGBフィルターによる画像特異部の検出
カメラ画像はRGBは各色で8bitの強度データを持っています。RGB比で色を表現する場合は
比率の合計値は、R+G+B=1とすると独立な変数を2つに絞れます。
G比=G/(R+G+B)、B比=B/((R+G+B)と定義し、GとBの比率でガウシアンフィルター
を掛ける処理を行いました。 果物などの変色というような特異点の検出応用を検討しました。
(プログラムの概要)
カメラ画像からGB成分を画素単位で抽出しGB空間変色部基底との距離を反映した画像を
生成します。
(プログラムの基本仕様)
USBカメラ画像をキャプチャし表示します。
上記画像をリサイズし画素単位でGB値を抽出します。
変色部の特徴(GB空間基底中心と広がり)を使って各画素単位でガウシアンコンボリュ
ーションを行います。(「KP_filter処理」と仮名称を付けました。)
フィルタリングした画像を2次元イメージとして表示します。
Startボタンを押すごとに画像を更新します。
フィルタリングプログラム 「KP_filter」
サンプルAの面内経時変化 フィルターパラメータ(G35%,B26%,σ1%)
サンプルBの面内経時変化 フィルターパラメータ(G35%,B26%,σ1%)
カメラ応用GUIプログラムその4
Depthカメラの評価と応用その6抜粋
カメラ応用のGUIプログラムとしては、Depthカメラの評価と応用で測定システムを
紹介しています。pysimpleGUIの詳細な扱い方は今回の資料が参考になると思います。
概要のみ以下に示しますが詳細は省略します。
D405を使った表面凹凸変化測定システム
ランチョンマットの表面