음.. SkeletonStream을 뽑아내는데 대해서 많은 분들이 어려움을 겪으시네요. 특히 HANDLE 부분이 초기화가 되지 않는다고 하시는 분들이 많으신거 같은데요.그래서 아예 전체 코드를 공개해드립니다. 동작영상도 보여드리니까 아마 코드 그대로 넣으시고 Linker 같은 dependency만 제대로 연결 잘하시면 아마 잘 되실 겁니다. // SkeletonStream을 화면에 출력하기 위한 header #include #include #include //HANDLE을 쓰기 위한 window관련 header#include #include #include // Microsoft Kinect SDK //STL#include #include using namespace std;using namespace ..
이전에 이런 글을 쓴 적이 있습니다.2012/09/25 - [About OpenCV] - [Kinect with OpenCV] CAMShift 적용 (2) Color Segmentation사실 온라인상에 공개되어 있는 CAMShift를 수행하기 위해서는 Color 기반의 histogram이 나와야 됩니다. 그래야 사물에 대한 추적을 할 수 있는 것이지요. 하지만 그 글에서도 언급된 것처럼 다음과 같은 이미지가 나오게 됩니다. 이유는 키넥트의 카메라 배치때문입니다. 딱 보면 아시겠지만 Color를 볼수 있는 RGB Cam과 Depth를 볼 수 있는 Depth Cam의 위치가 다릅니다. 즉, 시점이 다르다는 것이지요. 여러대의 웹캠을 활용한 프로젝트에서도 시점이 맞지 않기 때문에 이를 보정해주는 과정을 거치..
예전에 이런 글을 쓴 적이 있습니다. 2012/07/28 - [About OpenCV] - [EmguCV] 이해를 할 수 없는 라이브러리, EmguCV 참 그때도 시키는대로 다했는데 왜 안 되는 마음에서 글을 썼습니다. 그런데 마침 조금 시간이 남아서 한번 다시해봤고 이제는 잘 되네요. 참고로 저는 Windows 7 x64에서 테스트했습니다.그때도 설명 드렸다시피 EmguCV는 OpenCV의 C# Wrapper로써 WPF/Winform 상에서도 영상처리를 할 수 있도록 도와주는 툴입니다. 설치는 다음 사이트에서 받으시면 됩니다. 그러면 main 드라이브상에 emgu라는 이름으로 설치가 됩니다.제가 이글을 쓸 때의 emguCV 버전은 v2.4.2.1777이었고, 사실 이부분이 조금 중요합니다. 이 버전앞에..
요즘에 간단하게 보고 있는 자료 중 하나가 바로 이겁니다. 이 교수님이 쓰신 방법은 이른바 Chamfer Matching이라는 기법을 활용해서 실제 사람의 손과 데이터베이스에 들어있는 손 모델간의 비교를 통해 제스처를 인식하는 방식입니다. 그래서 최종적으로는 이렇게 입출력이 나옵니다. 그런데 실제 손의 position을 기반으로 한게 아니라 이것을 edge로 바꾼 결과들끼리 비교합니다. 이때 사용되는 방식이 Chamfer Matching입니다.위의 말대로 따라간다면 데이터베이스에 들어있는 template을 실제 창에서 탐색하는 단계가 필요할 것이고요. 이때 픽셀간의 거리가 작을수록 template에 맞는 모델이겠지요. 그런데 보시는 것처럼 실제 창에는 edge가 상당히 맞습니다. 당연히 template과..
10월 초에 Kinect for Windows SDK가 v1.6으로 업데이트되면서 생긴 포멧중의 하나가 InfraRed, 즉 적외선 모드였습니다. 그리고 Developer ToolKit에서도 이를 활용한 예제가 있었는데 그게 바로 Infrared Basic입니다. 그런데 ToolKit에 있는 모든 C++ 예제들이 그렇지만 역시 Direct2D로 구현되어 있기도 하고 이와 관련된 Reference가 잘되어 있지 않아서 조금 알아보기 힘듭니다. 저도 조금 고민을 하다가 OpenCV로도 이걸 표현할 수 있지 않을까 해서 이것저것 해본 결과를 공유하고자 합니다. 우선 기본 세팅은 다른 포스트에서도 많이 언급했던 내용이니까 생략을 하고, 사전에 알아둘 점이 하나있습니다.전 애초에 Color와 Depth, IR을 ..
얼마전에 C로 구현하는 Skeletal Tracking에 대해서 소개해드린 적이 있습니다. 2012/10/14 - [About OpenCV] - [Kinect with OpenCV] C로 구현하는 SkeletonStream 사실 이걸 좀 응용하기 만 하면 HandMouse를 구현할 수 있습니다. 방법은 딱 한줄만 적어주면 됩니다. 사전에 제 글로 예제를 만드셨다면 windows.h 헤더파일이 추가되어 있을 것이고 그 헤더 파일에는 Cursor의 Position을 지정해주는 함수가 있는데 이게 바로 SetCursorPos입니다. 이 안에다가 Pixel포지션만 넣어주고 적당한 magnitude를 대입해주면 실시간으로 움직이는 마우스를 구현할 수 있는거지요.하지만 당연히 완전한 마우스라고 할 수 없습니다. 마..
지나간 포스트 중에 Depth Map을 뿌려보는 예제를 소개한 적이 있습니다.2012/10/01 - [About OpenCV] - [Kinect with OpenCV] C로 만들어보는 뎁스 이미지 호출 그런데 제 글을 읽어보신 분은 아시겠지만 Kinect SDK가 v1.6으로 올라가면서 Depth의 Range가 4m 이상으로 확장되었습니다. 이 기능은 사실 OpenNI에서는 구현이 되어 있던 기능이었는데 Kinect SDK v1.5에서는 Depth Range가 4095mm 로 한정되어 있었습니다. 이 값은 그 내용에 대해서 포스팅할 때도 그냥 넘어갔던 값입니다. 여기보시면 I값을 표현할 때 끝에 0x0fff로 나눠주시는게 보이실겁니다. 이걸 10진수로 표현하면 4095가 되는거지요. 사실 저렇게 구현한 ..
드디어 월요일의 전날인 일요일 저녁입니다. 누구나 이때쯤 개콘의 노래를 들으면서 '아 내일이 월요일이구나..' 라는 걸 느끼실겁니다. 뭐 그래도 다들 즐거운 주말을 보내셨으리라 생각합니다. 저는 뭐했느냐.. 그냥 집에서 코딩했습니다. 그냥 어떡하면 키넥트로 관절을 쉽게 인식하게 할까에 대한 고민을 했고, 그냥 그 답을 조금 찾은듯 합니다. 하지만.. 뭔가 아쉽네요. 그냥 주말을 이렇게 보냈다는게.. 아무튼 잡소리였고, 이번 포스트에서 다뤄볼 내용은 Kinect로 할 수 있는 기본적인 내용중 하나인 Skeleton Stream을 처리하는 방법을 해보려고 합니다. 물론 그냥 처리하기에는 힘드니까 OpenCV를 사용해서 간단하게 표현해보고자 합니다. 참고로 MS에서 제공하는 소스는 Kinect Develope..
계속해서 키넥트와 OpenCV를 결합한 프로젝트에 대해서 소개해드리고 있습니다. 일전에 C로 구현하는 ColorStream 출력에 대한 내용도 했었습니다. 2012/08/06 - [About OpenCV] - [Kinect with OpenCV] C++로 만들어보는 이미지 호출그리고 Canny Edge에 대해서 여러가지 테스트 해본 것도 한번 다뤄봤습니다. 2012/08/14 - [About OpenCV] - [OpenCV] Threshold 값의 변화에 따른 edge extraction 하지만 그때는 정지된 이미지에서 CannyEdge를 구현했었기 때문에 이게 실제 동영상에서도 활용할 수 있을까에 대한 의문이 생길 수 있습니다. 사실 다들 알다시피 동영상이라는 것은 Frame이 누적되어가면서 생기는 이..
손 추적이 완벽하지는 않지만 그래도 되는 것만 가지고 한번 손의 중심점을 뽑아서 50frame 단위로 끊어보려고 노력했습니다. 지금 route창으로 보여지는 점들이 손의 움직임을 따라가는 점들입니다. 물론 깊이에 따라서 색상도 변하게 했습니다. 하지만 앞에서 이야기 한것처럼 프레임단위로 점들을 누적시키고 빼는게 필요하는데 이때 사용한 자료구조가 바로 queue 라는 거지요. 그래서 50frame 이후에 들어온 점은 새로 그려주되 맨처음에 들어온 점은 나가는 일정은 FIFO 형태를 띄게 됩니다. 완벽하지는 않지만 그래도 점들이 누적되며 하는 행동을 끊을 수 있기 때문에 손으로 어떤 동작을 취하는지 대충 감을 잘 수 있는거지요.
사실 제가 한것에서 조금 보완해야 할 점은 handRect의 크기가 그냥 blob의 크기와 동일하기 때문에 손의 position이나 finger gesture를 위해서는 hand에 대한 정확한 Rectangle을 뽑아내는 것이 중요했습니다. 그래야 해당 부분에 대한 ROI를 지정할 수 있고요. 그래서 그중 생각해본 방향이 defect를 구해서 손목의 위치를 구한 후에 그 손목의 위치를 기준으로 Rectangle을 뽑으면 어떨까 싶어서 이전 포스트의 결과물이 나왔습니다. 그런데 아시는 분도 아시겠지만 BoundingRect이라고 해서 딱 정해진 범주의 점들만 가지고 Rectangle을 만들 수 있는게 있습니다. 그래서 손바닥에 대한 defect를 토대로 BoundingRect을 한번 적용시켜봤습니다. 지금..
우리나라에는 이 함수와 관련된 글이 없는거 같습니다. 그냥 저도 구글링해서 얻은 소스를 토대로 지난번 Convexhull 때 구현하고자 했던 ConvexityDefects를 시도해봤습니다. 사진을 보면 아시겠지만 ConvexityDefects 란 Convexhull상에서 실제 개체가 차지하는 영역사이의 빈공간을 말합니다. 그 중 위와 같이 contour가 확 바뀌는 지점을 Defects의 DepthPoint라고 말합니다. 즉, 저 점들이 손가락 사이를 표현하는 것이겠지요. 한번 동작 영상을 보겠습니다. 보시는 것처럼 손이 좌우로 이동함에도 그 Defect 값들은 유지가 되고 있습니다. 사실 CvConvexityDefect라는 자료형이 있고 지금 위의 것은 그중 DepthPoint라는 속성을 뽑아내서 보여..
Douglas Peucker approximation(DP)은 보통 연속된 점들 중 유사성을 나타내는 점만으로 근사화 시키는 방법입니다. http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm DepthMap을 통해서 Contour를 뽑았을때 적용했을 때와 적용하지 않았을 때의 차이를 한번 봅시다. 사실 보면 DP를 적용하면 조금더 선이 날카로워진 것을 볼 수 있습니다. 사실 올바른 데이터는 본래의 contour겠지만 DP를 적용한 후라도 손의 형태는 계속 유지됩니다. 당연히 근사화를 시킨후라서 담겨져 있는 값은 더 적어질 것이고, 그에 따라서 이와 연동한 연산도 조금더 빨라지겠지요.
- Total
- Today
- Yesterday
- Gan
- Pipeline
- ColorStream
- SketchFlow
- ai
- 한빛미디어
- 딥러닝
- Policy Gradient
- processing
- Kinect
- TensorFlow Lite
- Kinect for windows
- RL
- Offline RL
- bias
- arduino
- Distribution
- End-To-End
- PowerPoint
- reward
- 강화학습
- 파이썬
- Variance
- Kinect SDK
- Off-policy
- windows 8
- Windows Phone 7
- dynamic programming
- Expression Blend 4
- DepthStream
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |