├── ART_deeplearning_car ├── 1.jpg ├── README.md ├── lib │ ├── libart_driver.a │ └── libart_driver.so ├── model │ └── model_infer │ │ ├── __model__ │ │ ├── conv2d_0.b_0 │ │ ├── conv2d_0.w_0 │ │ ├── conv2d_1.b_0 │ │ ├── conv2d_1.w_0 │ │ ├── conv2d_2.b_0 │ │ ├── conv2d_2.w_0 │ │ ├── conv2d_3.b_0 │ │ ├── conv2d_3.w_0 │ │ ├── conv2d_4.b_0 │ │ ├── conv2d_4.w_0 │ │ ├── fc_0.b_0 │ │ ├── fc_0.w_0 │ │ ├── fc_1.b_0 │ │ ├── fc_1.w_0 │ │ ├── fc_2.b_0 │ │ └── fc_2.w_0 └── src │ ├── Auto_Driver.py │ ├── Auto_Driver_client2.py │ ├── Create_Data_Liet.py │ ├── Data_Coll.py │ ├── Img_Handle.py │ ├── Train_Model.py │ ├── __pycache__ │ ├── cnn_model.cpython-35.pyc │ └── reader.cpython-35.pyc │ ├── cnn_model.py │ └── reader.py ├── detect ├── 0.py ├── 000_Date_coll.py ├── da_luan.py ├── data_resize_xml.py ├── eval_txt_xml.py ├── train_txt_xml.py └── txt2npy.py └── pd ├── 1.jpg ├── data ├── change_XML_yolov3.py ├── eval.txt ├── label_list ├── label_list.txt └── train.txt ├── detector.py ├── freeze_model ├── __model__ ├── batch_norm_0.b_0 ├── batch_norm_0.w_0 ├── batch_norm_0.w_1 ├── batch_norm_0.w_2 ├── batch_norm_1.b_0 ├── batch_norm_1.w_0 ├── batch_norm_1.w_1 ├── batch_norm_1.w_2 ├── batch_norm_10.b_0 ├── batch_norm_10.w_0 ├── batch_norm_10.w_1 ├── batch_norm_10.w_2 ├── batch_norm_11.b_0 ├── batch_norm_11.w_0 ├── batch_norm_11.w_1 ├── batch_norm_11.w_2 ├── batch_norm_12.b_0 ├── batch_norm_12.w_0 ├── batch_norm_12.w_1 ├── batch_norm_12.w_2 ├── batch_norm_2.b_0 ├── batch_norm_2.w_0 ├── batch_norm_2.w_1 ├── batch_norm_2.w_2 ├── batch_norm_3.b_0 ├── batch_norm_3.w_0 ├── batch_norm_3.w_1 ├── batch_norm_3.w_2 ├── batch_norm_4.b_0 ├── batch_norm_4.w_0 ├── batch_norm_4.w_1 ├── batch_norm_4.w_2 ├── batch_norm_5.b_0 ├── batch_norm_5.w_0 ├── batch_norm_5.w_1 ├── batch_norm_5.w_2 ├── batch_norm_8.b_0 ├── batch_norm_8.w_0 ├── batch_norm_8.w_1 ├── batch_norm_8.w_2 ├── batch_norm_9.b_0 ├── batch_norm_9.w_0 ├── batch_norm_9.w_1 ├── batch_norm_9.w_2 ├── conv2d_0.w_0 ├── conv2d_1.w_0 ├── conv2d_10.w_0 ├── conv2d_11.b_0 ├── conv2d_11.w_0 ├── conv2d_12.w_0 ├── conv2d_13.w_0 ├── conv2d_14.b_0 ├── conv2d_14.w_0 ├── conv2d_2.w_0 ├── conv2d_3.w_0 ├── conv2d_4.w_0 ├── conv2d_5.w_0 ├── conv2d_8.w_0 └── conv2d_9.w_0 ├── result.jpg └── test.py /ART_deeplearning_car/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/1.jpg -------------------------------------------------------------------------------- /ART_deeplearning_car/README.md: -------------------------------------------------------------------------------- 1 | ssh deep@192.168.5.101 2 | password:artrobot 3 | 4 | 0 删除里面数据 5 | cd ~/ART_Deeplearning_car/src 6 | sudo rm -r ./data #删除数据 7 | sudo rm -r ./model #删除模型 8 | 9 | 1 采集数据 10 | cd ~/ART_Deeplearning_car/src 11 | python3 Data_Coll.py 12 | or: python3 Data_Coll.py --vels=1560 --output=data --serial=/dev/ttyUSB0 --camera=/dev/video0 --save_name=img 13 | ##生成:../data/img ../data/data.npy 14 | 15 | 2 处理数据 16 | cd ~/ART_Deeplearning_car/src 17 | python3 Img_Handle.py 18 | or: python3 Img_Handle.py --img_path=img --save_path=hsv_img 19 | ##生成:../data/hsv_img 20 | 21 | 3 生成训练和测试序列 22 | cd ~/ART_Deeplearning_car/src 23 | python3 Create_Data_Liet.py 24 | or: python3 Create_Data_Liet.py --test_list=test.list --train_list=train.list --data_name=data.npy --img_name=hsv_img 25 | ##生成:../data/train.list ../data/test.list 26 | 27 | 4 训练数据 28 | cd ~/ART_Deeplearning_car/src 29 | python3 Train_Model.py 30 | or: python3 Train_Model.py --test_list=test.list --train_list=train.list --save_path=model_infer 31 | ## 生成训练模型 ./model/model_infer 32 | 33 | 5 自主移动 34 | cd ~/ART_Deeplearning_car/src 35 | cd ~/paddle_py_ok/src 36 | python3 Auto_Driver.py 37 | or: python3 Auto_Driver.py --save_path=model_infer --vels=1560 --camera=/dev/video0 38 | ## 小车自主移动 39 | 40 | -------------------------------------------------------------------------------- /ART_deeplearning_car/lib/libart_driver.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/lib/libart_driver.a -------------------------------------------------------------------------------- /ART_deeplearning_car/lib/libart_driver.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/lib/libart_driver.so -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/__model__: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/__model__ -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/conv2d_0.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/conv2d_0.b_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/conv2d_0.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/conv2d_0.w_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/conv2d_1.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/conv2d_1.b_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/conv2d_1.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/conv2d_1.w_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/conv2d_2.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/conv2d_2.b_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/conv2d_2.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/conv2d_2.w_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/conv2d_3.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/conv2d_3.b_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/conv2d_3.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/conv2d_3.w_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/conv2d_4.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/conv2d_4.b_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/conv2d_4.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/conv2d_4.w_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/fc_0.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/fc_0.b_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/fc_0.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/fc_0.w_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/fc_1.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/fc_1.b_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/fc_1.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/fc_1.w_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/fc_2.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/fc_2.b_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/model/model_infer/fc_2.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/model/model_infer/fc_2.w_0 -------------------------------------------------------------------------------- /ART_deeplearning_car/src/Auto_Driver.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | """ 3 | 4 | """ 5 | 6 | import v4l2capture 7 | import sys, select, termios, tty 8 | import os 9 | import time 10 | import threading 11 | from ctypes import * 12 | import numpy as np 13 | import cv2 14 | from sys import argv 15 | 16 | 17 | import paddle.fluid as fluid 18 | from PIL import Image 19 | import getopt 20 | 21 | #script,vels,save_path= argv 22 | 23 | path = os.path.split(os.path.realpath(__file__))[0]+"/.." 24 | opts,args = getopt.getopt(argv[1:],'-hH',['save_path=','vels=','camera=']) 25 | 26 | 27 | camera = "/dev/video0" 28 | save_path = 'model_infer' 29 | vels = 1545 30 | 31 | for opt_name,opt_value in opts: 32 | if opt_name in ('-h','-H'): 33 | print("python3 Auto_Driver.py --save_path=%s --vels=%d --camera=%s "%(save_path , vels , camera)) 34 | exit() 35 | 36 | if opt_name in ('--save_path'): 37 | save_path = opt_value 38 | 39 | if opt_name in ('--vels'): 40 | vels = int(opt_value) 41 | 42 | if opt_name in ('--camera'): 43 | camera = opt_value 44 | 45 | 46 | #def load_image(cap): 47 | 48 | # lower_hsv = np.array([156, 43, 46]) 49 | # upper_hsv = np.array([180, 255, 255]) 50 | # lower_hsv1 = np.array([0, 43, 46]) 51 | # upper_hsv1 = np.array([10, 255, 255]) 52 | # ref, frame = cap.read() 53 | 54 | 55 | # hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 56 | # mask0 = cv2.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv) 57 | # mask1 = cv2.inRange(hsv, lowerb=lower_hsv1, upperb=upper_hsv1) 58 | # mask = mask0 + mask1 59 | # img = Image.fromarray(mask) 60 | # img = img.resize((120, 120), Image.ANTIALIAS) 61 | # img = np.array(img).astype(np.float32) 62 | # img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) 63 | # img = img.transpose((2, 0, 1)) 64 | # img = img[(2, 1, 0), :, :] / 255.0 65 | # img = np.expand_dims(img, axis=0) 66 | # return img 67 | 68 | 69 | def dataset(video): 70 | lower_hsv = np.array([15, 90, 165]) 71 | upper_hsv = np.array([0, 255, 255]) 72 | 73 | select.select((video,), (), ()) 74 | image_data = video.read_and_queue() 75 | 76 | frame = cv2.imdecode(np.frombuffer(image_data, dtype=np.uint8), cv2.IMREAD_COLOR) 77 | hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 78 | mask0 = cv2.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv) 79 | #mask1 = cv2.inRange(hsv, lowerb=lower_hsv1, upperb=upper_hsv1) 80 | mask = mask0 #+ mask1 81 | 82 | 83 | img = Image.fromarray(mask) 84 | img = img.resize((120, 120), Image.ANTIALIAS) 85 | img = np.array(img).astype(np.float32) 86 | img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) 87 | img = img.transpose((2, 0, 1)) 88 | img = img[(2, 1, 0), :, :] / 255.0 89 | img = np.expand_dims(img, axis=0) 90 | return img 91 | 92 | if __name__ == "__main__": 93 | cout = 0 94 | save_path = path + "/model/" + save_path 95 | 96 | 97 | video = v4l2capture.Video_device(camera) 98 | video.set_format(424,240, fourcc='MJPG') 99 | video.create_buffers(1) 100 | video.queue_all_buffers() 101 | video.start() 102 | 103 | 104 | place = fluid.CPUPlace() 105 | exe = fluid.Executor(place) 106 | exe.run(fluid.default_startup_program()) 107 | [infer_program, feeded_var_names, target_var] = fluid.io.load_inference_model(dirname=save_path, executor=exe) 108 | 109 | 110 | vel = int(vels) 111 | lib_path = path + "/lib" + "/libart_driver.so" 112 | so = cdll.LoadLibrary 113 | lib = so(lib_path) 114 | car = "/dev/ttyACM0" 115 | 116 | if (lib.art_racecar_init(38400, car.encode("utf-8")) < 0): 117 | raise 118 | pass 119 | try: 120 | while 1: 121 | img = dataset(video) 122 | 123 | result = exe.run(program=infer_program,feed={feeded_var_names[0]: img},fetch_list=target_var) 124 | angle = result[0][0][0] 125 | a = int(angle) 126 | lib.send_cmd(vel, a) 127 | print(cout) 128 | cout=cout+1 129 | print("angle: %d, throttle: %d" % (a, vel)) 130 | 131 | except: 132 | print('error') 133 | finally: 134 | lib.send_cmd(1500, 1500) 135 | 136 | 137 | -------------------------------------------------------------------------------- /ART_deeplearning_car/src/Auto_Driver_client2.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | """ 3 | """ 4 | import v4l2capture 5 | import sys, select, termios, tty 6 | import os 7 | import time 8 | import threading 9 | from ctypes import * 10 | import numpy as np 11 | import cv2 12 | from sys import argv 13 | import paddle.fluid as fluid 14 | from PIL import Image 15 | import getopt 16 | import socket 17 | 18 | import struct, array 19 | from fcntl import ioctl 20 | import time 21 | import multiprocessing 22 | '''global quality''' 23 | path = os.path.split(os.path.realpath(__file__))[0]+"/.." 24 | save_path = 'model_infer' 25 | '''multi processing''' 26 | camera = multiprocessing.Array("b",range(50))#output_data 27 | serial = multiprocessing.Array("b",range(50))#serial 28 | Output_data0 = multiprocessing.Array('u', 500) 29 | Output_data1 = multiprocessing.Array("i",range(2)) 30 | 31 | Speed = multiprocessing.Array("i",range(2))#speed and angle (int) 32 | NUM = multiprocessing.Array("i",range(2)) 33 | 34 | 35 | camera.value = "/dev/video0" 36 | serial.value = "/dev/ttyACM0" 37 | 38 | mm = "label" 39 | for i in range(len(mm)): 40 | Output_data0[i] = mm[i] 41 | Output_data0[i+1] = '$' 42 | ''' 43 | strPath = '' 44 | for i in range(0,500): 45 | if Output_data0[i] =='$': 46 | break 47 | else: 48 | strPath += Output_data0[i] 49 | print("********************************************************************",strPath)''' 50 | 51 | 52 | Output_data1[0] = 0 53 | Output_data1[1] = 0 54 | Speed[0] = 1540 55 | Speed[1] = 1500 56 | NUM.value = 0 57 | 58 | save_name="img" 59 | '''define input label''' 60 | opts,args = getopt.getopt(argv[1:],'-hH',['serial=','vels=']) 61 | for opt_name,opt_value in opts: 62 | if opt_name in ('-h','-H'): 63 | print("python3 Auto_Driver_client2.py --serial=%s --vels=%d "%(serial , vels )) 64 | exit() 65 | if opt_name in ('--serial'): 66 | serial = opt_value 67 | if opt_name in ('--vels'): 68 | Speed[0] = int(opt_value) 69 | '''LOCK image save or get ''' 70 | lock = multiprocessing.Manager().Lock() 71 | '''LOCK tcp date save or get ''' 72 | lock1 = multiprocessing.Manager().Lock() 73 | def dataset(frame): 74 | lower_hsv = np.array([15, 90, 165]) 75 | upper_hsv = np.array([0, 255, 255]) 76 | 77 | hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 78 | mask = cv2.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv) 79 | 80 | img = Image.fromarray(mask) 81 | img = img.resize((120, 120), Image.ANTIALIAS) 82 | img = np.array(img).astype(np.float32) 83 | img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) 84 | img = img.transpose((2, 0, 1)) 85 | img = img[(2, 1, 0), :, :] / 255.0 86 | img = np.expand_dims(img, axis=0) 87 | return img 88 | '''########################GET TCP DATA########################''' 89 | def get_data_process(run,output_data0,output_data1,num,lock1): 90 | tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 91 | tcp_client.connect(('127.0.0.1',1234)) 92 | num.value = 0 93 | while run.value: 94 | num.value += 1 95 | recv_ = tcp_client.recv(1024) 96 | recv_data = recv_.decode('utf-8') 97 | print ("*****open tcp ") 98 | if(len(recv_data)>20): 99 | print(len(recv_data)) 100 | continue 101 | if(recv_data.find('null') == -1): 102 | classes,center_x,center_y=recv_data.split(',',2) 103 | lock1.acquire() 104 | 105 | #output_data0.value= classes 106 | for i in range(len(classes)): 107 | Output_data0[i] = classes[i] 108 | Output_data0[i+1] = '$' 109 | 110 | output_data1[0] = int(center_x) 111 | output_data1[1] = int(center_y) 112 | lock1.release() 113 | 114 | strPath = '' 115 | for i in range(0,500): 116 | if Output_data0[i] =='$': 117 | break 118 | else: 119 | strPath += Output_data0[i] 120 | 121 | #print("get data {},{},{}".format(strPath,output_data1[0],output_data1[1])) 122 | '''########################GET IMAGE DATA########################''' 123 | def save_image_process(lock,camera,run,state): 124 | global path 125 | video = v4l2capture.Video_device(camera.value) 126 | video.set_format(424,240, fourcc='MJPG') 127 | video.create_buffers(50) 128 | video.queue_all_buffers() 129 | video.start() 130 | while run.value: 131 | while (state.value == True): 132 | nowtime1 = time.time() 133 | select.select((video,), (), ()) 134 | image_data = video.read_and_queue() 135 | frame1 = cv2.imdecode(np.frombuffer(image_data, dtype=np.uint8), cv2.IMREAD_COLOR) 136 | '''SAVE IMAGE TO LOCAL''' 137 | lock.acquire() 138 | cv2.imwrite(path+"/1.jpg", frame1) 139 | state.value = False 140 | lock.release() 141 | print("get image process cost :",1/float(time.time()-nowtime1)) 142 | '''########################CONTRAL CAR RUN ########################''' 143 | def control_car_process(lock,speed,run,num,output_data0,output_data1,state,lock1,serial):# 144 | global path 145 | global save_path 146 | save_path = path + "/model/" + save_path 147 | 148 | place = fluid.CPUPlace() 149 | exe = fluid.Executor(place) 150 | exe.run(fluid.default_startup_program()) 151 | [infer_program, feeded_var_names, target_var] = fluid.io.load_inference_model(dirname=save_path, executor=exe) 152 | 153 | vel = speed[0] 154 | lib_path = path + "/lib" + "/libart_driver.so" 155 | so = cdll.LoadLibrary 156 | lib = so(lib_path) 157 | car = "/dev/ttyACM0" 158 | if (lib.art_racecar_init(38400, car.encode("utf-8")) < 0): 159 | raise 160 | pass 161 | 162 | get_tcp = False 163 | a = num.value 164 | #time.sleep(2) 165 | detect = True 166 | number = 1 167 | number_cancel = 1 168 | number_green = 1 169 | number_red = 1 170 | number_limit = 1 171 | #try: 172 | while 1: 173 | while run.value: 174 | while state.value == False: 175 | nowtime = time.time() 176 | '''tcp data''' 177 | if (a != num.value): 178 | get_tcp = True 179 | a = num.value 180 | 181 | 182 | lock1.acquire() 183 | #classes = output_data0 184 | 185 | strPath = "" 186 | for i in range(0,500): 187 | if Output_data0[i] =='$': 188 | break 189 | else: 190 | strPath += Output_data0[i] 191 | classes = strPath 192 | center_x = output_data1[0] 193 | center_y = output_data1[1] 194 | lock1.release() 195 | print("*************************************************************************************get data {},{},{}".format(classes,center_x,center_y)) 196 | ''' image data ''' 197 | lock.acquire() 198 | frame = cv2.imread(path+"/1.jpg") 199 | state.value = True 200 | lock.release() 201 | 202 | img = dataset(frame) 203 | result = exe.run(program=infer_program,feed={feeded_var_names[0]: img},fetch_list=target_var) 204 | angle = result[0][0][0] 205 | '''recovery to 1200---1800''' 206 | #a = int(angle*600+1200) 207 | a = int(angle) 208 | if (get_tcp == True): 209 | '''GET TCP IMG****************************************************************DO SOMETHING''' 210 | 211 | 212 | '''GET TCP IMG****************************************************************DO SOMETHING''' 213 | get_tcp = False 214 | print('******output: speed = {} ,angle = {}'.format(vel, a)) 215 | lib.send_cmd(vel, a) 216 | print("***************************************** the test rate",1/float(time.time()-nowtime)) 217 | 218 | '''except: 219 | print("car run error") 220 | finally: 221 | lib.send_cmd(1500, 1500) 222 | print("car run finally") ''' 223 | 224 | if __name__ == "__main__": 225 | 226 | lib_path = path + "/lib" + "/libart_driver.so" 227 | so = cdll.LoadLibrary 228 | lib = so(lib_path) 229 | 230 | RUN = multiprocessing.Value("i",True)#SHUTDOWN 231 | STATE = multiprocessing.Value("i",True)# 232 | try: 233 | while(1): 234 | process_tcp = multiprocessing.Process(target=get_data_process,args=(RUN,Output_data0,Output_data1,NUM,lock1)) 235 | process_image = multiprocessing.Process(target=save_image_process,args=(lock,camera,RUN,STATE)) 236 | process_car = multiprocessing.Process(target=control_car_process,args=(lock,Speed,RUN,NUM,Output_data0,Output_data1,STATE,lock1,serial))# 237 | 238 | process_tcp.start() 239 | process_image.start() 240 | process_car.start() 241 | 242 | while(1): 243 | {} 244 | 245 | except: 246 | RUN.value = False 247 | time.sleep(1) 248 | lib.send_cmd(1500, 1500) 249 | print("error") 250 | 251 | finally: 252 | RUN.value = False 253 | time.sleep(1) 254 | lib.send_cmd(1500, 1500) 255 | print("finally") 256 | 257 | 258 | -------------------------------------------------------------------------------- /ART_deeplearning_car/src/Create_Data_Liet.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | import numpy as np 4 | from sys import argv 5 | import getopt 6 | 7 | 8 | #script, data_name, img_name = argv 9 | 10 | path = os.path.split(os.path.realpath(__file__))[0]+"/.." 11 | #script, vels = argv 12 | opts,args = getopt.getopt(argv[1:],'-hH',['test_list=','train_list=','data_name=','img_name=']) 13 | #print(opts) 14 | 15 | test_list = "test.list" 16 | train_list = "train.list" 17 | data_name = "data.npy" 18 | img_name = "hsv_img" 19 | 20 | #camera = "/dev/video0" 21 | 22 | for opt_name,opt_value in opts: 23 | if opt_name in ('-h','-H'): 24 | print("python3 Create_Data_Liet.py --test_list=%s --train_list=%s --data_name=%s --img_name=%s"%(test_list , train_list , data_name , img_name)) 25 | exit() 26 | 27 | if opt_name in ('--test_list'): 28 | test_list = opt_value 29 | 30 | if opt_name in ('--train_list'): 31 | train_list = opt_value 32 | 33 | if opt_name in ('--data_name'): 34 | data_name = opt_value 35 | 36 | if opt_name in ('--img_name'): 37 | img_name = opt_value 38 | 39 | def mkdir(path): 40 | folder = os.path.exists(path) 41 | if not folder: 42 | os.makedirs(path) 43 | print("----- new folder -----") 44 | else: 45 | print('----- there is this folder -----') 46 | 47 | def create_data_list(data_name, img_name): 48 | with open( test_list, 'w') as f: 49 | pass 50 | with open(train_list, 'w') as f: 51 | pass 52 | 53 | #data = np.load(os.path.join(data_root_path, data_name)) 54 | data = np.load( data_name) 55 | data = data.astype('float32') 56 | print('loading image:%s' % img_name) 57 | 58 | class_sum = 0 59 | #path = data_root_path + '/' + img_name 60 | 61 | #img_paths = os.listdir(path) 62 | img_paths = os.listdir(img_name) 63 | for img_path in img_paths: 64 | 65 | name_path = img_name + '/' + img_path 66 | index = int(img_path.split('.')[0]) 67 | 68 | if not os.path.exists(data_root_path): 69 | os.makedirs(data_root_path) 70 | 71 | if class_sum % 200 == 0: 72 | with open( test_list, 'a') as f: 73 | f.write(name_path + "\t%d" % data[index] + "\n") 74 | else: 75 | with open(train_list, 'a') as f: 76 | f.write(name_path + "\t%d" % data[index] + "\n") 77 | class_sum += 1 78 | print('图像列表已生成') 79 | 80 | 81 | if __name__ == '__main__': 82 | 83 | data_root_path = path+ '/data/' 84 | mkdir(data_root_path) 85 | test_list = path + '/data/' + test_list 86 | train_list = path + '/data/' + train_list 87 | data_name = path + '/data/' + data_name 88 | img_name = path + '/data/' + img_name 89 | 90 | 91 | create_data_list(data_name, img_name) 92 | 93 | -------------------------------------------------------------------------------- /ART_deeplearning_car/src/Data_Coll.py: -------------------------------------------------------------------------------- 1 | ###################################### 2 | ######ARTRobot DeepLearn Car########## 3 | ######Data and Picture Coll V1.0###### 4 | #############Steven Zhang############# 5 | ##############2019.08.01############## 6 | 7 | #!/usr/bin/env python 8 | # -*- coding: utf-8 -*- 9 | 10 | import os 11 | import v4l2capture 12 | import select 13 | from ctypes import * 14 | import struct, array 15 | from fcntl import ioctl 16 | import cv2 17 | import numpy as np 18 | import time 19 | from sys import argv 20 | import multiprocessing 21 | import time 22 | import getopt 23 | 24 | path = os.path.split(os.path.realpath(__file__))[0]+"/.." 25 | 26 | #script, vels = argv 27 | opts,args = getopt.getopt(argv[1:],'-h',['vels=','output=','serial=','camera=']) 28 | #print(opts) 29 | 30 | camera = multiprocessing.Array("b",range(50))#camera 31 | serial = multiprocessing.Array("b",range(50))#serial 32 | output_data = multiprocessing.Array("b",range(50))#output_data 33 | Speed = multiprocessing.Array("i",range(2))#speed and angle (int) 34 | 35 | camera.value = "/dev/video0" 36 | output_data.value = "data" 37 | Speed[0] = 1580 38 | Speed[1] = 1600 39 | serial.value = "/dev/ttyACM0" 40 | 41 | #camera = "/dev/video0" 42 | 43 | for opt_name,opt_value in opts: 44 | if opt_name in ('-h'): 45 | print("python3 Data_Coll.py --vels=1600 --output=data.npy --serial=/dev/ttyUSB0 --camera=/dev/video0") 46 | exit() 47 | 48 | if opt_name in ('--vels'): 49 | Speed[0] = int(opt_value) 50 | 51 | if opt_name in ('--output'): 52 | output_data.value = opt_value 53 | 54 | if opt_name in ('--serial'): 55 | serial.value = opt_value 56 | 57 | if opt_name in ('--camera'): 58 | camera.value = opt_value 59 | print("camera.value=",camera.value) 60 | 61 | 62 | '''创建一个互斥锁,默认是没有上锁的''' 63 | lock = multiprocessing.Manager().Lock() 64 | 65 | 66 | #a = multiprocessing.Value("i",0) 67 | 68 | 69 | def mkdir(path): 70 | if not os.path.exists(path): 71 | os.makedirs(path) 72 | #print("----- new folder -----") 73 | #else: 74 | #print('----- there is this folder -----') 75 | 76 | def getvalue(): 77 | import os, struct, array 78 | from fcntl import ioctl 79 | 80 | print('avaliable devices') 81 | 82 | for fn in os.listdir('/dev/input'): 83 | if fn.startswith('js'): 84 | print('/dev/input/%s' % fn) 85 | 86 | axis_states = {} 87 | button_states = {} 88 | 89 | axis_names = { 90 | 0x00 : 'x', 91 | 0x01 : 'y', 92 | 0x02 : 'z', 93 | 0x03 : 'rx', 94 | 0x04 : 'ry', 95 | 0x05 : 'rz', 96 | 0x06 : 'trottle', 97 | 0x07 : 'rudder', 98 | 0x08 : 'wheel', 99 | 0x09 : 'gas', 100 | 0x0a : 'brake', 101 | 0x10 : 'hat0x', 102 | 0x11 : 'hat0y', 103 | 0x12 : 'hat1x', 104 | 0x13 : 'hat1y', 105 | 0x14 : 'hat2x', 106 | 0x15 : 'hat2y', 107 | 0x16 : 'hat3x', 108 | 0x17 : 'hat3y', 109 | 0x18 : 'pressure', 110 | 0x19 : 'distance', 111 | 0x1a : 'tilt_x', 112 | 0x1b : 'tilt_y', 113 | 0x1c : 'tool_width', 114 | 0x20 : 'volume', 115 | 0x28 : 'misc', 116 | } 117 | button_names = { 118 | 0x120 : 'trigger', 119 | 0x121 : 'thumb', 120 | 0x122 : 'thumb2', 121 | 0x123 : 'top', 122 | 0x124 : 'top2', 123 | 0x125 : 'pinkie', 124 | 0x126 : 'base', 125 | 0x127 : 'base2', 126 | 0x128 : 'base3', 127 | 0x129 : 'base4', 128 | 0x12a : 'base5', 129 | 0x12b : 'base6', 130 | 0x12f : 'dead', 131 | 0x130 : 'a', 132 | 0x131 : 'b', 133 | 0x132 : 'c', 134 | 0x133 : 'x', 135 | 0x134 : 'y', 136 | 0x135 : 'z', 137 | 0x136 : 'tl', 138 | 0x137 : 'tr', 139 | 0x138 : 'tl2', 140 | 0x139 : 'tr2', 141 | 0x13a : 'select', 142 | 0x13b : 'start', 143 | 0x13c : 'mode', 144 | 0x13d : 'thumbl', 145 | 0x13e : 'thumbr', 146 | 147 | 0x220 : 'dpad_up', 148 | 0x221 : 'dpad_down', 149 | 0x222 : 'dpad_left', 150 | 0x223 : 'dpad_right', 151 | 152 | # XBox 360 controller uses these codes. 153 | 0x2c0 : 'dpad_left', 154 | 0x2c1 : 'dpad_right', 155 | 0x2c2 : 'dpad_up', 156 | 0x2c3 : 'dpad_down', 157 | } 158 | 159 | axis_map = [] 160 | button_map = [] 161 | 162 | fn = '/dev/input/js0' 163 | jsdev = open(fn, 'rb') 164 | 165 | buf = array.array('u',str(['\0']*5)) 166 | ioctl(jsdev, 0x80006a13 + (0x10000 * len(buf)), buf) 167 | js_name = buf.tostring() 168 | #js_name = buf.tobytes().decode('utf-8') 169 | #print('device name: %s' % js_name) 170 | 171 | # get number of axes and buttons 172 | buf = array.array('B', [1]) 173 | ioctl(jsdev, 0x80016a11, buf) # JSIOCGAXES 174 | num_axes = buf[0] 175 | 176 | buf = array.array('B', [0]) 177 | ioctl(jsdev, 0x80016a12, buf) # JSIOCGBUTTONS 178 | num_buttons = buf[0] 179 | 180 | # Get the axis map 181 | buf = array.array('B', [0] * 0x40) 182 | ioctl(jsdev, 0x80406a32, buf) #JSIOCGAXMAP 183 | for axis in buf[:num_axes]: 184 | #print(axis) 185 | axis_name = axis_names.get(axis, 'unknow(0x%02x)' % axis) 186 | axis_map.append(axis_name) 187 | axis_states[axis_name] = 0.0 188 | 189 | # Get the button map. 190 | buf = array.array('H', [1] * 200) 191 | ioctl(jsdev, 0x80406a34, buf) # JSIOCGBTNMAP 192 | 193 | for btn in buf[:num_buttons]: 194 | btn_name = button_names.get(btn, 'unknown(0x%03x)' % btn) 195 | button_map.append(btn_name) 196 | button_states[btn_name] = 0 197 | 198 | return axis_map, axis_states,button_map,button_states 199 | 200 | 201 | 202 | def save_image_process(lock,n,status,start,Camera): 203 | 204 | global path 205 | 206 | 207 | mkdir(path+"/data") 208 | mkdir(path+"/data"+"/img") 209 | 210 | #video = v4l2capture.Video_device("/dev/video0") 211 | video = v4l2capture.Video_device(Camera.value) 212 | video.set_format(424,240, fourcc='MJPG') 213 | video.create_buffers(1) 214 | video.queue_all_buffers() 215 | video.start() 216 | imgInd = 0 217 | print("Wait Start!") 218 | while(start.value == False): 219 | pass 220 | while status.value:#PS2 tr or tl control stop 221 | #print("status",status.value) 222 | select.select((video,), (), ()) 223 | image_data = video.read_and_queue() 224 | frame = cv2.imdecode(np.frombuffer(image_data, dtype=np.uint8), cv2.IMREAD_COLOR) 225 | cv2.imwrite(path+"/data/img"+"/{}.jpg".format(imgInd), frame) 226 | #a.value = imgInd 227 | print("imgInd=",imgInd) 228 | lock.acquire() 229 | n.value = True 230 | lock.release() 231 | imgInd+=1 232 | key = cv2.waitKey(1) 233 | if key & 0xFF == ord('q'): 234 | break 235 | 236 | def save_data_process(lock,n,data,run): 237 | #angledata = [] 238 | file_write = open(path+"/data/"+ output_data.value+".txt","a") 239 | while run.value: 240 | while(n.value): 241 | lock.acquire() 242 | n.value = False 243 | lock.release() 244 | print("speed=",data[0]," angle=",data[1]) 245 | #angledata.append(data[1]) 246 | #angle = np.array(angledata) 247 | #angle = np.array(data[1]) 248 | #np.save(path+"/data/"+ output_data.value, angle,False) 249 | file_write.write(str(data[1])) 250 | file_write.write("\n") 251 | file_write.flush() 252 | 253 | 254 | def control_car_process(data,status,run,start): 255 | max_num = 1580 256 | min_num = 1480 257 | while run.value: 258 | speed_car = data[0] 259 | angle_car = 1500 260 | fn = '/dev/input/js0' 261 | jsdev = open(fn, 'rb') 262 | car = serial.value 263 | axis_map, axis_states, button_map, button_states = getvalue() 264 | lib_path = path + "/lib" + "/libart_driver.so" 265 | so = cdll.LoadLibrary 266 | lib = so(lib_path) 267 | 268 | 269 | 270 | try: 271 | if (lib.art_racecar_init(38400, car.encode("utf-8")) < 0): 272 | raise 273 | pass 274 | lib.send_cmd(1500, 1500) 275 | while run.value: 276 | evbuf = jsdev.read(8) 277 | if evbuf: 278 | time, value, type, number = struct.unpack('IhBB', evbuf) 279 | if type & 0x01: 280 | button = button_map[number] 281 | if button: 282 | button_states[button] = value 283 | if(button == "b"and button_states[button] == True): 284 | start.value = True 285 | print("START") 286 | lib.send_cmd(speed_car, angle_car) 287 | if((button == "tr" and button_states[button] == True) or (button == "tl" and button_states[button] == True)): 288 | #Stop 289 | print("Stop") 290 | status.value = False 291 | data[0] = 1500 292 | data[1] = 1500 293 | lib.send_cmd(1500, 1500) 294 | if(start.value == True):#PS2 control speed and angle start 295 | if type & 0x02: 296 | axis = axis_map[number] 297 | if axis: 298 | if axis == "x": 299 | 300 | fvalue = value / 32767 301 | axis_states[axis] = fvalue 302 | angle1 = 1500 - (fvalue * 400) 303 | #if angle1 <= 800: 304 | # angle1 = 800 305 | #if angle1 >= 2100: 306 | # angle1 = 2100 307 | angle_car = int(angle1) 308 | 309 | data[0] = speed_car 310 | data[1] = angle_car 311 | lib.send_cmd(speed_car, angle_car) 312 | 313 | 314 | #for i in 8: 315 | # evbuf1 = jsdev.read(i) 316 | # print("id = ",evbuf1) 317 | 318 | except: 319 | print("car run error") 320 | finally: 321 | lib.send_cmd(1560, 1560) 322 | print("car run finally") 323 | 324 | def txt_2_numpy(): 325 | angledata = [] 326 | data = [] 327 | file = open(path+"/data/"+ output_data.value+".txt","r") 328 | for line in file.readlines(): 329 | line = line.strip('\n') 330 | angledata.append(int(line)) 331 | angle = np.array(angledata) 332 | np.save(path+"/data/"+ output_data.value+".npy", angle,False) 333 | file.close() 334 | 335 | 336 | if __name__ == '__main__': 337 | 338 | Flag_save_data = multiprocessing.Value("i",False)#New img save flag 339 | 340 | Status = multiprocessing.Value("i",True)#Run or Stop for PS2 341 | START = multiprocessing.Value("i",False)#START 342 | RUN = multiprocessing.Value("i",True)#SHUTDOWN 343 | 344 | try: 345 | process_car = multiprocessing.Process(target=control_car_process,args=(Speed,Status,RUN,START)) 346 | process_image = multiprocessing.Process(target=save_image_process,args=(lock,Flag_save_data,Status,START,camera,)) 347 | process_data = multiprocessing.Process(target=save_data_process,args=(lock,Flag_save_data,Speed,RUN,)) 348 | process_car.start() 349 | process_image.start() 350 | process_data.start() 351 | 352 | 353 | 354 | while(1): 355 | if(Status.value == 0): 356 | time.sleep(1) 357 | RUN.value = False 358 | print("STOP CAR") 359 | print("TXT to npy") 360 | txt_2_numpy() 361 | break 362 | except: 363 | RUN.value = False 364 | print("error") 365 | 366 | finally: 367 | RUN.value = False 368 | print("finally") 369 | 370 | -------------------------------------------------------------------------------- /ART_deeplearning_car/src/Img_Handle.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import os, re 3 | import numpy as np 4 | import cv2 as cv 5 | from sys import argv 6 | import getopt 7 | 8 | path = os.path.split(os.path.realpath(__file__))[0]+"/.." 9 | #script, vels = argv 10 | opts,args = getopt.getopt(argv[1:],'-hH',['img_path=','save_path=']) 11 | #print(opts) 12 | 13 | img_path = "img" 14 | save_path = "hsv_img" 15 | 16 | 17 | #camera = "/dev/video0" 18 | 19 | for opt_name,opt_value in opts: 20 | if opt_name in ('-h','-H'): 21 | print("python3 Img_Handle.py --img_path=img --save_path=hsv_img") 22 | exit() 23 | 24 | if opt_name in ('--img_path'): 25 | img_path = opt_value 26 | 27 | if opt_name in ('--save_path'): 28 | save_path = opt_value 29 | 30 | 31 | #print("camera.value=",camera.value) 32 | 33 | 34 | def mkdir(path): 35 | folder = os.path.exists(path) 36 | if not folder: 37 | os.makedirs(path) 38 | print("----- new folder -----") 39 | else: 40 | print('----- there is this folder -----') 41 | 42 | def img_extract(img_path, save_path): 43 | img_name = os.listdir(img_path) 44 | lower_hsv = np.array([25,75,190]) 45 | upper_hsv = np.array([40,255,255]) 46 | 47 | for img in img_name: 48 | print(img) 49 | image = os.path.join(img_path, img) 50 | src = cv.imread(image) 51 | hsv = cv.cvtColor(src, cv.COLOR_BGR2HSV) 52 | mask0 = cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv) 53 | #mask1 = cv.inRange(hsv, lowerb=lower_hsv1, upperb=upper_hsv1) 54 | mask = mask0# + mask1 55 | ind = int(re.findall('.+(?=.jpg)', img)[0]) 56 | new_name = str(ind) + '.jpg' 57 | cv.imwrite(os.path.join(save_path, new_name), mask) 58 | 59 | 60 | 61 | if __name__ == "__main__": 62 | 63 | img_path = path + "/data/"+ img_path 64 | save_path = path + "/data/"+ save_path 65 | 66 | mkdir(save_path) 67 | if not os.path.isdir(save_path): 68 | os.makedirs(save_path) 69 | img_extract(img_path, save_path) 70 | 71 | -------------------------------------------------------------------------------- /ART_deeplearning_car/src/Train_Model.py: -------------------------------------------------------------------------------- 1 | import os 2 | import shutil 3 | #import mobilenet_v1 4 | import cnn_model 5 | import paddle as paddle 6 | import reader 7 | import paddle.fluid as fluid 8 | import numpy as np 9 | from sys import argv 10 | import getopt 11 | 12 | #script, save_path = argv 13 | 14 | 15 | path = os.path.split(os.path.realpath(__file__))[0]+"/.." 16 | #script, vels = argv 17 | opts,args = getopt.getopt(argv[1:],'-hH',['test_list=','train_list=','save_path=']) 18 | #print(opts) 19 | 20 | test_list = "test.list" 21 | train_list = "train.list" 22 | save_path = "model_infer" 23 | 24 | 25 | #camera = "/dev/video0" 26 | 27 | for opt_name,opt_value in opts: 28 | if opt_name in ('-h','-H'): 29 | print("python3 Train_Model.py --test_list=%s --train_list=%s --save_path=%s "%(test_list , train_list , save_path)) 30 | exit() 31 | 32 | if opt_name in ('--test_list'): 33 | test_list = opt_value 34 | 35 | if opt_name in ('--train_list'): 36 | train_list = opt_value 37 | 38 | if opt_name in ('--save_path'): 39 | save_path = opt_value 40 | 41 | 42 | test_list = path + '/data/' + test_list 43 | train_list = path + '/data/' + train_list 44 | save_path = path + '/model/' + save_path 45 | 46 | 47 | crop_size = 120 48 | resize_size = 120 49 | 50 | 51 | image = fluid.layers.data(name='image', shape=[3, crop_size, crop_size], dtype='float32') 52 | label = fluid.layers.data(name='label', shape=[1], dtype='float32') 53 | 54 | model = cnn_model.cnn_model(image) 55 | 56 | cost = fluid.layers.square_error_cost(input=model, label=label) 57 | avg_cost = fluid.layers.mean(cost) 58 | 59 | # 获取训练和测试程序 60 | test_program = fluid.default_main_program().clone(for_test=True) 61 | 62 | # 定义优化方法 63 | optimizer = fluid.optimizer.AdamOptimizer(learning_rate=0.01) 64 | 65 | opts = optimizer.minimize(avg_cost) 66 | 67 | 68 | # 获取自定义数据 69 | train_reader = paddle.batch(reader=reader.train_reader(train_list, crop_size, resize_size), batch_size=32) 70 | test_reader = paddle.batch(reader=reader.test_reader(test_list, crop_size), batch_size=32) 71 | 72 | # 定义执行器 73 | place = fluid.CPUPlace() # place = fluid.CUDAPlace(0) 74 | exe = fluid.Executor(place) 75 | # 进行参数初始化 76 | exe.run(fluid.default_startup_program()) 77 | 78 | # 定义输入数据维度 79 | feeder = fluid.DataFeeder(place=place, feed_list=[image, label]) 80 | 81 | 82 | # 训练 83 | all_test_cost = [] 84 | for pass_id in range(50): 85 | # 进行训练 86 | for batch_id, data in enumerate(train_reader()): 87 | train_cost = exe.run(program=fluid.default_main_program(), 88 | feed=feeder.feed(data), 89 | fetch_list=[avg_cost]) 90 | 91 | # 每100个batch打印一次信息 92 | if batch_id % 100 == 0: 93 | print('Pass:%d, Batch:%d, Cost:%0.5f' % 94 | (pass_id, batch_id, train_cost[0])) 95 | 96 | # 进行测试 97 | test_costs = [] 98 | 99 | for batch_id, data in enumerate(test_reader()): 100 | test_cost = exe.run(program=test_program, 101 | feed=feeder.feed(data), 102 | fetch_list=[avg_cost]) 103 | test_costs.append(test_cost[0]) 104 | # 求测试结果的平均值 105 | test_cost = (sum(test_costs) / len(test_costs)) 106 | all_test_cost.append(test_cost) 107 | 108 | 109 | #test_acc = (sum(test_accs) / len(test_accs)) 110 | print('Test:%d, Cost:%0.5f' % (pass_id, test_cost)) 111 | #save_path = 'infer_model/' 112 | # 保存预测模型 113 | 114 | if min(all_test_cost) >= test_cost: 115 | fluid.io.save_inference_model(save_path, feeded_var_names=[image.name], main_program=test_program, target_vars=[model], executor=exe) 116 | print('finally test_cost: {}'.format(test_cost)) 117 | 118 | -------------------------------------------------------------------------------- /ART_deeplearning_car/src/__pycache__/cnn_model.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/src/__pycache__/cnn_model.cpython-35.pyc -------------------------------------------------------------------------------- /ART_deeplearning_car/src/__pycache__/reader.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/ART_deeplearning_car/src/__pycache__/reader.cpython-35.pyc -------------------------------------------------------------------------------- /ART_deeplearning_car/src/cnn_model.py: -------------------------------------------------------------------------------- 1 | import paddle.fluid as fluid 2 | 3 | 4 | def cnn_model(image): 5 | 6 | conv1 = fluid.layers.conv2d(input=image, num_filters=24, filter_size=5, stride=2, act='relu') 7 | conv2 = fluid.layers.conv2d(input=conv1, num_filters=32, filter_size=8, stride=2, act='relu') 8 | conv3 = fluid.layers.conv2d(input=conv2, num_filters=64, filter_size=10, stride=2, act='relu') 9 | conv4 = fluid.layers.conv2d(input=conv3, num_filters=64, filter_size=12, stride=2, act='relu') 10 | conv5 = fluid.layers.conv2d(input=conv4, num_filters=64, filter_size=15, stride=1, act='relu') 11 | fc1 = fluid.layers.fc(input=conv5, size=30, act=None) 12 | drop_fc1 = fluid.layers.dropout(fc1, dropout_prob=0.3) 13 | predict = fluid.layers.fc(input=drop_fc1, size=80, act=None) 14 | 15 | return predict 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /ART_deeplearning_car/src/reader.py: -------------------------------------------------------------------------------- 1 | import os 2 | import random 3 | from multiprocessing import cpu_count 4 | import numpy as np 5 | import paddle 6 | from PIL import Image 7 | import cv2 as cv 8 | 9 | # 训练图片的预处理 10 | def train_mapper(sample): 11 | img_path, label, crop_size, resize_size = sample 12 | try: 13 | img = Image.open(img_path) 14 | # 统一图片大小 15 | img = img.resize((resize_size, resize_size), Image.ANTIALIAS) 16 | # 把图片转换成numpy值 17 | img = np.array(img).astype(np.float32) 18 | img = cv.cvtColor(img, cv.COLOR_GRAY2BGR) 19 | # 转换成CHW 20 | img = img.transpose((2, 0, 1)) 21 | # 转换成BGR 22 | img = img[(2, 1, 0), :, :] / 255.0 23 | return img, label 24 | except: 25 | print("%s 该图片错误,请删除该图片并重新创建图像数据列表" % img_path) 26 | 27 | 28 | # 获取训练的reader 29 | def train_reader(train_list_path, crop_size, resize_size): 30 | father_path = os.path.dirname(train_list_path) 31 | 32 | def reader(): 33 | with open(train_list_path, 'r') as f: 34 | lines = f.readlines() 35 | # 打乱图像列表 36 | np.random.shuffle(lines) 37 | # 开始获取每张图像和标签 38 | for line in lines: 39 | img, label = line.split('\t') 40 | img = os.path.join(father_path, img) 41 | yield img, label, crop_size, resize_size 42 | 43 | return paddle.reader.xmap_readers(train_mapper, reader, cpu_count(), 102400) 44 | 45 | # 测试图片的预处理 46 | def test_mapper(sample): 47 | img, label, crop_size = sample 48 | img = Image.open(img) 49 | # 统一图像大小 50 | img = img.resize((crop_size, crop_size), Image.ANTIALIAS) 51 | # 转换成numpy值 52 | img = np.array(img).astype(np.float32) 53 | img = cv.cvtColor(img, cv.COLOR_GRAY2BGR) 54 | # 转换成CHW 55 | img = img.transpose((2, 0, 1)) 56 | # 转换成BGR 57 | img = img[(2, 1, 0), :, :] / 255.0 58 | return img, label 59 | 60 | # 测试的图片reader 61 | def test_reader(test_list_path, crop_size): 62 | father_path = os.path.dirname(test_list_path) 63 | 64 | def reader(): 65 | with open(test_list_path, 'r') as f: 66 | lines = f.readlines() 67 | for line in lines: 68 | img, label = line.split('\t') 69 | img = os.path.join(father_path, img) 70 | yield img, label, crop_size 71 | 72 | return paddle.reader.xmap_readers(test_mapper, reader, cpu_count(), 1024) 73 | 74 | 75 | -------------------------------------------------------------------------------- /detect/0.py: -------------------------------------------------------------------------------- 1 | ###################################### 2 | ######ARTRobot DeepLearn Car########## 3 | ######Data and Picture Coll V1.0###### 4 | #############Steven Zhang############# 5 | ##############2019.08.01############## 6 | 7 | #!/usr/bin/env python 8 | # -*- coding: utf-8 -*- 9 | 10 | import os 11 | import v4l2capture 12 | import select 13 | from ctypes import * 14 | import struct, array 15 | from fcntl import ioctl 16 | import cv2 17 | import numpy as np 18 | import time 19 | from sys import argv 20 | import multiprocessing 21 | import time 22 | import getopt 23 | 24 | path = os.path.split(os.path.realpath(__file__))[0] 25 | 26 | save_name="img" 27 | 28 | def mkdir(path): 29 | if not os.path.exists(path): 30 | os.makedirs(path) 31 | #print("----- new folder -----") 32 | #else: 33 | #print('----- there is this folder -----') 34 | 35 | 36 | 37 | def save_image_process(Camera): 38 | mkdir(path+"/data") 39 | mkdir(path+"/data/"+save_name) 40 | video = v4l2capture.Video_device(Camera) 41 | video.set_format(424,240, fourcc='MJPG') 42 | #video.set_format(160,120, fourcc='MJPG') 43 | video.create_buffers(1) 44 | video.queue_all_buffers() 45 | video.start() 46 | imgInd = 0 47 | while 1: 48 | select.select((video,), (), ()) 49 | image_data = video.read_and_queue() 50 | frame = cv2.imdecode(np.frombuffer(image_data, dtype=np.uint8), cv2.IMREAD_COLOR) 51 | 52 | cv2.imshow('video',frame) 53 | #cv2.imwrite(path+"/data/"+save_name+"/{}.jpg".format(imgInd), frame) 54 | #a.value = imgInd 55 | print("imgInd=",imgInd) 56 | imgInd+=1 57 | time.sleep(0.5) 58 | key = cv2.waitKey(1) 59 | if key & 0xFF == ord('q'): 60 | break 61 | 62 | 63 | 64 | if __name__ == '__main__': 65 | save_image_process("/dev/video1") 66 | 67 | 68 | -------------------------------------------------------------------------------- /detect/000_Date_coll.py: -------------------------------------------------------------------------------- 1 | ###################################### 2 | ######ARTRobot DeepLearn Car########## 3 | ######Data and Picture Coll V1.0###### 4 | #############Steven Zhang############# 5 | ##############2019.08.01############## 6 | 7 | #!/usr/bin/env python 8 | # -*- coding: utf-8 -*- 9 | 10 | import os 11 | import v4l2capture 12 | import select 13 | from ctypes import * 14 | import struct, array 15 | from fcntl import ioctl 16 | import cv2 17 | import numpy as np 18 | import time 19 | from sys import argv 20 | import multiprocessing 21 | import time 22 | import getopt 23 | 24 | path = os.path.split(os.path.realpath(__file__))[0] 25 | 26 | save_name="img" 27 | 28 | def mkdir(path): 29 | if not os.path.exists(path): 30 | os.makedirs(path) 31 | #print("----- new folder -----") 32 | #else: 33 | #print('----- there is this folder -----') 34 | 35 | 36 | 37 | def save_image_process(Camera): 38 | mkdir(path+"/data") 39 | mkdir(path+"/data/"+save_name) 40 | video = v4l2capture.Video_device(Camera) 41 | #video.set_format(424,240, fourcc='MJPG') 42 | video.set_format(160,120, fourcc='MJPG') 43 | video.create_buffers(1) 44 | video.queue_all_buffers() 45 | video.start() 46 | imgInd = -1 47 | 48 | while imgInd < 60: 49 | imgInd+=1 50 | select.select((video,), (), ()) 51 | image_data = video.read_and_queue() 52 | frame = cv2.imdecode(np.frombuffer(image_data, dtype=np.uint8), cv2.IMREAD_COLOR) 53 | 54 | cv2.imshow('video',frame) 55 | cv2.imwrite(path+"/data/"+save_name+"/{}.jpg".format(imgInd), frame) 56 | #a.value = imgInd 57 | print("imgInd=",imgInd) 58 | 59 | time.sleep(0.5) 60 | key = cv2.waitKey(1) 61 | if key & 0xFF == ord('q'): 62 | break 63 | 64 | 65 | 66 | if __name__ == '__main__': 67 | save_image_process("/dev/video0") 68 | 69 | 70 | -------------------------------------------------------------------------------- /detect/da_luan.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | def ReadFileDatas(): 4 | FileNamelist = [] 5 | file = open('train.txt','r+') 6 | for line in file: 7 | line=line.strip('\n') #删除每一行的\n 8 | FileNamelist.append(line) 9 | print('len ( FileNamelist ) = ' ,len(FileNamelist)) 10 | file.close() 11 | return FileNamelist 12 | 13 | def WriteDatasToFile(listInfo): 14 | file_handle=open('train_1.txt',mode='a') 15 | for idx in range(len(listInfo)): 16 | str = listInfo[idx] 17 | #查找最后一个 “_”的位置 18 | ndex = str.rfind('_') 19 | #print('ndex = ',ndex) 20 | #截取字符串 21 | str_houZhui = str[(ndex+1):] 22 | #print('str_houZhui = ',str_houZhui) 23 | str_Result = str + '\n' #+ str_houZhui+'\n' 24 | print(str_Result) 25 | file_handle.write(str_Result) 26 | file_handle.close() 27 | 28 | if __name__ == "__main__": 29 | listFileInfo = ReadFileDatas() 30 | #打乱列表中的顺序 31 | random.shuffle(listFileInfo) 32 | WriteDatasToFile(listFileInfo) 33 | -------------------------------------------------------------------------------- /detect/data_resize_xml.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from xml.etree.ElementTree import ElementTree,Element 3 | import xml.etree.ElementTree as ET 4 | import cv2 5 | import numpy as np 6 | 7 | 8 | m=0 9 | while m <= 550: 10 | tree = ET.parse('/home/deep/12121/data/000/{}.xml'.format(m)) 11 | #tree = ET.parse('D:\python\venv1\output.xml') 12 | root = tree.getroot() 13 | 14 | #遍历文件所有的tag 为目标的值得标签 15 | '''for elem in root.iter('xmin'): 16 | new_elem=(int(elem.text)/2+int(elem.text)%2) 17 | elem.text = str(new_elem) 18 | for elem in root.iter('ymin'): 19 | new_elem=(int(elem.text)/2+int(elem.text)%2) 20 | elem.text = str(new_elem) 21 | for elem in root.iter('xmax'): 22 | new_elem=(int(elem.text)/2+int(elem.text)%2) 23 | elem.text = str(new_elem) 24 | for elem in root.iter('ymax'): 25 | new_elem=(int(elem.text)/2+int(elem.text)%2) 26 | elem.text = str(new_elem) 27 | for elem in root.iter('width'): 28 | new_elem=800 29 | elem.text = str(new_elem) 30 | for elem in root.iter('height'): 31 | new_elem=800 32 | elem.text = str(new_elem)''' 33 | for elem in root.iter('name'): 34 | elem.text = "limit_10" 35 | for elem in root.iter('name'): 36 | print(str(elem.text)) 37 | #new_elem="limit_10" 38 | tree.write('/home/deep/12121/data/001/{}.xml'.format(m)) 39 | print(m) 40 | m +=1 41 | '''m=0 42 | while m <= 2000: 43 | img0 = np.zeros((500,500,3),dtype=np.uint8) 44 | img0[:,:]=[255,255,255] 45 | img = cv2.imread('/home/deep/桌面/new_img/{}.jpg'.format(m)) 46 | i = 0 47 | while i<420: 48 | j = 0 49 | while j<240: 50 | img0[j,i]=img[j,i] 51 | j +=1 52 | i+=1 53 | cv2.imwrite('/home/deep/桌面/image800_800/{}.jpg'.format(m),img0) 54 | print(m) 55 | m+=1 56 | ''' 57 | -------------------------------------------------------------------------------- /detect/eval_txt_xml.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ##输出“” {} 4 | from xml.etree.ElementTree import ElementTree,Element 5 | import xml.etree.ElementTree as ET 6 | import cv2 7 | import numpy as np 8 | 9 | 10 | def save_eval_txt(file_write,label,num): 11 | m=0 12 | while m <= num: 13 | if(m%10 == 0): 14 | tree = ET.parse('./{0}/xml/{1}.xml'.format(str(label),str(m))) 15 | root = tree.getroot() 16 | #遍历文件所有的tag 为目标的值得标签 17 | for elem in root.iter('xmin'): 18 | a=int(elem.text) 19 | for elem in root.iter('ymin'): 20 | b=int(elem.text) 21 | for elem in root.iter('xmax'): 22 | c=int(elem.text) 23 | for elem in root.iter('ymax'): 24 | d=int(elem.text) 25 | for elem in root.iter('name'): 26 | e=str(elem.text) 27 | 28 | file_write.write("data/{1}/jpg/{0}.jpg\t{{\"value\":\"{1}\",\"coordinate\":[[{2},{3}],[{4},{5}]]}}\n".format(str(m),e,str(a),str(b),str(c),str(d))) 29 | print("data/{1}/jpg/{0}.jpg\t{{\"value\":\"{1}\",\"coordinate\":[[{2},{3}],[{4},{5}]]}}\n".format(str(m),e,str(a),str(b),str(c),str(d))) 30 | file_write.flush() 31 | print(m) 32 | m +=1 33 | 34 | if __name__ == "__main__": 35 | file_write = open("./eval.txt","a") 36 | 37 | save_eval_txt(file_write,"forbid_left",113) 38 | save_eval_txt(file_write,'green',106) 39 | save_eval_txt(file_write,'limit_10',120) 40 | save_eval_txt(file_write,'limit_20',110) 41 | save_eval_txt(file_write,'red',130) 42 | save_eval_txt(file_write,'straight',106) 43 | save_eval_txt(file_write,'turn_left',110) 44 | save_eval_txt(file_write,'turn_right',112) 45 | 46 | -------------------------------------------------------------------------------- /detect/train_txt_xml.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ##输出“” {} 4 | from xml.etree.ElementTree import ElementTree,Element 5 | import xml.etree.ElementTree as ET 6 | import cv2 7 | import numpy as np 8 | 9 | 10 | def save_train_txt(file_write,label,num): 11 | m=0 12 | while m <= num: 13 | if(m%10 != 0): 14 | tree = ET.parse('./{0}/xml/{1}.xml'.format(str(label),str(m))) 15 | root = tree.getroot() 16 | #遍历文件所有的tag 为目标的值得标签 17 | for elem in root.iter('xmin'): 18 | a=int(elem.text) 19 | for elem in root.iter('ymin'): 20 | b=int(elem.text) 21 | for elem in root.iter('xmax'): 22 | c=int(elem.text) 23 | for elem in root.iter('ymax'): 24 | d=int(elem.text) 25 | for elem in root.iter('name'): 26 | e=str(elem.text) 27 | 28 | file_write.write("data/{1}/jpg/{0}.jpg\t{{\"value\":\"{1}\",\"coordinate\":[[{2},{3}],[{4},{5}]]}}\n".format(str(m),e,str(a),str(b),str(c),str(d))) 29 | print("data/{1}/jpg/{0}.jpg\t{{\"value\":\"{1}\",\"coordinate\":[[{2},{3}],[{4},{5}]]}}\n".format(str(m),e,str(a),str(b),str(c),str(d))) 30 | file_write.flush() 31 | print(m) 32 | m +=1 33 | def save_eval_txt(file_write,label,num): 34 | m=0 35 | while m <= num: 36 | if(m%10 == 0): 37 | tree = ET.parse('./{0}/xml/{1}.xml'.format(str(label),str(m))) 38 | root = tree.getroot() 39 | #遍历文件所有的tag 为目标的值得标签 40 | for elem in root.iter('xmin'): 41 | a=int(elem.text) 42 | for elem in root.iter('ymin'): 43 | b=int(elem.text) 44 | for elem in root.iter('xmax'): 45 | c=int(elem.text) 46 | for elem in root.iter('ymax'): 47 | d=int(elem.text) 48 | for elem in root.iter('name'): 49 | e=str(elem.text) 50 | 51 | file_write.write("data/{1}/jpg/{0}.jpg\t{{\"value\":\"{1}\",\"coordinate\":[[{2},{3}],[{4},{5}]]}}\n".format(str(m),e,str(a),str(b),str(c),str(d))) 52 | print("data/{1}/jpg/{0}.jpg\t{{\"value\":\"{1}\",\"coordinate\":[[{2},{3}],[{4},{5}]]}}\n".format(str(m),e,str(a),str(b),str(c),str(d))) 53 | file_write.flush() 54 | print(m) 55 | m +=1 56 | 57 | if __name__ == "__main__": 58 | file_write = open("./train.txt","a") 59 | 60 | save_train_txt(file_write,"forbid_left",113) 61 | save_train_txt(file_write,'green',106) 62 | save_train_txt(file_write,'limit_10',120) 63 | save_train_txt(file_write,'limit_20',110) 64 | save_train_txt(file_write,'red',130) 65 | save_train_txt(file_write,'straight',106) 66 | save_train_txt(file_write,'turn_left',110) 67 | save_train_txt(file_write,'turn_right',112) 68 | 69 | file_write = open("./eval.txt","a") 70 | save_eval_txt(file_write,"forbid_left",113) 71 | save_eval_txt(file_write,'green',106) 72 | save_eval_txt(file_write,'limit_10',120) 73 | save_eval_txt(file_write,'limit_20',110) 74 | save_eval_txt(file_write,'red',130) 75 | save_eval_txt(file_write,'straight',106) 76 | save_eval_txt(file_write,'turn_left',110) 77 | save_eval_txt(file_write,'turn_right',112) 78 | -------------------------------------------------------------------------------- /detect/txt2npy.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | """ 3 | python3 txt2npy.py data.npy 4 | 5 | """ 6 | import os 7 | from ctypes import * 8 | import struct, array 9 | from fcntl import ioctl 10 | import cv2 11 | import numpy as np 12 | import time 13 | from sys import argv 14 | 15 | #script, data_name = argv 16 | 17 | data_name ="data.npy" 18 | angledata = [] 19 | file = open("data.txt") 20 | 21 | for line in file.readlines(): 22 | line=line.strip('\n') 23 | ##注意赋值给angle 24 | 25 | angle = int(line) 26 | ##获取角度angle;逐一调用 27 | angledata.append(angle) 28 | print(angle) 29 | data = np.array(angledata) 30 | data_path = os.path.join(os.getcwd(), data_name) 31 | np.save(data_path, data) 32 | file.close() 33 | -------------------------------------------------------------------------------- /pd/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/1.jpg -------------------------------------------------------------------------------- /pd/data/change_XML_yolov3.py: -------------------------------------------------------------------------------- 1 | from xml.etree.ElementTree import ElementTree,Element 2 | import xml.etree.ElementTree as ET 3 | import os 4 | 5 | 6 | def mkdir(path): 7 | # 引入模块 8 | import os 9 | 10 | # 去除首位空格 11 | path=path.strip() 12 | # 去除尾部 \ 符号 13 | path=path.rstrip("\\") 14 | 15 | # 判断路径是否存在 16 | # 存在 True 17 | # 不存在 False 18 | isExists=os.path.exists(path) 19 | 20 | # 判断结果 21 | if not isExists: 22 | # 如果不存在则创建目录 23 | # 创建目录操作函数 24 | os.makedirs(path) 25 | 26 | print (path+' 创建成功') 27 | return True 28 | else: 29 | # 如果目录存在则不创建,并提示目录已存在 30 | print (path+' 目录已存在') 31 | return False 32 | 33 | #读取名称文件 34 | f = open("label_list") 35 | names = [] 36 | while 1: 37 | line = f.readline() 38 | if not line: 39 | break 40 | line=line.replace('\n','') 41 | names.append(line) 42 | print(names) 43 | #查找目录下的xml文件 44 | di_=os.listdir("./train/") 45 | dir_list = [] 46 | for i in range(len(di_)): 47 | if di_[i].find('xml')!=-1: 48 | tmp_str = "./train/" + di_[i] 49 | dir_list.append(tmp_str) 50 | #print(dir_list) 51 | #保存目录 52 | air_list=[] 53 | msg_list=[] 54 | for i in range(len(dir_list)): 55 | file_name=dir_list[i] 56 | x1=[] 57 | y1=[] 58 | x2=[] 59 | y2=[] 60 | tmp_name=[] 61 | try: 62 | tree = ET.parse(file_name) 63 | except IOError: 64 | exit(0) 65 | root = tree.getroot() 66 | #遍历文件所有的tag 为目标的值得标签 67 | for elem in root.iter('xmin'): 68 | x1.append(elem.text) 69 | for elem in root.iter('ymin'): 70 | y1.append(elem.text) 71 | for elem in root.iter('xmax'): 72 | x2.append(elem.text) 73 | for elem in root.iter('ymax'): 74 | y2.append(elem.text) 75 | #得到图片大小 76 | for elem in root.iter('width'): 77 | p_w=int(elem.text) 78 | for elem in root.iter('height'): 79 | p_h=int(elem.text) 80 | for elem in root.iter('name'): 81 | tmp_name.append(elem.text) 82 | # print(file_name) 83 | # print(x1,y1,x2,y2) 84 | # print(tmp_name) 85 | # print("-----------------------------") 86 | #{"value":"crossing","coordinate":[[10,80],[407,196]]} 87 | write_data ='' 88 | #目标中心 89 | for i in range(len(tmp_name)): 90 | tmp_write_data = '{' 91 | tmp_write_data = tmp_write_data + "\"value\":\"{}\",\"coordinate\":[[{},{}],[{},{}]]".format(tmp_name[i],x1[i],y1[i],x2[i],y2[i]) 92 | tmp_write_data = tmp_write_data + '}' 93 | if i==0 : 94 | write_data = write_data + tmp_write_data 95 | else : 96 | write_data = write_data + '\t' +tmp_write_data 97 | 98 | msg_list.append(write_data) 99 | print(write_data) 100 | write_name = file_name.replace('xml','jpg') 101 | air_list.append(write_name) 102 | 103 | #w_file = open(write_name,'w') 104 | #w_file.write(write_data) 105 | 106 | w_file = open("./train.txt",'w') 107 | count = 0; 108 | for i in air_list: 109 | #cwd=os.getcwd() 110 | tmp = i.replace("./train","data/train") 111 | tmp= tmp + '\t' + msg_list[count] + '\n' 112 | #i = i + "\n" 113 | print(tmp) 114 | w_file.write(tmp) 115 | count=count+1 116 | -------------------------------------------------------------------------------- /pd/data/eval.txt: -------------------------------------------------------------------------------- 1 | data/turn_left/jpg/60.jpg {"value":"turn_left","coordinate":[[36,6],[103,64]]} 2 | data/paper_red/jpg/100.jpg {"value":"paper_red","coordinate":[[76,6],[124,25]]} 3 | data/crossing/jpg/60.jpg {"value":"crossing","coordinate":[[16,10],[156,55]]} 4 | data/straight/jpg/40.jpg {"value":"straight","coordinate":[[40,5],[106,60]]} 5 | data/turn_left/jpg/50.jpg {"value":"turn_left","coordinate":[[32,16],[103,77]]} 6 | data/paper_green/jpg/20.jpg {"value":"paper_green","coordinate":[[31,10],[80,33]]} 7 | data/turn_right/jpg/90.jpg {"value":"turn_right","coordinate":[[54,17],[121,74]]} 8 | data/straight/jpg/20.jpg {"value":"straight","coordinate":[[96,7],[160,71]]} 9 | data/paper_green/jpg/120.jpg {"value":"paper_green","coordinate":[[63,32],[117,58]]} 10 | data/turn_right/jpg/80.jpg {"value":"turn_right","coordinate":[[82,7],[142,58]]} 11 | data/cancel_10/jpg/50.jpg {"value":"cancel_10","coordinate":[[32,15],[93,68]]} 12 | data/crossing/jpg/40.jpg {"value":"crossing","coordinate":[[8,15],[129,47]]} 13 | data/cancel_10/jpg/110.jpg {"value":"cancel_10","coordinate":[[47,21],[112,75]]} 14 | data/turn_right/jpg/40.jpg {"value":"turn_right","coordinate":[[1,17],[58,72]]} 15 | data/paper_red/jpg/90.jpg {"value":"paper_red","coordinate":[[102,40],[154,67]]} 16 | data/turn_right/jpg/140.jpg {"value":"turn_right","coordinate":[[24,14],[87,71]]} 17 | data/straight/jpg/60.jpg {"value":"straight","coordinate":[[15,11],[70,60]]} 18 | data/turn_right/jpg/120.jpg {"value":"turn_right","coordinate":[[24,15],[88,73]]} 19 | data/turn_left/jpg/20.jpg {"value":"turn_left","coordinate":[[55,1],[123,53]]} 20 | data/paper_red/jpg/20.jpg {"value":"paper_red","coordinate":[[36,19],[87,45]]} 21 | data/crossing/jpg/120.jpg {"value":"crossing","coordinate":[[2,16],[123,91]]} 22 | data/limit_10/jpg/140.jpg {"value":"limit_10","coordinate":[[51,4],[121,58]]} 23 | data/paper_green/jpg/140.jpg {"value":"paper_green","coordinate":[[92,21],[145,43]]} 24 | data/crossing/jpg/70.jpg {"value":"crossing","coordinate":[[26,18],[158,59]]} 25 | data/straight/jpg/140.jpg {"value":"straight","coordinate":[[54,16],[121,74]]} 26 | data/crossing/jpg/130.jpg {"value":"crossing","coordinate":[[16,25],[144,77]]} 27 | data/turn_right/jpg/70.jpg {"value":"turn_right","coordinate":[[88,16],[150,73]]} 28 | data/paper_green/jpg/90.jpg {"value":"paper_green","coordinate":[[90,16],[141,42]]} 29 | data/paper_red/jpg/40.jpg {"value":"paper_red","coordinate":[[75,9],[124,32]]} 30 | data/crossing/jpg/20.jpg {"value":"crossing","coordinate":[[15,30],[149,67]]} 31 | data/limit_10/jpg/50.jpg {"value":"limit_10","coordinate":[[42,10],[111,72]]} 32 | data/paper_green/jpg/100.jpg {"value":"paper_green","coordinate":[[81,24],[134,49]]} 33 | data/straight/jpg/90.jpg {"value":"straight","coordinate":[[80,19],[148,77]]} 34 | data/crossing/jpg/10.jpg {"value":"crossing","coordinate":[[22,20],[148,65]]} 35 | data/limit_10/jpg/100.jpg {"value":"limit_10","coordinate":[[35,1],[97,48]]} 36 | data/turn_left/jpg/80.jpg {"value":"turn_left","coordinate":[[45,9],[113,66]]} 37 | data/straight/jpg/80.jpg {"value":"straight","coordinate":[[78,3],[139,51]]} 38 | data/cancel_10/jpg/0.jpg {"value":"cancel_10","coordinate":[[22,16],[92,76]]} 39 | data/turn_right/jpg/60.jpg {"value":"turn_right","coordinate":[[37,4],[112,70]]} 40 | data/paper_green/jpg/40.jpg {"value":"paper_green","coordinate":[[91,4],[138,26]]} 41 | data/limit_10/jpg/10.jpg {"value":"limit_10","coordinate":[[99,10],[160,72]]} 42 | data/straight/jpg/120.jpg {"value":"straight","coordinate":[[62,10],[127,65]]} 43 | data/paper_red/jpg/140.jpg {"value":"paper_red","coordinate":[[102,35],[151,62]]} 44 | data/crossing/jpg/100.jpg {"value":"crossing","coordinate":[[24,34],[155,72]]} 45 | data/limit_10/jpg/60.jpg {"value":"limit_10","coordinate":[[39,11],[112,76]]} 46 | data/limit_10/jpg/90.jpg {"value":"limit_10","coordinate":[[68,10],[137,66]]} 47 | data/turn_right/jpg/10.jpg {"value":"turn_right","coordinate":[[72,9],[144,74]]} 48 | data/limit_10/jpg/0.jpg {"value":"limit_10","coordinate":[[37,6],[113,74]]} 49 | data/paper_red/jpg/10.jpg {"value":"paper_red","coordinate":[[4,22],[53,45]]} 50 | data/paper_green/jpg/10.jpg {"value":"paper_green","coordinate":[[37,21],[96,50]]} 51 | data/paper_green/jpg/130.jpg {"value":"paper_green","coordinate":[[93,17],[143,39]]} 52 | data/limit_10/jpg/110.jpg {"value":"limit_10","coordinate":[[21,9],[89,64]]} 53 | data/cancel_10/jpg/40.jpg {"value":"cancel_10","coordinate":[[45,12],[111,69]]} 54 | data/limit_10/jpg/80.jpg {"value":"limit_10","coordinate":[[77,1],[141,48]]} 55 | data/paper_green/jpg/110.jpg {"value":"paper_green","coordinate":[[53,11],[102,36]]} 56 | data/cancel_10/jpg/100.jpg {"value":"cancel_10","coordinate":[[30,3],[86,47]]} 57 | data/cancel_10/jpg/130.jpg {"value":"cancel_10","coordinate":[[42,15],[104,68]]} 58 | data/crossing/jpg/50.jpg {"value":"crossing","coordinate":[[23,26],[152,78]]} 59 | data/cancel_10/jpg/60.jpg {"value":"cancel_10","coordinate":[[39,5],[98,51]]} 60 | data/crossing/jpg/0.jpg {"value":"crossing","coordinate":[[19,34],[152,70]]} 61 | data/limit_10/jpg/130.jpg {"value":"limit_10","coordinate":[[53,13],[123,73]]} 62 | data/limit_10/jpg/30.jpg {"value":"limit_10","coordinate":[[6,1],[58,49]]} 63 | data/straight/jpg/30.jpg {"value":"straight","coordinate":[[48,1],[115,46]]} 64 | data/crossing/jpg/110.jpg {"value":"crossing","coordinate":[[11,17],[138,64]]} 65 | data/straight/jpg/110.jpg {"value":"straight","coordinate":[[38,2],[99,49]]} 66 | data/turn_right/jpg/30.jpg {"value":"turn_right","coordinate":[[12,2],[63,45]]} 67 | data/paper_red/jpg/50.jpg {"value":"paper_red","coordinate":[[71,29],[128,59]]} 68 | data/limit_10/jpg/40.jpg {"value":"limit_10","coordinate":[[5,19],[64,77]]} 69 | data/paper_red/jpg/130.jpg {"value":"paper_red","coordinate":[[99,18],[147,40]]} 70 | data/limit_10/jpg/70.jpg {"value":"limit_10","coordinate":[[46,21],[119,75]]} 71 | data/turn_left/jpg/10.jpg {"value":"turn_left","coordinate":[[94,12],[159,77]]} 72 | data/turn_left/jpg/110.jpg {"value":"turn_left","coordinate":[[61,16],[132,75]]} 73 | data/straight/jpg/130.jpg {"value":"straight","coordinate":[[49,16],[118,73]]} 74 | data/paper_green/jpg/80.jpg {"value":"paper_green","coordinate":[[75,7],[122,30]]} 75 | data/crossing/jpg/90.jpg {"value":"crossing","coordinate":[[21,23],[138,62]]} 76 | data/turn_left/jpg/40.jpg {"value":"turn_left","coordinate":[[3,21],[63,79]]} 77 | data/turn_left/jpg/90.jpg {"value":"turn_left","coordinate":[[64,2],[125,41]]} 78 | data/paper_red/jpg/80.jpg {"value":"paper_red","coordinate":[[109,11],[155,33]]} 79 | data/straight/jpg/50.jpg {"value":"straight","coordinate":[[58,6],[125,64]]} 80 | data/turn_right/jpg/110.jpg {"value":"turn_right","coordinate":[[29,15],[93,73]]} 81 | data/paper_red/jpg/70.jpg {"value":"paper_red","coordinate":[[91,17],[140,41]]} 82 | data/paper_green/jpg/30.jpg {"value":"paper_green","coordinate":[[34,27],[91,57]]} 83 | data/paper_green/jpg/60.jpg {"value":"paper_green","coordinate":[[27,28],[80,57]]} 84 | data/straight/jpg/10.jpg {"value":"straight","coordinate":[[18,11],[86,72]]} 85 | data/paper_green/jpg/50.jpg {"value":"paper_green","coordinate":[[24,36],[75,61]]} 86 | data/cancel_10/jpg/20.jpg {"value":"cancel_10","coordinate":[[40,3],[99,54]]} 87 | data/cancel_10/jpg/90.jpg {"value":"cancel_10","coordinate":[[2,9],[48,54]]} 88 | data/crossing/jpg/30.jpg {"value":"crossing","coordinate":[[25,20],[152,60]]} 89 | data/turn_right/jpg/130.jpg {"value":"turn_right","coordinate":[[96,11],[156,65]]} 90 | data/limit_10/jpg/20.jpg {"value":"limit_10","coordinate":[[46,1],[112,49]]} 91 | data/turn_right/jpg/50.jpg {"value":"turn_right","coordinate":[[28,11],[97,72]]} 92 | data/turn_left/jpg/130.jpg {"value":"turn_left","coordinate":[[35,1],[94,43]]} 93 | data/turn_left/jpg/100.jpg {"value":"turn_left","coordinate":[[66,6],[131,59]]} 94 | data/turn_left/jpg/70.jpg {"value":"turn_left","coordinate":[[25,4],[87,54]]} 95 | data/cancel_10/jpg/140.jpg {"value":"cancel_10","coordinate":[[64,19],[127,74]]} 96 | data/turn_left/jpg/120.jpg {"value":"turn_left","coordinate":[[77,13],[146,73]]} 97 | data/turn_left/jpg/0.jpg {"value":"turn_left","coordinate":[[24,12],[101,77]]} 98 | data/turn_right/jpg/100.jpg {"value":"turn_right","coordinate":[[49,6],[112,57]]} 99 | data/cancel_10/jpg/70.jpg {"value":"cancel_10","coordinate":[[68,26],[134,75]]} 100 | data/paper_red/jpg/120.jpg {"value":"paper_red","coordinate":[[83,19],[135,44]]} 101 | data/paper_red/jpg/110.jpg {"value":"paper_red","coordinate":[[86,25],[138,55]]} 102 | data/turn_left/jpg/30.jpg {"value":"turn_left","coordinate":[[6,1],[57,44]]} 103 | data/paper_red/jpg/30.jpg {"value":"paper_red","coordinate":[[42,32],[100,60]]} 104 | data/cancel_10/jpg/120.jpg {"value":"cancel_10","coordinate":[[41,2],[101,47]]} 105 | data/crossing/jpg/80.jpg {"value":"crossing","coordinate":[[24,21],[154,78]]} 106 | data/straight/jpg/0.jpg {"value":"straight","coordinate":[[42,12],[115,71]]} 107 | data/crossing/jpg/140.jpg {"value":"crossing","coordinate":[[3,29],[130,74]]} 108 | data/cancel_10/jpg/80.jpg {"value":"cancel_10","coordinate":[[21,7],[79,54]]} 109 | data/limit_10/jpg/120.jpg {"value":"limit_10","coordinate":[[101,23],[160,84]]} 110 | data/turn_right/jpg/0.jpg {"value":"turn_right","coordinate":[[24,13],[97,79]]} 111 | data/paper_red/jpg/60.jpg {"value":"paper_red","coordinate":[[40,29],[96,59]]} 112 | data/cancel_10/jpg/10.jpg {"value":"cancel_10","coordinate":[[3,9],[58,63]]} 113 | data/turn_right/jpg/20.jpg {"value":"turn_right","coordinate":[[61,1],[131,58]]} 114 | data/straight/jpg/100.jpg {"value":"straight","coordinate":[[13,11],[73,62]]} 115 | data/cancel_10/jpg/30.jpg {"value":"cancel_10","coordinate":[[93,3],[151,55]]} 116 | data/paper_green/jpg/0.jpg {"value":"paper_green","coordinate":[[19,34],[75,64]]} 117 | data/paper_red/jpg/0.jpg {"value":"paper_red","coordinate":[[33,25],[86,53]]} 118 | data/straight/jpg/70.jpg {"value":"straight","coordinate":[[66,8],[130,58]]} 119 | data/paper_green/jpg/70.jpg {"value":"paper_green","coordinate":[[87,38],[143,67]]} 120 | -------------------------------------------------------------------------------- /pd/data/label_list: -------------------------------------------------------------------------------- 1 | cancel_10 2 | crossing 3 | limit_10 4 | straight 5 | turn_left 6 | turn_right 7 | paper_red 8 | paper_green 9 | -------------------------------------------------------------------------------- /pd/data/label_list.txt: -------------------------------------------------------------------------------- 1 | 0 cancel_10 2 | 1 crossing 3 | 2 limit_10 4 | 3 straight 5 | 4 turn_left 6 | 5 turn_right 7 | 6 paper_red 8 | 7 paper_green 9 | -------------------------------------------------------------------------------- /pd/data/train.txt: -------------------------------------------------------------------------------- 1 | data/crossing/jpg/36.jpg {"value":"crossing","coordinate":[[35,11],[157,69]]} 2 | data/crossing/jpg/43.jpg {"value":"crossing","coordinate":[[1,15],[106,75]]} 3 | data/turn_left/jpg/75.jpg {"value":"turn_left","coordinate":[[29,13],[96,71]]} 4 | data/limit_10/jpg/107.jpg {"value":"limit_10","coordinate":[[29,22],[100,77]]} 5 | data/turn_left/jpg/68.jpg {"value":"turn_left","coordinate":[[36,4],[99,54]]} 6 | data/limit_10/jpg/67.jpg {"value":"limit_10","coordinate":[[47,7],[115,62]]} 7 | data/paper_red/jpg/81.jpg {"value":"paper_red","coordinate":[[105,11],[150,33]]} 8 | data/cancel_10/jpg/123.jpg {"value":"cancel_10","coordinate":[[7,14],[61,64]]} 9 | data/crossing/jpg/134.jpg {"value":"crossing","coordinate":[[8,32],[137,69]]} 10 | data/paper_red/jpg/95.jpg {"value":"paper_red","coordinate":[[79,24],[131,50]]} 11 | data/turn_left/jpg/127.jpg {"value":"turn_left","coordinate":[[34,5],[97,54]]} 12 | data/straight/jpg/63.jpg {"value":"straight","coordinate":[[45,14],[114,68]]} 13 | data/cancel_10/jpg/93.jpg {"value":"cancel_10","coordinate":[[3,10],[53,57]]} 14 | data/paper_green/jpg/97.jpg {"value":"paper_green","coordinate":[[102,36],[154,64]]} 15 | data/cancel_10/jpg/61.jpg {"value":"cancel_10","coordinate":[[53,4],[113,49]]} 16 | data/turn_left/jpg/19.jpg {"value":"turn_left","coordinate":[[62,2],[130,54]]} 17 | data/paper_red/jpg/58.jpg {"value":"paper_red","coordinate":[[39,24],[96,56]]} 18 | data/paper_green/jpg/83.jpg {"value":"paper_green","coordinate":[[114,11],[160,32]]} 19 | data/straight/jpg/56.jpg {"value":"straight","coordinate":[[42,6],[113,58]]} 20 | data/turn_left/jpg/31.jpg {"value":"turn_left","coordinate":[[5,3],[55,47]]} 21 | data/limit_10/jpg/75.jpg {"value":"limit_10","coordinate":[[65,15],[140,75]]} 22 | data/crossing/jpg/91.jpg {"value":"crossing","coordinate":[[25,26],[145,60]]} 23 | data/cancel_10/jpg/115.jpg {"value":"cancel_10","coordinate":[[57,12],[121,64]]} 24 | data/turn_right/jpg/73.jpg {"value":"turn_right","coordinate":[[79,15],[146,72]]} 25 | data/cancel_10/jpg/102.jpg {"value":"cancel_10","coordinate":[[25,4],[77,49]]} 26 | data/turn_right/jpg/136.jpg {"value":"turn_right","coordinate":[[35,19],[101,77]]} 27 | data/limit_10/jpg/56.jpg {"value":"limit_10","coordinate":[[42,11],[109,72]]} 28 | data/crossing/jpg/51.jpg {"value":"crossing","coordinate":[[24,26],[152,80]]} 29 | data/limit_10/jpg/62.jpg {"value":"limit_10","coordinate":[[51,1],[114,40]]} 30 | data/turn_left/jpg/77.jpg {"value":"turn_left","coordinate":[[24,19],[92,79]]} 31 | data/straight/jpg/106.jpg {"value":"straight","coordinate":[[21,4],[81,52]]} 32 | data/straight/jpg/127.jpg {"value":"straight","coordinate":[[49,11],[115,66]]} 33 | data/straight/jpg/32.jpg {"value":"straight","coordinate":[[37,1],[99,43]]} 34 | data/cancel_10/jpg/136.jpg {"value":"cancel_10","coordinate":[[58,25],[124,76]]} 35 | data/paper_green/jpg/9.jpg {"value":"paper_green","coordinate":[[35,21],[94,49]]} 36 | data/limit_10/jpg/135.jpg {"value":"limit_10","coordinate":[[52,4],[120,57]]} 37 | data/paper_green/jpg/39.jpg {"value":"paper_green","coordinate":[[94,6],[143,32]]} 38 | data/cancel_10/jpg/105.jpg {"value":"cancel_10","coordinate":[[31,5],[84,48]]} 39 | data/paper_green/jpg/18.jpg {"value":"paper_green","coordinate":[[53,3],[105,26]]} 40 | data/turn_right/jpg/16.jpg {"value":"turn_right","coordinate":[[82,1],[152,63]]} 41 | data/paper_green/jpg/91.jpg {"value":"paper_green","coordinate":[[88,21],[141,49]]} 42 | data/crossing/jpg/132.jpg {"value":"crossing","coordinate":[[18,26],[144,74]]} 43 | data/cancel_10/jpg/54.jpg {"value":"cancel_10","coordinate":[[39,13],[100,68]]} 44 | data/cancel_10/jpg/94.jpg {"value":"cancel_10","coordinate":[[14,9],[69,57]]} 45 | data/paper_red/jpg/132.jpg {"value":"paper_red","coordinate":[[96,21],[144,45]]} 46 | data/paper_red/jpg/69.jpg {"value":"paper_red","coordinate":[[92,19],[142,44]]} 47 | data/turn_left/jpg/32.jpg {"value":"turn_left","coordinate":[[4,6],[55,52]]} 48 | data/turn_left/jpg/7.jpg {"value":"turn_left","coordinate":[[30,9],[103,74]]} 49 | data/limit_10/jpg/85.jpg {"value":"limit_10","coordinate":[[72,1],[140,37]]} 50 | data/paper_green/jpg/62.jpg {"value":"paper_green","coordinate":[[87,28],[142,56]]} 51 | data/turn_left/jpg/122.jpg {"value":"turn_left","coordinate":[[60,15],[130,74]]} 52 | data/limit_10/jpg/125.jpg {"value":"limit_10","coordinate":[[85,3],[149,55]]} 53 | data/turn_right/jpg/92.jpg {"value":"turn_right","coordinate":[[48,18],[115,78]]} 54 | data/turn_left/jpg/59.jpg {"value":"turn_left","coordinate":[[39,8],[106,67]]} 55 | data/straight/jpg/95.jpg {"value":"straight","coordinate":[[54,14],[121,69]]} 56 | data/straight/jpg/98.jpg {"value":"straight","coordinate":[[22,11],[85,64]]} 57 | data/straight/jpg/44.jpg {"value":"straight","coordinate":[[58,3],[123,59]]} 58 | data/turn_right/jpg/114.jpg {"value":"turn_right","coordinate":[[29,19],[98,79]]} 59 | data/turn_left/jpg/27.jpg {"value":"turn_left","coordinate":[[12,1],[66,45]]} 60 | data/paper_green/jpg/67.jpg {"value":"paper_green","coordinate":[[94,52],[151,79]]} 61 | data/cancel_10/jpg/34.jpg {"value":"cancel_10","coordinate":[[73,10],[135,65]]} 62 | data/paper_green/jpg/118.jpg {"value":"paper_green","coordinate":[[63,35],[116,61]]} 63 | data/turn_left/jpg/88.jpg {"value":"turn_left","coordinate":[[85,12],[148,69]]} 64 | data/cancel_10/jpg/5.jpg {"value":"cancel_10","coordinate":[[10,13],[71,70]]} 65 | data/turn_left/jpg/111.jpg {"value":"turn_left","coordinate":[[58,18],[124,75]]} 66 | data/turn_left/jpg/133.jpg {"value":"turn_left","coordinate":[[41,3],[107,54]]} 67 | data/straight/jpg/126.jpg {"value":"straight","coordinate":[[49,10],[116,70]]} 68 | data/turn_left/jpg/106.jpg {"value":"turn_left","coordinate":[[73,5],[136,58]]} 69 | data/paper_green/jpg/87.jpg {"value":"paper_green","coordinate":[[115,16],[160,37]]} 70 | data/crossing/jpg/94.jpg {"value":"crossing","coordinate":[[25,23],[151,63]]} 71 | data/turn_left/jpg/18.jpg {"value":"turn_left","coordinate":[[68,2],[136,53]]} 72 | data/straight/jpg/14.jpg {"value":"straight","coordinate":[[59,3],[136,69]]} 73 | data/cancel_10/jpg/111.jpg {"value":"cancel_10","coordinate":[[53,25],[116,76]]} 74 | data/turn_right/jpg/17.jpg {"value":"turn_right","coordinate":[[81,1],[150,58]]} 75 | data/crossing/jpg/47.jpg {"value":"crossing","coordinate":[[25,21],[151,70]]} 76 | data/straight/jpg/89.jpg {"value":"straight","coordinate":[[77,16],[143,72]]} 77 | data/limit_10/jpg/17.jpg {"value":"limit_10","coordinate":[[38,11],[109,71]]} 78 | data/paper_red/jpg/53.jpg {"value":"paper_red","coordinate":[[64,36],[122,69]]} 79 | data/turn_left/jpg/105.jpg {"value":"turn_left","coordinate":[[72,3],[135,52]]} 80 | data/crossing/jpg/49.jpg {"value":"crossing","coordinate":[[24,22],[150,72]]} 81 | data/straight/jpg/49.jpg {"value":"straight","coordinate":[[55,6],[122,63]]} 82 | data/paper_red/jpg/86.jpg {"value":"paper_red","coordinate":[[93,23],[142,54]]} 83 | data/paper_red/jpg/52.jpg {"value":"paper_red","coordinate":[[63,35],[124,67]]} 84 | data/turn_left/jpg/85.jpg {"value":"turn_left","coordinate":[[59,1],[118,42]]} 85 | data/limit_10/jpg/121.jpg {"value":"limit_10","coordinate":[[103,24],[160,88]]} 86 | data/paper_red/jpg/39.jpg {"value":"paper_red","coordinate":[[70,4],[119,25]]} 87 | data/straight/jpg/81.jpg {"value":"straight","coordinate":[[77,2],[136,49]]} 88 | data/straight/jpg/47.jpg {"value":"straight","coordinate":[[54,3],[121,59]]} 89 | data/crossing/jpg/44.jpg {"value":"crossing","coordinate":[[1,17],[107,78]]} 90 | data/straight/jpg/84.jpg {"value":"straight","coordinate":[[73,1],[134,46]]} 91 | data/straight/jpg/137.jpg {"value":"straight","coordinate":[[31,16],[96,73]]} 92 | data/paper_green/jpg/84.jpg {"value":"paper_green","coordinate":[[120,12],[160,33]]} 93 | data/cancel_10/jpg/47.jpg {"value":"cancel_10","coordinate":[[31,12],[93,64]]} 94 | data/cancel_10/jpg/126.jpg {"value":"cancel_10","coordinate":[[19,14],[75,65]]} 95 | data/cancel_10/jpg/114.jpg {"value":"cancel_10","coordinate":[[61,15],[123,68]]} 96 | data/paper_red/jpg/61.jpg {"value":"paper_red","coordinate":[[93,44],[148,73]]} 97 | data/paper_red/jpg/2.jpg {"value":"paper_red","coordinate":[[32,23],[86,54]]} 98 | data/crossing/jpg/106.jpg {"value":"crossing","coordinate":[[10,26],[136,60]]} 99 | data/straight/jpg/29.jpg {"value":"straight","coordinate":[[52,1],[119,46]]} 100 | data/crossing/jpg/79.jpg {"value":"crossing","coordinate":[[24,22],[157,80]]} 101 | data/crossing/jpg/59.jpg {"value":"crossing","coordinate":[[22,15],[158,57]]} 102 | data/cancel_10/jpg/52.jpg {"value":"cancel_10","coordinate":[[30,11],[86,61]]} 103 | data/crossing/jpg/66.jpg {"value":"crossing","coordinate":[[7,36],[148,82]]} 104 | data/crossing/jpg/41.jpg {"value":"crossing","coordinate":[[5,15],[123,51]]} 105 | data/crossing/jpg/104.jpg {"value":"crossing","coordinate":[[18,28],[145,62]]} 106 | data/straight/jpg/15.jpg {"value":"straight","coordinate":[[68,6],[142,69]]} 107 | data/cancel_10/jpg/41.jpg {"value":"cancel_10","coordinate":[[42,11],[107,66]]} 108 | data/paper_green/jpg/65.jpg {"value":"paper_green","coordinate":[[91,40],[144,67]]} 109 | data/cancel_10/jpg/79.jpg {"value":"cancel_10","coordinate":[[25,6],[81,54]]} 110 | data/paper_green/jpg/129.jpg {"value":"paper_green","coordinate":[[95,19],[145,43]]} 111 | data/cancel_10/jpg/117.jpg {"value":"cancel_10","coordinate":[[49,9],[110,56]]} 112 | data/limit_10/jpg/86.jpg {"value":"limit_10","coordinate":[[73,1],[136,41]]} 113 | data/paper_green/jpg/57.jpg {"value":"paper_green","coordinate":[[26,23],[77,53]]} 114 | data/turn_right/jpg/93.jpg {"value":"turn_right","coordinate":[[45,21],[113,76]]} 115 | data/paper_green/jpg/2.jpg {"value":"paper_green","coordinate":[[19,33],[78,63]]} 116 | data/limit_10/jpg/133.jpg {"value":"limit_10","coordinate":[[47,16],[123,73]]} 117 | data/limit_10/jpg/8.jpg {"value":"limit_10","coordinate":[[89,9],[157,73]]} 118 | data/paper_red/jpg/136.jpg {"value":"paper_red","coordinate":[[94,30],[146,58]]} 119 | data/paper_green/jpg/45.jpg {"value":"paper_green","coordinate":[[58,21],[107,46]]} 120 | data/limit_10/jpg/111.jpg {"value":"limit_10","coordinate":[[21,7],[88,63]]} 121 | data/crossing/jpg/89.jpg {"value":"crossing","coordinate":[[10,21],[123,69]]} 122 | data/straight/jpg/9.jpg {"value":"straight","coordinate":[[7,13],[76,76]]} 123 | data/turn_right/jpg/37.jpg {"value":"turn_right","coordinate":[[1,10],[56,60]]} 124 | data/limit_10/jpg/94.jpg {"value":"limit_10","coordinate":[[30,6],[97,64]]} 125 | data/straight/jpg/94.jpg {"value":"straight","coordinate":[[71,17],[136,73]]} 126 | data/straight/jpg/92.jpg {"value":"straight","coordinate":[[82,20],[145,78]]} 127 | data/turn_right/jpg/111.jpg {"value":"turn_right","coordinate":[[27,19],[92,77]]} 128 | data/turn_right/jpg/88.jpg {"value":"turn_right","coordinate":[[54,11],[123,70]]} 129 | data/crossing/jpg/65.jpg {"value":"crossing","coordinate":[[1,41],[142,86]]} 130 | data/paper_green/jpg/131.jpg {"value":"paper_green","coordinate":[[93,14],[142,37]]} 131 | data/cancel_10/jpg/75.jpg {"value":"cancel_10","coordinate":[[33,11],[94,61]]} 132 | data/paper_red/jpg/54.jpg {"value":"paper_red","coordinate":[[56,34],[117,65]]} 133 | data/limit_10/jpg/131.jpg {"value":"limit_10","coordinate":[[53,17],[125,75]]} 134 | data/crossing/jpg/81.jpg {"value":"crossing","coordinate":[[21,19],[149,72]]} 135 | data/turn_left/jpg/9.jpg {"value":"turn_left","coordinate":[[30,10],[104,75]]} 136 | data/turn_left/jpg/89.jpg {"value":"turn_left","coordinate":[[62,1],[123,33]]} 137 | data/paper_green/jpg/123.jpg {"value":"paper_green","coordinate":[[84,35],[137,61]]} 138 | data/turn_right/jpg/139.jpg {"value":"turn_right","coordinate":[[31,14],[96,72]]} 139 | data/paper_red/jpg/27.jpg {"value":"paper_red","coordinate":[[28,40],[86,66]]} 140 | data/limit_10/jpg/9.jpg {"value":"limit_10","coordinate":[[95,11],[160,77]]} 141 | data/limit_10/jpg/12.jpg {"value":"limit_10","coordinate":[[90,1],[158,61]]} 142 | data/paper_red/jpg/35.jpg {"value":"paper_red","coordinate":[[71,19],[124,46]]} 143 | data/crossing/jpg/125.jpg {"value":"crossing","coordinate":[[27,30],[157,69]]} 144 | data/cancel_10/jpg/119.jpg {"value":"cancel_10","coordinate":[[43,3],[102,50]]} 145 | data/turn_right/jpg/15.jpg {"value":"turn_right","coordinate":[[84,3],[153,69]]} 146 | data/cancel_10/jpg/29.jpg {"value":"cancel_10","coordinate":[[89,3],[148,56]]} 147 | data/turn_left/jpg/51.jpg {"value":"turn_left","coordinate":[[33,15],[103,76]]} 148 | data/paper_red/jpg/117.jpg {"value":"paper_red","coordinate":[[73,17],[123,39]]} 149 | data/cancel_10/jpg/48.jpg {"value":"cancel_10","coordinate":[[31,13],[92,65]]} 150 | data/paper_green/jpg/76.jpg {"value":"paper_green","coordinate":[[73,6],[121,29]]} 151 | data/cancel_10/jpg/7.jpg {"value":"cancel_10","coordinate":[[1,15],[47,69]]} 152 | data/turn_right/jpg/127.jpg {"value":"turn_right","coordinate":[[101,5],[159,58]]} 153 | data/paper_green/jpg/15.jpg {"value":"paper_green","coordinate":[[60,10],[117,35]]} 154 | data/paper_red/jpg/62.jpg {"value":"paper_red","coordinate":[[96,44],[148,73]]} 155 | data/paper_green/jpg/113.jpg {"value":"paper_green","coordinate":[[47,27],[100,57]]} 156 | data/turn_left/jpg/4.jpg {"value":"turn_left","coordinate":[[34,9],[111,74]]} 157 | data/limit_10/jpg/102.jpg {"value":"limit_10","coordinate":[[34,9],[100,64]]} 158 | data/paper_green/jpg/88.jpg {"value":"paper_green","coordinate":[[106,11],[154,36]]} 159 | data/paper_green/jpg/23.jpg {"value":"paper_green","coordinate":[[2,26],[46,49]]} 160 | data/paper_green/jpg/132.jpg {"value":"paper_green","coordinate":[[93,14],[143,37]]} 161 | data/limit_10/jpg/41.jpg {"value":"limit_10","coordinate":[[7,19],[69,76]]} 162 | data/cancel_10/jpg/35.jpg {"value":"cancel_10","coordinate":[[66,12],[131,68]]} 163 | data/straight/jpg/139.jpg {"value":"straight","coordinate":[[47,15],[115,72]]} 164 | data/straight/jpg/65.jpg {"value":"straight","coordinate":[[49,14],[121,70]]} 165 | data/limit_10/jpg/11.jpg {"value":"limit_10","coordinate":[[93,5],[160,64]]} 166 | data/turn_left/jpg/103.jpg {"value":"turn_left","coordinate":[[68,1],[129,41]]} 167 | data/paper_green/jpg/85.jpg {"value":"paper_green","coordinate":[[120,11],[160,33]]} 168 | data/limit_10/jpg/119.jpg {"value":"limit_10","coordinate":[[88,17],[157,79]]} 169 | data/paper_green/jpg/115.jpg {"value":"paper_green","coordinate":[[55,32],[108,61]]} 170 | data/straight/jpg/43.jpg {"value":"straight","coordinate":[[57,4],[122,56]]} 171 | data/paper_green/jpg/96.jpg {"value":"paper_green","coordinate":[[102,41],[159,69]]} 172 | data/turn_right/jpg/134.jpg {"value":"turn_right","coordinate":[[39,12],[101,67]]} 173 | data/cancel_10/jpg/99.jpg {"value":"cancel_10","coordinate":[[28,3],[83,48]]} 174 | data/crossing/jpg/46.jpg {"value":"crossing","coordinate":[[23,20],[149,68]]} 175 | data/turn_right/jpg/119.jpg {"value":"turn_right","coordinate":[[31,12],[96,69]]} 176 | data/turn_right/jpg/44.jpg {"value":"turn_right","coordinate":[[1,25],[59,85]]} 177 | data/crossing/jpg/28.jpg {"value":"crossing","coordinate":[[24,12],[145,44]]} 178 | data/paper_red/jpg/138.jpg {"value":"paper_red","coordinate":[[97,32],[148,59]]} 179 | data/turn_right/jpg/67.jpg {"value":"turn_right","coordinate":[[95,19],[156,74]]} 180 | data/paper_red/jpg/105.jpg {"value":"paper_red","coordinate":[[56,27],[110,58]]} 181 | data/turn_right/jpg/137.jpg {"value":"turn_right","coordinate":[[36,18],[101,78]]} 182 | data/straight/jpg/53.jpg {"value":"straight","coordinate":[[75,10],[143,67]]} 183 | data/crossing/jpg/117.jpg {"value":"crossing","coordinate":[[1,15],[116,97]]} 184 | data/paper_green/jpg/81.jpg {"value":"paper_green","coordinate":[[90,8],[136,29]]} 185 | data/cancel_10/jpg/87.jpg {"value":"cancel_10","coordinate":[[7,6],[58,50]]} 186 | data/turn_right/jpg/23.jpg {"value":"turn_right","coordinate":[[42,1],[109,50]]} 187 | data/turn_right/jpg/104.jpg {"value":"turn_right","coordinate":[[54,2],[117,50]]} 188 | data/cancel_10/jpg/139.jpg {"value":"cancel_10","coordinate":[[58,21],[122,75]]} 189 | data/limit_10/jpg/63.jpg {"value":"limit_10","coordinate":[[50,1],[116,41]]} 190 | data/straight/jpg/51.jpg {"value":"straight","coordinate":[[62,6],[130,63]]} 191 | data/paper_green/jpg/51.jpg {"value":"paper_green","coordinate":[[28,33],[77,58]]} 192 | data/turn_right/jpg/78.jpg {"value":"turn_right","coordinate":[[82,7],[144,60]]} 193 | data/cancel_10/jpg/113.jpg {"value":"cancel_10","coordinate":[[64,19],[127,73]]} 194 | data/turn_right/jpg/84.jpg {"value":"turn_right","coordinate":[[57,4],[120,55]]} 195 | data/paper_red/jpg/111.jpg {"value":"paper_red","coordinate":[[87,24],[139,54]]} 196 | data/straight/jpg/33.jpg {"value":"straight","coordinate":[[34,1],[98,45]]} 197 | data/straight/jpg/118.jpg {"value":"straight","coordinate":[[43,15],[109,69]]} 198 | data/limit_10/jpg/2.jpg {"value":"limit_10","coordinate":[[41,11],[114,75]]} 199 | data/paper_green/jpg/4.jpg {"value":"paper_green","coordinate":[[22,30],[83,62]]} 200 | data/cancel_10/jpg/8.jpg {"value":"cancel_10","coordinate":[[1,16],[46,69]]} 201 | data/turn_right/jpg/83.jpg {"value":"turn_right","coordinate":[[66,5],[129,60]]} 202 | data/straight/jpg/67.jpg {"value":"straight","coordinate":[[68,13],[132,67]]} 203 | data/crossing/jpg/18.jpg {"value":"crossing","coordinate":[[28,29],[160,75]]} 204 | data/crossing/jpg/72.jpg {"value":"crossing","coordinate":[[27,14],[158,54]]} 205 | data/limit_10/jpg/136.jpg {"value":"limit_10","coordinate":[[52,4],[121,58]]} 206 | data/cancel_10/jpg/88.jpg {"value":"cancel_10","coordinate":[[4,7],[54,52]]} 207 | data/paper_green/jpg/82.jpg {"value":"paper_green","coordinate":[[102,9],[149,32]]} 208 | data/crossing/jpg/26.jpg {"value":"crossing","coordinate":[[20,12],[139,41]]} 209 | data/turn_left/jpg/91.jpg {"value":"turn_left","coordinate":[[64,1],[126,45]]} 210 | data/paper_red/jpg/41.jpg {"value":"paper_red","coordinate":[[83,12],[131,39]]} 211 | data/paper_green/jpg/28.jpg {"value":"paper_green","coordinate":[[15,39],[66,69]]} 212 | data/limit_10/jpg/27.jpg {"value":"limit_10","coordinate":[[19,1],[78,51]]} 213 | data/crossing/jpg/31.jpg {"value":"crossing","coordinate":[[30,21],[156,66]]} 214 | data/turn_left/jpg/55.jpg {"value":"turn_left","coordinate":[[39,12],[111,74]]} 215 | data/straight/jpg/99.jpg {"value":"straight","coordinate":[[18,10],[79,64]]} 216 | data/paper_green/jpg/78.jpg {"value":"paper_green","coordinate":[[74,6],[124,31]]} 217 | data/cancel_10/jpg/3.jpg {"value":"cancel_10","coordinate":[[28,16],[95,74]]} 218 | data/paper_green/jpg/6.jpg {"value":"paper_green","coordinate":[[34,24],[92,59]]} 219 | data/turn_right/jpg/54.jpg {"value":"turn_right","coordinate":[[42,8],[115,73]]} 220 | data/paper_green/jpg/136.jpg {"value":"paper_green","coordinate":[[92,13],[140,36]]} 221 | data/turn_right/jpg/122.jpg {"value":"turn_right","coordinate":[[13,17],[76,74]]} 222 | data/turn_right/jpg/62.jpg {"value":"turn_right","coordinate":[[107,12],[160,66]]} 223 | data/limit_10/jpg/118.jpg {"value":"limit_10","coordinate":[[70,12],[141,73]]} 224 | data/turn_right/jpg/133.jpg {"value":"turn_right","coordinate":[[39,8],[102,62]]} 225 | data/crossing/jpg/38.jpg {"value":"crossing","coordinate":[[21,12],[143,56]]} 226 | data/paper_green/jpg/106.jpg {"value":"paper_green","coordinate":[[68,9],[116,32]]} 227 | data/turn_right/jpg/31.jpg {"value":"turn_right","coordinate":[[6,1],[58,42]]} 228 | data/paper_red/jpg/118.jpg {"value":"paper_red","coordinate":[[65,16],[119,40]]} 229 | data/paper_green/jpg/63.jpg {"value":"paper_green","coordinate":[[88,30],[139,56]]} 230 | data/paper_green/jpg/117.jpg {"value":"paper_green","coordinate":[[61,37],[117,63]]} 231 | data/turn_right/jpg/69.jpg {"value":"turn_right","coordinate":[[88,17],[153,75]]} 232 | data/straight/jpg/16.jpg {"value":"straight","coordinate":[[76,6],[148,70]]} 233 | data/turn_left/jpg/117.jpg {"value":"turn_left","coordinate":[[64,9],[131,68]]} 234 | data/paper_red/jpg/25.jpg {"value":"paper_red","coordinate":[[30,35],[84,61]]} 235 | data/crossing/jpg/56.jpg {"value":"crossing","coordinate":[[25,32],[153,83]]} 236 | data/paper_green/jpg/114.jpg {"value":"paper_green","coordinate":[[49,31],[102,62]]} 237 | data/straight/jpg/7.jpg {"value":"straight","coordinate":[[5,14],[74,78]]} 238 | data/crossing/jpg/121.jpg {"value":"crossing","coordinate":[[8,19],[135,82]]} 239 | data/turn_right/jpg/39.jpg {"value":"turn_right","coordinate":[[2,14],[59,69]]} 240 | data/paper_red/jpg/123.jpg {"value":"paper_red","coordinate":[[106,20],[156,46]]} 241 | data/paper_red/jpg/17.jpg {"value":"paper_red","coordinate":[[33,1],[83,22]]} 242 | data/turn_right/jpg/1.jpg {"value":"turn_right","coordinate":[[25,14],[98,79]]} 243 | data/limit_10/jpg/77.jpg {"value":"limit_10","coordinate":[[78,13],[149,72]]} 244 | data/turn_right/jpg/138.jpg {"value":"turn_right","coordinate":[[36,18],[102,77]]} 245 | data/turn_right/jpg/2.jpg {"value":"turn_right","coordinate":[[25,14],[98,80]]} 246 | data/crossing/jpg/32.jpg {"value":"crossing","coordinate":[[35,22],[160,74]]} 247 | data/paper_red/jpg/133.jpg {"value":"paper_red","coordinate":[[95,22],[144,49]]} 248 | data/paper_red/jpg/99.jpg {"value":"paper_red","coordinate":[[76,6],[124,27]]} 249 | data/limit_10/jpg/95.jpg {"value":"limit_10","coordinate":[[31,8],[97,64]]} 250 | data/turn_right/jpg/68.jpg {"value":"turn_right","coordinate":[[91,18],[155,75]]} 251 | data/limit_10/jpg/52.jpg {"value":"limit_10","coordinate":[[41,9],[111,71]]} 252 | data/limit_10/jpg/47.jpg {"value":"limit_10","coordinate":[[38,9],[106,71]]} 253 | data/cancel_10/jpg/2.jpg {"value":"cancel_10","coordinate":[[28,15],[96,76]]} 254 | data/straight/jpg/19.jpg {"value":"straight","coordinate":[[95,8],[158,73]]} 255 | data/straight/jpg/38.jpg {"value":"straight","coordinate":[[33,6],[93,57]]} 256 | data/paper_green/jpg/36.jpg {"value":"paper_green","coordinate":[[91,19],[142,49]]} 257 | data/straight/jpg/79.jpg {"value":"straight","coordinate":[[81,6],[143,56]]} 258 | data/turn_right/jpg/112.jpg {"value":"turn_right","coordinate":[[27,22],[93,81]]} 259 | data/paper_red/jpg/131.jpg {"value":"paper_red","coordinate":[[96,19],[145,43]]} 260 | data/paper_red/jpg/66.jpg {"value":"paper_red","coordinate":[[91,28],[143,56]]} 261 | data/cancel_10/jpg/21.jpg {"value":"cancel_10","coordinate":[[47,4],[106,54]]} 262 | data/paper_red/jpg/85.jpg {"value":"paper_red","coordinate":[[90,17],[139,47]]} 263 | data/paper_red/jpg/6.jpg {"value":"paper_red","coordinate":[[7,27],[53,54]]} 264 | data/limit_10/jpg/5.jpg {"value":"limit_10","coordinate":[[55,8],[129,75]]} 265 | data/limit_10/jpg/43.jpg {"value":"limit_10","coordinate":[[15,17],[79,76]]} 266 | data/limit_10/jpg/22.jpg {"value":"limit_10","coordinate":[[34,1],[99,51]]} 267 | data/cancel_10/jpg/64.jpg {"value":"cancel_10","coordinate":[[50,5],[110,53]]} 268 | data/paper_red/jpg/103.jpg {"value":"paper_red","coordinate":[[65,17],[116,42]]} 269 | data/straight/jpg/3.jpg {"value":"straight","coordinate":[[20,12],[95,78]]} 270 | data/turn_right/jpg/124.jpg {"value":"turn_right","coordinate":[[51,4],[117,58]]} 271 | data/paper_red/jpg/3.jpg {"value":"paper_red","coordinate":[[24,22],[78,53]]} 272 | data/paper_green/jpg/25.jpg {"value":"paper_green","coordinate":[[1,45],[44,70]]} 273 | data/paper_red/jpg/94.jpg {"value":"paper_red","coordinate":[[80,31],[134,57]]} 274 | data/turn_right/jpg/121.jpg {"value":"turn_right","coordinate":[[18,17],[81,74]]} 275 | data/straight/jpg/48.jpg {"value":"straight","coordinate":[[54,5],[122,61]]} 276 | data/cancel_10/jpg/122.jpg {"value":"cancel_10","coordinate":[[16,10],[70,56]]} 277 | data/paper_red/jpg/12.jpg {"value":"paper_red","coordinate":[[14,18],[64,41]]} 278 | data/straight/jpg/75.jpg {"value":"straight","coordinate":[[75,7],[137,59]]} 279 | data/cancel_10/jpg/134.jpg {"value":"cancel_10","coordinate":[[60,18],[124,74]]} 280 | data/limit_10/jpg/34.jpg {"value":"limit_10","coordinate":[[3,12],[53,59]]} 281 | data/straight/jpg/112.jpg {"value":"straight","coordinate":[[39,10],[101,61]]} 282 | data/crossing/jpg/95.jpg {"value":"crossing","coordinate":[[24,23],[148,66]]} 283 | data/crossing/jpg/85.jpg {"value":"crossing","coordinate":[[7,29],[118,68]]} 284 | data/cancel_10/jpg/25.jpg {"value":"cancel_10","coordinate":[[75,3],[135,54]]} 285 | data/paper_red/jpg/4.jpg {"value":"paper_red","coordinate":[[20,20],[70,52]]} 286 | data/turn_right/jpg/131.jpg {"value":"turn_right","coordinate":[[65,7],[132,62]]} 287 | data/paper_red/jpg/13.jpg {"value":"paper_red","coordinate":[[15,13],[64,37]]} 288 | data/cancel_10/jpg/27.jpg {"value":"cancel_10","coordinate":[[84,4],[141,55]]} 289 | data/cancel_10/jpg/92.jpg {"value":"cancel_10","coordinate":[[1,9],[52,55]]} 290 | data/crossing/jpg/133.jpg {"value":"crossing","coordinate":[[12,30],[141,70]]} 291 | data/cancel_10/jpg/121.jpg {"value":"cancel_10","coordinate":[[26,5],[80,49]]} 292 | data/crossing/jpg/61.jpg {"value":"crossing","coordinate":[[7,12],[148,57]]} 293 | data/limit_10/jpg/28.jpg {"value":"limit_10","coordinate":[[13,1],[69,48]]} 294 | data/crossing/jpg/87.jpg {"value":"crossing","coordinate":[[7,23],[117,70]]} 295 | data/straight/jpg/12.jpg {"value":"straight","coordinate":[[38,4],[112,70]]} 296 | data/straight/jpg/13.jpg {"value":"straight","coordinate":[[49,4],[125,69]]} 297 | data/straight/jpg/116.jpg {"value":"straight","coordinate":[[41,20],[109,76]]} 298 | data/turn_right/jpg/19.jpg {"value":"turn_right","coordinate":[[66,1],[135,58]]} 299 | data/cancel_10/jpg/56.jpg {"value":"cancel_10","coordinate":[[40,15],[103,68]]} 300 | data/paper_red/jpg/63.jpg {"value":"paper_red","coordinate":[[96,43],[149,73]]} 301 | data/turn_right/jpg/41.jpg {"value":"turn_right","coordinate":[[1,18],[58,76]]} 302 | data/paper_red/jpg/34.jpg {"value":"paper_red","coordinate":[[67,23],[122,52]]} 303 | data/paper_green/jpg/54.jpg {"value":"paper_green","coordinate":[[27,29],[80,56]]} 304 | data/turn_right/jpg/117.jpg {"value":"turn_right","coordinate":[[53,12],[118,69]]} 305 | data/crossing/jpg/102.jpg {"value":"crossing","coordinate":[[26,27],[155,70]]} 306 | data/turn_left/jpg/104.jpg {"value":"turn_left","coordinate":[[68,1],[128,44]]} 307 | data/straight/jpg/28.jpg {"value":"straight","coordinate":[[59,1],[127,46]]} 308 | data/paper_red/jpg/45.jpg {"value":"paper_red","coordinate":[[91,12],[141,37]]} 309 | data/cancel_10/jpg/97.jpg {"value":"cancel_10","coordinate":[[27,4],[84,52]]} 310 | data/paper_red/jpg/91.jpg {"value":"paper_red","coordinate":[[99,40],[152,68]]} 311 | data/crossing/jpg/116.jpg {"value":"crossing","coordinate":[[1,15],[118,92]]} 312 | data/crossing/jpg/1.jpg {"value":"crossing","coordinate":[[21,33],[152,72]]} 313 | data/cancel_10/jpg/15.jpg {"value":"cancel_10","coordinate":[[12,2],[68,51]]} 314 | data/limit_10/jpg/69.jpg {"value":"limit_10","coordinate":[[45,21],[120,75]]} 315 | data/limit_10/jpg/58.jpg {"value":"limit_10","coordinate":[[40,12],[109,73]]} 316 | data/straight/jpg/17.jpg {"value":"straight","coordinate":[[80,5],[154,70]]} 317 | data/paper_green/jpg/133.jpg {"value":"paper_green","coordinate":[[93,13],[142,35]]} 318 | data/paper_green/jpg/37.jpg {"value":"paper_green","coordinate":[[98,18],[147,48]]} 319 | data/straight/jpg/119.jpg {"value":"straight","coordinate":[[55,9],[120,64]]} 320 | data/turn_right/jpg/108.jpg {"value":"turn_right","coordinate":[[29,8],[91,59]]} 321 | data/turn_right/jpg/89.jpg {"value":"turn_right","coordinate":[[56,14],[122,74]]} 322 | data/turn_right/jpg/42.jpg {"value":"turn_right","coordinate":[[1,19],[56,75]]} 323 | data/cancel_10/jpg/128.jpg {"value":"cancel_10","coordinate":[[30,14],[90,65]]} 324 | data/turn_left/jpg/56.jpg {"value":"turn_left","coordinate":[[40,12],[111,75]]} 325 | data/paper_red/jpg/108.jpg {"value":"paper_red","coordinate":[[70,28],[125,57]]} 326 | data/crossing/jpg/67.jpg {"value":"crossing","coordinate":[[14,33],[153,75]]} 327 | data/crossing/jpg/23.jpg {"value":"crossing","coordinate":[[14,21],[142,57]]} 328 | data/paper_green/jpg/137.jpg {"value":"paper_green","coordinate":[[93,14],[141,36]]} 329 | data/cancel_10/jpg/69.jpg {"value":"cancel_10","coordinate":[[72,26],[137,76]]} 330 | data/turn_right/jpg/101.jpg {"value":"turn_right","coordinate":[[45,4],[110,55]]} 331 | data/limit_10/jpg/91.jpg {"value":"limit_10","coordinate":[[54,9],[125,68]]} 332 | data/limit_10/jpg/123.jpg {"value":"limit_10","coordinate":[[97,15],[160,74]]} 333 | data/crossing/jpg/15.jpg {"value":"crossing","coordinate":[[48,19],[160,68]]} 334 | data/paper_green/jpg/73.jpg {"value":"paper_green","coordinate":[[71,21],[128,46]]} 335 | data/paper_red/jpg/33.jpg {"value":"paper_red","coordinate":[[60,26],[118,54]]} 336 | data/paper_red/jpg/28.jpg {"value":"paper_red","coordinate":[[32,40],[90,67]]} 337 | data/paper_red/jpg/93.jpg {"value":"paper_red","coordinate":[[80,34],[135,61]]} 338 | data/crossing/jpg/2.jpg {"value":"crossing","coordinate":[[19,34],[153,71]]} 339 | data/paper_red/jpg/78.jpg {"value":"paper_red","coordinate":[[110,11],[155,32]]} 340 | data/limit_10/jpg/113.jpg {"value":"limit_10","coordinate":[[27,3],[91,54]]} 341 | data/limit_10/jpg/32.jpg {"value":"limit_10","coordinate":[[2,4],[50,52]]} 342 | data/limit_10/jpg/59.jpg {"value":"limit_10","coordinate":[[39,10],[110,76]]} 343 | data/paper_green/jpg/12.jpg {"value":"paper_green","coordinate":[[53,17],[110,46]]} 344 | data/limit_10/jpg/101.jpg {"value":"limit_10","coordinate":[[35,3],[98,54]]} 345 | data/turn_left/jpg/48.jpg {"value":"turn_left","coordinate":[[30,15],[102,78]]} 346 | data/limit_10/jpg/38.jpg {"value":"limit_10","coordinate":[[1,20],[53,74]]} 347 | data/turn_left/jpg/107.jpg {"value":"turn_left","coordinate":[[74,8],[138,61]]} 348 | data/paper_red/jpg/102.jpg {"value":"paper_red","coordinate":[[70,14],[120,37]]} 349 | data/paper_green/jpg/134.jpg {"value":"paper_green","coordinate":[[93,13],[142,35]]} 350 | data/cancel_10/jpg/11.jpg {"value":"cancel_10","coordinate":[[4,9],[61,63]]} 351 | data/crossing/jpg/128.jpg {"value":"crossing","coordinate":[[19,27],[145,73]]} 352 | data/crossing/jpg/19.jpg {"value":"crossing","coordinate":[[18,31],[153,68]]} 353 | data/turn_right/jpg/128.jpg {"value":"turn_right","coordinate":[[113,11],[160,66]]} 354 | data/paper_red/jpg/11.jpg {"value":"paper_red","coordinate":[[6,21],[55,45]]} 355 | data/paper_green/jpg/98.jpg {"value":"paper_green","coordinate":[[92,30],[145,56]]} 356 | data/turn_left/jpg/46.jpg {"value":"turn_left","coordinate":[[30,12],[99,73]]} 357 | data/limit_10/jpg/49.jpg {"value":"limit_10","coordinate":[[42,11],[112,74]]} 358 | data/straight/jpg/113.jpg {"value":"straight","coordinate":[[39,15],[105,70]]} 359 | data/turn_right/jpg/27.jpg {"value":"turn_right","coordinate":[[19,1],[78,45]]} 360 | data/straight/jpg/68.jpg {"value":"straight","coordinate":[[66,11],[131,63]]} 361 | data/straight/jpg/101.jpg {"value":"straight","coordinate":[[15,9],[75,58]]} 362 | data/turn_left/jpg/82.jpg {"value":"turn_left","coordinate":[[58,9],[127,65]]} 363 | data/crossing/jpg/131.jpg {"value":"crossing","coordinate":[[17,26],[146,76]]} 364 | data/paper_red/jpg/31.jpg {"value":"paper_red","coordinate":[[45,30],[104,58]]} 365 | data/crossing/jpg/37.jpg {"value":"crossing","coordinate":[[28,11],[150,59]]} 366 | data/crossing/jpg/99.jpg {"value":"crossing","coordinate":[[20,34],[151,74]]} 367 | data/paper_green/jpg/111.jpg {"value":"paper_green","coordinate":[[50,16],[101,45]]} 368 | data/turn_right/jpg/49.jpg {"value":"turn_right","coordinate":[[21,12],[88,73]]} 369 | data/paper_green/jpg/74.jpg {"value":"paper_green","coordinate":[[72,15],[125,39]]} 370 | data/crossing/jpg/6.jpg {"value":"crossing","coordinate":[[6,29],[143,91]]} 371 | data/turn_left/jpg/11.jpg {"value":"turn_left","coordinate":[[98,12],[160,79]]} 372 | data/turn_left/jpg/134.jpg {"value":"turn_left","coordinate":[[45,7],[109,60]]} 373 | data/turn_left/jpg/17.jpg {"value":"turn_left","coordinate":[[72,1],[140,56]]} 374 | data/limit_10/jpg/44.jpg {"value":"limit_10","coordinate":[[23,13],[85,72]]} 375 | data/turn_left/jpg/79.jpg {"value":"turn_left","coordinate":[[38,12],[107,73]]} 376 | data/straight/jpg/59.jpg {"value":"straight","coordinate":[[18,9],[82,61]]} 377 | data/turn_right/jpg/99.jpg {"value":"turn_right","coordinate":[[46,7],[110,64]]} 378 | data/paper_green/jpg/41.jpg {"value":"paper_green","coordinate":[[89,2],[135,24]]} 379 | data/crossing/jpg/53.jpg {"value":"crossing","coordinate":[[21,32],[154,88]]} 380 | data/limit_10/jpg/109.jpg {"value":"limit_10","coordinate":[[23,12],[89,71]]} 381 | data/limit_10/jpg/83.jpg {"value":"limit_10","coordinate":[[73,1],[133,29]]} 382 | data/crossing/jpg/92.jpg {"value":"crossing","coordinate":[[26,24],[148,59]]} 383 | data/limit_10/jpg/74.jpg {"value":"limit_10","coordinate":[[60,16],[132,76]]} 384 | data/paper_green/jpg/16.jpg {"value":"paper_green","coordinate":[[64,6],[118,30]]} 385 | data/paper_green/jpg/34.jpg {"value":"paper_green","coordinate":[[75,20],[130,48]]} 386 | data/straight/jpg/5.jpg {"value":"straight","coordinate":[[13,14],[83,78]]} 387 | data/straight/jpg/115.jpg {"value":"straight","coordinate":[[40,21],[110,76]]} 388 | data/limit_10/jpg/132.jpg {"value":"limit_10","coordinate":[[50,17],[124,75]]} 389 | data/turn_right/jpg/5.jpg {"value":"turn_right","coordinate":[[36,12],[111,76]]} 390 | data/straight/jpg/91.jpg {"value":"straight","coordinate":[[83,21],[148,79]]} 391 | data/crossing/jpg/8.jpg {"value":"crossing","coordinate":[[12,21],[141,79]]} 392 | data/turn_left/jpg/115.jpg {"value":"turn_left","coordinate":[[39,12],[109,70]]} 393 | data/straight/jpg/109.jpg {"value":"straight","coordinate":[[33,2],[93,49]]} 394 | data/paper_red/jpg/15.jpg {"value":"paper_red","coordinate":[[21,4],[70,25]]} 395 | data/turn_left/jpg/125.jpg {"value":"turn_left","coordinate":[[30,13],[94,69]]} 396 | data/turn_right/jpg/61.jpg {"value":"turn_right","coordinate":[[105,10],[160,65]]} 397 | data/turn_left/jpg/99.jpg {"value":"turn_left","coordinate":[[66,9],[134,66]]} 398 | data/paper_red/jpg/51.jpg {"value":"paper_red","coordinate":[[67,33],[126,62]]} 399 | data/cancel_10/jpg/36.jpg {"value":"cancel_10","coordinate":[[64,13],[129,74]]} 400 | data/limit_10/jpg/138.jpg {"value":"limit_10","coordinate":[[52,4],[121,58]]} 401 | data/turn_left/jpg/47.jpg {"value":"turn_left","coordinate":[[31,13],[100,75]]} 402 | data/paper_red/jpg/97.jpg {"value":"paper_red","coordinate":[[78,16],[127,38]]} 403 | data/paper_red/jpg/127.jpg {"value":"paper_red","coordinate":[[108,21],[154,43]]} 404 | data/cancel_10/jpg/104.jpg {"value":"cancel_10","coordinate":[[24,5],[77,50]]} 405 | data/cancel_10/jpg/28.jpg {"value":"cancel_10","coordinate":[[87,3],[144,56]]} 406 | data/paper_red/jpg/57.jpg {"value":"paper_red","coordinate":[[38,28],[94,56]]} 407 | data/paper_green/jpg/7.jpg {"value":"paper_green","coordinate":[[34,24],[98,55]]} 408 | data/cancel_10/jpg/66.jpg {"value":"cancel_10","coordinate":[[54,14],[115,67]]} 409 | data/paper_red/jpg/26.jpg {"value":"paper_red","coordinate":[[28,36],[83,64]]} 410 | data/paper_green/jpg/11.jpg {"value":"paper_green","coordinate":[[45,18],[103,48]]} 411 | data/turn_right/jpg/25.jpg {"value":"turn_right","coordinate":[[31,1],[94,45]]} 412 | data/straight/jpg/121.jpg {"value":"straight","coordinate":[[71,14],[136,70]]} 413 | data/paper_red/jpg/134.jpg {"value":"paper_red","coordinate":[[95,27],[146,52]]} 414 | data/straight/jpg/55.jpg {"value":"straight","coordinate":[[60,6],[127,63]]} 415 | data/turn_left/jpg/69.jpg {"value":"turn_left","coordinate":[[29,3],[91,54]]} 416 | data/straight/jpg/24.jpg {"value":"straight","coordinate":[[83,1],[152,49]]} 417 | data/cancel_10/jpg/46.jpg {"value":"cancel_10","coordinate":[[32,13],[94,64]]} 418 | data/cancel_10/jpg/76.jpg {"value":"cancel_10","coordinate":[[29,9],[89,59]]} 419 | data/paper_red/jpg/22.jpg {"value":"paper_red","coordinate":[[38,23],[90,50]]} 420 | data/crossing/jpg/58.jpg {"value":"crossing","coordinate":[[21,23],[156,64]]} 421 | data/limit_10/jpg/108.jpg {"value":"limit_10","coordinate":[[22,19],[93,78]]} 422 | data/cancel_10/jpg/32.jpg {"value":"cancel_10","coordinate":[[87,6],[147,59]]} 423 | data/turn_right/jpg/4.jpg {"value":"turn_right","coordinate":[[31,14],[105,77]]} 424 | data/crossing/jpg/93.jpg {"value":"crossing","coordinate":[[29,25],[152,61]]} 425 | data/turn_left/jpg/62.jpg {"value":"turn_left","coordinate":[[35,18],[104,74]]} 426 | data/cancel_10/jpg/82.jpg {"value":"cancel_10","coordinate":[[15,7],[72,54]]} 427 | data/crossing/jpg/22.jpg {"value":"crossing","coordinate":[[13,24],[142,62]]} 428 | data/straight/jpg/103.jpg {"value":"straight","coordinate":[[11,6],[69,54]]} 429 | data/paper_green/jpg/21.jpg {"value":"paper_green","coordinate":[[18,17],[67,39]]} 430 | data/turn_right/jpg/132.jpg {"value":"turn_right","coordinate":[[39,8],[106,61]]} 431 | data/straight/jpg/97.jpg {"value":"straight","coordinate":[[32,11],[96,66]]} 432 | data/crossing/jpg/86.jpg {"value":"crossing","coordinate":[[6,26],[116,72]]} 433 | data/turn_left/jpg/36.jpg {"value":"turn_left","coordinate":[[1,16],[54,66]]} 434 | data/paper_green/jpg/19.jpg {"value":"paper_green","coordinate":[[41,9],[91,30]]} 435 | data/turn_left/jpg/83.jpg {"value":"turn_left","coordinate":[[57,9],[123,64]]} 436 | data/crossing/jpg/98.jpg {"value":"crossing","coordinate":[[14,26],[143,78]]} 437 | data/cancel_10/jpg/6.jpg {"value":"cancel_10","coordinate":[[1,14],[55,68]]} 438 | data/paper_green/jpg/31.jpg {"value":"paper_green","coordinate":[[44,25],[101,54]]} 439 | data/cancel_10/jpg/59.jpg {"value":"cancel_10","coordinate":[[39,8],[100,56]]} 440 | data/crossing/jpg/64.jpg {"value":"crossing","coordinate":[[1,38],[130,85]]} 441 | data/crossing/jpg/16.jpg {"value":"crossing","coordinate":[[42,26],[160,75]]} 442 | data/paper_red/jpg/67.jpg {"value":"paper_red","coordinate":[[91,25],[142,52]]} 443 | data/straight/jpg/117.jpg {"value":"straight","coordinate":[[40,19],[108,74]]} 444 | data/limit_10/jpg/36.jpg {"value":"limit_10","coordinate":[[2,15],[49,68]]} 445 | data/turn_left/jpg/64.jpg {"value":"turn_left","coordinate":[[34,15],[104,75]]} 446 | data/turn_right/jpg/11.jpg {"value":"turn_right","coordinate":[[77,9],[151,75]]} 447 | data/turn_left/jpg/21.jpg {"value":"turn_left","coordinate":[[47,2],[114,51]]} 448 | data/crossing/jpg/7.jpg {"value":"crossing","coordinate":[[7,22],[137,90]]} 449 | data/cancel_10/jpg/12.jpg {"value":"cancel_10","coordinate":[[5,7],[63,63]]} 450 | data/turn_right/jpg/116.jpg {"value":"turn_right","coordinate":[[50,11],[117,68]]} 451 | data/turn_right/jpg/129.jpg {"value":"turn_right","coordinate":[[113,13],[160,70]]} 452 | data/turn_right/jpg/32.jpg {"value":"turn_right","coordinate":[[4,1],[55,43]]} 453 | data/crossing/jpg/11.jpg {"value":"crossing","coordinate":[[26,20],[149,58]]} 454 | data/crossing/jpg/83.jpg {"value":"crossing","coordinate":[[13,26],[132,64]]} 455 | data/turn_right/jpg/53.jpg {"value":"turn_right","coordinate":[[42,8],[114,73]]} 456 | data/limit_10/jpg/61.jpg {"value":"limit_10","coordinate":[[51,1],[112,39]]} 457 | data/limit_10/jpg/93.jpg {"value":"limit_10","coordinate":[[39,7],[109,65]]} 458 | data/paper_green/jpg/116.jpg {"value":"paper_green","coordinate":[[60,36],[115,61]]} 459 | data/straight/jpg/1.jpg {"value":"straight","coordinate":[[45,12],[114,68]]} 460 | data/paper_green/jpg/33.jpg {"value":"paper_green","coordinate":[[64,21],[120,50]]} 461 | data/paper_red/jpg/49.jpg {"value":"paper_red","coordinate":[[76,29],[131,58]]} 462 | data/straight/jpg/111.jpg {"value":"straight","coordinate":[[38,3],[99,49]]} 463 | data/turn_right/jpg/113.jpg {"value":"turn_right","coordinate":[[24,21],[92,82]]} 464 | data/crossing/jpg/75.jpg {"value":"crossing","coordinate":[[13,18],[150,60]]} 465 | data/paper_red/jpg/73.jpg {"value":"paper_red","coordinate":[[91,11],[139,32]]} 466 | data/turn_right/jpg/35.jpg {"value":"turn_right","coordinate":[[2,4],[53,51]]} 467 | data/paper_red/jpg/122.jpg {"value":"paper_red","coordinate":[[108,22],[155,46]]} 468 | data/paper_red/jpg/64.jpg {"value":"paper_red","coordinate":[[93,41],[149,71]]} 469 | data/paper_green/jpg/55.jpg {"value":"paper_green","coordinate":[[30,27],[78,54]]} 470 | data/crossing/jpg/17.jpg {"value":"crossing","coordinate":[[33,28],[160,75]]} 471 | data/straight/jpg/2.jpg {"value":"straight","coordinate":[[20,12],[95,78]]} 472 | data/turn_right/jpg/79.jpg {"value":"turn_right","coordinate":[[83,6],[144,57]]} 473 | data/crossing/jpg/9.jpg {"value":"crossing","coordinate":[[19,21],[147,73]]} 474 | data/straight/jpg/78.jpg {"value":"straight","coordinate":[[88,8],[149,60]]} 475 | data/limit_10/jpg/53.jpg {"value":"limit_10","coordinate":[[40,8],[108,67]]} 476 | data/turn_left/jpg/131.jpg {"value":"turn_left","coordinate":[[40,1],[101,44]]} 477 | data/straight/jpg/35.jpg {"value":"straight","coordinate":[[27,3],[87,50]]} 478 | data/straight/jpg/27.jpg {"value":"straight","coordinate":[[64,1],[133,51]]} 479 | data/paper_red/jpg/71.jpg {"value":"paper_red","coordinate":[[92,15],[140,37]]} 480 | data/limit_10/jpg/42.jpg {"value":"limit_10","coordinate":[[9,17],[71,76]]} 481 | data/turn_left/jpg/23.jpg {"value":"turn_left","coordinate":[[30,1],[95,48]]} 482 | data/cancel_10/jpg/13.jpg {"value":"cancel_10","coordinate":[[6,4],[62,55]]} 483 | data/limit_10/jpg/92.jpg {"value":"limit_10","coordinate":[[45,9],[118,67]]} 484 | data/cancel_10/jpg/23.jpg {"value":"cancel_10","coordinate":[[63,1],[122,51]]} 485 | data/paper_red/jpg/114.jpg {"value":"paper_red","coordinate":[[82,21],[134,49]]} 486 | data/cancel_10/jpg/106.jpg {"value":"cancel_10","coordinate":[[30,6],[86,52]]} 487 | data/turn_right/jpg/22.jpg {"value":"turn_right","coordinate":[[50,1],[120,52]]} 488 | data/turn_left/jpg/101.jpg {"value":"turn_left","coordinate":[[68,4],[130,52]]} 489 | data/cancel_10/jpg/74.jpg {"value":"cancel_10","coordinate":[[37,11],[98,62]]} 490 | data/cancel_10/jpg/124.jpg {"value":"cancel_10","coordinate":[[7,18],[62,66]]} 491 | data/straight/jpg/104.jpg {"value":"straight","coordinate":[[12,5],[69,54]]} 492 | data/paper_green/jpg/35.jpg {"value":"paper_green","coordinate":[[85,19],[138,49]]} 493 | data/limit_10/jpg/71.jpg {"value":"limit_10","coordinate":[[46,21],[120,76]]} 494 | data/turn_right/jpg/64.jpg {"value":"turn_right","coordinate":[[106,14],[160,68]]} 495 | data/paper_red/jpg/14.jpg {"value":"paper_red","coordinate":[[16,7],[66,31]]} 496 | data/limit_10/jpg/46.jpg {"value":"limit_10","coordinate":[[36,11],[103,71]]} 497 | data/turn_left/jpg/138.jpg {"value":"turn_left","coordinate":[[83,15],[149,75]]} 498 | data/cancel_10/jpg/39.jpg {"value":"cancel_10","coordinate":[[51,14],[117,73]]} 499 | data/turn_right/jpg/63.jpg {"value":"turn_right","coordinate":[[104,12],[160,68]]} 500 | data/turn_left/jpg/49.jpg {"value":"turn_left","coordinate":[[31,16],[101,77]]} 501 | data/cancel_10/jpg/81.jpg {"value":"cancel_10","coordinate":[[18,7],[74,54]]} 502 | data/paper_red/jpg/44.jpg {"value":"paper_red","coordinate":[[91,12],[140,40]]} 503 | data/turn_right/jpg/6.jpg {"value":"turn_right","coordinate":[[42,10],[118,77]]} 504 | data/crossing/jpg/27.jpg {"value":"crossing","coordinate":[[22,11],[141,42]]} 505 | data/paper_green/jpg/61.jpg {"value":"paper_green","coordinate":[[88,30],[140,55]]} 506 | data/cancel_10/jpg/84.jpg {"value":"cancel_10","coordinate":[[15,4],[67,48]]} 507 | data/cancel_10/jpg/33.jpg {"value":"cancel_10","coordinate":[[81,7],[142,61]]} 508 | data/limit_10/jpg/79.jpg {"value":"limit_10","coordinate":[[79,4],[146,58]]} 509 | data/turn_right/jpg/57.jpg {"value":"turn_right","coordinate":[[43,6],[116,72]]} 510 | data/cancel_10/jpg/78.jpg {"value":"cancel_10","coordinate":[[24,10],[82,58]]} 511 | data/paper_red/jpg/59.jpg {"value":"paper_red","coordinate":[[39,24],[94,60]]} 512 | data/turn_right/jpg/118.jpg {"value":"turn_right","coordinate":[[43,11],[108,67]]} 513 | data/paper_green/jpg/79.jpg {"value":"paper_green","coordinate":[[76,6],[123,28]]} 514 | data/limit_10/jpg/51.jpg {"value":"limit_10","coordinate":[[41,8],[110,71]]} 515 | data/paper_red/jpg/113.jpg {"value":"paper_red","coordinate":[[88,24],[139,53]]} 516 | data/paper_red/jpg/109.jpg {"value":"paper_red","coordinate":[[76,27],[130,55]]} 517 | data/turn_left/jpg/58.jpg {"value":"turn_left","coordinate":[[39,9],[107,69]]} 518 | data/cancel_10/jpg/129.jpg {"value":"cancel_10","coordinate":[[36,14],[99,68]]} 519 | data/straight/jpg/83.jpg {"value":"straight","coordinate":[[73,1],[134,46]]} 520 | data/limit_10/jpg/54.jpg {"value":"limit_10","coordinate":[[42,9],[111,69]]} 521 | data/turn_left/jpg/6.jpg {"value":"turn_left","coordinate":[[25,7],[99,71]]} 522 | data/straight/jpg/135.jpg {"value":"straight","coordinate":[[38,17],[105,73]]} 523 | data/limit_10/jpg/4.jpg {"value":"limit_10","coordinate":[[45,6],[122,75]]} 524 | data/cancel_10/jpg/71.jpg {"value":"cancel_10","coordinate":[[63,21],[129,74]]} 525 | data/crossing/jpg/39.jpg {"value":"crossing","coordinate":[[13,14],[136,49]]} 526 | data/turn_left/jpg/29.jpg {"value":"turn_left","coordinate":[[7,1],[60,42]]} 527 | data/turn_left/jpg/95.jpg {"value":"turn_left","coordinate":[[70,9],[139,66]]} 528 | data/paper_red/jpg/77.jpg {"value":"paper_red","coordinate":[[104,10],[151,33]]} 529 | data/turn_left/jpg/78.jpg {"value":"turn_left","coordinate":[[34,16],[104,78]]} 530 | data/cancel_10/jpg/22.jpg {"value":"cancel_10","coordinate":[[54,2],[114,52]]} 531 | data/straight/jpg/107.jpg {"value":"straight","coordinate":[[32,3],[93,50]]} 532 | data/turn_right/jpg/96.jpg {"value":"turn_right","coordinate":[[31,20],[100,77]]} 533 | data/straight/jpg/131.jpg {"value":"straight","coordinate":[[50,20],[117,75]]} 534 | data/limit_10/jpg/23.jpg {"value":"limit_10","coordinate":[[32,1],[97,55]]} 535 | data/turn_left/jpg/5.jpg {"value":"turn_left","coordinate":[[33,9],[107,75]]} 536 | data/turn_left/jpg/132.jpg {"value":"turn_left","coordinate":[[44,2],[108,46]]} 537 | data/paper_red/jpg/42.jpg {"value":"paper_red","coordinate":[[86,12],[135,39]]} 538 | data/straight/jpg/82.jpg {"value":"straight","coordinate":[[75,2],[136,48]]} 539 | data/turn_left/jpg/123.jpg {"value":"turn_left","coordinate":[[39,13],[109,73]]} 540 | data/paper_red/jpg/75.jpg {"value":"paper_red","coordinate":[[93,11],[142,32]]} 541 | data/turn_left/jpg/15.jpg {"value":"turn_left","coordinate":[[92,2],[158,59]]} 542 | data/crossing/jpg/25.jpg {"value":"crossing","coordinate":[[15,13],[139,45]]} 543 | data/straight/jpg/86.jpg {"value":"straight","coordinate":[[71,6],[137,56]]} 544 | data/straight/jpg/73.jpg {"value":"straight","coordinate":[[67,5],[130,55]]} 545 | data/limit_10/jpg/64.jpg {"value":"limit_10","coordinate":[[51,1],[113,40]]} 546 | data/paper_red/jpg/107.jpg {"value":"paper_red","coordinate":[[57,30],[114,61]]} 547 | data/paper_red/jpg/116.jpg {"value":"paper_red","coordinate":[[79,18],[129,43]]} 548 | data/limit_10/jpg/19.jpg {"value":"limit_10","coordinate":[[54,1],[120,51]]} 549 | data/paper_red/jpg/72.jpg {"value":"paper_red","coordinate":[[93,12],[140,34]]} 550 | data/straight/jpg/138.jpg {"value":"straight","coordinate":[[36,15],[102,71]]} 551 | data/turn_left/jpg/108.jpg {"value":"turn_left","coordinate":[[73,9],[136,65]]} 552 | data/cancel_10/jpg/49.jpg {"value":"cancel_10","coordinate":[[34,14],[95,69]]} 553 | data/limit_10/jpg/84.jpg {"value":"limit_10","coordinate":[[74,1],[139,34]]} 554 | data/paper_green/jpg/22.jpg {"value":"paper_green","coordinate":[[9,19],[56,42]]} 555 | data/crossing/jpg/33.jpg {"value":"crossing","coordinate":[[40,20],[158,79]]} 556 | data/crossing/jpg/4.jpg {"value":"crossing","coordinate":[[14,32],[147,79]]} 557 | data/straight/jpg/22.jpg {"value":"straight","coordinate":[[91,1],[160,57]]} 558 | data/paper_red/jpg/32.jpg {"value":"paper_red","coordinate":[[54,28],[111,56]]} 559 | data/turn_left/jpg/96.jpg {"value":"turn_left","coordinate":[[78,11],[149,71]]} 560 | data/turn_left/jpg/8.jpg {"value":"turn_left","coordinate":[[30,9],[104,75]]} 561 | data/crossing/jpg/42.jpg {"value":"crossing","coordinate":[[1,13],[115,66]]} 562 | data/turn_right/jpg/38.jpg {"value":"turn_right","coordinate":[[1,11],[58,65]]} 563 | data/paper_green/jpg/56.jpg {"value":"paper_green","coordinate":[[27,24],[77,53]]} 564 | data/crossing/jpg/105.jpg {"value":"crossing","coordinate":[[11,27],[138,59]]} 565 | data/paper_red/jpg/135.jpg {"value":"paper_red","coordinate":[[95,30],[146,56]]} 566 | data/straight/jpg/132.jpg {"value":"straight","coordinate":[[48,20],[116,75]]} 567 | data/turn_left/jpg/65.jpg {"value":"turn_left","coordinate":[[39,12],[104,70]]} 568 | data/paper_red/jpg/128.jpg {"value":"paper_red","coordinate":[[107,21],[154,44]]} 569 | data/paper_green/jpg/38.jpg {"value":"paper_green","coordinate":[[98,11],[144,40]]} 570 | data/crossing/jpg/136.jpg {"value":"crossing","coordinate":[[6,33],[136,71]]} 571 | data/cancel_10/jpg/44.jpg {"value":"cancel_10","coordinate":[[36,12],[99,65]]} 572 | data/paper_green/jpg/119.jpg {"value":"paper_green","coordinate":[[64,29],[117,54]]} 573 | data/cancel_10/jpg/37.jpg {"value":"cancel_10","coordinate":[[61,16],[127,75]]} 574 | data/turn_right/jpg/102.jpg {"value":"turn_right","coordinate":[[45,2],[108,51]]} 575 | data/cancel_10/jpg/73.jpg {"value":"cancel_10","coordinate":[[45,12],[108,63]]} 576 | data/paper_red/jpg/74.jpg {"value":"paper_red","coordinate":[[92,11],[139,32]]} 577 | data/crossing/jpg/52.jpg {"value":"crossing","coordinate":[[23,32],[153,88]]} 578 | data/cancel_10/jpg/85.jpg {"value":"cancel_10","coordinate":[[10,5],[62,49]]} 579 | data/crossing/jpg/21.jpg {"value":"crossing","coordinate":[[13,27],[144,63]]} 580 | data/turn_left/jpg/119.jpg {"value":"turn_left","coordinate":[[75,12],[140,71]]} 581 | data/paper_red/jpg/119.jpg {"value":"paper_red","coordinate":[[66,18],[119,44]]} 582 | data/paper_green/jpg/121.jpg {"value":"paper_green","coordinate":[[61,37],[117,65]]} 583 | data/straight/jpg/71.jpg {"value":"straight","coordinate":[[67,7],[129,57]]} 584 | data/paper_green/jpg/105.jpg {"value":"paper_green","coordinate":[[72,12],[121,35]]} 585 | data/turn_right/jpg/56.jpg {"value":"turn_right","coordinate":[[45,6],[115,71]]} 586 | data/paper_green/jpg/107.jpg {"value":"paper_green","coordinate":[[64,6],[112,28]]} 587 | data/turn_right/jpg/107.jpg {"value":"turn_right","coordinate":[[34,2],[94,52]]} 588 | data/turn_right/jpg/3.jpg {"value":"turn_right","coordinate":[[25,15],[98,78]]} 589 | data/paper_red/jpg/19.jpg {"value":"paper_red","coordinate":[[35,18],[87,43]]} 590 | data/crossing/jpg/63.jpg {"value":"crossing","coordinate":[[1,31],[133,78]]} 591 | data/paper_red/jpg/101.jpg {"value":"paper_red","coordinate":[[75,9],[124,30]]} 592 | data/paper_green/jpg/46.jpg {"value":"paper_green","coordinate":[[49,25],[98,47]]} 593 | data/cancel_10/jpg/9.jpg {"value":"cancel_10","coordinate":[[1,13],[52,64]]} 594 | data/straight/jpg/102.jpg {"value":"straight","coordinate":[[11,6],[71,59]]} 595 | data/limit_10/jpg/99.jpg {"value":"limit_10","coordinate":[[34,1],[98,49]]} 596 | data/crossing/jpg/115.jpg {"value":"crossing","coordinate":[[1,15],[119,88]]} 597 | data/turn_left/jpg/102.jpg {"value":"turn_left","coordinate":[[67,1],[128,47]]} 598 | data/crossing/jpg/84.jpg {"value":"crossing","coordinate":[[12,30],[125,65]]} 599 | data/cancel_10/jpg/57.jpg {"value":"cancel_10","coordinate":[[41,14],[103,67]]} 600 | data/straight/jpg/96.jpg {"value":"straight","coordinate":[[42,12],[109,67]]} 601 | data/turn_right/jpg/86.jpg {"value":"turn_right","coordinate":[[54,4],[115,56]]} 602 | data/crossing/jpg/69.jpg {"value":"crossing","coordinate":[[24,18],[158,60]]} 603 | data/paper_green/jpg/75.jpg {"value":"paper_green","coordinate":[[73,10],[122,34]]} 604 | data/straight/jpg/129.jpg {"value":"straight","coordinate":[[49,15],[116,71]]} 605 | data/paper_red/jpg/7.jpg {"value":"paper_red","coordinate":[[1,35],[47,63]]} 606 | data/turn_right/jpg/8.jpg {"value":"turn_right","coordinate":[[55,10],[132,76]]} 607 | data/cancel_10/jpg/77.jpg {"value":"cancel_10","coordinate":[[26,10],[84,58]]} 608 | data/cancel_10/jpg/1.jpg {"value":"cancel_10","coordinate":[[22,16],[93,78]]} 609 | data/turn_right/jpg/103.jpg {"value":"turn_right","coordinate":[[51,1],[115,51]]} 610 | data/limit_10/jpg/21.jpg {"value":"limit_10","coordinate":[[39,1],[105,53]]} 611 | data/paper_green/jpg/101.jpg {"value":"paper_green","coordinate":[[81,23],[136,47]]} 612 | data/straight/jpg/37.jpg {"value":"straight","coordinate":[[30,3],[90,54]]} 613 | data/turn_left/jpg/113.jpg {"value":"turn_left","coordinate":[[42,17],[111,75]]} 614 | data/paper_red/jpg/92.jpg {"value":"paper_red","coordinate":[[85,37],[139,63]]} 615 | data/paper_red/jpg/125.jpg {"value":"paper_red","coordinate":[[107,21],[154,43]]} 616 | data/limit_10/jpg/39.jpg {"value":"limit_10","coordinate":[[1,21],[54,78]]} 617 | data/turn_left/jpg/124.jpg {"value":"turn_left","coordinate":[[31,12],[96,71]]} 618 | data/paper_green/jpg/95.jpg {"value":"paper_green","coordinate":[[106,42],[160,73]]} 619 | data/limit_10/jpg/78.jpg {"value":"limit_10","coordinate":[[80,9],[148,64]]} 620 | data/straight/jpg/64.jpg {"value":"straight","coordinate":[[44,13],[115,70]]} 621 | data/crossing/jpg/114.jpg {"value":"crossing","coordinate":[[3,15],[123,82]]} 622 | data/paper_green/jpg/59.jpg {"value":"paper_green","coordinate":[[28,30],[78,56]]} 623 | data/straight/jpg/108.jpg {"value":"straight","coordinate":[[31,2],[93,48]]} 624 | data/limit_10/jpg/66.jpg {"value":"limit_10","coordinate":[[49,1],[114,51]]} 625 | data/straight/jpg/25.jpg {"value":"straight","coordinate":[[78,1],[144,54]]} 626 | data/limit_10/jpg/24.jpg {"value":"limit_10","coordinate":[[31,1],[97,53]]} 627 | data/straight/jpg/34.jpg {"value":"straight","coordinate":[[28,1],[91,47]]} 628 | data/paper_green/jpg/58.jpg {"value":"paper_green","coordinate":[[28,24],[76,54]]} 629 | data/crossing/jpg/103.jpg {"value":"crossing","coordinate":[[22,27],[152,67]]} 630 | data/crossing/jpg/29.jpg {"value":"crossing","coordinate":[[26,15],[146,46]]} 631 | data/paper_green/jpg/94.jpg {"value":"paper_green","coordinate":[[107,42],[158,70]]} 632 | data/paper_green/jpg/27.jpg {"value":"paper_green","coordinate":[[8,45],[58,74]]} 633 | data/turn_left/jpg/66.jpg {"value":"turn_left","coordinate":[[38,9],[104,64]]} 634 | data/turn_left/jpg/54.jpg {"value":"turn_left","coordinate":[[39,12],[109,74]]} 635 | data/limit_10/jpg/105.jpg {"value":"limit_10","coordinate":[[32,21],[102,75]]} 636 | data/limit_10/jpg/103.jpg {"value":"limit_10","coordinate":[[32,14],[101,72]]} 637 | data/paper_green/jpg/68.jpg {"value":"paper_green","coordinate":[[94,53],[151,82]]} 638 | data/turn_left/jpg/129.jpg {"value":"turn_left","coordinate":[[36,1],[94,41]]} 639 | data/turn_right/jpg/24.jpg {"value":"turn_right","coordinate":[[34,1],[101,44]]} 640 | data/crossing/jpg/71.jpg {"value":"crossing","coordinate":[[27,15],[159,55]]} 641 | data/paper_green/jpg/43.jpg {"value":"paper_green","coordinate":[[81,13],[127,38]]} 642 | data/limit_10/jpg/115.jpg {"value":"limit_10","coordinate":[[35,3],[100,55]]} 643 | data/paper_green/jpg/72.jpg {"value":"paper_green","coordinate":[[74,24],[129,52]]} 644 | data/cancel_10/jpg/95.jpg {"value":"cancel_10","coordinate":[[19,6],[74,53]]} 645 | data/crossing/jpg/76.jpg {"value":"crossing","coordinate":[[12,21],[148,61]]} 646 | data/crossing/jpg/139.jpg {"value":"crossing","coordinate":[[3,28],[130,75]]} 647 | data/turn_left/jpg/34.jpg {"value":"turn_left","coordinate":[[3,11],[54,59]]} 648 | data/cancel_10/jpg/55.jpg {"value":"cancel_10","coordinate":[[40,15],[102,68]]} 649 | data/paper_green/jpg/135.jpg {"value":"paper_green","coordinate":[[92,14],[142,37]]} 650 | data/paper_green/jpg/109.jpg {"value":"paper_green","coordinate":[[59,6],[105,30]]} 651 | data/limit_10/jpg/14.jpg {"value":"limit_10","coordinate":[[88,1],[155,55]]} 652 | data/paper_red/jpg/106.jpg {"value":"paper_red","coordinate":[[54,31],[110,65]]} 653 | data/turn_right/jpg/18.jpg {"value":"turn_right","coordinate":[[75,1],[145,57]]} 654 | data/paper_red/jpg/87.jpg {"value":"paper_red","coordinate":[[96,28],[146,57]]} 655 | data/paper_green/jpg/86.jpg {"value":"paper_green","coordinate":[[119,13],[160,34]]} 656 | data/turn_right/jpg/55.jpg {"value":"turn_right","coordinate":[[43,7],[116,70]]} 657 | data/turn_left/jpg/38.jpg {"value":"turn_left","coordinate":[[1,22],[54,77]]} 658 | data/limit_10/jpg/87.jpg {"value":"limit_10","coordinate":[[71,1],[138,49]]} 659 | data/crossing/jpg/88.jpg {"value":"crossing","coordinate":[[6,22],[117,70]]} 660 | data/turn_right/jpg/52.jpg {"value":"turn_right","coordinate":[[39,9],[110,72]]} 661 | data/turn_right/jpg/26.jpg {"value":"turn_right","coordinate":[[22,1],[86,43]]} 662 | data/turn_left/jpg/24.jpg {"value":"turn_left","coordinate":[[23,1],[85,47]]} 663 | data/paper_green/jpg/32.jpg {"value":"paper_green","coordinate":[[54,24],[113,53]]} 664 | data/crossing/jpg/124.jpg {"value":"crossing","coordinate":[[24,31],[156,66]]} 665 | data/crossing/jpg/127.jpg {"value":"crossing","coordinate":[[21,27],[152,75]]} 666 | data/crossing/jpg/35.jpg {"value":"crossing","coordinate":[[40,16],[160,77]]} 667 | data/paper_red/jpg/126.jpg {"value":"paper_red","coordinate":[[108,22],[153,44]]} 668 | data/straight/jpg/11.jpg {"value":"straight","coordinate":[[25,6],[100,70]]} 669 | data/straight/jpg/42.jpg {"value":"straight","coordinate":[[51,4],[117,56]]} 670 | data/paper_red/jpg/55.jpg {"value":"paper_red","coordinate":[[46,31],[104,58]]} 671 | data/paper_red/jpg/104.jpg {"value":"paper_red","coordinate":[[60,23],[114,51]]} 672 | data/limit_10/jpg/137.jpg {"value":"limit_10","coordinate":[[52,4],[121,58]]} 673 | data/cancel_10/jpg/109.jpg {"value":"cancel_10","coordinate":[[38,20],[101,73]]} 674 | data/turn_left/jpg/86.jpg {"value":"turn_left","coordinate":[[58,1],[118,32]]} 675 | data/straight/jpg/4.jpg {"value":"straight","coordinate":[[16,14],[91,80]]} 676 | data/crossing/jpg/135.jpg {"value":"crossing","coordinate":[[6,34],[136,69]]} 677 | data/paper_green/jpg/102.jpg {"value":"paper_green","coordinate":[[81,20],[135,46]]} 678 | data/limit_10/jpg/65.jpg {"value":"limit_10","coordinate":[[50,1],[113,40]]} 679 | data/paper_red/jpg/83.jpg {"value":"paper_red","coordinate":[[89,11],[137,39]]} 680 | data/straight/jpg/45.jpg {"value":"straight","coordinate":[[57,4],[124,61]]} 681 | data/limit_10/jpg/124.jpg {"value":"limit_10","coordinate":[[91,7],[154,63]]} 682 | data/limit_10/jpg/68.jpg {"value":"limit_10","coordinate":[[47,15],[117,74]]} 683 | data/paper_red/jpg/1.jpg {"value":"paper_red","coordinate":[[34,24],[87,55]]} 684 | data/turn_right/jpg/51.jpg {"value":"turn_right","coordinate":[[34,9],[104,72]]} 685 | data/paper_green/jpg/69.jpg {"value":"paper_green","coordinate":[[90,49],[147,77]]} 686 | data/paper_green/jpg/44.jpg {"value":"paper_green","coordinate":[[72,15],[119,40]]} 687 | data/crossing/jpg/118.jpg {"value":"crossing","coordinate":[[1,16],[113,101]]} 688 | data/paper_green/jpg/52.jpg {"value":"paper_green","coordinate":[[26,29],[78,55]]} 689 | data/turn_left/jpg/92.jpg {"value":"turn_left","coordinate":[[63,2],[126,51]]} 690 | data/turn_left/jpg/118.jpg {"value":"turn_left","coordinate":[[70,12],[137,69]]} 691 | data/straight/jpg/66.jpg {"value":"straight","coordinate":[[62,12],[129,69]]} 692 | data/turn_left/jpg/2.jpg {"value":"turn_left","coordinate":[[27,12],[100,77]]} 693 | data/turn_right/jpg/74.jpg {"value":"turn_right","coordinate":[[79,12],[144,66]]} 694 | data/crossing/jpg/13.jpg {"value":"crossing","coordinate":[[36,17],[158,50]]} 695 | data/turn_left/jpg/61.jpg {"value":"turn_left","coordinate":[[35,19],[103,76]]} 696 | data/turn_right/jpg/81.jpg {"value":"turn_right","coordinate":[[81,6],[142,58]]} 697 | data/turn_right/jpg/46.jpg {"value":"turn_right","coordinate":[[7,20],[67,82]]} 698 | data/turn_left/jpg/42.jpg {"value":"turn_left","coordinate":[[10,18],[75,78]]} 699 | data/cancel_10/jpg/62.jpg {"value":"cancel_10","coordinate":[[53,4],[112,49]]} 700 | data/paper_red/jpg/68.jpg {"value":"paper_red","coordinate":[[91,22],[140,44]]} 701 | data/crossing/jpg/101.jpg {"value":"crossing","coordinate":[[27,32],[156,73]]} 702 | data/paper_red/jpg/56.jpg {"value":"paper_red","coordinate":[[41,29],[98,55]]} 703 | data/turn_right/jpg/47.jpg {"value":"turn_right","coordinate":[[11,17],[75,79]]} 704 | data/crossing/jpg/109.jpg {"value":"crossing","coordinate":[[11,19],[135,63]]} 705 | data/cancel_10/jpg/72.jpg {"value":"cancel_10","coordinate":[[56,14],[119,67]]} 706 | data/paper_red/jpg/112.jpg {"value":"paper_red","coordinate":[[87,24],[139,54]]} 707 | data/straight/jpg/93.jpg {"value":"straight","coordinate":[[78,18],[145,76]]} 708 | data/paper_green/jpg/71.jpg {"value":"paper_green","coordinate":[[85,32],[138,59]]} 709 | data/straight/jpg/72.jpg {"value":"straight","coordinate":[[66,5],[130,55]]} 710 | data/paper_red/jpg/98.jpg {"value":"paper_red","coordinate":[[76,10],[126,33]]} 711 | data/straight/jpg/31.jpg {"value":"straight","coordinate":[[42,1],[108,43]]} 712 | data/crossing/jpg/78.jpg {"value":"crossing","coordinate":[[17,23],[153,73]]} 713 | data/limit_10/jpg/139.jpg {"value":"limit_10","coordinate":[[52,3],[119,57]]} 714 | data/straight/jpg/136.jpg {"value":"straight","coordinate":[[34,17],[99,74]]} 715 | data/paper_red/jpg/9.jpg {"value":"paper_red","coordinate":[[1,21],[45,46]]} 716 | data/crossing/jpg/73.jpg {"value":"crossing","coordinate":[[25,16],[158,55]]} 717 | data/crossing/jpg/119.jpg {"value":"crossing","coordinate":[[1,16],[112,102]]} 718 | data/straight/jpg/61.jpg {"value":"straight","coordinate":[[45,13],[114,70]]} 719 | data/limit_10/jpg/72.jpg {"value":"limit_10","coordinate":[[48,20],[123,76]]} 720 | data/turn_right/jpg/94.jpg {"value":"turn_right","coordinate":[[41,22],[110,76]]} 721 | data/turn_right/jpg/28.jpg {"value":"turn_right","coordinate":[[16,1],[73,45]]} 722 | data/turn_left/jpg/128.jpg {"value":"turn_left","coordinate":[[33,1],[95,47]]} 723 | data/straight/jpg/62.jpg {"value":"straight","coordinate":[[45,13],[112,68]]} 724 | data/limit_10/jpg/7.jpg {"value":"limit_10","coordinate":[[81,8],[152,74]]} 725 | data/turn_right/jpg/13.jpg {"value":"turn_right","coordinate":[[86,9],[157,75]]} 726 | data/turn_left/jpg/14.jpg {"value":"turn_left","coordinate":[[93,2],[160,64]]} 727 | data/crossing/jpg/24.jpg {"value":"crossing","coordinate":[[16,17],[139,53]]} 728 | data/straight/jpg/57.jpg {"value":"straight","coordinate":[[34,6],[99,59]]} 729 | data/paper_green/jpg/13.jpg {"value":"paper_green","coordinate":[[55,14],[114,43]]} 730 | data/cancel_10/jpg/133.jpg {"value":"cancel_10","coordinate":[[53,17],[118,73]]} 731 | data/cancel_10/jpg/14.jpg {"value":"cancel_10","coordinate":[[6,2],[63,53]]} 732 | data/paper_red/jpg/84.jpg {"value":"paper_red","coordinate":[[89,16],[138,41]]} 733 | data/crossing/jpg/5.jpg {"value":"crossing","coordinate":[[14,30],[144,84]]} 734 | data/limit_10/jpg/15.jpg {"value":"limit_10","coordinate":[[38,11],[108,73]]} 735 | data/limit_10/jpg/117.jpg {"value":"limit_10","coordinate":[[60,9],[130,68]]} 736 | data/paper_green/jpg/128.jpg {"value":"paper_green","coordinate":[[96,24],[146,47]]} 737 | data/turn_right/jpg/105.jpg {"value":"turn_right","coordinate":[[44,2],[108,52]]} 738 | data/cancel_10/jpg/103.jpg {"value":"cancel_10","coordinate":[[22,4],[76,48]]} 739 | data/turn_left/jpg/22.jpg {"value":"turn_left","coordinate":[[37,1],[104,49]]} 740 | data/paper_green/jpg/138.jpg {"value":"paper_green","coordinate":[[94,18],[143,43]]} 741 | data/turn_left/jpg/45.jpg {"value":"turn_left","coordinate":[[29,12],[96,73]]} 742 | data/turn_right/jpg/65.jpg {"value":"turn_right","coordinate":[[102,15],[160,73]]} 743 | data/straight/jpg/74.jpg {"value":"straight","coordinate":[[66,4],[132,57]]} 744 | data/straight/jpg/69.jpg {"value":"straight","coordinate":[[66,9],[132,62]]} 745 | data/limit_10/jpg/37.jpg {"value":"limit_10","coordinate":[[1,17],[51,69]]} 746 | data/paper_green/jpg/127.jpg {"value":"paper_green","coordinate":[[98,29],[148,53]]} 747 | data/crossing/jpg/82.jpg {"value":"crossing","coordinate":[[22,18],[143,67]]} 748 | data/limit_10/jpg/98.jpg {"value":"limit_10","coordinate":[[31,5],[99,61]]} 749 | data/cancel_10/jpg/127.jpg {"value":"cancel_10","coordinate":[[25,14],[85,65]]} 750 | data/turn_left/jpg/97.jpg {"value":"turn_left","coordinate":[[89,16],[154,75]]} 751 | data/crossing/jpg/112.jpg {"value":"crossing","coordinate":[[8,14],[130,73]]} 752 | data/limit_10/jpg/129.jpg {"value":"limit_10","coordinate":[[55,6],[125,63]]} 753 | data/straight/jpg/77.jpg {"value":"straight","coordinate":[[92,8],[151,60]]} 754 | data/turn_right/jpg/98.jpg {"value":"turn_right","coordinate":[[39,14],[106,71]]} 755 | data/turn_right/jpg/33.jpg {"value":"turn_right","coordinate":[[2,1],[50,44]]} 756 | data/cancel_10/jpg/116.jpg {"value":"cancel_10","coordinate":[[52,10],[117,60]]} 757 | data/crossing/jpg/97.jpg {"value":"crossing","coordinate":[[13,22],[142,74]]} 758 | data/turn_left/jpg/84.jpg {"value":"turn_left","coordinate":[[57,3],[121,53]]} 759 | data/cancel_10/jpg/108.jpg {"value":"cancel_10","coordinate":[[33,16],[94,68]]} 760 | data/turn_left/jpg/121.jpg {"value":"turn_left","coordinate":[[74,15],[144,74]]} 761 | data/paper_red/jpg/121.jpg {"value":"paper_red","coordinate":[[96,20],[146,46]]} 762 | data/turn_left/jpg/73.jpg {"value":"turn_left","coordinate":[[28,7],[91,58]]} 763 | data/limit_10/jpg/45.jpg {"value":"limit_10","coordinate":[[28,14],[92,72]]} 764 | data/paper_red/jpg/89.jpg {"value":"paper_red","coordinate":[[99,36],[151,64]]} 765 | data/turn_right/jpg/75.jpg {"value":"turn_right","coordinate":[[80,10],[144,64]]} 766 | data/limit_10/jpg/33.jpg {"value":"limit_10","coordinate":[[1,10],[53,58]]} 767 | data/paper_green/jpg/89.jpg {"value":"paper_green","coordinate":[[93,12],[142,37]]} 768 | data/turn_left/jpg/87.jpg {"value":"turn_left","coordinate":[[87,10],[148,63]]} 769 | data/cancel_10/jpg/51.jpg {"value":"cancel_10","coordinate":[[31,13],[88,64]]} 770 | data/crossing/jpg/107.jpg {"value":"crossing","coordinate":[[8,24],[135,60]]} 771 | data/paper_red/jpg/129.jpg {"value":"paper_red","coordinate":[[103,19],[149,41]]} 772 | data/turn_right/jpg/126.jpg {"value":"turn_right","coordinate":[[83,3],[145,56]]} 773 | data/paper_red/jpg/88.jpg {"value":"paper_red","coordinate":[[97,30],[148,59]]} 774 | data/cancel_10/jpg/101.jpg {"value":"cancel_10","coordinate":[[26,3],[80,47]]} 775 | data/turn_left/jpg/126.jpg {"value":"turn_left","coordinate":[[30,12],[94,67]]} 776 | data/paper_green/jpg/53.jpg {"value":"paper_green","coordinate":[[27,28],[79,57]]} 777 | data/turn_left/jpg/135.jpg {"value":"turn_left","coordinate":[[49,11],[117,67]]} 778 | data/limit_10/jpg/6.jpg {"value":"limit_10","coordinate":[[41,11],[112,76]]} 779 | data/straight/jpg/88.jpg {"value":"straight","coordinate":[[73,12],[139,68]]} 780 | data/turn_right/jpg/71.jpg {"value":"turn_right","coordinate":[[86,16],[150,75]]} 781 | data/limit_10/jpg/81.jpg {"value":"limit_10","coordinate":[[75,1],[136,40]]} 782 | data/straight/jpg/21.jpg {"value":"straight","coordinate":[[96,2],[160,62]]} 783 | data/limit_10/jpg/73.jpg {"value":"limit_10","coordinate":[[50,18],[126,74]]} 784 | data/crossing/jpg/3.jpg {"value":"crossing","coordinate":[[21,33],[151,71]]} 785 | data/straight/jpg/36.jpg {"value":"straight","coordinate":[[28,4],[88,51]]} 786 | data/crossing/jpg/68.jpg {"value":"crossing","coordinate":[[19,26],[156,68]]} 787 | data/crossing/jpg/137.jpg {"value":"crossing","coordinate":[[3,30],[130,75]]} 788 | data/crossing/jpg/14.jpg {"value":"crossing","coordinate":[[47,18],[160,64]]} 789 | data/turn_left/jpg/81.jpg {"value":"turn_left","coordinate":[[54,8],[119,64]]} 790 | data/turn_right/jpg/77.jpg {"value":"turn_right","coordinate":[[82,7],[143,60]]} 791 | data/straight/jpg/41.jpg {"value":"straight","coordinate":[[46,5],[112,59]]} 792 | data/paper_green/jpg/104.jpg {"value":"paper_green","coordinate":[[72,14],[122,37]]} 793 | data/turn_left/jpg/114.jpg {"value":"turn_left","coordinate":[[35,14],[103,73]]} 794 | data/turn_right/jpg/34.jpg {"value":"turn_right","coordinate":[[2,1],[53,45]]} 795 | data/turn_left/jpg/26.jpg {"value":"turn_left","coordinate":[[16,2],[72,45]]} 796 | data/turn_left/jpg/93.jpg {"value":"turn_left","coordinate":[[62,5],[127,59]]} 797 | data/limit_10/jpg/25.jpg {"value":"limit_10","coordinate":[[29,1],[91,54]]} 798 | data/paper_green/jpg/124.jpg {"value":"paper_green","coordinate":[[88,33],[143,59]]} 799 | data/paper_green/jpg/26.jpg {"value":"paper_green","coordinate":[[4,49],[49,75]]} 800 | data/turn_left/jpg/33.jpg {"value":"turn_left","coordinate":[[3,10],[54,54]]} 801 | data/turn_right/jpg/59.jpg {"value":"turn_right","coordinate":[[42,5],[114,70]]} 802 | data/limit_10/jpg/13.jpg {"value":"limit_10","coordinate":[[38,12],[110,73]]} 803 | data/straight/jpg/128.jpg {"value":"straight","coordinate":[[48,11],[115,67]]} 804 | data/cancel_10/jpg/38.jpg {"value":"cancel_10","coordinate":[[58,16],[125,76]]} 805 | data/paper_red/jpg/82.jpg {"value":"paper_red","coordinate":[[95,10],[142,34]]} 806 | data/paper_red/jpg/48.jpg {"value":"paper_red","coordinate":[[77,24],[134,55]]} 807 | data/turn_right/jpg/36.jpg {"value":"turn_right","coordinate":[[3,9],[54,57]]} 808 | data/straight/jpg/18.jpg {"value":"straight","coordinate":[[89,5],[157,73]]} 809 | data/turn_right/jpg/72.jpg {"value":"turn_right","coordinate":[[81,16],[147,75]]} 810 | data/paper_green/jpg/93.jpg {"value":"paper_green","coordinate":[[107,36],[157,64]]} 811 | data/crossing/jpg/77.jpg {"value":"crossing","coordinate":[[14,23],[149,64]]} 812 | data/limit_10/jpg/31.jpg {"value":"limit_10","coordinate":[[3,1],[53,47]]} 813 | data/limit_10/jpg/97.jpg {"value":"limit_10","coordinate":[[31,6],[103,66]]} 814 | data/crossing/jpg/138.jpg {"value":"crossing","coordinate":[[3,30],[128,76]]} 815 | data/straight/jpg/46.jpg {"value":"straight","coordinate":[[56,3],[123,61]]} 816 | data/cancel_10/jpg/19.jpg {"value":"cancel_10","coordinate":[[37,5],[96,55]]} 817 | data/crossing/jpg/126.jpg {"value":"crossing","coordinate":[[25,27],[157,72]]} 818 | data/turn_right/jpg/123.jpg {"value":"turn_right","coordinate":[[29,10],[92,66]]} 819 | data/turn_left/jpg/116.jpg {"value":"turn_left","coordinate":[[52,9],[119,65]]} 820 | data/limit_10/jpg/106.jpg {"value":"limit_10","coordinate":[[32,23],[103,79]]} 821 | data/paper_green/jpg/99.jpg {"value":"paper_green","coordinate":[[85,25],[137,52]]} 822 | data/paper_red/jpg/23.jpg {"value":"paper_red","coordinate":[[34,29],[88,55]]} 823 | data/paper_green/jpg/77.jpg {"value":"paper_green","coordinate":[[75,5],[124,28]]} 824 | data/limit_10/jpg/76.jpg {"value":"limit_10","coordinate":[[77,12],[146,75]]} 825 | data/paper_red/jpg/24.jpg {"value":"paper_red","coordinate":[[31,33],[85,59]]} 826 | data/straight/jpg/124.jpg {"value":"straight","coordinate":[[59,15],[127,71]]} 827 | data/crossing/jpg/12.jpg {"value":"crossing","coordinate":[[31,17],[154,51]]} 828 | data/paper_green/jpg/126.jpg {"value":"paper_green","coordinate":[[95,30],[148,58]]} 829 | data/cancel_10/jpg/98.jpg {"value":"cancel_10","coordinate":[[26,3],[81,47]]} 830 | data/paper_red/jpg/137.jpg {"value":"paper_red","coordinate":[[96,32],[147,57]]} 831 | data/cancel_10/jpg/17.jpg {"value":"cancel_10","coordinate":[[25,2],[82,51]]} 832 | data/limit_10/jpg/126.jpg {"value":"limit_10","coordinate":[[79,1],[141,50]]} 833 | data/crossing/jpg/111.jpg {"value":"crossing","coordinate":[[12,16],[138,67]]} 834 | data/paper_green/jpg/5.jpg {"value":"paper_green","coordinate":[[28,25],[90,62]]} 835 | data/limit_10/jpg/134.jpg {"value":"limit_10","coordinate":[[51,8],[121,63]]} 836 | data/cancel_10/jpg/42.jpg {"value":"cancel_10","coordinate":[[40,10],[104,64]]} 837 | data/paper_green/jpg/48.jpg {"value":"paper_green","coordinate":[[32,30],[79,53]]} 838 | data/turn_left/jpg/71.jpg {"value":"turn_left","coordinate":[[21,4],[84,55]]} 839 | data/cancel_10/jpg/96.jpg {"value":"cancel_10","coordinate":[[26,6],[82,52]]} 840 | data/turn_right/jpg/12.jpg {"value":"turn_right","coordinate":[[81,9],[155,76]]} 841 | data/paper_green/jpg/108.jpg {"value":"paper_green","coordinate":[[60,3],[107,26]]} 842 | data/paper_green/jpg/122.jpg {"value":"paper_green","coordinate":[[71,37],[126,62]]} 843 | data/paper_green/jpg/125.jpg {"value":"paper_green","coordinate":[[90,31],[143,59]]} 844 | data/turn_right/jpg/85.jpg {"value":"turn_right","coordinate":[[51,2],[114,55]]} 845 | data/cancel_10/jpg/118.jpg {"value":"cancel_10","coordinate":[[46,5],[104,54]]} 846 | data/paper_green/jpg/14.jpg {"value":"paper_green","coordinate":[[60,12],[118,41]]} 847 | data/straight/jpg/58.jpg {"value":"straight","coordinate":[[26,6],[89,60]]} 848 | data/limit_10/jpg/88.jpg {"value":"limit_10","coordinate":[[69,4],[138,59]]} 849 | data/paper_green/jpg/17.jpg {"value":"paper_green","coordinate":[[64,6],[117,28]]} 850 | data/turn_left/jpg/35.jpg {"value":"turn_left","coordinate":[[3,14],[55,62]]} 851 | data/straight/jpg/85.jpg {"value":"straight","coordinate":[[73,3],[135,50]]} 852 | data/paper_red/jpg/124.jpg {"value":"paper_red","coordinate":[[108,22],[155,46]]} 853 | data/crossing/jpg/74.jpg {"value":"crossing","coordinate":[[20,17],[156,57]]} 854 | data/paper_green/jpg/24.jpg {"value":"paper_green","coordinate":[[1,38],[44,60]]} 855 | data/turn_right/jpg/91.jpg {"value":"turn_right","coordinate":[[51,16],[118,76]]} 856 | data/cancel_10/jpg/63.jpg {"value":"cancel_10","coordinate":[[51,4],[110,51]]} 857 | data/limit_10/jpg/29.jpg {"value":"limit_10","coordinate":[[9,1],[64,48]]} 858 | data/turn_left/jpg/43.jpg {"value":"turn_left","coordinate":[[16,17],[81,75]]} 859 | data/turn_left/jpg/28.jpg {"value":"turn_left","coordinate":[[10,1],[63,43]]} 860 | data/straight/jpg/6.jpg {"value":"straight","coordinate":[[9,14],[79,79]]} 861 | data/limit_10/jpg/96.jpg {"value":"limit_10","coordinate":[[32,6],[98,63]]} 862 | data/limit_10/jpg/114.jpg {"value":"limit_10","coordinate":[[31,2],[96,54]]} 863 | data/straight/jpg/133.jpg {"value":"straight","coordinate":[[48,21],[116,76]]} 864 | data/cancel_10/jpg/67.jpg {"value":"cancel_10","coordinate":[[59,18],[124,73]]} 865 | data/cancel_10/jpg/83.jpg {"value":"cancel_10","coordinate":[[16,6],[70,52]]} 866 | data/paper_green/jpg/42.jpg {"value":"paper_green","coordinate":[[86,1],[134,23]]} 867 | data/straight/jpg/76.jpg {"value":"straight","coordinate":[[84,8],[146,60]]} 868 | data/paper_red/jpg/115.jpg {"value":"paper_red","coordinate":[[78,19],[130,44]]} 869 | data/paper_red/jpg/96.jpg {"value":"paper_red","coordinate":[[79,20],[128,44]]} 870 | data/straight/jpg/125.jpg {"value":"straight","coordinate":[[52,13],[122,72]]} 871 | data/turn_left/jpg/25.jpg {"value":"turn_left","coordinate":[[19,1],[77,47]]} 872 | data/crossing/jpg/54.jpg {"value":"crossing","coordinate":[[23,33],[153,88]]} 873 | data/cancel_10/jpg/16.jpg {"value":"cancel_10","coordinate":[[19,1],[76,48]]} 874 | data/limit_10/jpg/57.jpg {"value":"limit_10","coordinate":[[41,12],[111,72]]} 875 | data/straight/jpg/8.jpg {"value":"straight","coordinate":[[5,13],[72,76]]} 876 | data/straight/jpg/39.jpg {"value":"straight","coordinate":[[37,4],[98,56]]} 877 | data/turn_left/jpg/44.jpg {"value":"turn_left","coordinate":[[22,15],[87,73]]} 878 | data/turn_left/jpg/67.jpg {"value":"turn_left","coordinate":[[39,5],[102,58]]} 879 | data/turn_left/jpg/76.jpg {"value":"turn_left","coordinate":[[24,17],[90,78]]} 880 | data/cancel_10/jpg/24.jpg {"value":"cancel_10","coordinate":[[69,1],[130,52]]} 881 | data/limit_10/jpg/122.jpg {"value":"limit_10","coordinate":[[100,20],[160,86]]} 882 | data/straight/jpg/26.jpg {"value":"straight","coordinate":[[69,1],[136,53]]} 883 | data/turn_left/jpg/53.jpg {"value":"turn_left","coordinate":[[36,14],[107,76]]} 884 | data/crossing/jpg/45.jpg {"value":"crossing","coordinate":[[4,16],[128,76]]} 885 | data/turn_right/jpg/87.jpg {"value":"turn_right","coordinate":[[53,7],[122,64]]} 886 | data/cancel_10/jpg/18.jpg {"value":"cancel_10","coordinate":[[32,3],[89,52]]} 887 | data/turn_left/jpg/37.jpg {"value":"turn_left","coordinate":[[1,19],[52,72]]} 888 | data/paper_green/jpg/29.jpg {"value":"paper_green","coordinate":[[26,31],[81,61]]} 889 | data/cancel_10/jpg/131.jpg {"value":"cancel_10","coordinate":[[45,15],[108,70]]} 890 | data/paper_green/jpg/8.jpg {"value":"paper_green","coordinate":[[36,21],[95,50]]} 891 | data/turn_right/jpg/135.jpg {"value":"turn_right","coordinate":[[35,15],[100,75]]} 892 | data/straight/jpg/114.jpg {"value":"straight","coordinate":[[41,18],[108,75]]} 893 | data/turn_left/jpg/137.jpg {"value":"turn_left","coordinate":[[76,16],[141,74]]} 894 | data/paper_green/jpg/92.jpg {"value":"paper_green","coordinate":[[96,26],[148,55]]} 895 | data/paper_red/jpg/76.jpg {"value":"paper_red","coordinate":[[96,10],[144,31]]} 896 | data/limit_10/jpg/55.jpg {"value":"limit_10","coordinate":[[41,8],[111,70]]} 897 | data/paper_red/jpg/37.jpg {"value":"paper_red","coordinate":[[67,7],[119,28]]} 898 | data/turn_left/jpg/52.jpg {"value":"turn_left","coordinate":[[35,14],[103,77]]} 899 | data/paper_red/jpg/47.jpg {"value":"paper_red","coordinate":[[85,20],[136,49]]} 900 | data/turn_right/jpg/21.jpg {"value":"turn_right","coordinate":[[56,1],[125,55]]} 901 | data/turn_right/jpg/76.jpg {"value":"turn_right","coordinate":[[82,8],[143,60]]} 902 | data/limit_10/jpg/3.jpg {"value":"limit_10","coordinate":[[36,7],[116,76]]} 903 | data/straight/jpg/123.jpg {"value":"straight","coordinate":[[65,15],[132,73]]} 904 | data/turn_left/jpg/1.jpg {"value":"turn_left","coordinate":[[26,12],[101,76]]} 905 | data/straight/jpg/54.jpg {"value":"straight","coordinate":[[71,10],[140,67]]} 906 | data/turn_right/jpg/9.jpg {"value":"turn_right","coordinate":[[66,12],[138,76]]} 907 | data/turn_right/jpg/14.jpg {"value":"turn_right","coordinate":[[87,7],[156,71]]} 908 | data/paper_red/jpg/8.jpg {"value":"paper_red","coordinate":[[1,30],[47,56]]} 909 | data/paper_red/jpg/21.jpg {"value":"paper_red","coordinate":[[38,19],[90,46]]} 910 | data/cancel_10/jpg/86.jpg {"value":"cancel_10","coordinate":[[9,6],[59,49]]} 911 | data/crossing/jpg/129.jpg {"value":"crossing","coordinate":[[16,26],[143,74]]} 912 | data/paper_green/jpg/47.jpg {"value":"paper_green","coordinate":[[40,28],[86,50]]} 913 | data/turn_left/jpg/98.jpg {"value":"turn_left","coordinate":[[78,15],[144,73]]} 914 | data/limit_10/jpg/127.jpg {"value":"limit_10","coordinate":[[71,1],[135,50]]} 915 | data/cancel_10/jpg/137.jpg {"value":"cancel_10","coordinate":[[57,22],[122,76]]} 916 | data/limit_10/jpg/128.jpg {"value":"limit_10","coordinate":[[62,2],[129,55]]} 917 | data/turn_right/jpg/106.jpg {"value":"turn_right","coordinate":[[36,1],[98,52]]} 918 | data/paper_green/jpg/139.jpg {"value":"paper_green","coordinate":[[95,22],[143,46]]} 919 | data/turn_right/jpg/45.jpg {"value":"turn_right","coordinate":[[4,22],[64,83]]} 920 | data/turn_right/jpg/82.jpg {"value":"turn_right","coordinate":[[76,7],[136,59]]} 921 | data/straight/jpg/23.jpg {"value":"straight","coordinate":[[86,1],[156,53]]} 922 | data/cancel_10/jpg/4.jpg {"value":"cancel_10","coordinate":[[23,13],[90,74]]} 923 | data/turn_right/jpg/58.jpg {"value":"turn_right","coordinate":[[44,5],[115,71]]} 924 | data/limit_10/jpg/26.jpg {"value":"limit_10","coordinate":[[25,1],[84,52]]} 925 | data/cancel_10/jpg/135.jpg {"value":"cancel_10","coordinate":[[61,21],[127,75]]} 926 | data/cancel_10/jpg/89.jpg {"value":"cancel_10","coordinate":[[2,9],[51,53]]} 927 | data/cancel_10/jpg/68.jpg {"value":"cancel_10","coordinate":[[70,24],[134,75]]} 928 | data/turn_right/jpg/95.jpg {"value":"turn_right","coordinate":[[39,22],[105,76]]} 929 | data/limit_10/jpg/1.jpg {"value":"limit_10","coordinate":[[36,5],[114,74]]} 930 | data/paper_red/jpg/5.jpg {"value":"paper_red","coordinate":[[13,21],[62,51]]} 931 | data/paper_green/jpg/1.jpg {"value":"paper_green","coordinate":[[20,34],[76,65]]} 932 | data/paper_green/jpg/49.jpg {"value":"paper_green","coordinate":[[28,34],[75,57]]} 933 | data/paper_red/jpg/38.jpg {"value":"paper_red","coordinate":[[68,4],[118,25]]} 934 | data/crossing/jpg/55.jpg {"value":"crossing","coordinate":[[23,32],[152,88]]} 935 | data/turn_right/jpg/109.jpg {"value":"turn_right","coordinate":[[30,11],[90,65]]} 936 | data/paper_green/jpg/3.jpg {"value":"paper_green","coordinate":[[21,35],[81,64]]} 937 | data/turn_left/jpg/16.jpg {"value":"turn_left","coordinate":[[84,1],[151,58]]} 938 | data/turn_left/jpg/109.jpg {"value":"turn_left","coordinate":[[69,13],[136,70]]} 939 | data/turn_left/jpg/12.jpg {"value":"turn_left","coordinate":[[96,8],[160,69]]} 940 | data/paper_green/jpg/103.jpg {"value":"paper_green","coordinate":[[79,18],[128,40]]} 941 | data/turn_right/jpg/7.jpg {"value":"turn_right","coordinate":[[52,10],[127,76]]} 942 | data/turn_right/jpg/48.jpg {"value":"turn_right","coordinate":[[15,16],[81,78]]} 943 | data/turn_left/jpg/63.jpg {"value":"turn_left","coordinate":[[35,16],[103,75]]} 944 | data/turn_left/jpg/74.jpg {"value":"turn_left","coordinate":[[31,10],[96,64]]} 945 | data/cancel_10/jpg/107.jpg {"value":"cancel_10","coordinate":[[31,11],[88,60]]} 946 | data/paper_red/jpg/16.jpg {"value":"paper_red","coordinate":[[29,1],[79,15]]} 947 | data/cancel_10/jpg/53.jpg {"value":"cancel_10","coordinate":[[32,11],[92,62]]} 948 | data/crossing/jpg/48.jpg {"value":"crossing","coordinate":[[26,21],[151,69]]} 949 | data/paper_red/jpg/43.jpg {"value":"paper_red","coordinate":[[89,12],[137,38]]} 950 | data/straight/jpg/122.jpg {"value":"straight","coordinate":[[76,16],[142,74]]} 951 | data/paper_green/jpg/112.jpg {"value":"paper_green","coordinate":[[47,23],[100,52]]} 952 | data/turn_left/jpg/72.jpg {"value":"turn_left","coordinate":[[28,5],[90,57]]} 953 | data/cancel_10/jpg/26.jpg {"value":"cancel_10","coordinate":[[78,4],[137,55]]} 954 | data/turn_right/jpg/115.jpg {"value":"turn_right","coordinate":[[40,13],[108,73]]} 955 | data/turn_left/jpg/112.jpg {"value":"turn_left","coordinate":[[51,19],[120,77]]} 956 | data/limit_10/jpg/104.jpg {"value":"limit_10","coordinate":[[32,17],[102,77]]} 957 | data/turn_right/jpg/97.jpg {"value":"turn_right","coordinate":[[36,18],[104,76]]} 958 | data/crossing/jpg/123.jpg {"value":"crossing","coordinate":[[22,28],[151,67]]} 959 | data/crossing/jpg/62.jpg {"value":"crossing","coordinate":[[1,18],[137,64]]} 960 | data/cancel_10/jpg/45.jpg {"value":"cancel_10","coordinate":[[35,12],[97,68]]} 961 | data/paper_red/jpg/79.jpg {"value":"paper_red","coordinate":[[109,11],[156,33]]} 962 | data/cancel_10/jpg/65.jpg {"value":"cancel_10","coordinate":[[51,10],[112,61]]} 963 | data/limit_10/jpg/48.jpg {"value":"limit_10","coordinate":[[41,12],[110,72]]} 964 | data/limit_10/jpg/116.jpg {"value":"limit_10","coordinate":[[47,5],[113,59]]} 965 | data/limit_10/jpg/18.jpg {"value":"limit_10","coordinate":[[63,1],[130,53]]} 966 | data/turn_left/jpg/41.jpg {"value":"turn_left","coordinate":[[7,19],[68,80]]} 967 | data/turn_left/jpg/39.jpg {"value":"turn_left","coordinate":[[1,23],[56,80]]} 968 | data/straight/jpg/87.jpg {"value":"straight","coordinate":[[71,9],[136,61]]} 969 | data/limit_10/jpg/82.jpg {"value":"limit_10","coordinate":[[70,1],[134,33]]} 970 | data/straight/jpg/52.jpg {"value":"straight","coordinate":[[69,8],[135,65]]} 971 | data/limit_10/jpg/35.jpg {"value":"limit_10","coordinate":[[1,14],[53,61]]} 972 | data/turn_right/jpg/29.jpg {"value":"turn_right","coordinate":[[14,1],[69,45]]} 973 | data/cancel_10/jpg/112.jpg {"value":"cancel_10","coordinate":[[55,24],[120,74]]} 974 | data/crossing/jpg/113.jpg {"value":"crossing","coordinate":[[6,15],[128,75]]} 975 | data/crossing/jpg/108.jpg {"value":"crossing","coordinate":[[8,22],[136,61]]} 976 | data/paper_red/jpg/18.jpg {"value":"paper_red","coordinate":[[35,11],[86,35]]} 977 | data/cancel_10/jpg/43.jpg {"value":"cancel_10","coordinate":[[38,10],[101,65]]} 978 | data/cancel_10/jpg/132.jpg {"value":"cancel_10","coordinate":[[49,17],[113,71]]} 979 | data/paper_green/jpg/64.jpg {"value":"paper_green","coordinate":[[89,33],[142,61]]} 980 | data/turn_right/jpg/125.jpg {"value":"turn_right","coordinate":[[69,4],[131,57]]} 981 | data/turn_right/jpg/66.jpg {"value":"turn_right","coordinate":[[93,18],[156,76]]} 982 | data/straight/jpg/105.jpg {"value":"straight","coordinate":[[12,7],[69,55]]} 983 | data/turn_left/jpg/3.jpg {"value":"turn_left","coordinate":[[30,10],[105,77]]} 984 | data/turn_left/jpg/94.jpg {"value":"turn_left","coordinate":[[65,7],[130,61]]} 985 | data/paper_green/jpg/66.jpg {"value":"paper_green","coordinate":[[92,45],[149,76]]} 986 | data/crossing/jpg/96.jpg {"value":"crossing","coordinate":[[17,22],[144,70]]} 987 | data/paper_red/jpg/65.jpg {"value":"paper_red","coordinate":[[92,35],[146,62]]} 988 | data/limit_10/jpg/89.jpg {"value":"limit_10","coordinate":[[73,7],[142,65]]} 989 | data/turn_right/jpg/43.jpg {"value":"turn_right","coordinate":[[1,23],[58,81]]} 990 | data/straight/jpg/134.jpg {"value":"straight","coordinate":[[44,18],[112,75]]} 991 | data/cancel_10/jpg/138.jpg {"value":"cancel_10","coordinate":[[54,21],[119,75]]} 992 | data/paper_red/jpg/46.jpg {"value":"paper_red","coordinate":[[89,16],[140,44]]} 993 | data/paper_red/jpg/29.jpg {"value":"paper_red","coordinate":[[37,39],[95,67]]} 994 | data/turn_left/jpg/13.jpg {"value":"turn_left","coordinate":[[96,6],[160,67]]} 995 | data/paper_red/jpg/139.jpg {"value":"paper_red","coordinate":[[98,32],[149,59]]} 996 | data/paper_red/jpg/36.jpg {"value":"paper_red","coordinate":[[70,15],[121,37]]} 997 | data/cancel_10/jpg/91.jpg {"value":"cancel_10","coordinate":[[2,10],[51,54]]} 998 | data/crossing/jpg/34.jpg {"value":"crossing","coordinate":[[45,17],[160,83]]} 999 | data/crossing/jpg/122.jpg {"value":"crossing","coordinate":[[18,23],[143,72]]} 1000 | data/turn_left/jpg/136.jpg {"value":"turn_left","coordinate":[[61,15],[130,72]]} 1001 | data/crossing/jpg/57.jpg {"value":"crossing","coordinate":[[24,28],[155,70]]} 1002 | data/turn_left/jpg/57.jpg {"value":"turn_left","coordinate":[[39,10],[110,73]]} 1003 | data/cancel_10/jpg/125.jpg {"value":"cancel_10","coordinate":[[13,16],[68,66]]} 1004 | data/cancel_10/jpg/31.jpg {"value":"cancel_10","coordinate":[[93,4],[150,55]]} 1005 | data/cancel_10/jpg/58.jpg {"value":"cancel_10","coordinate":[[40,11],[102,61]]} 1006 | data/limit_10/jpg/16.jpg {"value":"limit_10","coordinate":[[79,1],[146,57]]} 1007 | data/limit_10/jpg/112.jpg {"value":"limit_10","coordinate":[[21,6],[88,61]]} 1008 | -------------------------------------------------------------------------------- /pd/detector.py: -------------------------------------------------------------------------------- 1 | # -*- coding: UTF-8 -*- 2 | """ 3 | 训练常基于dark-net的YOLOv3网络,目标检测 4 | """ 5 | from __future__ import absolute_import 6 | from __future__ import division 7 | from __future__ import print_function 8 | import os 9 | os.environ["FLAGS_fraction_of_gpu_memory_to_use"] = '0.82' 10 | import uuid 11 | import numpy as np 12 | import time 13 | import six 14 | import math 15 | import random 16 | import paddle 17 | import paddle.fluid as fluid 18 | import logging 19 | import xml.etree.ElementTree 20 | import codecs 21 | import json 22 | import cv2 23 | 24 | from paddle.fluid.initializer import MSRA 25 | from paddle.fluid.param_attr import ParamAttr 26 | from paddle.fluid.regularizer import L2Decay 27 | from PIL import Image, ImageEnhance, ImageDraw 28 | 29 | import socket 30 | 31 | # 创建一个服务器socket 32 | socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 33 | # 设置立即重置端口号 34 | socket_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 35 | # 绑定端口 36 | socket_server.bind(('', 1234)) 37 | # 被动连接 38 | socket_server.listen(28) 39 | #等待连接 40 | client_socket, client_address = socket_server.accept() 41 | 42 | 43 | # logger = None 44 | train_parameters = { 45 | "data_dir": "data", 46 | "train_list": "train.txt", 47 | "eval_list": "eval.txt", 48 | "class_dim": -1, 49 | "label_dict": {}, 50 | "num_dict": {}, 51 | "image_count": -1, 52 | "continue_train": True, # 是否加载前一次的训练参数,接着训练 53 | "pretrained": False, 54 | "pretrained_model_dir": "./pretrained-model", 55 | "save_model_dir": "./yolo-model", 56 | "model_prefix": "yolo-v3", 57 | "freeze_dir": "freeze_model", 58 | "use_tiny": True, # 是否使用 裁剪 tiny 模型 59 | "max_box_num": 6, # 一幅图上最多有多少个目标 60 | "num_epochs": 100, 61 | "train_batch_size": 32, # 对于完整 yolov3,每一批的训练样本不能太多,内存会炸掉;如果使用 tiny,可以适当大一些 62 | "use_gpu": False, 63 | "yolo_cfg": { 64 | "input_size": [3, 448, 448], # 原版的边长大小为608,为了提高训练速度和预测速度,此处压缩为448 65 | "anchors": [22, 45, 46, 33, 43, 88, 85, 66, 115, 146, 275, 240], 66 | "anchor_mask": [[6, 7, 8], [3, 4, 5], [0, 1, 2]] 67 | }, 68 | "yolo_tiny_cfg": { 69 | "input_size": [3, 424,424], 70 | "anchors": [ 1,3, 2,4, 3,1, 4,1], 71 | "anchor_mask": [[3, 4, 5], [0, 1, 2]] 72 | }, 73 | "ignore_thresh": 0.7, 74 | "mean_rgb": [127.5, 127.5, 127.5], 75 | "mode": "train", 76 | "multi_data_reader_count": 4, 77 | "apply_distort": True, 78 | "nms_top_k": 300, 79 | "nms_pos_k": 300, 80 | "valid_thresh": 0.01, 81 | "nms_thresh": 0.45, 82 | "image_distort_strategy": { 83 | "expand_prob": 0.5, 84 | "expand_max_ratio": 4, 85 | "hue_prob": 0.5, 86 | "hue_delta": 18, 87 | "contrast_prob": 0.5, 88 | "contrast_delta": 0.5, 89 | "saturation_prob": 0.5, 90 | "saturation_delta": 0.5, 91 | "brightness_prob": 0.5, 92 | "brightness_delta": 0.125 93 | }, 94 | "sgd_strategy": { 95 | "learning_rate": 0.001, 96 | "lr_epochs": [30, 50, 65], 97 | "lr_decay": [1, 0.5, 0.25, 0.1] 98 | }, 99 | "early_stop": { 100 | "sample_frequency": 50, 101 | "successive_limit": 3, 102 | "min_loss": 2.5, 103 | "min_curr_map": 0.84 104 | } 105 | } 106 | 107 | 108 | def init_train_parameters(): 109 | """ 110 | 初始化训练参数,主要是初始化图片数量,类别数 111 | :return: 112 | """ 113 | file_list = os.path.join(train_parameters['data_dir'], train_parameters['train_list']) 114 | label_list = os.path.join(train_parameters['data_dir'], "label_list") 115 | print(file_list) 116 | print(label_list) 117 | index = 0 118 | with codecs.open(label_list, encoding='utf-8') as flist: 119 | lines = [line.strip() for line in flist] 120 | for line in lines: 121 | train_parameters['num_dict'][index] = line.strip() 122 | train_parameters['label_dict'][line.strip()] = index 123 | index += 1 124 | train_parameters['class_dim'] = index 125 | with codecs.open(file_list, encoding='utf-8') as flist: 126 | lines = [line.strip() for line in flist] 127 | train_parameters['image_count'] = len(lines) 128 | 129 | import codecs 130 | import sys 131 | import numpy as np 132 | import time 133 | import paddle 134 | import paddle.fluid as fluid 135 | import math 136 | import functools 137 | 138 | from IPython.display import display 139 | from PIL import Image 140 | from PIL import ImageFont 141 | from PIL import ImageDraw 142 | from collections import namedtuple 143 | 144 | 145 | init_train_parameters() 146 | ues_tiny = train_parameters['use_tiny'] 147 | yolo_config = train_parameters['yolo_tiny_cfg'] if ues_tiny else train_parameters['yolo_cfg'] 148 | 149 | target_size = yolo_config['input_size'] 150 | anchors = yolo_config['anchors'] 151 | anchor_mask = yolo_config['anchor_mask'] 152 | label_dict = train_parameters['num_dict'] 153 | class_dim = train_parameters['class_dim'] 154 | print("label_dict:{} class dim:{}".format(label_dict, class_dim)) 155 | place = fluid.CUDAPlace(0) if train_parameters['use_gpu'] else fluid.CPUPlace() 156 | exe = fluid.Executor(place) 157 | path = train_parameters['freeze_dir'] 158 | print("luuuu,{}".format(path)) 159 | [inference_program, feed_target_names, fetch_targets] = fluid.io.load_inference_model(dirname=path, executor=exe) 160 | 161 | 162 | def draw_bbox_image(img, boxes, labels, save_name): 163 | """ 164 | 给图片画上外接矩形框 165 | :param img: 166 | :param boxes: 167 | :param save_name: 168 | :param labels 169 | :return: 170 | """ 171 | 172 | img_width, img_height = img.size 173 | draw = ImageDraw.Draw(img) 174 | for box, label in zip(boxes, labels): 175 | print("label:",label_dict[int(label)]) 176 | xmin, ymin, xmax, ymax = box[0], box[1], box[2], box[3] 177 | draw.rectangle((xmin, ymin, xmax, ymax), None, 'red') 178 | draw.text((xmin, ymin), label_dict[int(label)], (255, 255, 0)) 179 | img.save(save_name) 180 | display(img) 181 | 182 | 183 | def resize_img(img, target_size): 184 | """ 185 | 保持比例的缩放图片 186 | :param img: 187 | :param target_size: 188 | :return: 189 | """ 190 | img = img.resize(target_size[1:], Image.BILINEAR) 191 | return img 192 | 193 | 194 | def read_image(img_path): 195 | """ 196 | 读取图片 197 | :param img_path: 198 | :return: 199 | """ 200 | origin = Image.open(img_path) 201 | img = resize_img(origin, target_size) 202 | resized_img = img.copy() 203 | if img.mode != 'RGB': 204 | img = img.convert('RGB') 205 | img = np.array(img).astype('float32').transpose((2, 0, 1)) # HWC to CHW 206 | img -= 127.5 207 | img *= 0.007843 208 | img = img[np.newaxis, :] 209 | return origin, img, resized_img 210 | 211 | 212 | def infer(image_path): 213 | """ 214 | 预测,将结果保存到一副新的图片中 215 | :param image_path: 216 | :return: 217 | """ 218 | origin, tensor_img, resized_img = read_image(image_path) 219 | input_w, input_h = origin.size[0], origin.size[1] 220 | image_shape = np.array([input_h, input_w], dtype='int32') 221 | # print("image shape high:{0}, width:{1}".format(input_h, input_w)) 222 | t1 = time.time() 223 | batch_outputs = exe.run(inference_program, 224 | feed={feed_target_names[0]: tensor_img, 225 | feed_target_names[1]: image_shape[np.newaxis, :]}, 226 | fetch_list=fetch_targets, 227 | return_numpy=False) 228 | period = time.time() - t1 229 | print("predict cost time:{0}".format("%2.2f sec" % period)) 230 | bboxes = np.array(batch_outputs[0]) 231 | #print(bboxes) 232 | 233 | if bboxes.shape[1] != 6: 234 | print("No object found in {}".format(image_path)) 235 | send_data='null' 236 | client_socket.send(send_data.encode('utf-8')) 237 | return 238 | labels = bboxes[:, 0].astype('int32') 239 | scores = bboxes[:, 1].astype('float32') 240 | boxes = bboxes[:, 2:].astype('float32') 241 | n_labels=[] 242 | n_boxes=[] 243 | center_x=[] 244 | center_y=[] 245 | for i in range(len(labels)): 246 | '''#0.3#########################################''' 247 | '''0 cancel_10 248 | 1 crossing 249 | 2 limit_10 250 | 3 straight 251 | 4 turn_left 252 | 5 turn_right 253 | 6 paper_red 254 | 7 paper_green''' 255 | if(labels[i]==1): 256 | if(scores[i]>0.55): 257 | n_labels.append(labels[i]) 258 | n_boxes.append(boxes[i]) 259 | center_x.append(int ((boxes[i][0]+boxes[i][2])/2)) 260 | center_y.append(int((boxes[i][1]+boxes[i][3])/2)) 261 | 262 | print("label:{}".format(n_labels)) 263 | last_dot_index = image_path.rfind('.') 264 | out_path = image_path[:last_dot_index] 265 | out_path = './result.jpg' 266 | #draw_bbox_image(origin, boxes, labels, out_path) 267 | draw_bbox_image(origin, n_boxes, n_labels, out_path) 268 | 269 | send_data='null' 270 | for i in range(len(n_labels)): 271 | send_data= label_dict[n_labels[i]] + ',' + str(center_x[i]) + ',' + str(center_y[i]) 272 | client_socket.send(send_data.encode('utf-8')) 273 | print(send_data) 274 | 275 | if __name__ == '__main__': 276 | cam = cv2.VideoCapture(1) 277 | while 1: 278 | ret,frame = cam.read() 279 | res=cv2.resize(frame,(424,424),interpolation=cv2.INTER_CUBIC) 280 | cv2.imwrite("1.jpg",res) 281 | image_path = "1.jpg" 282 | infer(image_path) 283 | -------------------------------------------------------------------------------- /pd/freeze_model/__model__: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/__model__ -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_0.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_0.b_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_0.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_0.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_0.w_1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_0.w_1 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_0.w_2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_0.w_2 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_1.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_1.b_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_1.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_1.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_1.w_1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_1.w_1 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_1.w_2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_1.w_2 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_10.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_10.b_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_10.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_10.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_10.w_1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_10.w_1 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_10.w_2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_10.w_2 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_11.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_11.b_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_11.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_11.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_11.w_1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_11.w_1 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_11.w_2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_11.w_2 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_12.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_12.b_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_12.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_12.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_12.w_1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_12.w_1 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_12.w_2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_12.w_2 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_2.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_2.b_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_2.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_2.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_2.w_1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_2.w_1 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_2.w_2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_2.w_2 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_3.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_3.b_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_3.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_3.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_3.w_1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_3.w_1 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_3.w_2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_3.w_2 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_4.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_4.b_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_4.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_4.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_4.w_1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_4.w_1 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_4.w_2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_4.w_2 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_5.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_5.b_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_5.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_5.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_5.w_1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_5.w_1 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_5.w_2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_5.w_2 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_8.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_8.b_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_8.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_8.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_8.w_1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_8.w_1 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_8.w_2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_8.w_2 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_9.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_9.b_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_9.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_9.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_9.w_1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_9.w_1 -------------------------------------------------------------------------------- /pd/freeze_model/batch_norm_9.w_2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/batch_norm_9.w_2 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_0.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_0.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_1.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_1.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_10.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_10.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_11.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_11.b_0 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_11.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_11.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_12.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_12.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_13.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_13.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_14.b_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_14.b_0 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_14.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_14.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_2.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_2.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_3.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_3.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_4.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_4.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_5.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_5.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_8.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_8.w_0 -------------------------------------------------------------------------------- /pd/freeze_model/conv2d_9.w_0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/freeze_model/conv2d_9.w_0 -------------------------------------------------------------------------------- /pd/result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ART-Robot-Release/Deeplearning_car/22e7d823dfd88679a636d614753dc7ee0e4a33f4/pd/result.jpg -------------------------------------------------------------------------------- /pd/test.py: -------------------------------------------------------------------------------- 1 | # -*- coding: UTF-8 -*- 2 | """ 3 | 训练常基于dark-net的YOLOv3网络,目标检测 4 | """ 5 | from __future__ import absolute_import 6 | from __future__ import division 7 | from __future__ import print_function 8 | import os 9 | os.environ["FLAGS_fraction_of_gpu_memory_to_use"] = '0.82' 10 | import uuid 11 | import numpy as np 12 | import time 13 | import six 14 | import math 15 | import random 16 | import paddle 17 | import paddle.fluid as fluid 18 | import logging 19 | import xml.etree.ElementTree 20 | import codecs 21 | import json 22 | import cv2 23 | 24 | from paddle.fluid.initializer import MSRA 25 | from paddle.fluid.param_attr import ParamAttr 26 | from paddle.fluid.regularizer import L2Decay 27 | from PIL import Image, ImageEnhance, ImageDraw 28 | 29 | # logger = None 30 | train_parameters = { 31 | "data_dir": "data", 32 | "train_list": "train.txt", 33 | "eval_list": "eval.txt", 34 | "class_dim": -1, 35 | "label_dict": {}, 36 | "num_dict": {}, 37 | "image_count": -1, 38 | "continue_train": True, # 是否加载前一次的训练参数,接着训练 39 | "pretrained": False, 40 | "pretrained_model_dir": "./pretrained-model", 41 | "save_model_dir": "./yolo-model", 42 | "model_prefix": "yolo-v3", 43 | "freeze_dir": "freeze_model", 44 | "use_tiny": True, # 是否使用 裁剪 tiny 模型 45 | "max_box_num": 6, # 一幅图上最多有多少个目标 46 | "num_epochs": 100, 47 | "train_batch_size": 32, # 对于完整 yolov3,每一批的训练样本不能太多,内存会炸掉;如果使用 tiny,可以适当大一些 48 | "use_gpu": False, 49 | "yolo_cfg": { 50 | "input_size": [3, 448, 448], # 原版的边长大小为608,为了提高训练速度和预测速度,此处压缩为448 51 | "anchors": [22, 45, 46, 33, 43, 88, 85, 66, 115, 146, 275, 240], 52 | "anchor_mask": [[6, 7, 8], [3, 4, 5], [0, 1, 2]] 53 | }, 54 | "yolo_tiny_cfg": { 55 | "input_size": [3, 424, 424], 56 | "anchors": [ 1,3, 2,4, 3,1, 4,1], 57 | "anchor_mask": [[3, 4, 5], [0, 1, 2]] 58 | }, 59 | "ignore_thresh": 0.7, 60 | "mean_rgb": [127.5, 127.5, 127.5], 61 | "mode": "train", 62 | "multi_data_reader_count": 4, 63 | "apply_distort": True, 64 | "nms_top_k": 300, 65 | "nms_pos_k": 300, 66 | "valid_thresh": 0.01, 67 | "nms_thresh": 0.45, 68 | "image_distort_strategy": { 69 | "expand_prob": 0.5, 70 | "expand_max_ratio": 4, 71 | "hue_prob": 0.5, 72 | "hue_delta": 18, 73 | "contrast_prob": 0.5, 74 | "contrast_delta": 0.5, 75 | "saturation_prob": 0.5, 76 | "saturation_delta": 0.5, 77 | "brightness_prob": 0.5, 78 | "brightness_delta": 0.125 79 | }, 80 | "sgd_strategy": { 81 | "learning_rate": 0.1, 82 | "lr_epochs": [30, 50, 65], 83 | "lr_decay": [1, 0.5, 0.25, 0.1] 84 | }, 85 | "early_stop": { 86 | "sample_frequency": 50, 87 | "successive_limit": 3, 88 | "min_loss": 2.5, 89 | "min_curr_map": 0.84 90 | } 91 | } 92 | 93 | 94 | def init_train_parameters(): 95 | """ 96 | 初始化训练参数,主要是初始化图片数量,类别数 97 | :return: 98 | """ 99 | file_list = os.path.join(train_parameters['data_dir'], train_parameters['train_list']) 100 | label_list = os.path.join(train_parameters['data_dir'], "label_list") 101 | print(file_list) 102 | print(label_list) 103 | index = 0 104 | with codecs.open(label_list, encoding='utf-8') as flist: 105 | lines = [line.strip() for line in flist] 106 | for line in lines: 107 | train_parameters['num_dict'][index] = line.strip() 108 | train_parameters['label_dict'][line.strip()] = index 109 | index += 1 110 | train_parameters['class_dim'] = index 111 | with codecs.open(file_list, encoding='utf-8') as flist: 112 | lines = [line.strip() for line in flist] 113 | train_parameters['image_count'] = len(lines) 114 | 115 | import codecs 116 | import sys 117 | import numpy as np 118 | import time 119 | import paddle 120 | import paddle.fluid as fluid 121 | import math 122 | import functools 123 | 124 | from IPython.display import display 125 | from PIL import Image 126 | from PIL import ImageFont 127 | from PIL import ImageDraw 128 | from collections import namedtuple 129 | 130 | 131 | init_train_parameters() 132 | ues_tiny = train_parameters['use_tiny'] 133 | yolo_config = train_parameters['yolo_tiny_cfg'] if ues_tiny else train_parameters['yolo_cfg'] 134 | 135 | target_size = yolo_config['input_size'] 136 | anchors = yolo_config['anchors'] 137 | anchor_mask = yolo_config['anchor_mask'] 138 | label_dict = train_parameters['num_dict'] 139 | class_dim = train_parameters['class_dim'] 140 | print("label_dict:{} class dim:{}".format(label_dict, class_dim)) 141 | place = fluid.CUDAPlace(0) if train_parameters['use_gpu'] else fluid.CPUPlace() 142 | exe = fluid.Executor(place) 143 | path = train_parameters['freeze_dir'] 144 | print("luuuu,{}".format(path)) 145 | [inference_program, feed_target_names, fetch_targets] = fluid.io.load_inference_model(dirname=path, executor=exe) 146 | 147 | 148 | def draw_bbox_image(img, boxes, labels, save_name): 149 | """ 150 | 给图片画上外接矩形框 151 | :param img: 152 | :param boxes: 153 | :param save_name: 154 | :param labels 155 | :return: 156 | """ 157 | 158 | img_width, img_height = img.size 159 | draw = ImageDraw.Draw(img) 160 | for box, label in zip(boxes, labels): 161 | print("label:",label_dict[int(label)]) 162 | xmin, ymin, xmax, ymax = box[0], box[1], box[2], box[3] 163 | draw.rectangle((xmin, ymin, xmax, ymax), None, 'red') 164 | draw.text((xmin, ymin), label_dict[int(label)], (255, 255, 0)) 165 | img.save(save_name) 166 | display(img) 167 | 168 | 169 | def resize_img(img, target_size): 170 | """ 171 | 保持比例的缩放图片 172 | :param img: 173 | :param target_size: 174 | :return: 175 | """ 176 | img = img.resize(target_size[1:], Image.BILINEAR) 177 | return img 178 | 179 | 180 | def read_image(img_path): 181 | """ 182 | 读取图片 183 | :param img_path: 184 | :return: 185 | """ 186 | origin = Image.open(img_path) 187 | img = resize_img(origin, target_size) 188 | resized_img = img.copy() 189 | if img.mode != 'RGB': 190 | img = img.convert('RGB') 191 | img = np.array(img).astype('float32').transpose((2, 0, 1)) # HWC to CHW 192 | img -= 127.5 193 | img *= 0.007843 194 | img = img[np.newaxis, :] 195 | return origin, img, resized_img 196 | 197 | 198 | def infer(image_path): 199 | """ 200 | 预测,将结果保存到一副新的图片中 201 | :param image_path: 202 | :return: 203 | """ 204 | origin, tensor_img, resized_img = read_image(image_path) 205 | input_w, input_h = origin.size[0], origin.size[1] 206 | image_shape = np.array([input_h, input_w], dtype='int32') 207 | # print("image shape high:{0}, width:{1}".format(input_h, input_w)) 208 | t1 = time.time() 209 | batch_outputs = exe.run(inference_program, 210 | feed={feed_target_names[0]: tensor_img, 211 | feed_target_names[1]: image_shape[np.newaxis, :]}, 212 | fetch_list=fetch_targets, 213 | return_numpy=False) 214 | period = time.time() - t1 215 | print("predict cost time:{0}".format("%2.2f sec" % period)) 216 | bboxes = np.array(batch_outputs[0]) 217 | #print(bboxes) 218 | 219 | if bboxes.shape[1] != 6: 220 | print("No object found in {}".format(image_path)) 221 | return 222 | labels = bboxes[:, 0].astype('int32') 223 | scores = bboxes[:, 1].astype('float32') 224 | boxes = bboxes[:, 2:].astype('float32') 225 | n_labels=[] 226 | n_boxes=[] 227 | 228 | for i in range(len(labels)): 229 | if(scores[i]>0.1): 230 | n_labels.append(labels[i]) 231 | n_boxes.append(boxes[i]) 232 | 233 | print("box:{}".format(n_boxes)) 234 | #print("***********score",scores[i]) 235 | print("label:{}".format(n_labels)) 236 | last_dot_index = image_path.rfind('.') 237 | out_path = image_path[:last_dot_index] 238 | out_path = './result.jpg' 239 | #draw_bbox_image(origin, boxes, labels, out_path) 240 | draw_bbox_image(origin, n_boxes, n_labels, out_path) 241 | send_data='null' 242 | for i in range(len(n_labels)): 243 | send_data = label_dict[n_labels[i]] 244 | print("send_data:{}".format(send_data)) 245 | 246 | if __name__ == '__main__': 247 | cam = cv2.VideoCapture(1) 248 | while 1: 249 | ret,frame = cam.read() 250 | res=cv2.resize(frame,(424,424),interpolation=cv2.INTER_CUBIC) 251 | cv2.imwrite("1.jpg",res) 252 | image_path = "1.jpg" 253 | infer(image_path) 254 | --------------------------------------------------------------------------------