이번 포스트에서는 ZED2 카메라를 Unity에서 사용하는 방법에 대해 다뤄보고자 합니다.
ZED2 Camera는 Stereo Vision, Depth 추정, Object Detection, Motion Estimation, VR 등 여러 Computer Vision 관련 프로젝트에서 사용할 수 있는 카메라입니다.
다음 사이트에서 제품을 구매할 수 있습니다.
ZED2 카메라 기준으로 가격은 대략 70만 원 정도 합니다. 비싸긴 합니다... 하하
해당 카메라의 구성은 다음과 같습니다.
Camera 본체와 이를 고정할 미니 거치대 정도만 포함되어 있습니다. 심플하죠.
ZED2는 C++, C#, Python을 이용해 개발을 진행할 수 있습니다.
Human Detection을 수행할 것이기에 결과를 출력할 때, 그래픽적인 효과를 내는 것이 좋아 보입니다. 따라서 이를 위해서 Unity에서 사용하는 방법에 대해서만 다뤄보도록 하겠습니다.
우선, ZED2 CAM은 GPU 환경에서 동작하는 경우가 많습니다. 따라서 GPU 사용을 위해 CUDA를 설치해야 합니다.
설치 방법에 대해 설명해보도록 하겠습니다.
< 참고 !! >
ZED SDK의 버전에 따라 권장하는 CUDA의 버전이 다릅니다.
현재는 ZED SDK ver3.6을 사용하고 있으므로 CUDA 11.x를 권장합니다. 또한 사용하고 있는 GPU에 따라 사용할 수 있는 CUDA의 버전이 다르므로 이를 참고해 적절한 버전으로 설치해야 합니다.
다음 링크를 통해 CUDA와 cuDNN을 다운로드합니다.
URL1 : https://developer.nvidia.com/rdp/cudnn-archive
위 링크(URL0)를 통해 CUDA Toolkit ver 11.4를 다운로드하고 설치합니다. 설치가 완료되면 cuDNN을 설치해야 하는데, 링크(URL1)로 들어가 다음과 같이 CUDA 버전에 맞는 cuDNN을 설치합니다.
cuDNN을 다운로드한 후 다음과 같이 해당 파일들을 CUDA>v11.4 경로에 넣어줍니다.
위와 같은 과정이 마무리가 되었다면 Unity Package를 이용해 Unity 환경에서 ZED2 카메라를 이용하면 됩니다.
SDK는 다음 링크를 참고해 Download 받을 수 있습니다.
URL : https://www.stereolabs.com/developers/release/
CUDA version에 따라 SDK가 다르므로 본인이 설치한 CUDA 버전을 확인해 적절한 SDK를 다운로드하여야 합니다.
이후 Github에서 Unity Package 또는 이외의 Code들을 다운로드하여 개발을 진행하면 됩니다.
URL : https://github.com/stereolabs
ZED SDK는 기본적으로 여러 가지 기능을 제공합니다. 필요시 공식 문서를 참고해 개발을 진행하면 됩니다.
URL : https://www.stereolabs.com/docs/getting-started/
많은 기능이 있지만, 초반에 언급했듯이 3D Pose Estimation 부분 만을 이용해볼 것입니다.
ZED2 카메라를 통해서, 어떠한 사람이 어떠한 동작을 수행하고 있는지 판별할 수 있습니다. 즉, Person ID를 할당하고 해당 ID의 3D Pose를 반영할 수 있습니다. 또한 Depth Mode를 제공하는 Camera이기에 대략적으로 Camera의 위치를 추정할 수 있습니다. 따라서 Camera Frame 상의 Object 위치를 계산하여 Scene에 반영할 수 있습니다.
전반적인 프로그램 실행 양상은 다음과 같습니다.
ZED SDK에서 Examples / SkeletonTracking 부분의 SampleScene을 이용해 간단한 Test를 진행할 수 있습니다.
해당 Scene은 크게 3가지로 구성되어 있습니다. Body Tracking을 위한 Camera Setting 부분, 실제 Body Tracking을 수행하는 부분 그리고 이외의 Camera나 View, UI를 관리하는 부분입니다.
각각에 대한 내용은 다음과 같습니다.
- Mono Camera Controller 부분
우선, Camera를 Setting 하는 부분을 보면 다음과 같습니다.
Camera의 해상도 및 FPS, 연결 방식을 설정할 수 있으며, 사용하는 기능에 따른 세부 내용을 설정할 수 있습니다.
예를 들어 Body Tracking의 경우 Estimation의 강도나 Filter 사용 여부, 검출 범위 등을 "Body Tracking" Menu를 통해 설정할 수 있습니다.
- Body Tracking 부분
3D Pose Estimation 후, Avatar에 적용하는 기능을 수행하는 부분입니다.
앞서 다룬 Mono Camera Controller를 Zed Manager로 할당한 후, 필요에 따라 Camera View와 Avatar를 넣어줍니다. 이때 사용되는 Avatar는 humanoid이어야 합니다.
참고로 위에서 사용되는 "Virtual View Camera"는 실제 Camera의 공간상 위치를 반영하는 카메라입니다.
Use Avatar를 False로 설정하면 지정한 아바타가 아닌 Skeleton 형태의 Object들이 반영됩니다. 또한 Smooth Factor를 조절하면 움직임의 부드러움을 조절할 수 있습니다. 그러나 과도한 값을 사용하면 동작이 느리게 반영되는 단점이 있습니다.
Avatar의 경우 ID를 할당하는데, 기본적으로는 같은 사람이 Camera Frame을 잠시 벗어나거나 Detection 되지 않다가 다시 Detection 되는 경우 같은 ID를 할당받습니다. 그러나 프로그램 종료 후 다시 시작할 경우 Memory가 초기화되지 않으면 같은 사람이라도 새로운 ID를 할당받게 됩니다.
이와 같이 아주 간단하게 ZED Camera를 사용해 보았습니다.
비용은 좀 들지만 상용화할 수 있을 정도의 성능을 보이는 기능을 간단하게 구현할 수 있다는 점에서 메리트가 있는 것 같긴 합니다.
이번 포스트는 여기서 마무리하고 다음에 기회가 된다면 ZED의 다른 기능들에 대해서도 포스트 해보도록 하겠습니다.
'Programming > Computer Vision' 카테고리의 다른 글
[SLAM] EuRoC를 이용한 ORB-SLAM3 테스트 (0) | 2023.01.11 |
---|---|
[SLAM] ORB SLAM과 SLAM Dataset에 관한 정리 (0) | 2023.01.11 |
[GAN] EveryBodyDanceNow에 대한 정보 및 수행 (0) | 2023.01.09 |
[Image Comparison] 두 이미지의 일치율 비교 (0) | 2023.01.06 |
[DeepFake] DeepFake 기술과 간단한 예제 수행 (0) | 2023.01.05 |
댓글