2018年度新入社員研修 |
|
Hello Pepperアプリケーション |
ソフィックス名古屋支店
新入社員研修
〜外部仕様書〜
担当 : K.S, S.F, M.M, A.Y, K.Y
2018年5月31日(木)
改訂履歴
版数 |
改訂日 |
改訂内容 |
改訂者 |
v1.00 |
2018/5/10 |
新規作成 |
K.S, S.F, M.M, A.Y, K.Y |
v1.01 |
2018/5/11 |
レビュー後の内容修正 |
K.S, S.F, M.M, A.Y, K.Y |
v1.02 |
2018/5/15 |
内仕の変更内容反映 |
M.M |
v1.03 |
2018/5/22 |
誤字訂正・距離計算の詳細反映 |
K.S, S.F |
v1.04 |
2018/5/23 |
座標計算方法の修正 |
M.M |
v1.05 |
2018/5/24 |
停止検知の内容修正 |
M.M |
v1.06 |
2018/5/31 |
停止検知と座標計算の内容修正 |
M.M |
目次
本仕様書は、カメラで人物を検知したソフトバンクロボティクス社のPepperをその人物の前に移動させ、挨拶をし、元の位置に戻る操作を行うアプリケーションの外部仕様に関して規定する。
開発環境は表2.1に示す通りである。
表2.1 開発環境
開発ソフト |
Visual Studio 2015、Choregraphe |
開発言語 |
C++(MFC) |
画像処理ライブラリ |
OpenCV3.1.0 |
制御対象 |
Pepper |
使用機材 |
カメラ |
表3.1 用語定義
名称 |
解説 |
カスケード分類機 |
検出対象であるか判別するためにブーストされた分類器をカスケード(連なった滝)状に直列に並べたアルゴリズム。 OpenCVのCascadeClassifierクラスを用いて設定する。引数として訓練済みのデータファイルを指定すると目的に応じた分類器ができる。 |
CascadeClassifier |
物体検出のためのカスケード分類器クラス。 |
HOG (Histogram of Oriented Gradients) |
物体の局所的な輝度の勾配方向の分布の組み合わせにより画像を判別する特徴量。OpenCVのCascadaClassifierに備わっているhaarcascade_fullbody.xmlを読み込ませると人の全身を認識できるようになる。 |
図4.1.1 実際の動作イメージ図1
図4.1.2 実際の動作イメージ図2
@ カメラで人物を認識する。
A 人物が立ち止まったことを検知する。
B 立ち止まった場所にPepperを誘導する。
C Pepperがその人に挨拶をする。
D Pepperが元の位置に戻る。
カメラ アプリ(Visual Studio) Pepper(Choregraphe)
図4.2.1 システム処理図
アプリでの開発ソフトにはVisual Studio 2015を使用し、Pepperの開発ソフトにはChoregrapheを使用する。
本アプリケーションを起動すると図5.1.1のようにメイン画面を表示する。メイン画面における各概要は表5.1に示す。
図5.1.1 画面構成図
表5.1.1 メイン画面の概要一覧
番号 |
概要 |
@ |
アプリケーションの終了 |
A |
アプリケーションの進行している段階の表示 |
B |
アプリケーションの一連の処理の実行(図4.2.1 参照) |
C |
5.1節で示したメイン画面(図5.1.1 参照)の機能について述べる。
@ アプリケーションの終了
アプリケーションを終了する。
A アプリケーションの進行している段階の表示
メイン画面(図5.1.1のA 参照)で表示するアプリケーションの進行段階のテキストを
表5.2にまとめる。
表5.2.1 メイン画面に表示するテキスト
表示されるテキスト |
表示される条件 |
待機中 |
アプリケーションが起動したとき |
開始 |
開始ボタン押下した時 |
人物が検出されました |
カメラ内に人がいる時 |
人物の停止が検出されました |
人が停止した時 |
稼働中 |
Pepperが稼動している時 |
終了 |
一連の処理が完了した時 |
B アプリケーションの一連の処理の実行
ボタンを押すことで映像の取り込み・人物検知・停止検知の処理が始まる。処理の内容は5.3節に示す。
C カメラ映像を描画する領域
設置されているカメラの映像を表示する。Bの開始ボタンを押すことでカメラからの映像の取り込みを開始する。また、人物の停止を確認したのち、カメラの映像からの取り込みを停止する。
アプリでの処理の流れを図5.3.1.1に示す。下図の処理をアプリでの一連の処理とし、本節では各処理の詳細について述べる。
図5.3.1.1 アプリの処理
撮影したカメラの映像を取得する。カメラの映像の取得に失敗した場合、画面にエラーメッセージとして表示する。(図5.3.2.1)カメラの映像の取得に成功した場合、取得した映像をメイン画面に表示する。(図5.1.1のC)
図5.3.2.1 カメラの映像が取り込めなかった時
撮影している映像内の人物をOpenCVのカスケード分類器でHOG特徴を用いて検出する。検出した人物は黄色い四角で囲って表示する(図5.3.3.1)。ただし人物の全身が識別範囲内にないと認識されない。複数人の検出が可能である。
図5.3.3.1 検出イメージ
5.3.3節で検出した人物が停止した場合、比較差分を用いて停止したと認識する。停止判定を出した人物は赤い四角で囲って表示する(図5.3.4.1)。
図5.3.4.1 停止イメージ
取り込まれる映像をフレーム間隔で画像に切り取り、直前の画像(図5.3.4.2)と現在の画像(図5.3.4.3)との差分を比較する。直前の動作と差がある場合、その差を白く変換する(図5.3.4.4)。一人の人物に対する白が一定値より下回って且、人物がまだ画面内にいる時を停止状態とする。停止状態が一定時間(20フレーム)続いた時完全に停止したと判定する。
図5.3.4.2 直前の画像
図5.3.4.3 現在の画像
図5.3.4.4 比較差分
5.3.4節で停止した人物が部屋のどの位置で停止したかを検出する。カメラの情報から画像左上を原点とした軸 軸を取り、停止した人物の足場をピクセル座標として認識する。足場の座標は5.3.4節で表示した赤い四角の横幅の中央値がx、背景差分より四角内の人物の差が最後に出た座標をyとすることにより求められる(図5.3.5.1)。
図5.3.5.1 座標イメージ
画面内に複数の停止判定を出している人物がいた場合、判定した四角の大きい人物の座標を取る(図5.3.5.2)。画面内の物体が動いていた場合停止判定が出されない。
図5.3.5.2 優先イメージ
距離計算は次の5段階に分かれる。以下に詳細を記述する。
・5.3.5節で取得した座標を受け取る。
・取り込んだ画像にOpenCVの関数を用いて台形補正を行うためのパラメータを求める。その後、受け取った座標に求めたパラメータを掛けることで台形補正を行い補正後の座標を求める。台形補正とは、カメラ撮影で投影角度によって発生する歪みを修正し、歪みのない実際の形状に変形させることである。これを行うことでその後の処理の精度が上昇する。
・Pepperの現在位置の座標と補正後の座標の2点間の図5.3.6.1・図5.3.6.2のXとYの距離を求める。
図5.3.6.1 求める距離と角度のイメージ図(人物が右にいる場合)
図5.3.6.2 求める距離と角度のイメージ図(人物が左にいる場合)
・求まったXとYを使い、図5.3.6.1と図5.3.6.2のようにPepperの現在位置の座標と補正後の座標との直線距離Dとラジアンθを求める。角度はPepperを基準に、Pepperよりも人物が右ならば図5.3.6.1のように-θ、左ならば図5.3.6.2のようにθとする。
・計算したDとθを距離データ(D,θ)として次の段階へ渡す。
条件
移動を開始する際Pepperがしっかりとホワイトボードと向き合っていることを前提条件とする。
章5.3.6で計算した距離データをアプリから受け取り,Choregrapheにより「移動する(人物の元へ)」「話しかける」「移動する(元の位置へ)」の順でPepperが動くように制御していく。
Choregrapheによる実際のPepperの動作イメージ図6.1を以下に示す。
図6.1 実際のPepper動作イメージ図
図6.1の動作を以下に示す。
@ 章5.3.6で計算した距離データをアプリから受け取り、Pepperに動作指示を送る。
A Pepperが停止した人物のところまで移動する。
B Pepperが挨拶をする。
C Pepperが元の位置に戻る。
本アプリケーションで表示するエラーメッセージを表7.1に示す。
表7.1 エラーメッセージ一覧
エラーメッセージ |
エラー条件 |
エラー発生場所 |
映像を取り込めませんでした。 |
カメラの映像が読み取れず画面に表示できなかった時 |
取り込み開始,開始ボタン押下後(5.3.2節) |