이 코드 조각은 OpenCV를 사용하여 비디오 장치에서 캡처한 각 프레임의 마커 위치를 감지합니다. 마커의 물리적 크기를 기반으로 포즈 추정도 수행합니다. 정의된 각 마커에 대해 데이터는 UDP를 통해 일반 텍스트 형식으로 제공됩니다. 카메라를 기준으로 개체의 회전 변환과 카메라 이미지에 나타나는 개체의 2D 중심의 XY 좌표를 반환합니다. 마커가 표시되지 않으면 반환된 숫자는 NaN이 됩니다.
이 코드는 추적을 위해 시간 정보를 사용하지 않습니다 .
대신 마커를 감지하고 캡처된 모든 프레임에서 마커의 포즈를 추정하려고 시도합니다.
.ini
구문으로 된 구성 파일에서 사용할 수 있습니다. cv2
및 numpy
모듈을 사용할 수 있는 표준 Python 환경이 필요합니다. 코드는 Mac에서 Python 2.7 및 OpenCV 3.4.1을 사용하여 개발되었지만 Python 3 및 기타 플랫폼에서도 작동해야 합니다. 마커를 만드는 몇 가지 단계는 다음과 같습니다. 1. 개체의 사진을 찍고 자릅니다. 이상적으로는 해상도가 카메라와 호환되어야 합니다. 2. 구성 파일을 편집하고 다음 줄이 설정되어 있는지 확인하십시오.
[General]
일반 섹션에서는 거의 모든 것을 그대로 둘 수 있지만 카메라를 보정해야 합니다! 여기에서 보정 방법을 읽어보세요. 새로운 마커를 추가할 때 설정을 미세 조정해야 하므로 카메라의 이미지가 보이는지 확인하십시오.
camera_show_picture = 1
그렇지 않으면 새 마커가 구성 파일의 새 섹션으로 추가됩니다.
헤더는 사용자에게 친숙한 마커 이름입니다.
[My custom marker]
파일 이름과 마커의 물리적 크기를 지정합니다.
marker_file_name = <File name in the same directory or full path>
marker_width = <Units are in mm.>
marker_height = <Units are in mm.>
새 마커를 설정할 때 다음 설정을 변경해야 합니다.
marker_minimum_matching_distance = <Decrease it from 50>
marker_minimum_number_of_matches = <Set this to at least 4>
pose_estimation_running_average = <more than 1>
marker_minimum_matching_distance
는 마커 이미지와 카메라 간의 특징 일치 품질에 반비례합니다. 너무 높게 설정하면 마커 외부의 피처가 일치되고, 너무 낮게 설정하면 전혀 일치하지 않습니다.
포즈 추정에는 marker_minimum_number_of_matches
필요합니다. translation
좌표와 rotation
각도를 계산하려면 일치하는 점이 4개 이상 필요합니다. 그러나 변환에 필요한 일치 항목이 많을수록 추정이 더 정확해집니다. 너무 높게 설정하면 포즈 추정이 소수의 프레임에서만 작동합니다.
마지막으로 pose_estimation_running_average
는 평균을 내야 하는 프레임의 위치 데이터 수를 설정합니다. 반환된 위치가 너무 '변덕'스러운 경우 이 숫자를 늘리세요. 그러나 함께 평균화되는 프레임이 많을수록 지연이 더 커집니다.
또한 각 colour
채널은 0
에서 255
사이의 자연수일 수 있습니다. marker_feature_colour_*
항목은 마커 이미지와 카메라 이미지 사이의 좋은 품질 일치 위치를 표시하기 위한 것입니다. marker_indicator_colour_*
설정은 표시된 일치 항목의 평균값으로 계산된 좌표를 표시하는 단일 표시기의 색상을 결정합니다. 이상적으로 이 표시기는 항상 마커 내부에 있어야 하며 UDP 패킷에서 centroid
으로 반환됩니다.
marker_feature_colour_R = <0...255>
marker_feature_colour_G = <0...255>
marker_feature_colour_B = <0...255>
marker_indicator_colour_R = <0...255>
marker_indicator_colour_G = <0...255>
marker_indicator_colour_B = <0...255>
python tracker_main.py
행운을 빌어요!