Develment's Develog✔
2020 국방오픈소스아카데미 해커톤 - GUARDIAN 개발 후기 ✔ 본문
국방부와 오픈소스협회에서 국방 온라인 해커톤이 열렸습니다.
지금까지 개발하다가 아직 5일이라는 시간이 남았지만 오늘 프로젝트가 마무리되어 후기를 작성합니다.
저희 팀은 6명으로 구성되었으며 저는 PM과 메인 개발자를 맡았습니다.
개발한 프로젝트는
군 CCTV를 자동으로 감시하는 영상 감시 웹 어플리케이션입니다.
시연 영상😎
이미지 처리 핵심 기술✨
Object Detection
Realtime Object Detection에 적합한 YOLOv4 모델괴 OpenCV DNN 모듈을 활용하여 구현하였습니다.
Motion Liner
OpenCV Optical Flow 기술을 이용해 감지 된 물체 상자에 포인트를 주어 이동 거리를 추적하여 시각화하였습니다.
진짜 후기😂
CCTV 프로젝트는 실시간 감지가 중요한 만큼 백엔드의 속도가 중요하다고 생각하였습니다.
원래 계획은 HTTP 서버는 Node.js로 구현하고 C++로 OpenCV 코어 부분을 구현하여 Node.js와 C++이 Socket 통신하여 데이터를 처리하려고 하였습니다.
원래 개발은 언제나 도전인 법 GoLang이 HTTP 서버를 지원하고 바이너리로 컴파일되기 때문에 퍼포먼스가 C++까지는 아니더라도 엄청난 속도 상승을 하게된다는 걸 알게됐습니다.
그럼 이참에 Golang을 써서 HTTP 서버와 코어 부분을 한번에 잡자고 생각하여 처음 써보는 Golang으로 진행하기로 했습니다.
코어를 담당하는 OpenCV 라이브러리는 기본적으로 Python과 C++만 지원합니다. 그래서 저는 Go언어와 OpenCV를 바인딩시킨 GoCV를 찾게됐습니다.
프로젝트를 계속 개발하다보면 각종 오류에 마주치는데 GoCV에 관한 정보가 너무 부족했습니다...
예를 들면 OpenCV DNN모듈로 YOLOv4 모델을 적용시키는데 NMSBoxes 함수는 없는 상태였고
GetLayerNames, GetUnconnectedOutLayers 함수는 오류가 나는 상태였습니다.
재빠르게 gocv에 Issue와 PR을 찾아 다행히 해결했지만 Go언어로 개발하다보면 이런 경우가 허다했습니다. 다른 라이브러리도 몇개가 이렇게 말썽을 피워 정보가 부족해서 힘들다... 라는 느낌을 받았습니다. 그래도 말썽을 피우는 간단한 라이브러리에는 오류를 고치고 PR을 보내 컨트리뷰터가 된 라이브러리도 있었습니다😊
그만큼 프로젝트를 진행하면서 PR도 보내보고 새로운 백엔드 언어를 공부하고 얻어갔던게 많은 것 같습니다. 국방부에서 해커톤이 열려서 너무 고마웠고 진행되면서 실제로 사업화가 되는 프로젝트나 오픈소스로 기여할 수 있는 프로젝트가 많이 생겨났으면 좋겠습니다 !😆