# ... def image_callback(msg): # 将ROS图像消息转换为OpenCV图像 bridge = CvBridge() frame = bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8') # 执行生成文本的逻辑 image_folder_path = '/root/Pictures' output_file_name = 'qr_codes_found.txt' main(image_folder_path, output_file_name) # ...这段代码加在哪里
时间: 2024-04-15 07:26:17 浏览: 15
抱歉,我在之前的回答中疏忽了一点。请将`image_callback`函数放在`text_generation_node.py`脚本的开头定义之后,并在其中执行生成文本的逻辑。以下是修改后的`text_generation_node.py`脚本的示例代码:
```python
#!/usr/bin/env python2.7
import rospy
from std_msgs.msg import String
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import cv2
import os
from pyzbar import pyzbar
def image_callback(msg):
# 将ROS图像消息转换为OpenCV图像
bridge = CvBridge()
frame = bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8')
# 执行生成文本的逻辑
image_folder_path = '/root/Pictures'
output_file_name = 'qr_codes_found.txt'
main(image_folder_path, output_file_name)
def main(image_folder_path, output_file_name):
img_files = [f for f in os.listdir(image_folder_path) if f.endswith('.png')]
qr_codes_found = []
print("Image files:")
for img_file in img_files:
print(img_file)
for img_file in img_files:
img_path = os.path.join(image_folder_path, img_file)
img = cv2.imread(img_path)
barcodes = pyzbar.decode(img)
for barcode in barcodes:
if barcode.type == 'QRCODE':
qr_data = barcode.data.decode("utf-8")
qr_codes_found.append((img_file, qr_data))
unique_qr_codes = []
for file_name, qr_content in qr_codes_found:
if qr_content not in unique_qr_codes:
unique_qr_codes.append(qr_content)
with open(output_file_name, 'w') as f:
for qr_content in unique_qr_codes:
f.write("{}\n".format(qr_content))
if __name__ == '__main__':
rospy.init_node('text_generation_node')
# 创建一个订阅器订阅图像消息
rospy.Subscriber('processed_image', Image, image_callback)
rospy.spin()
```
请注意,`image_callback`函数被放置在`text_generation_node.py`脚本的开头定义之后,并且在其中执行生成文本的逻辑。然后,在`if __name__ == '__main__':`代码块中创建一个订阅器,订阅名为`'processed_image'`的图像消息。最后,通过调用`rospy.spin()`来保持节点的运行,以便能够接收和处理图像消息。
希望这次的回答对您有所帮助!如果还有其他问题,请随时提问。