달라진 점
이전 포스팅까지는 색과 관련없이 오로지 오른쪽, 왼쪽의 가상 차선에 따라 점을 분류했었다.
하지만 주최측의 규정이 바뀜에 따라 기존 알고리즘에서 색상으로 분류하는 알고리즘으로 수정하게 되었다. 가상의 차선을 바탕으로 콘을 구분하는 코드가 궁금하다면 이전 포스팅을 참조하기 바란다.
# 업데이트된 부분
- 색상에 따른 좌, 우 차선 분류 알고리즘 제작
- 콘의 색상인 빨간색, 노란색, 파란색의 hsv 색공간의 범위를 더 정밀하게 맞추기
- 대회 규정에 맞춰 관심영역(ROI) 수정
- 조향 알고리즘 개선
우선 대회장에서 찍은 영상들로 관심영역을 조정해 주었다.
vertices=np.array([[(20, 315),
(20, 210),
(160, 140),
(470, 140),
(620, 210),
(620, 315)]], dtype=np.int32)
기존 vertices에서 영역의 값을 늘려줘서 더 많은 콘들을 볼 수 있도록 하였다.
다음으로 콘을 더 정밀하게 추출하기 위해 hsv 색상값을 조정해 주었다.
기존에는 모든 색들 중 거의 대부분을 허용해서 인식률이 좋지 않았다. 이러한 문제점을 해결하기 위해 1개였던 필터를 빨강, 파랑, 노랑, 3개의 필터로 바꾸었다. 그 이후 더 인식이 잘되는 것을 확인할 수 있었다. 또한 원래 사람을 빨간색으로 인식하였는데, 색상값이 정밀해지자 사람도 인식하지 않게 되었다.
lower=(0, 150,80)
upper=(125, 255, 255)
mask_hsv=cv2.inRange(hsv, lower, upper)
img = cv2.bitwise_and(img, img, mask=mask_hsv)
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
기존의 코드가 위와 같았다면, 아래로 코드를 수정하였다.
lower_blue = (110-3, 100, 120) # hsv 이미지에서 바이너리 이미지로 생성 , 적당한 값 30
upper_blue = (110+5, 255, 255)
lower_red = (6-6, 110, 120) # hsv 이미지에서 바이너리 이미지로 생성 , 적당한 값 30
upper_red = (6+4, 255, 255)
lower_yellow = (19-1, 110, 120) # hsv 이미지에서 바이너리 이미지로 생성 , 적당한 값 30
upper_yellow = (19+5, 255, 255)
mask_hsv_red = cv2.inRange(masked_image, lower_red, upper_red)
mask_hsv_blue = cv2.inRange(masked_image, lower_blue, upper_blue)
mask_hsv_yellow = cv2.inRange(masked_image, lower_yellow, upper_yellow)
mask_hsv=cv2.bitwise_or(mask_hsv_red, mask_hsv_blue)
mask_hsv=cv2.bitwise_or(mask_hsv, mask_hsv_yellow)
다음과 같은 값은 어떤 공식으로 정한 것이 아니라 값을 하나씩 수정하면서 찾은 것이다. 이러한 과정이 힘들었다. 그러나 힘들었던 과정이 나에게 보상이 되는 것처럼 같은 영상으로 테스트 했을 때, 아래와 같이 인식이 잘 되는 것을 확인할 수 있었다.
hsv 영역을 수정하고 난 후, 다음 영상과 같이 깔끔하게 콘만 추출하였다.
위의 영상은 실제 대회 때 주행해야 하는 속도인 50km/h정도이다. 빠른 속도임에도 불구하고 콘을 정확하게 인지하여 가상 차선을 그리는 모습을 볼 수 있다.
# 수정해야 할 부분
- 조향 알고리즘 개선
- 빨간색 콘 안으로 들어왔을 때 정지
드디어 콘을 인식하고 가상의 차선을 긋는 알고리즘이 완성되었다. 이 코드와 관련해서는 기회가 된다면 설명과 함께 올리도록 하겠다.
'팀 프로젝트 > 자율주행 개발(baqu4)' 카테고리의 다른 글
[Python] OpenCV로 만든 자율주행 코드 리뷰 (0) | 2022.11.18 |
---|---|
[Python] OpenCV로 자율주행을 끝내며 - 회고록 (6) | 2022.11.01 |
[Python] OpenCV로 자율주행 만들기(Threshold_#03) (0) | 2022.10.31 |
[Python] OpenCV로 자율주행 만들기(Threshold_#02) (2) | 2022.10.18 |
[Python] OpenCV로 자율주행 만들기(Threshold) (0) | 2022.09.24 |