증강 현실 환경에서 가상 요소와 오버레이를 배치하는 것은 매우 중요한 요소입니다. 이 문제를 해결하기 위해 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()

이 프로그램은 단독 마커를 생성하거나 여러 개를 생성하기 위해 실행될 수 있습니다. 실행 시 프로그램에서 생성되는 출력은 다음 형식과 유사합니다:

이 글도 확인해 보세요:  Vite로 React 앱을 설정하는 방법

이 프로그램은 ArUco 마커를 생성하고 마커 ID를 나타내는 숫자 접미사가 이름에 추가되는 형태로 고유 식별자를 할당합니다.

ArUco 마커 생성 후 다음 단계는 무엇인가요?

ArUco 마커를 생성한 다음에는 실제 장면에 디지털 콘텐츠를 중첩할 수 있는 기본적인 컴퓨터 비전 애플리케이션을 개발할 수 있습니다. 이 프로세스는 포괄적이고 통합된 시각적 경험 내에서 마커의 활용을 이해하는 교육 도구로 사용됩니다.

By 최은지

윈도우(Windows)와 웹 서비스에 대한 전문 지식을 갖춘 노련한 UX 디자이너인 최은지님은 효율적이고 매력적인 디지털 경험을 개발하는 데 탁월한 능력을 발휘합니다. 사용자의 입장에서 생각하며 누구나 쉽게 접근하고 즐길 수 있는 콘텐츠를 개발하는 데 주력하고 있습니다. 사용자 경험을 향상시키기 위해 연구를 거듭하는 은지님은 All Things N 팀의 핵심 구성원으로 활약하고 있습니다.