테스트를 해본 결과
특정 버퍼에서 여러 다른 Mat을 얻어낼 수 없다.
cv::Mat colorImage( colorHeight, colorWidth, CV_8UC4, &colorBuffer[0] )에서
호출되는 Mat 생성자를 보면
Mat(int rows, int cols, int type, const Scalar& s);
위와 같이 레퍼런스로 받는 것을 볼 수 있다.
따라서 Mat을 변형시키면 Buffer도 영향을 받는 구조인 것이다
이를 피하기 위해 copyTo를 써서 해결했지만 속도가 엄청 느리다
2014년 8월 2일 토요일
OpenCV Rect memory leaks
반복문 내에
std::vector<Rect> faces;
가 있을 때, 화면에 붙여주고 나서 다음 loop에서 memory leaks이 발생하곤 한다.
http://code.opencv.org/issues/1751
static std::vector<Rect> faces;// memory leaks 피해가는 꼼수...
faces.clear();// 붙여주고 나서 실행
이렇게 하면 되기는 된다.
std::vector<Rect> faces;
가 있을 때, 화면에 붙여주고 나서 다음 loop에서 memory leaks이 발생하곤 한다.
http://code.opencv.org/issues/1751
static std::vector<Rect> faces;// memory leaks 피해가는 꼼수...
faces.clear();// 붙여주고 나서 실행
이렇게 하면 되기는 된다.
Kinect 2 영상을 OpenCV로 변환해 stasm 4.0 minimal 예제에서 작동시켜보기
겪은 어려움 위주로 서술
한 폴더 내 헤더 파일, 소스 파일 인식 불능
프로젝트 마우스 오른쪽 클릭으로 클래스를 생성하면 헤더 파일과 cpp 파일이 프로젝트와 같은 폴더에 생기는데,
stasm 프로젝트 설정 자체가 프로젝트와 같이 있는 소스, 헤더 파일은 읽지 않도록 되어 있는 것 같아 편법을 사용했다.
프로젝트속성 -> 구성 속성 -> C/C++ -> 일반 -> 추가 포함 디렉터리에
../vc10 을 추가. 그리고 얖에 써있는 opencv 2.4.0 어쩌구 하는 잘못된 경로 삭제.
위의 ../vc10은 그저 나갔다 들어오는 것을 나타낸다.
objdetect.hpp(338):
error C2589: '(' : '::' 오른쪽에 잘못된 토큰이 있습니다.
error C2059: 구문 오류 : '::'
objdetect.hpp의 전처리 부분에
#ifdef max
#undef max
#undef min
#endif
삽입으로 해결.
Release 속성도 같은 방법으로 해준다.
GrayImage에 대해서 작동하는 Stasm 알고리즘
cv::Mat_<unsigned char> grayImage;
cvtColor(colorImage, grayImage, CV_RGB2GRAY);
이러한 구문을 통해 해결.
결과
openMP도 쓰고 Release 버전에서 돌려도 부드럽게 추적하지는 못함.
이유는 사진용 알고리즘이라 매번 Shape를 다시 던지고 1/16 크기의 화면부터 다시 검색하기 때문이라고 생각됨. Stasm 공부를 깊게 해서 내부 함수를 마음대로 수정할 수 있는 능력이 필요함.
GrayImage에 대해서 작동하는 Stasm 알고리즘
cv::Mat_<unsigned char> grayImage;
cvtColor(colorImage, grayImage, CV_RGB2GRAY);
이러한 구문을 통해 해결.
결과
openMP도 쓰고 Release 버전에서 돌려도 부드럽게 추적하지는 못함.
이유는 사진용 알고리즘이라 매번 Shape를 다시 던지고 1/16 크기의 화면부터 다시 검색하기 때문이라고 생각됨. Stasm 공부를 깊게 해서 내부 함수를 마음대로 수정할 수 있는 능력이 필요함.
Kinect for Windows v2 OpenCV 예제 빌드 시 주의사항
아래 블로그에 들어가서 예제를 다운 받는다.
http://www.naturalsoftware.jp/kinect-for-windows-sdk-v2-0%E5%85%A5%E9%96%80-%E7%9B%AE%E6%AC%A1
https://github.com/kaorun55/Kinect-for-Windows-SDK-v2.0-Samples
예제가 VS2013 에서 작성되었고 C++11 문법들로 작성되어 있는데다가
VS2012에서는 C++11 문법의 일부 밖에 지원하지 않아
많은 고생을 했다.
또한 Nuget Package manager로 opencv를 설치한 것으로 보여
패키지 관리자 콘솔에서
Install-Package opencv를 입력하여 형식적으로 설치해주고
따로 프로젝트 속성에서 opencv 경로를 잡아주어야 했다.
또한 Comptr.h 파일을 Include 하지 않고
스마트 포인터로 구현된 구문은 일반 포인터 구문으로 바꿔주고,
클래스 멤버 변수를 선언하면서 동시에 초기화 하는 문법은 VS2012에서 지원을 안하는 것처럼 보이므로 initialize 함수에서 NULL 값 등을 넣어주었다.
스마트포인터가 아니게 되었으므로 메모리 Release에 신경을 써야 영상이 부드럽게 출력된다. ***Frame 객체들은 버퍼에 전달 한 후 꼭 바로바로 Release해주어야 했다.
그리고 이제야 알게 된 사실인데, 마지막 예제의 실행 속도가 느렸던 것은 디버그 모드로 컴파일 했기 때문이었다...
http://www.naturalsoftware.jp/kinect-for-windows-sdk-v2-0%E5%85%A5%E9%96%80-%E7%9B%AE%E6%AC%A1
https://github.com/kaorun55/Kinect-for-Windows-SDK-v2.0-Samples
예제가 VS2013 에서 작성되었고 C++11 문법들로 작성되어 있는데다가
VS2012에서는 C++11 문법의 일부 밖에 지원하지 않아
많은 고생을 했다.
또한 Nuget Package manager로 opencv를 설치한 것으로 보여
패키지 관리자 콘솔에서
Install-Package opencv를 입력하여 형식적으로 설치해주고
따로 프로젝트 속성에서 opencv 경로를 잡아주어야 했다.
또한 Comptr.h 파일을 Include 하지 않고
스마트 포인터로 구현된 구문은 일반 포인터 구문으로 바꿔주고,
클래스 멤버 변수를 선언하면서 동시에 초기화 하는 문법은 VS2012에서 지원을 안하는 것처럼 보이므로 initialize 함수에서 NULL 값 등을 넣어주었다.
스마트포인터가 아니게 되었으므로 메모리 Release에 신경을 써야 영상이 부드럽게 출력된다. ***Frame 객체들은 버퍼에 전달 한 후 꼭 바로바로 Release해주어야 했다.
그리고 이제야 알게 된 사실인데, 마지막 예제의 실행 속도가 느렸던 것은 디버그 모드로 컴파일 했기 때문이었다...
Kinect for Windows v2 설치 및 OpenCV 예제
요구 사항
•Windows 8, 8.1
•USB 3.0
•Visual Studio 2012 이상
•DirectX 11.0 이상
•2G RAM 이상
현재 C++ 에 대한 Face recognition을 지원하지 않는다. Developer Network의 글.
If you
are would like to join the Kinect for Windows Developer Preview Program to
access the weekly SDK
updates please
send us an email. The Developer Preview will allow you access to weekly updates
which will include Fusion and Face HD and
related samples.
Please
email K4W@microsoft.com with
the subject line: “DPP Invitation Request” to get your invitation.
일본 MS MVP 개발자들의 블로그. 크롬으로 들어가서 번역하면 읽고 적용하는데 문제는 없다. OpenCV 예제도 있다.
C# Face Recognition 예제. Body 인식이 먼저 된 후에 실행되는 형태로 만들어져 있다.
영어 강의 동영상
피드 구독하기:
글 (Atom)