shadfien / python_opencv

opencv问题
0 stars 0 forks source link

from cv_bridge.boost.cv_bridge_boost import getCvType #25

Open shadfien opened 2 years ago

shadfien commented 2 years ago

开发环境:ubuntu18.04+python3.6.9(自带)+anaconda+ros melodic+yolov5 运行roslaunch报错如下:


[ERROR] [1641263061.318455]: bad callback: <bound method DetectorManager.image_callback of <__main__.DetectorManager object at 0x7fc6d0a85d60>>
Traceback (most recent call last):
  File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/topics.py", line 750, in _invoke_callback
    cb(msg)
  File "/home/ricardo/catkin_ws1/src/yolov5_deepsort_ros/scripts/detector.py", line 101, in image_callback
    self.cv_image = self.bridge.imgmsg_to_cv2(data, "rgb8")
  File "/opt/ros/melodic/lib/python2.7/dist-packages/cv_bridge/core.py", line 163, in imgmsg_to_cv2
    dtype, n_channels = self.encoding_to_dtype_with_channels(img_msg.encoding)
  File "/opt/ros/melodic/lib/python2.7/dist-packages/cv_bridge/core.py", line 99, in encoding_to_dtype_with_channels
    return self.cvtype2_to_dtype_with_channels(self.encoding_to_cvtype2(encoding))
  File "/opt/ros/melodic/lib/python2.7/dist-packages/cv_bridge/core.py", line 91, in encoding_to_cvtype2
    from cv_bridge.boost.cv_bridge_boost import getCvType
ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)

参考文档,说一下我这边遇到的坑: 1.anaconda安装之后,无论是否在虚拟环境(conda)下,运行python3都是指向的anaconda的python环境,如下:

Python 3.7.0 (default, Jun 28 2018, 13:15:42) 
[GCC 7.2.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.

我参考了一下各个文档,发现都说是不要在anaconda虚拟环境下执行cv_bridge的安装等等操作 https://blog.csdn.net/qq_33591712/article/details/84788231 解决方案: 在~/.bashrc文件最后新增命令行: alias python3="/usr/bin/python3" 相当于将python3重新指向原系统自带的python3下,这样我的python由3.8/3.7变成了3.6,就跟后面文档里cv_bridge需要设置python3.6版本就对上了。

2.按照操作说明都实现了, from cv_bridge.boost.cv_bridge_boost import getCvType也能在python下不报错了,但是运行roslaunch还是指向了python2.7,该问题就是开篇提到的报错内容。 解决方案: 修改你roslaunch中运行的python文件,在 from cv_bridge import CvBridge, CvBridgeError这句话前面新增如下内容:

import sys
sys.path.remove('/opt/ros/melodic/lib/python2.7/dist-packages')

,然后重新source一下,应该就ok了。

参考文档: https://blog.csdn.net/weixin_42675603/article/details/107785376 https://blog.csdn.net/qq_40932565/article/details/112427529

shadfien commented 2 years ago

source的时候也有很多门道,因为cv_bridge和roslaunch是在两个文件夹下,所以先source install cv_bridge,后source devel/setup.bash ,要加上 --extend 所以在我这边操作如下,参考之:

##catkin_workspace 为cv_bridge的文件夹
cd catkin_workspace
source install/setup.bash
cd ..

##catkin_ws 为ros yolov5的文件夹
cd catkin_ws
source devel/setup.basg --extend