광고는 짜증나는 존재입니다
하지만 인터넷의 콘텐츠 제공자로서 수익을 얻을 몇 안되는 방법이지요

특히 광고제공계의 거인인 구글은 광고차단을 참 싫어합니다

하지만 웃기게도 구글외의 다른 회사들은 광고차단을 마케팅포인트로 삼고있습니다. 거기에 Adguard라던가 AdBlock plus라던가 ublock origin같은 광고차단플러그인들도 있지요.

최근 유튜브광고차단 플러그인 사용시 영상재생이 느려지는 일이 일어났습니다. 프리미엄 서비스를 쓰지 않으면 느려지게 하겠다는 의미인데 며칠 뒤에 이걸 또 해결해버리더군요.

거기에 유튜브앱을 수정해서 프리미엄기능을 활성화하거나 버전업을 막아서 서비스를 못 하게 막으니 앱버전을 Spoofing해버린다던지 합니다.

이쯤되니 구글vs해커가 되는 기분인데 과연 승자는 누구일까요.

,

Kinnect 요즘은 실패한 발명품 취급 받고 있지요.

그래도 이만한 모션 인식 시스템을 이 가격에 찾기 힘듭니다. 모션 카메라인데 10만원 남짓에 구할 수 있다는게 보통 물건이 아니란 거지요.

 

그리고 재밌게도 초기 물건인 Xbox360용 키넥트는 USB커넥터로 PC에 바로 연결이 가능합니다. 윈도우용 키넥트도 따로 있긴 한데 리눅스에선 이게 더 인식이 잘 됩니다.

 

리눅스에서는 보통 https://github.com/OpenKinect/libfreenect

 

GitHub - OpenKinect/libfreenect: Drivers and libraries for the Xbox Kinect device on Windows, Linux, and OS X

Drivers and libraries for the Xbox Kinect device on Windows, Linux, and OS X - GitHub - OpenKinect/libfreenect: Drivers and libraries for the Xbox Kinect device on Windows, Linux, and OS X

github.com

이 라이브러리를 사용하게 됩니다. 그리고 키넥트 관련 솔루션은 OS문제가 없는 대부분 이걸 사용합니다.

 

그리고 최근 https://github.com/meshonline/kinect-openni-bvh-saver

 

GitHub - meshonline/kinect-openni-bvh-saver: This project is based on OpenNI2, NITE2, and OpenCV2, it will automatically save ma

This project is based on OpenNI2, NITE2, and OpenCV2, it will automatically save many skeleton animation clips to bvh files. - GitHub - meshonline/kinect-openni-bvh-saver: This project is based on ...

github.com

이걸 사용해보려고 했는데 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/

 

From the kinect community on Reddit

Explore this post and more from the kinect community

www.reddit.com

레딧을 보면 선 형태가  대충 나오는데 이런식으로 잘라서 가공하면 됩니다. 12V어댑터와 USB2.0케이블이 하나 필요합니다.

일단 이렇게 만들면 거의 문제는 해결 됩니다.

 

키넥트라는게 원래 게임용인걸 다른 용도로 쓰려다 이렇게 된거니 뭐...

 

삽질은 어쩔 수 없겠지요. 

,

구글은 ANGLE이라는 이름의 라이브러리를 잘 쓰고 있습니다.
구글답게 오픈소스로 풀려있습니다. 주로 안드로이드에서 이용중이지만 크롬에도 일부 적용중입니다.

https://github.com/google/angle

GitHub - google/angle: A conformant OpenGL ES implementation for Windows, Mac, Linux, iOS and Android.

A conformant OpenGL ES implementation for Windows, Mac, Linux, iOS and Android. - GitHub - google/angle: A conformant OpenGL ES implementation for Windows, Mac, Linux, iOS and Android.

github.com

사실 이 물건은 일종의 번역기입니다
리눅스 사용자들은 DXVK가 익숙하실수도 있습니다. DirectX로 만들어진 프로그램을 Vulkan으로 구동하게 만드는 라이브러리입니다.

이와 비슷하게 ANGLE은 그동안 모바일에서 쓰여온 OpenGLES를 최신API인 Vulkan나 윈도우의 DirectX등으로 구동되게 하는 물건입니다.

대체 왜 이걸 만든것이냐하면 사실 PC에서는 곁다리지원 정도고 모바일쪽이 개판되서 그렇습니다.

안드로이드에서  게임개발은 여전히 OpenGLES가 주력입니다. OpenGLES의 개발이 중단된지 오래지만 후속이라 할 수있는 Vulkan의 코드작성이 워낙 힘들고 그래픽칩셋업체(ARM Mali, Qualcomm Adreno)와 구글, 크로노스그룹 과의 손발이 안 맞아서 개판이된 상태라 아직도 절찬리에 OpenGLES가 이용중입니다.

모 게임회사에서는 OpenGLES로 만들던 게임을 Vulkan으로 가능하게 수정했더니 정상적으로 돌아가는걸 본 적이없다고 할 정도로 상태가 안 좋습니다.

저는 모바일Vulkan이 이 꼴이 된 제일 큰 범인으로 모바일 게임엔진의 투탑중 하나인 Unity를 꼽지만 Unity도 Vulkan을 이 따위로 만들고 싶어서 그랬을까요. (Unreal은 그나마 모바일 Vulkan의 상황이 괜찮습니다)

암튼 구글이 직접 OpenGLES로 만들어진 프로그램을 Vulkan으로 가능하게 만들어주기 위해 만들고 있는것이지요.

일부 커스텀 안드로이드에는 벌써부터 이를 적용해서 기존 Vulkan지원이 안되는 게임을 Vulkan으로 되게끔 하고 있더군요

EvolutionX의 게임옵션 중 일부 몇몇게임의 경우 확실히 프레임이 올라간다

실제로 DirectX로 돌아가게하는 기능도 있음에도 개발상황을 보면 Vulkan렌더링이 주력입니다. DirectX기능은 윈도용 크롬이 쓰는 중이라고 하지요.

이런걸보면 개판이 된 모바일 게임쪽을 구글이 총대를 멘듯한 느낌인데...ANGLE만 믿고 OpenGLES만 쓰는 일은 없어야 할텐데요. 과연...

,