ROS勉強記その10:OpenCV(opencv_apps)を使って顔認識をやってみる

投稿日:2023年7月15日
最終更新日:2023年7月15日

Raspberry Pi カメラモジュールで撮った画像をopencv_appsで顔認識してみる

前回までのところで、raspicam_node + opencv_appsをつかって画像処理をやってみた。今後、自作ロボットに顔認識をさせて何かしらのアクションをさせてみようかと思っているので、その前段階として今回はopencv_appsの顔認識を使ってみたいと思う。

 

実行環境

Raspberry Pi 4 Model B / 4GB

Ubuntu Server 20.04.5 LTS(64-bit)

ROS Noetic Ninjemys

Raspberry Pi カメラモジュール Rev1.3

 

raspicam_nodeを起動する

まず、以前と同じ手順でraspicam_nodeを起動する。opencv_appsで画像処理する場合はraspicam_nodeのraw画像を使う必要があるので、enable_raw:=trueオプションをつけてlaunchファイルを実行する。

roslaunch raspicam_node camerav1_1280x720.launch enable_raw:=true

 

opencv_appsのface_detection.launchを起動する

あとは前回のedge_detectionのデモと同じように、face_detection.launchのファイルを起動するだけ…なのだが、デフォルトのlaunchファイルだとエラーが出てうまく起動できなかった。それについては以下でも書いている。

【ROS】opencv_appsのface_detection.launchを実行したらImage processing error: !empty() detectMultiScaleと出て実行できない

そのため、ちょっと無理やりな方法ではあるが/opt/ros/noetic/share/opencv_apps/launchディレクトリに置いてあるface_detection.launchを

sudo vi face_detection.launch

で起動して、face_detection.launchの

<arg unless="$(arg use_opencv3)"
name="face_cascade_name" default="/usr/share/opencv/haarcascades/haarcascade_frontalface_alt.xml" doc="Face dtection cascade Filename" />
<arg unless="$(arg use_opencv3)"
name="eyes_cascade_name" default="/usr/share/opencv/haarcascades/haarcascade_eye_tree_eyeglasses.xml" doc="Eye dtection cascade Filename" />

のdefault=…のディレクトリを以下のようにopencvからopencv4に変更した。

<arg unless="$(arg use_opencv3)"
name="face_cascade_name" default="/usr/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" doc="Face dtection cascade Filename" />
<arg unless="$(arg use_opencv3)"
name="eyes_cascade_name" default="/usr/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml" doc="Eye dtection cascade Filename" />

この状態で

roslaunch opencv_apps face_detection.launch image:=/raspicam_node/image/

を実行すると、前回のエッジ検出と同様にウィンドウが開き、処理された画像が表示されている。この状態で、ラズパイのカメラの前に顔画像を置いてみると、以下のように顔に紫の丸が表示されて、顔画像を認識できていることがわかる。

また、貼った画像には表示されていないが、人物の目の位置も緑の丸で表示される。

なお、今回作った画像はphotoACのAI人物素材で生成した架空の人物のもの。photoACのAI人物素材は、アカウントがあれば1日50回までAIにより架空の人物の顔画像を生成してダウンロードすることができる↓

https://www.photo-ac.com/main/genface

ちょっと短いが今回はここまで。今後は自作ロボットに顔認識してそちらに動いていくような処理をさせたいと思っている。そのため、次回は前段階の勉強として、opencv_appsのnodeがPublishする顔の座標データを取得して、ログで表示するようなSubscriberのノードを作ってみたいと思う。

 

ROS勉強記まとめ

この勉強記は以下のページでまとめてます。

ROS(Robot Operating System)勉強記 まとめ


投稿者: wakky

映画と旅行が大好きなエンジニア。お酒、ゲーム、読書も好き。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください