Tusimple 是一家作自動駕駛的公司,他也公佈了一些其在自動駕駛領域積累的數據,其中有一些是和車道線檢測相關的。2018年6 月份,其舉辦了一次以攝像頭圖像數據作車道檢測的比賽,公開了一部分數據及其標註。數據下載數據是:https://github.com/TuSimple/tusimple-benchmark/issues/3python
在其doc中能夠發現數據個數的一些說明git
標註json 文件中每一行包括三個字段 github
raw_file : 每個數據段的第20幀圖像的的 path 路徑json
lanes 和 h_samples 是數據具體的標註內容,爲了壓縮,h_sample 是縱座標(應該是從上到下拍好順序的),lanes 是每一個車道的橫座標,是個二維數組。數組
-2 表示這個點是無效的點學習
上面的數據就有 4 條車道線,第一條車道線的第一個點的座標是(632,280)。 ui
標註的過程應該是,將圖片的下半部分如70%*height 等分紅N份。而後取車道線(如論虛實)與該標註線交叉的點spa
利用如下腳本能夠處理獲得標註的數據,這個腳本稍微改動下也能夠做爲深度學習輸入的圖像。blog
# -*- 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 數據的標註特色:
一、車道線實際上不僅是道路上的標線,虛線被看成了一種實線作處理的。這裏面雙實線、白線、黃線這類信息也是沒有被標註的。
二、每條線其實是點序列的座標集合,而不是區域集合