JetsonTX2 + ROS + Segnet LT wurde auf der ROS-Studiensitzung am 19. Juli 2017 mit dem Titel ["Jetson + ROS"] abgehalten. Die Folien werden unten veröffentlicht. https://docs.google.com/presentation/d/1edOO_PCEk5WQyNRetSBnmB5Bjew2wPAttXtYuYsHLhQ/edit#slide=id.p
Der Inhalt ist, dass ich versucht habe, Segnet auf TX2 zu verschieben, indem ich es mit ROS verbunden habe.
Fügen Sie für das Video die Webkamera in das Auto ein. Ich legte den PC auf den Beifahrersitz und nahm den Rosensack. Im Video sieht es so aus. https://drive.google.com/open?id=0B5oEuTcLOvlDaEIyemQyWEJ5bDg
Früher habe ich Jetson in ein Auto gesteckt, aber der PC ist einfacher.
Ich habe einen ROS-kompatiblen Code für [Segnet] erstellt (http://mi.eng.cam.ac.uk/projects/segnet/tutorial.html), daher werde ich ihn als Referenz veröffentlichen.
Empfängt das Bildthema von Sensor_msgs und gibt das Bild nach der Segmentierung aus.
Als Vorsichtsmaßnahme für die Installation ist beim Erstellen von Segnet caffe erforderlich. Wenn es sich jedoch nicht um von Alex veröffentlichtes caffe-segnet handelt, tritt ein Fehler auf, den Sie einschließen müssen.
[OTLs Buch](https://www.amazon.co.jp/ ROS-basierte Roboterprogrammierung_Kostenloses "Framework" für Roboter-I ・ O-BÜCHER-Ogura-Takashi / dp / 4777519015 / ref = sr_1_1 Mit "ROS" in? Ie = UTF8 & qid = 1500728508 & sr = 8-1 & keywords = ros) habe ich webcam_demo.py von Segnet_Tutorial neu geschrieben und dabei auf das Kapitel "Verteilte Bildverarbeitung" verwiesen.
ros_segnet.py
#!/usr/bin/env python
#$ python Scripts/ros_segnet.py --model Example_Models/segnet_model_driving_webdemo.prototxt --weights Example_Models/segnet_weights_driving_webdemo.caffemodel --colours Scripts/camvid12.png
import numpy as np
import matplotlib.pyplot as plt
import os.path
import scipy
import argparse
import math
import cv2
import sys
import time
#ros
import rospy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge,CvBridgeError
class segnet:
def __init__(self):
self.image_in_pub = rospy.Publisher("segnet_input", Image)
self.image_out_pub = rospy.Publisher("segnet_output", Image)
self.bridge = CvBridge()
self.image_sub = rospy.Subscriber("/image_topic",Image,self.callback)
def callback(self,message):
start = time.time()
try:
cv2_imag = self.bridge.imgmsg_to_cv2(message,"bgr8")
except CvBridgeError,e:
rospy.loginfo(e)
end = time.time()
print '%30s' % 'image_input ', str((end - start)*1000), 'ms'
start = time.time()
cv2_imag = cv2_imag[0:380,0:640]
cv2_imag = cv2.resize(cv2_imag, (input_shape[3],input_shape[2]))
input_image = cv2_imag.transpose((2,0,1))
input_image = np.asarray([input_image])
end = time.time()
print '%30s' % 'Resized image in ', str((end - start)*1000), 'ms'
start = time.time()
out = net.forward_all(data=input_image)
end = time.time()
print '%30s' % 'Executed SegNet in ', str((end - start)*1000), 'ms'
start = time.time()
segmentation_ind = np.squeeze(net.blobs['argmax'].data)
segmentation_ind_3ch = np.resize(segmentation_ind,(3,input_shape[2],input_shape[3]))
segmentation_ind_3ch = segmentation_ind_3ch.transpose(1,2,0).astype(np.uint8)
segmentation_rgb = np.zeros(segmentation_ind_3ch.shape, dtype=np.uint8)
cv2.LUT(segmentation_ind_3ch,label_colours,segmentation_rgb)
segmentation_rgb = segmentation_rgb.astype(float)/255
end = time.time()
print '%30s' % 'Processed results in ', str((end - start)*1000), 'ms\n'
#cv2.imshow("Input", cv2_imag)
#cv2.imshow("SegNet", segmentation_rgb)
#cv2.waitKey(3)
segmentation_rgb = (segmentation_rgb*256).astype(np.uint8)
try:
self.image_in_pub.publish(self.bridge.cv2_to_imgmsg(cv2_imag, "bgr8"))
self.image_out_pub.publish(self.bridge.cv2_to_imgmsg(segmentation_rgb, "bgr8"))
except CvBridgeError as e:
print(e)
def main(args):
ic = image_converter()
rospy.init_node('image_converter', anonymous=True)
try:
rospy.spin()
except KeyboardInterrupt:
print("Shutting down")
cv2.destroyAllWindows()
def main():
sys.path.append('/usr/local/lib/python2.7/site-packages')
# Make sure that caffe is on the python path:
caffe_root = '${HOME}/caffe-segnet/'
sys.path.insert(0, caffe_root + 'python')
import caffe
# Import arguments
parser = argparse.ArgumentParser()
parser.add_argument('--model', type=str, required=True)
parser.add_argument('--weights', type=str, required=True)
parser.add_argument('--colours', type=str, required=True)
args = parser.parse_args()
global net
net = caffe.Net(args.model,
args.weights,
caffe.TEST)
caffe.set_mode_gpu()
global input_shape
global output_label_coloursshape
input_shape = net.blobs['data'].data.shape
output_shape = net.blobs['argmax'].data.shape
global label_colours
label_colours = cv2.imread(args.colours).astype(np.uint8)
sn = segnet()
rospy.init_node('segnet_node',anonymous=True)
rospy.loginfo("start")
try:
rospy.spin()
except KeyboardInterrupt:
pass
cv2.destroyAllWindows()
if __name__ == '__main__':
main()