Kinnect 요즘은 실패한 발명품 취급 받고 있지요.
그래도 이만한 모션 인식 시스템을 이 가격에 찾기 힘듭니다. 모션 카메라인데 10만원 남짓에 구할 수 있다는게 보통 물건이 아니란 거지요.
그리고 재밌게도 초기 물건인 Xbox360용 키넥트는 USB커넥터로 PC에 바로 연결이 가능합니다. 윈도우용 키넥트도 따로 있긴 한데 리눅스에선 이게 더 인식이 잘 됩니다.
리눅스에서는 보통 https://github.com/OpenKinect/libfreenect
이 라이브러리를 사용하게 됩니다. 그리고 키넥트 관련 솔루션은 OS문제가 없는 대부분 이걸 사용합니다.
그리고 최근 https://github.com/meshonline/kinect-openni-bvh-saver
이걸 사용해보려고 했는데 Readme에는 리눅스가 없지만 그냥 OpenNI2폴더와 NiTE2폴더를 만들고 여기에 그냥 빌드된걸 넣으면 되는 거였습니다. OpenNI2와 NiTE2는 https://github.com/suiwenfeng/Ubuntu_x64_Openni2.2_NiTE2.2_FreenectDriver
여기 있었는데 날아가버렸네요. 이건 뭐...어떻게든 되겠죠.
그리고 g++ main.cpp -I OpenNI2_Include -I NiTE2_Include -L./ -lOpenNI2 -lNiTE2 `pkg-config opencv4 --cflags --libs` -Wl,-rpath='$ORIGIN'
이렇게 명령 내려서 빌드하면 a.out으로 멀쩡히 나오는군요.
딱 하나 문제가 있는데 OpenNI2/Drivers에 libFreenectDriver.so 파일이 시스템 업그레이드 할때마다 세그멘테이션 오류를 일으킨다는 겁니다. 그래서 libfreenect를 일일이 빌드해서 build/lib/OpenNI2-FreenectDriver/에 있는 so 파일을 가져와서 넣어줘야 합니다. 귀찮은데 이대로면 정상적으로 잘 돌아갑니다. libusb나 기타 문제겠제요.
libfreenect빌드 명령은 다음과 같습니다.
sudo apt-get install git-core cmake pkg-config build-essential libusb-1.0-0-dev sudo adduser $USER video cd libfreenect mkdir build cd build cmake -L .. -DBUILD_PYTHON3=ON -DBUILD_OPENNI2_DRIVER=ON -DBUILD_EXAMPLES=OFF make |
그런데 또 문제가 하나 있습니다.
권한 문제로 키넥트 접속 할때마다 root로 해야한다는겁니다. 이건 udev문제인데
/etc/udev/rules.d 경로에 다음 파일을 만들어서 넣습니다
# ATTR{product}=="Xbox NUI Motor" SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02b0", MODE="0666" # ATTR{product}=="Xbox NUI Audio" SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02ad", MODE="0666" # ATTR{product}=="Xbox NUI Camera" SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02ae", MODE="0666" # Kinect for Windows SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02c2", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02be", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02bf", MODE="0666" |
파일명은 대충 51-kinnect.rules 정도로 하면 되겠죠.
그리고 lsusb를 치면 보통 Xbox NUI Motor, Xbox NUI Audio, Xbox NUI Camera 이 세가지가 모두 떠야 하는데 하나만 뜨는 경우가 있습니다. 이경우 원인은 두가지 있습니다.
명령을 내리면 아래같이 뜨는게 정상이지만 하나만 뜨거나 하나도 안 뜨는경우가 있습니다.
lsusb | grep Xbox Bus 001 Device 021: ID 045e:02ae Microsoft Corp. Xbox NUI Camera Bus 001 Device 019: ID 045e:02b0 Microsoft Corp. Xbox NUI Motor Bus 001 Device 020: ID 045e:02ad Microsoft Corp. Xbox NUI Audio |
1. Autosuspend 문제
전력 문제로 USB장치의 전력을 제한 하는 경우가 있습니다. 보통 노트북이 그렇죠.
간단하게 autosuspend를 끄면 됩니다.
echo -1 | sudo tee -a /sys/module/usbcore/parameters/autosuspend |
위 명령을 쓰고 키넥트를 다시 연결하면 잘 뜹니다.
2. 그냥 어댑터 전력 문제
2023년 현재 키넥트가 나온지 오래된 관계로 어댑터들이 상태가 안 좋습니다. 그래서 전력문제를 호소하는 경우가 있더군요.
간단하게 어댑터를 바꾸거나 선을 잘라서 12V를 직접 넣어주면 됩니다.
https://www.reddit.com/r/kinect/comments/g7nlei/tips_for_making_your_own_kinect_360_power_adapter/
레딧을 보면 선 형태가 대충 나오는데 이런식으로 잘라서 가공하면 됩니다. 12V어댑터와 USB2.0케이블이 하나 필요합니다.
일단 이렇게 만들면 거의 문제는 해결 됩니다.
키넥트라는게 원래 게임용인걸 다른 용도로 쓰려다 이렇게 된거니 뭐...
삽질은 어쩔 수 없겠지요.
'기타 삽질' 카테고리의 다른 글
ffmpeg-python 패키지 사용시 오류 문제 (3) | 2024.09.12 |
---|---|
fairseq 모듈을 Pyinstaller로 패키징시 오류 (1) | 2024.09.07 |
무선 리피터와 Mesh네트워크의 차이 (1) | 2023.12.06 |
옛날게임을 돌리려고 하면 일어나는 사소한 문제들 (해결함) (4) | 2022.05.14 |
Chrome에서 Youtube 메뉴와 재생버튼등이 클릭이 안 될때 (0) | 2022.04.04 |