증강 현실 환경에서 가상 요소와 오버레이를 배치하는 것은 매우 중요한 요소입니다. 이 문제를 해결하기 위해 ArUco 마커가 개발되었습니다. 이 마커는 디지털 정보를 쉽게 중첩할 수 있도록 물리적 환경 내에 전략적으로 배치할 수 있는 간단한 바이너리 패턴입니다.
종이에 인쇄된 표현, 화면의 디지털 프레젠테이션 또는 물리적 실체에 실제 투영할 수 있는 다용도성 덕분에 컴퓨터 비전 프로젝트에 사용하기 위해 많이 찾고 있습니다.
ArUco 모듈 및 OpenCV 라이브러리
ArUco 마커 생성을 활용하려면 OpenCV 라이브러리의 필수 구성 요소를 형성하는 ArUco 모듈을 통합해야 합니다. OpenCV 라이브러리는 컴퓨터 비전 애플리케이션 개발을 용이하게 하기 위해 설계된 광범위한 도구와 기능을 포함합니다.
이 모듈은 ArUco 마커의 생성, 감지 및 인식을 용이하게 하여 사용자가 포즈 추정을 수행할 수 있도록 지원합니다. 가상 객체를 현실 세계와 정렬하여 몰입도가 높고 매끄러운 사용자 경험을 구현할 수 있습니다.
환경 설정하기
프로젝트에 필요한 라이브러리를 설치하는 동안 패키지의 불일치를 피하기 위해 새로운 Python 가상 환경을 생성하세요. 그런 다음 터미널로 이동하여 다음 지시어를 실행하여 OpenCV를 설치합니다.
pip install opencv-contrib-python
앞서 언급한 지시어는 마커 생성기를 생성하는 데 필요한 ArUco 모듈을 포함하는 OpenCV contrib 라이브러리를 설치합니다. 후자는 필요한 기능이 부족하므로 OpenCV-python 대신 이 변형을 설치하는 것이 필수적입니다.
전체 소스 코드는 GitHub 리포지토리를 통해 액세스할 수 있습니다.
ArUco 마커 생성기 프로그램 만들기
복잡한 작업의 대부분은 ArUco 모듈에서 처리하므로 ArUco 마커 프로그램을 개발하는 과정은 간단하다고 볼 수 있습니다. 시작하려면 OpenCV를 코드로 가져와서 포괄적인 범위의 기능과 리소스에 액세스합니다.
import cv2
유틸리티 함수를 정의하여 미리 정해진 식별자를 가진 단독 랜드마크를 생성하여 여러 개의 마커가 아닌 개별 마커가 필요한 경우를 처리할 수 있습니다.
def generate_single_marker(aruco_dict):
marker_size = int(input("Enter the marker size: "))
marker_id = int(input("Enter the marker ID: "))
marker_img = cv2.aruco.generateImageMarker(aruco_dict, marker_id,
marker_size)
cv2.imwrite("marker_{}.png".format(marker_id), marker_img)
marker_img = cv2.imread("marker_{}.png".format(marker_id))
cv2.imshow("Marker", marker_img)
print("Dimensions:", marker_img.shape)
cv2.waitKey(0)
그런 다음 특정 수의 마커를 일괄적으로 생성하는 함수를 정의합니다. 생성할 수 있는 마커의 수는 사용하는 OpenCV 사전 에 따라 달라집니다. 일부 사전은 다른 사전보다 더 많은 마커 생성을 지원하기 때문입니다.
def generate_bulk_markers(aruco_dict):
marker_size = int(input("Enter the marker size: "))
num_markers = int(input("Enter the number of markers to generate: "))
marker_imgs = []
for marker_id in range(num_markers):
marker_img = cv2.aruco.generateImageMarker(aruco_dict, marker_id,
marker_size)
cv2.imwrite("marker_{}.png".format(marker_id), marker_img)
marker_imgs.append(cv2.imread("marker_{}.png".format(marker_id)))
for marker_img in marker_imgs:
cv2.imshow("Marker", marker_img)
print("Dimensions:", marker_img.shape)
cv2.waitKey(0)
주요 목표는 프로그램의 실행 흐름을 관리하는 기능적 프레임워크를 구현하는 것이며, 여기에는 원하는 운영 작업에 대한 사용자의 입력을 요청하는 것이 포함됩니다. 이 기본 모듈은 소프트웨어 시스템 시작 시 초기 단계로 실행되어야 합니다.
def main():
aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_4X4_50)
user_input = input("Press '1' to generate a single marker or "
"'2' to generate markers in bulk: ")
if user_input == "1":
generate_single_marker(aruco_dict)
elif user_input == "2":
generate_bulk_markers(aruco_dict)
else:
print("Invalid input. Please try again.")
if __name__ == "__main__":
main()
이 프로그램은 단독 마커를 생성하거나 여러 개를 생성하기 위해 실행될 수 있습니다. 실행 시 프로그램에서 생성되는 출력은 다음 형식과 유사합니다:
이 프로그램은 ArUco 마커를 생성하고 마커 ID를 나타내는 숫자 접미사가 이름에 추가되는 형태로 고유 식별자를 할당합니다.
ArUco 마커 생성 후 다음 단계는 무엇인가요?
ArUco 마커를 생성한 다음에는 실제 장면에 디지털 콘텐츠를 중첩할 수 있는 기본적인 컴퓨터 비전 애플리케이션을 개발할 수 있습니다. 이 프로세스는 포괄적이고 통합된 시각적 경험 내에서 마커의 활용을 이해하는 교육 도구로 사용됩니다.