프로젝트/IT 프로젝트

프로젝트 - 자동차 장애물 신속 대처 시스템 제작 후기

달서비 2023. 1. 25. 16:42

2022년 3월부터 12월까지 학교에서 4학년을 맞이하여 캡스톤디자인이라는 다소 생소한 과목 이름과 함께 졸업 연구를 하였습니다. 작품 제작부터 학술제까지 그동안의 과정에서 못했던 이야기를 한번 풀어보려고 합니다.

※ 서버 파트 제작자의 시선으로 해당 연구에 대하여 진행하였음을 이야기합니다.

 

자동차 장애물 신속 대처 시스템

자동차 - Pixabay

 우리가 일상생활에 필요한 것이 무엇이 있을까 생각하였습니다. 조원들과 생각하던 중 "자동차에 AI를 사용할 수 있을까?"라는 개념으로 출발하게 되었으며 이는 장애물로 인한 사고 위치 및 상황을 자동으로 탐지한다는 결과에 이르렀습니다. 현재는 운전자가 신고하려면 ‘한국도로공사’에서 제공하는 앱이나 전화로 많은 단계를 거처 신고를 해야 한다는 불편함으로 신고율이 낮아질 수 있다고 판단하였습니다. 이는 낙하물이 그 자리에서 치워지지 않고 운전자들을 위협할 수 있다는 결론에 도달하였습니다. 또한 많은 양의 신고가 들어왔을 때 각각의 신고 종류를 빠르게 파악할 수 있다면 조금 더 효율적인 처리가 가능해지고 앞으로 완전자율주행이 실현된다면 탑승자가 도로를 주시하지 않아 신고가 더욱 늦어질 수도 있습니다. 이러한 상황을 ‘인공지능으로 해결할 수 있을까?’라는 생각으로 추진하게 되었습니다.

 

삼각김밥

삼각김밥 이미지

연구를 함께했던 팀이름은 삼각김밥입니다.

저는 이전에 백엔드와 임베디드에 대해 공부를 하고 있었습니다. 해당 연구를 시작하기 전에 원래는 임베디드를 이용한 시스템 개발을 생각하였으나 해당 프로젝트에서 서버가 중요한 것을 알고 서버구현을 맡았습니다. 

팀원 구성 연구 담당 분야
팀장 AI 구현 및 보완
팀원 (본인) 서버 구현 및 보완
팀원 임베디드 시스템 작업 및 보완

 

관련 프로그램 및 기술 선정

사용한 기술 스택 + PHP

클라이언트 (스마트폰)

스마트폰 - 안드로이드 (JAVA)

지도 - 네이버 클라우드

 

서버

클라우드 - 구름IDE

OS - Ubuntu(18.04)

프론트엔드 및 웹앱 연동 - Javascript

백엔드 - PHP (RESTful API)

이미지 - Python

SQL - MySQL

 

인공지능

AI - YOLOv5

데이터 어노테이션 - YoloLabel

인공지능, 크롤링 - Python (pytorch, selenium) {pytorch는 서버와 연동}

 

서버 측에 해당 스택을 구축한 이유는 다음과 같습니다.

  • 구름IDE - 클라우드를 경험하고 싶고 실시간 후처리를 위해 그래픽 카드를 무료로 이용할 수 있어 사용하였습니다.
  • Javascript - 서버↔안드로이드 간의 연동을 위해 사용하였습니다.
  • PHP - MySQL과 사용할 때 용이함 및 파이썬을 사용할 때 exec() 함수를 사용하기 위해 사용하였습니다.
  • Python - 이미지 및 인공지능을 처리하기 위해 사용하였습니다.
  • MySQL - 오픈소스 SQL 중 정보가 많고 PHP와 연동성이 좋아 사용하였습니다.

 

프로그램 실행 절차

(좌)스마트폰 UI 진행, (우)전체 흐름도

스마트폰에서 진행은 다음과 같습니다.

1. 커버 화면으로 실행한다.
2. 회원 정보를 입력하여 실행한다.
3. 로그인하면 현재 위치를 나타내는 지도가 나온다.
4-5. 신고 버튼을 누르면 사진을 촬영한다 
6. 위도 경도 위치 확인할 수 있다.
6-1. YES 버튼을 누르는 경우 전송하는 웹뷰 화면으로 전환한다.
6-2. NO 버튼을 누르는 경우 3번 화면으로 넘어간다
7-8. 6번의 정보를 웹뷰에서 입력 후 처리 과정을 거쳐 결과를 추출한다.

전체 진행은 오른쪽 사진으로 진행하였습니다.

전체 흐름도

위의 사진은 전체 흐름도입니다.  클라이언트는 안드로이드 스마트폰으로 네이버 클라우드와 자체 제작한 서버의 정보를 사용자에게 보여주는 역할을 담당합니다. 서버는 크게 네이버 클라우드와 구름 IDE가 있습니다. 네이버 클라우드에서는 지도 서비스를 이용하였으며 자체 제작 서버는 구름 IDE를 기반으로 Tier1 서버를 구축하였습니다. 서버에 사용된 기술은 LAMP 스택 + 파이썬 + Yolov5를 사용하였습니다. PHP를 통해 전체 진행을 통제하였으며 이미지 처리, AI 처리의 과정은 파이썬이 담당하였습니다.

 

아쉬웠던 것들

  • 이미지를 전송할 때 base64라는 프로토콜을 이용하여 전송을 시도하였으나 안드로이드 스튜디오(Java)에서 string 변수에 최대 길이가 있다는 것을 몰랐습니다. 버퍼를 나누는 방법 등으로 시도를하였으나 실패하였습니다. 해당 문제를 우회적으로 해결하기 위해 웹뷰를 이용하였습니다. 연구를 통하여 해결할 수 있지 않았겠느냐는 아쉬움이 있습니다. 
  • 인공지능의 detecting에 관해 명중률의 향상이 필요하였습니다. 데이터 어노테이션을 할 때 더 많은 데이터와 명중률을 올릴수 있는 연구가 필요하다고 느꼇습니다.

 

연구 후기

컴퓨터 프로그래머가 되기 위하여 끊임없이 공부해야 한다는 것을 각인시켜주었습니다. 같이 연구하는 영역은 개인이 하는 부분과 다르고 협업하기 위해서는 다른 파트까지 연구하고 공부해야 한다는 것을 깨달았습니다. 특히 REST API를 이용할 때 안드로이드하고 비동기 통신하는 부분에서 중요하다고 느꼈습니다. 그리고 아쉬운 부분을 넘기기 위해서는 꼭 많은 양의 학습이 중요하다는 것을 깨달았습니다.

 

마지막으로 서버 부분에 대한 소스 코드와 설명은 깃허브의 링크에 남겼습니다.

https://github.com/kmsbio/Car_Watchout

 

GitHub - kmsbio/Car_Watchout

Contribute to kmsbio/Car_Watchout development by creating an account on GitHub.

github.com