Tusimple 是一家做自動駕駛的公司,他也公布了一些其在自動駕駛領域積累的數據,其中有一些是和車道線檢測相關的。2018年6 月份,其舉辦了一次以攝像頭圖像數據做車道檢測的比賽,公開了一部分數據及其標注。數據下載數據是:https://github.com/TuSimple/tusimple-benchmark/issues/3
在其doc中可以發現數據個數的一些說明
標注json 文件中每一行包括三個字段
raw_file : 每一個數據段的第20幀圖像的的 path 路徑
lanes 和 h_samples 是數據具體的標注內容,為了壓縮,h_sample 是縱坐標(應該是從上到下拍好順序的),lanes 是每個車道的橫坐標,是個二維數組。
-2 表示這個點是無效的點
上面的數據就有 4 條車道線,第一條車道線的第一個點的坐標是(632,280)。
標注的過程應該是,將圖片的下半部分如70%*height 等分成N份。然后取車道線(如論虛實)與該標注線交叉的點
利用以下腳本可以處理得到標注的數據,這個腳本稍微改動下也可以作為深度學習輸入的圖像。
# -*- coding: utf-8 -*- import cv2 import json import numpy as np base_path = "/Users/jcl/workspace/lane_detection/" file=open(base_path+'test_label.json','r') image_num=0 for line in file.readlines(): data=json.loads(line) # print data['raw_file'] # 取第 29 幀 看一下處理的效果 if image_num == 29: image=cv2.imread(base_path+data['raw_file']) # 二進制圖像數組初始化 binaryimage=np.zeros((image.shape[0],image.shape[1],1),np.uint8) # 實例圖像數組初始化 instanceimage=binaryimage.copy() arr_width=data['lanes'] arr_height=data['h_samples'] width_num=len(arr_width) height_num=len(arr_height) # print width_num # print height_num # 遍歷縱坐標 for i in range(height_num): lane_hist=40 # 遍歷各個車道的橫坐標 for j in range(width_num): # 端點坐標賦值 if arr_width[j][i-1]>0 and arr_width[j][i]>0: binaryimage[int(arr_height[i]),int(arr_width[j][i])]=255 instanceimage[int(arr_height[i]),int(arr_width[j][i])]=lane_hist if i>0: # 畫線,線寬10像素 cv2.line(binaryimage, (int(arr_width[j][i-1]),int(arr_height[i-1])), (int(arr_width[j][i]),int(arr_height[i])), 255, 10) cv2.line(instanceimage,(int(arr_width[j][i-1]),int(arr_height[i-1])), (int(arr_width[j][i]),int(arr_height[i])), lane_hist, 10) lane_hist+=50 cv2.imshow('image.jpg',image) cv2.waitKey() cv2.imshow('binaryimage.jpg',binaryimage) cv2.waitKey() cv2.imshow('instanceimage.jpg',instanceimage) cv2.waitKey() break # string1=base_path+"gt_image_binary/"+str(image_num)+".png" # string2=base_path+"gt_image_instance/"+str(image_num)+".png" # string3=base_path+"raw_image/"+str(image_num)+".png" # cv2.imwrite(string1,binaryimage) # cv2.imwrite(string2,instanceimage) # cv2.imwrite(string3,image) image_num = image_num + 1 file.close() print "total image_num:"+str(image_num)
處理完之后圖片輸出如下所示:
Tusimple 數據的標注特點:
1、車道線實際上不只是道路上的標線,虛線被當作了一種實線做處理的。這里面雙實線、白線、黃線這類信息也是沒有被標注的。
2、每條線實際上是點序列的坐標集合,而不是區域集合