역할 : 딥러닝 모델 학습 및 거리 추정 알고리즘 설계, 영상처리
프로젝트 기간 : 2주
사용 언어 : Python
개발 환경 : Ubuntu18.04, 자이카 TX2보드
사용할 툴 : Pytorch, OpenCV
자이카에 내장된 카메라를 통해 탁구공을 검출하고 거리를 추정하는 프로젝트 입니다. 거리 추정 알고리즘에 사용되는 카메라 하드웨어의 FOV값이 데이터시트에 없어 이 값을 구하는 것이 어려웠습니다. FOV 값을 구하는 여러 자료를 찾아 그 중 실제 거리와 오차가 가장 적은 FOV 값을 적용하는 것으로 했습니다.
✅ : 채택방법
영상 calibration 값 선택
데이터 라벨링
두 탁구공의 색깔을 구분 : white ball, yellow ball
ball과 ignore 두 클래스로 구분 ✅
YOLOv3 - tiny 를 그대로 사용 ✅ (파이토치 변환은 시간상 힘들 것 같다)
체크보드 20장
체크보드 20 + 10장
$\text{azimuth}$, $\text{distance}_x$, $\text{distance}_z$ 계산
객체 높이 및 카메라 파리미터 선언(카메라 마다 상이)
Get a center pixel value in x axis
$$ x_{center} = \frac{x_{\min} + x_{\max}}{2} $$
Get a y coordinate in normalized image plane
$$ y_{\text{Normalized Plane}} = \frac{y_{\max} - f_y}{c_y} $$
Calculate distance
$$ \Delta x_{\text{pixel}} = \bigg(x_{center} - \frac{\text{width}}{2}\bigg) \\ \text{azimuth} = \bigg(\Delta x / \frac{\text{width}}{2}\bigg) \times \text{FOV}_h \\ \text{distance}z = \bigg(\frac{\text{Camera Height}}{y{\text{Normalized Plane}}} \times 100\bigg) \\ \text{distance}_x = \text{distance}_z \times \tan\bigg(\frac{\text{azimuth}}{180}\pi\bigg) \\ \text{distance} = \text{distance}_z / \cos\bigg(\frac{\text{azimuth}}{180}\pi \bigg) $$