서보모터, 카메라, YOLOv5를 이용한 object tracking

윤준영·2022년 3월 15일
2

Projects

목록 보기
3/3

이전에 실시간 detection, 서보 모터 제어를 진행하였다. 이제 이 둘을 이용하여 실시간 object tracking을 하는 법을 써볼까 한다.

우선 tracking을 하기 위해서 카메라가 상하좌우로 움직일 수 있도록 서보모터 2개를 하나는 상하로, 하나는 좌우로 움직일 수 있도록 붙였다. (상하를 담당하는 서보모터가 삼각대에 조금 가려져있다..)

다음으로 Object tracking 알고리즘을 구현해보았다. 우선 Object tracking을 하기 위해서는 카메라의 이미지 사이즈, 그리고 YOLOv5를 이용해 detect한 BBOX의 중점 좌표를 구해야 한다. 예를 들어 우리가 사용한 카메라는 1920x1080 이었으므로 카메라의 중점을 (960, 540)으로 설정하였다. BBOX의 중점 좌표를 구하기 위해서는 detect.py 내에서 코드 추가가 필요하다.

(xyxy[0],xyxy[1]), (xyxy[2],xyxy[3])은 BBOX의 대각선 방면 모서리 좌표이다. 여기서 x축 두 점의 중점, y축 두 점의 중점이 BBOX의 중점이 되는 것이다.

이제 이 출력되는 좌표와 카메라를 이용하여 object tracking을 해볼 것이다.

알고리즘은 생각보다 간단하다. 카메라가 수직방향을 이룰 수 있는 초기값으로 둔 상태에서 카메라의 중점과 bbox의 중점을 비교하여 중점 좌표가 맞을 때까지 이동시키면 된다.

이 알고리즘을 detect.py 내에 추가하여 실행하면 실시간 object tracking 하는 것을 볼 수 있다. 다음 영상은 해당 알고리즘을 추가한 시연 영상이다.

profile
https://github.com/jjun9288

7개의 댓글

comment-user-thumbnail
2022년 5월 18일

안녕하세요 글을 보고 따라하고 있던 학생입니다. 중간에 중앙값을 나타내는 것 까지는 따라했는데 밑에 부분에서 좀 막혀서 질문 드립니다. 저희는 좌표값으로 카메라를 이동하는것이 아니라 좌표값으로 아두이노 서브모터 2개를 돌려서 방향을 바라보게만 하는것인데 혹시 코딩부분에 좀 설명을 부탁드려도 될까요 ㅠ if 부분의 text_coord는 어떤것이고 밑에 부분에 pwm부분은 어떤것 인가요.. 원래 컴퓨터쪽 학생이 아닌데 급하게 사용해야하다보니 찾아봐도 모르는 부분이 많습니다..

답글 달기
comment-user-thumbnail
2022년 5월 18일

아 pwm부분에서 아두이노가 아닌 detect.py에서 아두이노가 바로 실행이 가능한것인지 궁금했습니다.

1개의 답글
comment-user-thumbnail
2022년 6월 2일

안녕하세요. 비슷한 연구를 진행하고 있는 학생입니다.
저는 Yolov5에서 검출된 bbox의 좌표를 이용해서 opencv-tracking 을 진행하는게 목표인데 도저히 코드를 어떻게 작성해야할지 아이디어가 떠오르지를 않습니다. 기본적으로 구글링을 진행해보면 opencv tracking은 무조건 동영상을 불러오고 마우스를 이용한 selectROI를 활용하던데 저는 yolov5의 detect.py 를 간단히 수정하여 활용하고 싶어 마우스를 이용한 selectROI에 해당하는 좌표값을 단지 검출된 bbox의 좌표를 넣고자 하는게 목표입니다. 혹시 관련 아이디어가 있다면 조심스럽게 조언을 부탁드리고 싶습니다.

1개의 답글
comment-user-thumbnail
2023년 7월 5일

안녕하세요 따라하다가 궁금증이 생겨 코드 관련해서 질문드리고싶은데 괜찮을까요?

1개의 답글