졸업 프로젝트 시작 초반만 해도 드론 프로그래밍을 할 줄은 정말 몰랐다.
딥러닝은 많이들 한다고 들었으니 그정도 할까 생각했는데 드론은 정말 예상치도 못한 분야여서 걱정되기도 하지만 그만큼 흥미롭기도 하다.
▶ 현재 구성중인 웹의 메인 페이지이다.
프로젝트 주제는 '딥러닝 기반 드론을 이용한 축구 경기 분석을 제공하는 아마추어 축구 경기 매칭 웹 서비스'이다. 드론+딥러닝+웹 관련 기술이 모두 필요한데, 웹은 어느정도 알고있다지만 드론과 딥러닝은 개인적으로 생소한 분야라 프로젝트가 끝날 때까지(물론 지금도 계속 공부하고 있다) 많은 연구가 필요할 것 같다.
프로젝트의 목표는 축구공 인식 및 추적 가능한 드론을 통해 아마추어 팀의 축구 경기를 촬영하고, 촬영한 영상을 기반으로 경기를 분석하는 것이다.
웹 서비스를 위해 멘토님께 조언을 얻어가며 API 명세서를 작성하고 DB를 설계해둔 상태며, 현재 페이지 디자인 중에 있다. 이후 프론트엔드 구현 후 서버를 연결하여 최종적으로 회원가입, 팀 매칭, 경기 분석 등의 서비스가 가능한 웹 페이지를 완성할 예정이다.
내가 메인으로 맡은 분야는 웹 백엔드 개발과 드론 프로그래밍이다. 아직 웹 백엔드 구현은 시작하지 않은 상태이며, 축구공을 인식하여 따라다니는 드론을 만드는데 집중하고 있다.
원래 학교에서 대여해주는 드론을 사용하려고 했으나, 모델명을 확인할 길이 없어 프로그래밍에 어려움이 많았다. 따라서 DJI 텔로 에듀를 새로 구매하여 사용하기로 하였다. 스위프트, 스크래치, 파이썬 등으로 프로그래밍이 가능하며 이 드론을 사용하여 진행한 프로젝트가 많았기 때문이다.
파이썬에서 DJI TELLO 모듈(라이브러리) 임포트하기
스위프트나 스크래치는 이후 딥러닝 기술을 사용하는 데 어려움이 많을 것 같아 처음부터 프로그래밍 언어는 파이썬을 선택하였다. 위 링크는 드론 구동을 위해 참고한 블로그이다. 책도 찾아보고 다른 블로그도 찾아봤는데 이 블로그가 가장 깔끔하게 설명을 정리해 놓으셨다. 이를 바탕으로 드론 프로그래밍을 위한 환경을 세팅하고 기본적인 구동을 테스트하였다.
파이참은 윈도우용 커뮤니티 버전으로 가장 최신 버전을 다운받았다.
이후 파이참에서 필요 라이브러리를 다운받는다. File -> Settings로 들어가서 미리 만들어놓은 프로젝트의 Python Interpreter 창으로 들어가면 이런 식으로 사용하는 파이썬 버전과 다운받은 라이브러리 목록이 나온다(처음으로 실행시키면 목록에 아무 것도 없는 게 맞다). + 표시를 누르고 djitello 패키지를 다운받으면 끝이다. 이 패키지만 다운받으면 기본적으로 numpy, opencv-python 패키지까지 같이 다운받아지기 때문에 편리하다.
# https://things-voyager.tistory.com/71 게시글 참고
from djitellopy import tello
import cv2
drone = tello.Tello()
drone.connect()
print(drone.get_battery())
drone.streamon()
while True :
img = drone.get_frame_read().frame
img = cv2.resize(img, (360, 240))
cv2.imshow("Image", img)
cv2.waitKey(1)
드론 카메라를 구동시키고 영상을 노트북으로 전송받기 위한 코드이다. 이를 실행하면
이렇게 영상이 잘 나오는 것을 확인할 수 있다.
드론이 잘 동작하는 걸 확인했으니 이제 객체 인식 및 추적이 가능하게 만들어야 한다.
Easy Programming of Tello Drone | Python OpenCV Object Tracking
우선은 이 영상을 참고하였다. 파이썬을 기반으로 드론의 기본적인 구동을 구현하고 특정 물체를 따라 움직이도록 하는 프로그램이다. 화면을 네 구역으로 쪼개어 각 사분면마다 일반 촬영 화면, 특정 색만 추출한 화면, 특정 색을 추출하여 흑백으로 변환한 화면, 일정한 크기로 프레임을 분할한 화면을 출력한다. 마지막 사분면을 통해서 드론은 객체의 움직임을 감지하고 그에 따라 자신의 위치를 조정한다.
다만, 특정 물체의 종류가 정해져있다기 보다는 '노란색 물체'를 탐지하여 움직이는 모델이기 때문에 프로젝트에 적용하기에는 무리가 있었다. 우리는 공을 따라다니는 드론이 필요하다..
Drone Object Detection | Opencv CVZone
색으로만 물체를 인식하는 것을 개선하기 위해 YOLO를 적용하는 방법도 알아보았지만 설치해야 할 프로그램이 너무 많고, 실제로 설치 과정에서 크고 작은 오류가 많이 발생하고 모델을 따로 학습시켜야 한다는 번거로움이 있어 최대한 OpenCV로만 프로그래밍을 할 수 있도록 노력하였다(드론 프로그래밍에서만 YOLO를 피하기로 한 것이고 이 드론이 촬영한 영상을 바탕으로 경기를 분석할 땐 YOLOv5가 사용된다).
이후 위 영상을 참고하여 드론이 다양한 사물을 인식할 수 있도록 개선하였다(영상에 사용된 cvzone 패키지는 2-1에서 설명한 djitello 패키지처럼 따로 파이참에 다운로드 받아야 한다).
인식 가능한 사물은 키보드, 마우스, 사람, 의자 등 다양하며 그 중 축구공(sport ball)도 포함되어 있어 목표로 하는 축구공 탐지 드론 구현이 가능해졌다.
아직 공을 제대로 인식하고 추적하는지 테스트해보지 못했기 때문에 빠른 시일 내로 실제 공을 가지고 테스트 할 계획이다. 이후, 공을 추적하며 촬영한 영상을 바탕으로 경기 분석을 해야 하기 때문에 촬영한 영상을 저장하는 방법 등을 조사할 예정이다.
잘 읽었어요~