이 가이드에서는 여러분들이DepthAI 장치(예: OAK-1 또는 OAK-D)를 가지고 있고 또 이 장치로 할 수 있는 것들과 가능한 것 들을 탐색하려고 한다고 가정하겠습니다.
먼저 DepthAI 기능을 미리 볼 수 있는 DepthAI 데모 스크립트를 실행합니다.
다음으로 데모 스크립트에서 사용 가능한 몇 가지 옵션을 살펴보고 사용법/ 변경에따른 결과를 보여드리겠습니다.
마지막으로 여러분들의 컴퓨터 비전 및 인공지능 관련 지식을 더욱 확장하고 프로젝트의 시작점으로 사용할 수 있는 오픈 소스 사용 사례 구현, 코드 예제 및 튜토리얼을 확인할 수 있는 유용한 링크를 공유합니다.
그럼 장치 설정부터 시작하겠습니다.
DepthAI 장치 연결
DepthAI 패키지를 개봉하면 USB-C 케이블(OAK-D를 주문한 경우 전원 장치 포함)과 함께 장치를 받게 됩니다.
장치가 USB 포트에 직접 또는 전원이 공급되는 USB 허브를 통해 호스트(PC, Raspberry Pi 또는 다른 지원 장치 가능) 에 연결하세요.
Ubuntu에서 작업을 하시고 계시는 경우에는 다음을 실행하여 새 USB 장치가 감지되었는지 확인할 수 있습니다.
$ lsusb | grep MyriadX
Bus 003 Device 002: ID 03e7:2485 Intel Movidius MyriadX
노트
Ubuntu 이외의 다른 OS를 실행 중이거나 문제가 발생했다고 생각되는 경우 여기에서 자세한 OS별 설치 가이드와 함께 문제나 질문이 있는 경우 실시간으로 채팅할 수 있는 discord 지원 채널이 있습니다. 그리고 리얼리에듀테크 블러그 포스테에서도 각 OS별 설치 가이드를 지원합니다.
윈도우 설치 가이드
Windows 설치 프로그램 사용
모든 설정 절차가 필요 없는 실행 .exe 파일을 윈도우 PC에 설치해 OAK 시리즈의 동작을 확인하신 싶은신 분은 여기 에서 다운로드하실 수 있습니다. 이 경우 다음의 설정 섹션을 건너뛸 수 있습니다.
다운로드를 완료하고 설치 후 실행하면 필요한 모든 구성 요소와 패키지 요구 사항이 설치됩니다. 완료되면 데모 스크립트가 자동으로 실행됩니다.
설정
이 섹션에서는 명령줄을 사용하여 데모 스크립트를 수동으로 설치하는 방법을 설명합니다.
데모 스크립트 다운로드
데모 스크립트를 다운로드하려면 git을 사용하거나 zip 파일을 직접 다운로드할 수 있습니다.
zip 파일에서
먼저 여기에서 저장소 패키지를 다운로드한 다음 선호하는 디렉토리에 아카이브의 압축을 풉니다. 다음으로 이 디렉토리에서 터미널 세션을 엽니다.
git 에서 소스 다운로드
먼저 터미널 세션을 열고 데모 스크립트를 다운로드하려는 기본 설정 디렉토리로 이동합니다. 그런 다음 다음 코드를 실행하여 데모 스크립트를 다운로드합니다.
이 섹션에서는 데모 스크립트에서 사용할 수 있는 구성 옵션을 살펴보고 여러분들께서 직접 다양한 구성을 시도해 볼 수 있도록 도와 드리겠습니다.
AI 속성
스위치:
Enabled: AI를 켜거나 끕니다. 이 기능을 끄면 Neual Network실행되는 것을 방지하고 메모리도 절약할 수 있습니다. AI 처리보다 Depth/인코딩에 더 집중하는 프로젝트에 유용합니다.
기본 속성:
CNN 모델: DepthAI에서 실행할 모델을 선택합니다. 다른 모델 사용에서 대해서도 자세히 알아보세요.
SHAVEs: Neual Network를 컴파일하는 데 사용되는 SHAVE 코어 수를 결정합니다. 값이 높을수록 더 빠른 네트워크를 실행할 수 있지만 동시에 활성화할 수 있는 기능에 제한이 있습니다.
Model source: 모델 입력으로 사용할 카메라 미리보기를 지정하여 추론을 수행하기 위해 Neual Network로 보낼 프레임을 지정합니다.
Full FOV: 활성화하면 nn 입력 크기에 맞게 카메라 이미지가 축소됩니다. 비활성화된 경우 크기를 조정하기 전에 NN 종횡비 (aspect ratio)에 맞게 이미지를 자릅니다.
고급:
OpenVINO version: MyriadX blob을 컴파일하고 파이프라인을 실행하는 데 사용할 OpenVINIO 버전을 지정합니다. 대부분의 경우 최신 버전을 사용하는 것이 좋습니다.
Label to count: 데모에서 볼 수 있는 특정 레이블의 수를 표시할 수 있습니다(예: 기본 모델로 미리보기에서 고양이의 수를 계산하려면 cat을 카운트 레이블로 선택하고 스크립트 재 시작합니다.)
Spatial bounding box: 활성화되면 감지 영역의 어느 부분이 Depth 추정에 사용되었는지를 보여주는 Depth 미리보기에 경계 상자를 그립니다.
SBB Scale Factor: 감지 경계 상자와 비교하여 Spatial 경계 상자의 크기를 결정합니다.
Depth 속성
스위치:
Enabled: Depth를 켜거나 끕니다. 이 기능을 끄면 스테레오 노드가 생성되는 것을 방지할 수 있으며 메모리도 일부 절약됩니다. Depth보다는 AI 처리/인코딩에 더 집중하는 프로젝트에 유용합니다.
Use Disparity: 비활 성화인 경우(기본값), 데모 스크립트는 Depth맵을 기반으로 호스트의 디스패리티 맵을 계산합니다. 활성화된 경우 동일한 처리가 장치에서 수행되어 일부 메모리를 소비하지만 호스트 리소스 사용을 제한합니다.
기본 속성:
Median Filtering: Depth 맵에 적용되는 노이즈 제거 메디안 필터의 유형을 지정합니다.
Subpixel: 서브 픽셀 모드를 활성화하여 Depth 정밀도를 향상 시키고 특히 장거리 측정에 유용합니다.
Left Right Check: left-right check 을 활성화하여 객체 경계의 폐색으로 인해 잘못 계산된 디스패리티(disparity) 픽셀을 제거하는 데 사용합니다.
Extended Disparity: 확장된 디스패리티 모드를 활성화해 주어진 기준선에 대해 더 가까운 최소 거리를 허용 합니다.
Depth Range: 장치에서 계산한 최소 및 최대 거리를 지정합니다.
LRC Threshold: 픽셀을 무효화하는 디스패리티(disparity) 픽셀 간의 최대 차이를 지정합니다.(임계값이 높을수록 더 많은 포인트를 통과합니다.)
카메라 속성:
기본 속성:
FPS: 카메라가 프레임을 캡처하는 속도를 지정합니다.
Resolution: 카메라 센서 해상도 및 이에 따라 캡처된 프레임 크기를 지정합니다.
고급:
ISO: 카메라의 집광 능력을 제어합니다.
Exposure: 카메라의 노출 시간을 제어합니다.
Saturation: 프레임의 색상 강도를 제어합니다.
Contrast: 프레임에서 다른 톤의 시각적 비율을 제어합니다.
Brightness: 프레임에서 색상이 얼마나 어둡거나 밝은지를 제어합니다.
Sharpness: 프레임의 세부 정보 선명도를 제어합니다.
기타:
레코딩:
Switches: 지정된 카메라의 레코딩을 활성화합니다.
FPS inputs: 녹화 FPS를 지정(기본값 30) 합니다.
Destination: 비디오가 저장될 디렉토리 경로를 지정합니다.
보고:
Switches: 지정된 기능의 로깅 활성화합니다.
Destination: 보고서(로그) 파일이 저장될 파일 경로를 지정합니다.
사용자(커스텀) 모델 사용
경고
커스텀 모델을 사용하려면 로컬로 다운로드된 버전의 depthai 리포지토리가 필요합니다. 설치 프로그램을 사용하여 스크립트를 다운로드하고 실행한 경우 커스텀 모델을 추가해도 작동하지 않습니다. 리포지토리를 다운로드하고 설정하는 방법에 대한 설명이 있는 설정 섹션 으로 이동하셔서 자세히 확인하세요.
Model zoo 에서 다운로드했거나 스스로 학습 시킨(또는 둘 다) 커스텀 모델을 실행하려고 한다고 가정해 보겠습니다. 모델을 DepthAI에서 실행할 수 있도록 준비하려면 MyriadX 칩을 처리 장치로 사용할 수 있는 모델의 최적화된 버전인 MyriadX blob 형식으로 컴파일해야 합니다.
데모 스크립트에서 커스텀 Blob을 실행할 수 있는 몇 가지 방법을 지원합니다. 이에 대해서는 아래 해당 셋션에서 이어 다룹니다. 예를 들어 custom_model(원하는 이름으로 변경 가능)이라는 커스텀 얼굴 감지 네트워크를 추가하고 데모 스크립트로 실행해 보겠습니다.
MyriadX blob 컴파일
MyriadX blob 파일을 만들려면 Neural Network 가 컴파일에 사용될 OpenVINO IR 형식(.xml 및 .bin 파일 구성)이어야 합니다. 본 게시물에서는 모델에 어떻게 얻는지에 대한 방법에 중점을 두지 는 않습니다. 그러나 이러한 모든 내용을 공식 OpenVINO 변환 가이드에서 확인하실 수 있습니다.
custom_model.xml와 custom_model.bin 을 변환하기 위해 blobconverter cli 을 사용합니다. 이러한 변환 작업을 도와 주기 위해 변환 도구인 Online MyriadX blob 변환기 가 준비 되어 있습니다. 이 툴을 사용하시는 경우 모든 종속성이 서버에 이미 설치되어 있으므로 자신의 로컬 컴퓨터에 OpenVINO 설치가 필요하지 않습니다. 모델이 TensorFlow 또는 Caffe 형식인 경우의 변환을 위해 여러분 누구나 이 툴을 계속 사용할 수 있습니다. 다만 모델에 따라 다른 입력 플래그를 사용해야 하고 때로는 커스텀 모델 최적화 파라미터를 제공해야 한다는 점에 유의하세요. (더 보기)
이제 준비된 Blob을 실행하려면 데모 스크립트에 대한 몇 가지 추가 설정을 제공해야 합니다. 데모 스크립트는 파이프라인을 설정하고 결과 구문 분석하는 방법에 대한 세부 정보를 위해 custom_model.json 을 참고합니다.
여러분이 사용려는 모델이 MobileNetSSD 또는 Yolo를 기반으로 하는 경우 detection출력 형식을 사용할 수 있습니다. 다른 유형의 네트워크 모델인 경우 raw(기본) 출력 형식을 사용하고 NN 결과를 디코딩하고 표시하기 위해 커스텀 핸들러 파일을 제공하고 있습니다.
그리고 설정 예제를 사용하여 커스텀 설정 파일을 만들 수 있습니다. 커스텀 가능한 설정 파일은 resources/nn/custom_model 디렉토리 내의 custom_model.json 파일을 기반으로 본인의 어플리케이션에 맞게 수정하시면 됩니다.
첫 번째 메서드 decode는 NN 패킷이 파이프라인(packet매개변수로 저장됨)에서 도착할 때마다 호출되며 스크립트에서 사용한 모든 nn 관련 정보(예: 입력 크기 등)가 포함된 nn_manager 개체를 제공합니다. 이 함수의 목적은 NN blob에서 수신된 패킷을 나중에 표시할 수 있는 의미 있는 결과로 디코딩하는 것입니다.
두 번째 항목인 draw는 NN 결과 (decode에서 반환됨), nn_manager객체 및 [(<frame_name>,<frame>),(<frame_name>,<frame>),...]항목이 있는 프레임 배열과 함께 호출됩니다 . 이 배열에는 -s/–show 매개변수로 지정된 프레임이 포함됩니다. 이 기능의 목표는 디코딩된 결과를 수신된 프레임에 그리는 것입니다.
아래에서 MobilenetSSD 기반 결과를 디코딩하고 표시하는 예제 handle.py 파일을 찾을 수 있습니다.
IR 형식의 파일은 사이즈가 클 수 있고 또 Blob을 다운로드하고 IR 형식을 서버에 업로드하기 때문에 BlobConverter 서버가 내부적으로 사용하는 OpenVINO와 유사한 model.yml 파일로 구조를 통합했습니다. OpenVINO Model Zoo나 사용 가능한 모델의 데모 스크립트에서 이 파일이 어떻게 구현되는지 확인할 수 있습니다.
이 파일은 컴파일에 필요한 파일을 다운로드하는 데 사용되는 OpenVINO 모델 다운로더 에서 사용됩니다. 데모 스크립트에서는 이 파일을 사용하여 소스 코드와 함께 업로드하는 대신 NN 소스 파일에 URL을 제공합니다. 또한 On-demand 컴파일을 통해 다른 수의 MyriadX SHAVE 코어를 요청하면서 동일한 구성을 사용할 수 있기 때문에 유용합니다.
defshouldRun():pass# Called to determine if the demo should be runningdefonNewFrame(frame,source):pass# Called when a new frame is availabledefonShowFrame(frame,source):pass# Called when a frame is about to be displayeddefonNn(nn_packet):pass# Called when a new NN packet is availabledefonReport(report):pass# Called when a new report is availabledefonSetup(*args,**kwargs):pass# Called when the demo script is setting updefonTeardown(*args,**kwargs):pass# Called when the demo script is finishingdefonIter(*args,**kwargs):pass# Called on each demo script iteration (internal loop)
이 방법을 사용하면 데모 스크립트 앞 부분에 사용자 기능을 추가할 수 있습니다. 이 사용자 기능들에는 단지 출력하거나, NN에서의 데이터를 계산하거나, 프레임 표시를 변경하거나, 심지어는 외부 목적지에 데이터를 보내기 위해 커스텀 데이터베이스와 API 연결을 만들 수 있습니다.
기본적으로 데모 스크립트는 레파지토리의 callbacks.py 파일을 사용하지만 이 경로 cam 은 -cb <path> / –callback <path> 플래그를 사용하여 변경됩니다.
데모를 클래스로 가져오기
필요한 경우 데모 스크립트를 일반 클래스처럼 가져올 수도 있습니다. 이렇게 하면 데모가 시작되고 실행되는 시점를 여러분이 제어할 수 있습니다. Python 코드에서 데모를 실행하는 간단한 방법 예제는 다음과 같습니다.
fromdepthai_demoimportDemofromdepthai_helpers.arg_managerimportparseArgsfromdepthai_helpers.config_managerimportConfigManagerargs=parseArgs()conf=ConfigManager(args)demo=Demo(onNewFrame=<fn>,onShowFrame=<fn>,onNn=<fn>,onReport=<fn>,onSetup=<fn>,onTeardown=<fn>,onIter=<fn>)# all params are optionaldemo.run_all(conf)
위의 코드를 정상적으로 작동 시키려면 작업 디렉토리를 포함 시켜야합니다. 이를 위해 PYTHONPATH 환경 변수에 depthai 레파지토리 경로가 포함 되어 있어야 합니다. 또는 리포지토리의 depthai_demo.py파일과 같은 디렉토리에 스크립트를 배치할 수 있습니다.
다음 단계
위 섹션에서 기본 DepthAI 기능을 미리 보는 방법을 배웠습니다. 이 시점부터 DepthAI 세계를 더 탐험할 수 있습니다.
영감을 찾고 계십니까?
DepthAI의 특정 문제를 해결하기 위해 바로 사용할 수 있는 응용 프로그램에 대한 예제 사용 사례를 확인하세요.