1단계에서 OpenCV로 차선인식 주행을 잘 수행했다면 /data 폴더에 “car_video.avi”라는 이름의 동영상이 생깁니다. 이 동영상은 1단계에서 수행한 차선인식 주행영상이 래코딩 되어 있습니다.
pi@raspberrypi:~/deepThinkCar-mini/data $ ls
car_video.avi
2단계에서는 이 “car_video.avi”를 라벨링해서 딥러닝용 데이터셋을 생성합니다.
2단계 딥러닝용 데이터 라벨링을 위해서 다음 파이썬 모듈들을 임포트 해야 합니다. cv2 모듈은 OpenCV 모듈 입니다. JdOpencvLaneDetect 모듈은 실제적으로 OpenCV를 이용해서 차선을 인식하고, 차선의 각도를 파악해서 알려주는 모듈 입니다. 이것 외에 필요한 모듈을 import 합니다.
import cv2
from jd_opencv_lane_detect import JdOpencvLaneDetect
import os
딥러닝 데이터 라벨링을 시작하기 전에 필요한 모듈의 객체를 생성하고 초기화를 합니다. 영상 속에 나오는 차선인식에 사용할 OpenCV 기반의 차선인식모듈의 객체를 만듭니다.
cv_detector = JdOpencvLaneDetect()
data 폴더의 “car_video.avi” 동영상을 OpenCV 방식으로 재생하기 위한 코드를 실행합니다.
# Setting video file player object
video_file = "data/car_video.avi"
# OpenCV lane detect object
cap = cv2.VideoCapture(video_file)
기존에 라벨링 된 데이터셋이 남아 있을 수 있습니다. 이 데이털르 삭제하는 코드를 실행합니다. 라즈베리파이 OS 명령인 “rm” 명령을 사용해서 data 폴더에 PNG 파일드을 삭제 합니다.
try:
os.system("rm ./data/*.png")
except OSError:
print("No *.png files")
딥러닝용 데이터셋 라벨링은 다음과 같은 방법으로 진행합니다.
ret, img_org = cap.read()
lanes, img_lane = cv_detector.get_lane(img_org)
angle, img_angle = cv_detector.get_steering_angle(img_lane, lanes)
딥러닝 트레이닝을 실행할 때, 이 PNG 이미지와 이 이미지에 기록된 차선각도 두가지 요로를 가지고 트레이닝을 진행합니다. 이 모든 것을 수행하는 코드는 다음과 같습니다.
while True:
# get image from video file player
ret, img_org = cap.read()
if ret:
# Find lane
lanes, img_lane = cv_detector.get_lane(img_org)
cv2.imshow("img", img_org)
# Get steering agnle
angle, img_angle = cv_detector.get_steering_angle(img_lane, lanes)
if img_angle is None:
print("can't find lane...")
else:
# Generate labeling data. Steering angle is embedding in video file name
cv2.imwrite("%s_%03d_%03d.png" % (video_file, index, angle), img_org)
index += 1
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
print("camera error")
break
영상에서 모든 프레임을 뽑아서 라벨링 처리를 하면 코드는 자동으로 종료가 됩니다. 라벨링을 종료하는 코드는 다음과 같습니다.
cap.release()
cv2.destroyAllWindows()
2단계 다음은 딥러닝 트레이닝을 실행하여 추론파일을 생성하는 단계입니다.
다음 링크를 통해서 다음 단계로 갈 수 있습니다.
3단계 딥러닝을 위한 데이터 트레이닝
라즈베리파이 OS 이미지 만들기
라즈베리파이 소프트웨어 설치 및 셋업
deepThinkCar-mini 조립
deepThinkCar-mini 라즈베리파이 VNC 환경 구축
deepThinkCar-mini 하드웨어 테스트
1단계 OpenCV 차선인식 주행
2단계 차선인식 데이터 라벨링
3단계 딥러닝 트레이닝
4단계 딥러닝 차선인식 주행
5단계 딥러닝 오브젝트 디텍팅 주행