wiki:http://wiki.ros.org/opencv_apps
源码:https://github.com/ros-perception/opencv_apps.git
大部分代码最初取自https://github.com/Itseez/opencv/tree/master/samples/cpp
功能包:~/software/library_ws/src/opencv_apps
该功能包订阅的话题是【/image】,我们要做的是打开相机节点,写一个将相机的话题转成【/image】节点将【/image】话题发布出来。
开启相机并发布【/image】话题的节点的路径:
~/dofbot_ws/src/dofbot_visual/scripts/pub_image.py
opencv_apps 程序提供各种节点,这些节点在内部运行opencv的功能,并将结果发布到ROS话题中。使用opencv_apps程序时,按照自身的业务需求,只需运行一个launch文件即可,这样就可以不必再编写这些功能的程序代码。
ROS Wiki中有相关的节点解析,相应节点的话题订阅与话题发布、相关参数介绍等。详情请查看ROS WiKi。

第一步:启动相机
xxxxxxxxxxroslaunch dofbot_visual opencv_apps.launch img_flip:=false
img_flip参数:图像是否需要水平翻转,默认false就好。
【usb_cam-test.launch】文件默认开启【web_video_server】节点,可以直接使用【IP:8080】网页实时查看图像。
第二步:启动人脸识别的功能
xxxxxxxxxxroslaunch opencv_apps face_recognition.launch # 人脸识别
ros+opencv应用几乎每个案例都会有一个参数【debug_view】,布尔类型,是否使用Opencv显示图片,默认显示。
如果不需要显示则设置为【False】,例如
xxxxxxxxxxroslaunch opencv_apps contour_moments.launch debug_view:=False
但是这样子启动后,有些案例肯不能通过其他方式显示出来,因为在源码中,有些【debug_view】设置为【False】,就会把图像处理给关闭掉。
rqt_image_view
输入以下命令,选择对应话题
xxxxxxxxxxrqt_image_view
opencv
系统默认显示,无需做什么处理。
网页观看
(同局域网下)再浏览器中输入IP+port,例如:
xxxxxxxxxx192.168.2.116:8080
具体ip,使用自己当前虚拟机ip。
此案例是通过即时收集人的图像自主训练,实时识别,步骤略有复杂。
| 参数 | 类型 | 默认 | 解析 |
|---|---|---|---|
| ~approximate_sync | bool | false | 订阅【camera_info】这个话题,获得默认坐标系ID,否则直接使用图像信息。 |
| ~queue_size | int | 100 | 订阅话题的队列大小 |
| ~model_method | string | "eigen" | 人脸识别的方法: "eigen", "fisher" or "LBPH" |
| ~use_saved_data | bool | true | 从~data_dir路径下加载训练数据 |
| ~save_train_data | bool | true | 将训练数据保存到~data_dir路径下,以便重新训练 |
| ~data_dir | string | "~/opencv_apps/face_data" | 保存训练数据路径 |
| ~face_model_width | int | 190 | 训练人脸图像的宽度 |
| ~face_model_height | int | 90 | 训练人脸图像的高度 |
| ~face_padding | double | 0.1 | 每个人脸的填充比 |
| ~model_num_components | int | 0 | 人脸识别器模型的组件数量(0被视为无限制) |
| ~model_threshold | double | 8000.0 | 人脸识别模型阈值 |
| ~lbph_radius | int | 1 | 半径参数(仅适用于LBPH方法) |
| ~lbph_neighbors | int | 8 | 邻域参数(仅适用于LBPH方法) |
| ~lbph_grid_x | int | 8 | 网格x参数(仅适用于LBPH方法) |
| ~lbph_grid_y | int | 8 | 网格y参数(仅适用于LBPH方法) |
| ~queue_size | int | 100 | 图像订阅者队列大小 |
操作步骤:
1、首先在下图冒号后面,输入人物名字:Yahboom
2、确认名字:y
3、然后将人脸放在图像中央,点击确认。
4、循环增加一张照片:y,点击确认。
5、结束图片收集,输入:n,点击确认。
6、关闭这个launch文件,重启。
如果需要录入所认识别,依次循环1~5,直到所有识别人员录入完毕,再执行第六步。

第3步:要保证能够识别到人脸

最终识别效果
