자율 주행을 보조하기 위한 여러 시스템들을 있는데, 그중 ADAS에 대해서 간략하게 알아 보겠습니다.
ADAS는 특정한 기능이 아니라, 운전자가 안전하고 편리하게 주행할 수 있도록 도와주는 시스템입니다.
운전자를 도와서 사고를 미연에 방지하고 운전의 편리함을 제공하는 첨단 기술입니다.
ADAS Camera는 FCW , PCW, LDWS등 과 같은 시스템들이 있고 이 외에도 많은 시스템들이 있습니다.
FCW , PCW, LDWS에 대해서 간략하게 알아보겠습니다.
- FCW(Forward Collision Warning) : 전방충돌경고 시스템
- PCW(Pedestrian Collision Warning): 보행자충돌경고 시스템
- LDWS(Lane Departure Warning System): 차선 유지 보조 시스템
ADAS를 구현하기 위한 간단한 알고리즘입니다.
- 이미지를 읽기
- 읽은 이미지로 부터, Line segmentation을 수행
- 읽은 이미지로 부터, Object Detection을 수행
- Object Detection을 하고, 차와 가깝다면 warning sign을 발생 그렇지 않다면 다음 이미지를 불러옴니다.
위의 알고리즘을 코드로 구현하면 아래와 같습니다 !
def inference_model(detection_model, segmentation_model, image_path, color_dict, device):
ori_img = cv2.imread(image_path)
detection_results = object_detection(detection_model, ori_img)
pred_final = line_segmentation(segmentation_model, ori_img, device)
ori_img = cv2.cvtColor(ori_img, cv2.COLOR_BGR2RGB)
## segmentation visualization
pred_final = cv2.resize(pred_final, (ori_img.shape[1], ori_img.shape[0]), interpolation= cv2.INTER_NEAREST)
roi_selection = ori_img[pred_final == 255]
ori_img[pred_final == 255] = (0, 255 * 0.3, 0) + 0.6 * roi_selection
## detection visualization
warning_status = False
black_img = np.zeros_like(ori_img)
for bbox in detection_results:
cls = bbox[4]
p_start, p_end = (bbox[0], bbox[1]), (bbox[2], bbox[3])
black_img = cv2.rectangle(black_img, p_start, p_end, color = color_dict[detection_model.names[cls]], thickness=-1)
if bbox[3] > black_img.shape[0] * 0.95:
warning_status = True
final_result = cv2.addWeighted(black_img, 0.6, ori_img, 1.0, 0.0)
if warning_status:
cv2.rectangle(final_result, (0,0), (600, 140), (255, 0, 0), -1, cv2.LINE_AA)
cv2.putText(final_result, 'Warning!', (0, 100), cv2.FONT_HERSHEY_DUPLEX, 4, (255, 255, 255), thickness=3, lineType=cv2.LINE_AA)
return final_result
'자율주행' 카테고리의 다른 글
DMS(Drive Monitoring System) (1) | 2024.05.16 |
---|