人脸识别在机器人应用当中算是一个热门的应用,在网上找了一些Haar算法的例子,在opencv下面跑都能正常识别,打算在ros中也跑一跑,在网上找了一下,找到了pi_face_tracker这个例子,它是Pi robot里的一个应用,Pi robot是以TurtleBot为基础做的一个带机器手的移动机器人,很适合我这种机器人爱好者(网站http://www.pirobot.org/)。
例子里提示可以安装uvc_cam或者kinect两种视频设备
安装uvc_cam package
$ git clone https://github.com/ericperko/uvc_cam.git $ rosdep install uvc_cam $ rosmake uvc_cam
$ svn co http://pi-robot-ros-pkg.googlecode.com/svn/trunk/pi_vision 4 rosdep install pi_vision $ rosmake pi_vision
装完以后运行
$ roslaunch ros2opencv uvc_cam.launch提示报错,说没有找到设备,我机器上没有安装uvc_cam,只有自带的USB摄像头,所以就只能用自带的摄像头了。重新在网上搜了一下,发现在ros里面驱动USB摄像头需要另外安装usb_cam的包,所以重新装了一下过程如下(http://pharos.ece.utexas.edu/wiki/index.php/How_to_Use_a_Webcam_in_ROS_with_the_usb_cam_Package)。
$ sudo apt-get install ros-electric-bosch-drivers
$ svn co https://bosch-ros-pkg.svn.sourceforge.net/svnroot/bosch-ros-pkg/trunk/stacks/bosch_drivers $ rospack profile $ roscd usb_cam $ rosmake --rosdep-install
安装完成后,测试是否驱动
$ roscore新开一个窗口,编辑usb_cam-test.launch,内容如下:
<launch> <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" > <param name="video_device" value="/dev/video0" /> <param name="image_width" value="640" /> <param name="image_height" value="480" /> <param name="pixel_format" value="mjpeg" /> <param name="camera_frame_id" value="usb_cam" /> <param name="io_method" value="mmap"/> </node> <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen"> <remap from="image" to="/usb_cam/image_raw"/> <param name="autosize" value="true" /> </node> </launch>
保存以后,运行
$ roslaunch usb_cam-test.launch
结果报错,发现是pixel_format的值不对,需要修改为yuyv
再次运行,就可以显示图像了。接下将usb摄像头作为输入到人脸识别人的uvc_cam.launch中,需要做如下修改
1、修改usb_cam-test.launch,删除"image_view" 这个节点。
2、修改face_tracker_uvc_cam.launch文件,修改<remap from="input_rgb_image" to="/camera/image_raw" />这一句为<remap from="input_rgb_image" to="/usb_cam/image_raw" />
3、运行roslaunch uvc_cam-test.launch
4、运行roslaunch pi_face_tracker face_tracker_uvc_cam.launch
好了,你可以看到你摄像头里的头像,你的脸被识别出来了。
第二种方法是用kinect作为输入设备。
这个比较简单,接好kinect 设备后,按步骤就可以完成。
$ roslaunch ros2opencv openni_node.launch
$ roslaunch pi_face_tracker face_tracker_kinect.launch