安装虚拟环境可以看我前面写的文章 这里不再重复
此处依旧列出涉及的环境版本
ROS:melodic版本(默认适配py2.7)
Ubuntu:18.04
conda环境python:python3
TensorFlow:TensorFlow2
ros_tensorflow官方包下载地址——github(https://github.com/cong/ros_tensorflow)
1.虚拟环境配置
首先由于虚拟环境缺少一些依赖 或者是跟ros相关的依赖 我们需要先安装一些python的库
我配置的时候需要进行的安装有:
pip install pyyaml
pip install rospkg
pip install opencv-python
安装完成后运行ros_tensorflow 里的功能包正常来说是能通过前半部分的 但是吧 总有那么些不顺利的地方
有碰到一个情况是 安装完opencv-python库之后 import tensorflow直接core dumped了
筛查了很久发现是numpy的问题
解决方法有点奇妙:
pip uninstall numpy
conda install numpy
讲道理我也不知道这个pip install和conda install在虚拟环境里有什么区别 后续可能需要探究一下
实际运行到某个launch的时候还需要安装一下matplotlib(pip install或者conda install都可以)
ok 其实正常来说到这里就结束虚拟环境的配置了 但是后面你会发现运行cv_bridge报错 噢 万恶的python
ros中的cv_bridge是用的py2 但是我们的虚拟环境是py3 这怎么整呢
好吧 这里讲下我成功了的一个比较复杂的方法
2.cv_bridge源码编译
这里参考了https://blog.csdn.net/lovely_yoshino/article/details/107288433
我们要在非虚拟环境执行以下指令:
# 安装相关依赖包
sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-melodic-cv-bridge
# 创建一个用于编译源码的工作空间
mkdir -p catkin_workspace/src
cd catkin_workspace
# 该处需要根据你原本自带的系统python版本设定 因为使用arm64架构还需要修改下索引库的路径为aarch64-linux-gnu
catkin config -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.6m.so
# 下面这步不用也行 不过我是跟着操作的了
catkin config --install
# git获取源码
git clone https://github.com/ros-perception/vision_opencv.git src/vision_opencv
# 编译
catkin build
正常来说编译完成就好了 如果有报错要检查下上面catkin config的时候路径是否都是存在且正确的
然后在bashrc里加上环境变量配置
source ~/catkin_workspace/install/setup.bash --extend
修改完bashrc记得source一下再用哦!
ok 成功进入下一关
3.功能运行
把包放进工作空间src编译这种应该不用讲了吧 咱就是说懂的都懂
然后就进入配置好tensorflow的虚拟环境中开始探险(狗头.jpg)
A.ros_tensorflow_classify——物体识别功能
roslaunch ros_tensorflow ros_tensorflow_classify.launch
虚拟环境下运行launch文件
正常情况下在前面一系列东西加载完毕后就会开始打印识别到的物体和置信度
B.ros_tendorflow_detect——目标检测功能
roslaunch ros_tensorflow ros_tensorflow_detect.launch
虚拟环境下运行launch文件
然后使用工具查看/result_ripe图像话题 这里我选择使用rqt中的image_view工具 注意该功能默认发布的检测结果为图像类型 只能通过图像的形式查看检测的结果
这里我做了图像压缩 但是还是卡到爆…… whatever能用就行 本身用的主控性能也有限 咱没办法有啥追求 粗略的翻了下源码也没找到能让图像承受压力小一点的点 随便了
目标检测部分我遇到了一个很奇怪的问题 花了我两天时间翻源码(好几个函数和好几个参数在好几个python里反复横跳 我真的会谢)最后发现其实一下就解决了……
先说说我碰到的问题 目标检测的时候识别到除了人以外 识别其他物体都是框选后显示N/A和置信度
就很玄乎 能框选能出置信度证明其实他知道是什么东西了啊 那怎么还打印类别名N/A 是哪里出了叛徒(挠头)
问题不大 我们先看看怎么会出现打印N/A的情况
噢好家伙这一通ifelse看下来差点没给我整晕(原来我之前写的代码用的ifelse还不算多……)
check了一下是因为种类的那个id不在category的键值范围内
此时我产生了一个怀疑 既然除了人其他都打印N/A 该不会……
哈哈 猜中了(开始骂人)
意思是这个id取到大于1就会打印N/A呗 好 行 算你狠 这玩意取值范围在哪设定的?!
经过我在代码里遨游之后 发现 它其实就在那个launch直接打开的python文件里
哈哈 哈哈哈哈 就这花了我两天啊 无语 真的好无语 我甚至以为是什么比较深层的问题 结果只是一个小小变量在捣鬼
ok搞定 这样就能顺利打印除了人以外识别到的其他物体的名称
C.手写数字识别功能
说起这个mnist咱就是说也是有过几面之缘了 毕竟是深度学习界的hello world
同样运行launch 然后让相机看着你手写的数字
roslaunch ros_tensorflow ros_tensorflow_mnist.launch
终端会疯狂刷识别到的数字 试了所有的数字发现我写的3它识别不出来 我明明写的很标准应该很好辨识啊
ok 以上就是全过程 又是一篇清坑记录 tensorflow我谢谢你