您的位置:首页 > 新闻 > 资讯 > 网络组建与配置 2018版清华大学出版社_简单网页设计作品_宁波seo推广_网站关键词优化培训

网络组建与配置 2018版清华大学出版社_简单网页设计作品_宁波seo推广_网站关键词优化培训

2024/10/10 9:06:15 来源:https://blog.csdn.net/Will_Ye/article/details/142697936  浏览:    关键词:网络组建与配置 2018版清华大学出版社_简单网页设计作品_宁波seo推广_网站关键词优化培训
网络组建与配置 2018版清华大学出版社_简单网页设计作品_宁波seo推广_网站关键词优化培训

0. Preface

现在很多新的图片处理model都是基于python3的,而ROS还是2.7的,要结合起来用不可避免有很多问题,以下以接收ROS image为例子
以下方法需要用的anaconda,安装方法有很多blog分享

1. Preparation

以下是python3接收image topic和发送image topic的一个节点代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
from cv_bridge import CvBridge### ROS
import rospy
from sensor_msgs.msg import Imageimg_flg = False
image = Nonedef imageCallback(msg):global imageglobal img_flgbridge = CvBridge()image = bridge.imgmsg_to_cv2(msg, desired_encoding="passthrough")image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)img_flg = True# print(image.shape)rospy.init_node('img_node')rospy.Subscriber('/top_camera', Image, imageCallback)imgpub = rospy.Publisher('/pro_img', Image, queue_size=10)rate = rospy.Rate(10)  # 10hz   def inter():global img_flgwhile not rospy.is_shutdown():if img_flg: # only consider human label### IMAGE PROCESSING #######      ...       ############################bridge = CvBridge()masked_image = masked_image.astype(np.uint8)processed_image_msg = bridge.cv2_to_imgmsg(masked_image, encoding="passthrough")imgpub.publish(processed_image_msg)print("Saved!\n")bbox_flg = Falseimg_flg = Falseelse:print("Waiting...\n")rate.sleep()rospy.spin()if __name__ == '__main__':try:inter()except rospy.ROSInterruptException:pass

但是现在其实运行不起来的,会直接报错,如下:

[ERROR] [1727968719.817374]: bad callback: <function imageCallback at 0x7fee6d8c8b80>
Traceback (most recent call last):File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/topics.py", line 750, in _invoke_callbackcb(msg)File "/home/will/project/SAM/segment-anything/sam_withros.py", line 45, in imageCallbackimage = bridge.imgmsg_to_cv2(msg, "bgr8")File "/opt/ros/melodic/lib/python2.7/dist-packages/cv_bridge/core.py", line 163, in imgmsg_to_cv2dtype, 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_channelsreturn 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_cvtype2from cv_bridge.boost.cv_bridge_boost import getCvType
ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)

2. Solution

1)先建一个python3.9的环境
2)安装一些依赖项

pip install rospkg
sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-melodic-cv-bridge
注意上述的ROS版本,这里是melodic,根据实际情况调整
3)建一个新的workspace,编译cv_bridge的包

mkdir -p ~/python3_ws/src
cd ~/python3_ws/src
catkin_init_workspace 
cd ..
catkin_make
catkin_make install 

4) 从Github下载cv_bridge的包
git clone -b melodic https://github.com/ros-perception/vision_opencv.git

5)然后进行编译以及指定python版本
catkin_make -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so
然后source一下
source ~/python3_ws/devel/setup.bash

6)编译成功后,测试一下,进入python,然后运行from cv_bridge.boost.cv_bridge_boost import getCvType
如果没有报错就成功了

(det) will@will-Dell-G15-5511:~/project$ python
Python 3.9.12 (main, Jun  1 2022, 11:38:51) 
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from cv_bridge.boost.cv_bridge_boost import getCvType
>>> 

7)最后,记得先source python3_ws,再进入虚拟环境,配置一下缺的包,然后跑一下上面一开始的代码,就会发现,这时就成功了。

img

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com