ROS之face recongination(cbo_peopel_detection)
一准备
Ros的cbo_people_detection网站http://wiki.ros.org/cob_people_detection
某网站来自Amir:http://edu.gaitech.hk/turtlebot/openKinect-turtlebot.html
作者github:https://github.com/ipa320/cob_people_perception/tree/indigo_dev 可以问答并寻找关闭的问题
二安装
安装驱动
注意最后一个才是我们的摄像机Kinect要用的!!!!
sudo apt-get install ros-indigo-openni-*ros-indigo-openni2-* \ros-indigo-freenect-*
安装cbo_people_detection包
cd && mkdir -p catkin_ws/src&& cd catkin_ws/src && catkin_init_workspace && cd ..
catkin_make && cd src
git clonehttps://github.com/ipa-rmb/cob_people_perception.git
git clonehttps://github.com/ipa-rmb/cob_perception_common.git
cd .. && source devel/setup.bash
rosdep install --from-path src/ -y -i
catkin_make -DCMAKE_BUILD_TYPE="Release"
rosdep install --from-path src/ -y –i这句出错没事
catkin_make -DCMAKE_BUILD_TYPE="Release"改成catkin_make似乎也ok。
三开始运行cbo_people_detection
检测Kinect摄像头
如果只有
而没有Camera说明电流也许不够(也许大概是电流吧),反正下面的智障导致我好几天没有进度。下面的估计坏了。
运行roscore
(可以用rqt来检测图像了,看图形了,rqt是ros自带的一个模拟器)(有时候犯抽,看不到,机器人导航照样可以,过几天又可以了,扯淡,玄学玄学)
运行Kinect驱动
警告什么的不要管
运行人脸识别主程序(包含服务器)
会加载一大堆参数,以后想改可以改
这是已加载的人脸模型。
摄像机会延迟一会打开。
四人脸识别训练
rosrun cob_people_detectionpeople_detection_client
参见官网
l 1.添加人脸识别图片,没名就新建,重名就加入(自动或手动)
l 2.更新人脸数据库条目(人脸的集合的名字)
l 3.删除数据库
l 4.加载人脸模型,会清零现有的人脸模型,要把更新的和要用人脸集合的加上(不知去不区分大小写??)
l 5.打开传感器网关???
l 6.得到人脸识别,会强制打开传感器网管,并打开一个topic来传结果
执行的结果主程序那边会有反应,那边是服务器端,这边只是训练用的客户端。
五得到人脸识别的值
rostopic echo/detection_tracker/face_position_array
没有符合的脸的返回值
-
---
-
header:
-
seq: 9031
-
stamp:
-
secs: 1494850302
-
nsecs: 287560288
-
frame_id: camera_rgb_optical_frame
-
detections: []
-
---
Face识别的返回值
-
header:
-
seq: 525
-
stamp:
-
secs: 1494753634
-
nsecs: 666978723
-
frame_id: camera_rgb_optical_frame
-
detections:
-
-
-
header:
-
seq: 525
-
stamp:
-
secs: 1494753634
-
nsecs: 666978723
-
frame_id: camera_rgb_optical_frame
-
label: ssy
-
id: 0
-
detector: face
-
score: 0.0
-
mask:
-
roi:
-
x: 207
-
y: 68
-
width: 131
-
height: 131
-
mask:
-
header:
-
seq: 0
-
stamp:
-
secs: 0
-
nsecs: 0
-
frame_id: ''
-
height: 0
-
width: 0
-
encoding: ''
-
is_bigendian: 0
-
step: 0
-
data: []
-
pose:
-
header:
-
seq: 468
-
stamp:
-
secs: 1494753621
-
nsecs: 886631020
-
frame_id: camera_rgb_optical_frame
-
pose:
-
position:
-
x: -0.0529285743833
-
y: -0.118671439588
-
z: 0.585000038147
-
orientation:
-
x: 0.0
-
y: 0.0
-
z: 0.0
-
w: 1.0
-
bounding_box_lwh:
-
x: 0.0
-
y: 0.0
-
z: 0.0
-
---
Head识别的返回值
-
---
-
header:
-
seq: 266
-
stamp:
-
secs: 1494753576
-
nsecs: 404708677
-
frame_id: camera_rgb_optical_frame
-
detections:
-
-
-
header:
-
seq: 266
-
stamp:
-
secs: 1494753576
-
nsecs: 404708677
-
frame_id: camera_rgb_optical_frame
-
label: ssy
-
id: 0
-
detector: head
-
score: 0.0
-
mask:
-
roi:
-
x: 145
-
y: 46
-
width: 291
-
height: 291
-
mask:
-
header:
-
seq: 0
-
stamp:
-
secs: 0
-
nsecs: 0
-
frame_id: ''
-
height: 0
-
width: 0
-
encoding: ''
-
is_bigendian: 0
-
step: 0
-
data: []
-
pose:
-
header:
-
seq: 7
-
stamp:
-
secs: 1494753518
-
nsecs: 708872874
-
frame_id: camera_rgb_optical_frame
-
pose:
-
position:
-
x: -0.0262971445918
-
y: -0.0432342886925
-
z: 0.468000024557
-
orientation:
-
x: 0.0
-
y: 0.0
-
z: 0.0
-
w: 1.0
-
bounding_box_lwh:
-
x: 0.0
-
y: 0.0
-
z: 0.0
-
---
六客户端出现找不到服务器的问题
如果你有一个训练的人脸模型在ros/launch/face_recognizer_params.yaml文件中改为0或1,但如果你没有,只好复制一个了。为何会出现这样的尴尬情况我也不知道会这样。。。也许第一次启动时错过了初始化的机会。。。
打开隐藏文件.ros
Training文件就是训练了
七更改识别精度
主程序加载的识别文件配置
官网的ros/launch/detection_tracker_params.yaml文件介绍
这两项决定人脸识别的精度
Rate越小精度越高,score越大精度越高
八问题和ros交互
arduinoROS包无法导出人脸消息
可以检测出人脸消息,但无法取到里面的值
估计和我的依赖有问题。用它做个人脸识别还可以。
不过高精度会对人脸的位置要求很高。它总是试图识别出库中的一个人,而没给出相似度之类的。
会opencv后改改是极好的。