오늘은 Unreal Engine에서 실시간 3D Scene Reconstruction 구현하기의 첫번째 단계인 Unreal Engine설정을 먼저 하려고 했는데.. 버전이 작동하지 않아 어떻게 설정할지 먼저 알아보고 이와 관련된 메뉴 혹은 API에 대해 알아보도록 하자.
오늘 알아보기
Unreal Engine 설정 방법
Depth
RGB 데이터
Python API를 활용한 데이터 추출
UnrealCV
Depth 데이터는 카메라에서 특정 픽셀까지의 거리를 나타내는 정보를 의미한다. 이는 Depth Map(깊이 맵) 형태로 저장되며, 흑백 이미지처럼 보이지만 각 픽셀 값이 거리(깊이)를 나타낸다.
Unreal Engine에서 Depth 데이터를 얻는 방법은 다음과 같다.
RGB 데이터는 말 그대로 컬러 이미지 데이터를 의미한다. 우리가 사용하기에 일반적으로 Unreal Engine에서 카메라로 출력되는 이미지를 캡처하여 저장할 수 있다. 물론 손으로 캡처하는 것은 많은 수고가 들기 때문에 보통 다음과 같은 방법을 사용한다.
Depth 데이터를 가져올때와 비슷하게 가져올수 있으며 보통 멀리 설치해 놓은 카메라의 화면을 보는데(?) 사용하기 때문에 이 데이터들은 게임에서 나오는 캐릭터 창이나 아이템을 확대해서 보여주는 등의 기능에 사용한다.
Unreal Engine에서는 Python API를 제공하여 엔진 내 객체를 조작하고 데이터를 추출할 수 있다.
Unreal Engine의 unreal Python 모듈을 사용하여 카메라 제어하고, 게임 내 객체 위치, 카메라 포즈, 랜더링된 RGB/Depth 이미지 데이터 저장하여 Machine Learning 데이터셋 생성을 자동화시켜준다.
그렇다면 직접 Python에서 Unreal Engine의 카메라 데이터를 추출해보자
import unreal
# 카메라 액터 가져오기
camera_actor = unreal.EditorLevelLibrary.get_selected_level_actors()[0]
# 현재 위치 및 회전 정보 얻기
location = camera_actor.get_actor_location()
rotation = camera_actor.get_actor_rotation()
print(f"Camera Position: {location}, Rotation: {rotation}")
UnrealCV는 Unreal Engine과 Python을 연결하여, 게임 환경에서 RGB, Depth, Object Mask 데이터를 쉽게 추출할 수 있도록 도와주는 플러그인이다. https://github.com/unrealcv/unrealcv 언리얼의 공식 github에서 다운받아 사용할수 있다.
아주 쉽고 빠르게 데이터를 추출할수 있으므로 어떻게 사용하면 좋을지 예제 코드를 통해 알아보자.
Python 예제 코드
import unrealcv
# UnrealCV 서버 연결
client = unrealcv.Client(('localhost', 9000))
client.connect()
# RGB 이미지 캡처
image = client.request('vget /camera/0/lit png')
# Depth 이미지 캡처
depth = client.request('vget /camera/0/depth png')
# 결과 저장
with open('rgb.png', 'wb') as f:
f.write(image)
with open('depth.png', 'wb') as f:
f.write(depth)