車道線識別之 tusimple 數據集介紹

 

Tusimple 是一家作自動駕駛的公司,他也公佈了一些其在自動駕駛領域積累的數據,其中有一些是和車道線檢測相關的。20186 月份,其舉辦了一次以攝像頭圖像數據作車道檢測的比賽,公開了一部分數據及其標註。數據下載數據是: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 條車道線,第一條車道線的第一個點的座標是(632280)。 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 數據的標註特色:

 

一、車道線實際上不僅是道路上的標線,虛線被看成了一種實線作處理的。這裏面雙實線、白線、黃線這類信息是沒有被標註的

二、每條線其實是點序列的座標集合,而不是區域集合

相關文章
相關標籤/搜索