问题描述:
yolo检测算法,在非ROS环境下前向传播时间0.019s左右,放在ros环境下就1.3s了。慢的难以忍受
分析原因:
因为前向传播在订阅的回调函数中实现,出现了进程问题,所以变慢了。需要重开进程
解决:
订阅函数保存全局图像,新开进程进行前向传播
关键语句:
(1)
import thread
def call_rosspin():
print ('running rosspin...')
rospy.spin()
thread.start_new_thread(call_rosspin, ())
(2)订阅函数写为保存全局图像
def img_L_sub(imgmsg):
global img_L
global flag_img_L
bridge = CvBridge()
img_L = bridge.imgmsg_to_cv2(imgmsg, "bgr8")
flag_img_L = True
print 'img_L recieved'
(3)实例程序
#!/usr/bin/env python
import numpy as np
import cv2
import os, sys
import rospy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import thread
from datetime import datetime
from yolo_ros.msg import TargetsInfo
#sys.path.insert(0, '../../python/')
caffe_root = '/home/alvin/Desktop/caffe-yolo/'
sys.path.insert(0, caffe_root + 'python')
import caffe
caffe.set_device(0)
caffe.set_mode_gpu()
mean = np.require([104, 117, 123], dtype=np.float32)[:, np.newaxis, np.newaxis] ##??[104, 117, 123] [ r g b]???
img_L = cv2.imread('Null')
flag_img_L = False
pb = 0.3
def img_L_sub(imgmsg):
global img_L
global flag_img_L
bridge = CvBridge()
img_L = br