toshibox が 2021年02月25日19時55分58秒 に編集
課題とおまけを追記
本文の変更
**1 はじめに** 私は画像処理に興味があり、またかわいいペットのような物を作ってみたいと思い、顔を認識して追従するローバー を製作しました。 **2 使用したもの** ハードウェア ・Raspberry Pi 3 Model B ・Raspberry Pi 用 カメラモジュールケース付き ・モバイルバッテリー ・ビュートローバー H8(ヴィストン株式会社)  ソフトウェア ・Raspbian ・OpenCV(画像処理ライブラリ ) **3 システム概要** **3-1 システムイメージ図と実際の写真**   **3-2 動作説明** ①顔写真から顔認識用のモデルを生成。 用意するモデルを増やすと、顔識別の計算に時間がかかり、 1サイクルの処理時間が伸びてしまいます。 ②カメラから画像を取得 ③顔分類器(OpenCV公開のもの)で顔を検出 OpenCVの公開している分類器を使用していますが、顔を少し傾けるだけで、 顔を検出されなくなってしまいます。 ④顔を検出したら、①のモデルを用いて顔認識 ⑤モデルの顔と判定された場合、その顔の座標を元にモーターの制御値を決定。 画面を縦3x横4に分割し、顔が検出された座標によって12通りの制御値を設定します。 また、検出した顔のサイズを距離と見立てて、速度をあげたり、下げたりします。 ex, 検出した顔のサイズが小さい → 顔が遠くにある → 速度アップ ⑥モーター制御値等のデータをH8マイコンにシリアル送信。 ⑦H8マイコンは受信したデータを元にモーター制御し、受信データをRaspberry Piへ返す。 ⑧最後に、認識結果を載せた画像を表示する。 ※プライバシー保護のため顔を塗りつぶしています。  **4 実際の動き** 動画があります、これを見てください! https://youtu.be/9kKUzTUUt_c
**5 おまけ** 本稿では、H8マイコンを搭載したビュートローバー でモーターを制御している。 H8マイコンは、-127〜128までの値を設定しての左右それぞれモーター制御する。
**5 課題とおまけ** 課題 ・顔検出用の分類器の精度に限界があり、顔を少しでも傾けると、検出しなくなります。 ・顔のモデルは複数読み込ませることができますが、モデルが増えると、 それぞれのモデルを顔認識処理にかけるため、時間がかかり、 リアルタイム性を失ってしまします。 上記2点を解決すべく、他のライブラリ をTensorflowを使用しましたが、 これも処理に時間がかかりリアルタイム性を失いました。 顔検出精度を上げることが課題になっています。 おまけーもしも試したい人のためにー 本稿では、H8マイコンを搭載したビュートローバー でモーターを制御しています。 H8マイコンは、-127〜128までの値を設定しての左右それぞれモーター制御してます。
そのため、Raspberry Pi からH8マイコンへは、左右のモーター値に加え、ノイズ対策のためのチェックサムとデータ送信の目印0xFFの計4Byteを送信している。 ビュートローバーの代わりに市販でよく出回っているArduinoなどのモーターキットを使用する場合、上記モーター値を使用するキットに適した値に変更して、シリアル接続したら代用できます。 ソース↓ https://github.com/toshibox/Face-Trace-Rover