반응형

Python에서 OpenCV를 사용하기 위해서는,

다음과 같은 환경이 준비되어야 한다.

(윈도우 기준)


1. 다운로드

  • Python 및 수학, 그래픽 관련 패키지
  • OpenCV의 Python용 모듈
    • python-OpenCV
      • 여러가지 목록 중에서, 자신의 환경에 맞는 것을 골라야 한다.
      • 예를 들어, 목록명이 다음과 같은 경우,
        • opencv_python-3.4.1+contrib-cp36-cp36m-win_amd64.whl
      • OpenCV버전은 3.4.1이고, 
      • OpenCV Contribute를 포함하며, 
      • 아나콘다의 python 버전은 3.6.x이고,
      • OS는 64bit임을 의미한다.


2. 설치

  • 일단은 Anaconda 설치 파일을 통해, python 및 관련 패키지를 설치한다.
  • Anaconda Prompt를 실행한 다음, python-OpenCV가 있는 폴더로 가서, pip 명령을 실행한다.
    • pip install [다운로드된 파일명]



반응형
반응형

이전에 관련 글을 작성하였지만,

이런저런 삽질을 통해 성공한 경험을 바탕으로

좀더 정리된 내용을 정리하고자 한다.

ffserver에서 libx264코덱을 이용하도록 하기 위해,

다음 두 사이트를 참고하였다.


  1. ffserver란
    • ffserver는 ffmpeg에 포함되어 있는 영상서버 프로그램이며, 다수의 사용자들에게 영상을 전송할 수 있도록 해주는 기능을 한다.
  2. Windows용 ffserver 빌드
    • ffserver는 Linux용이지만, Cygwin, Mingw등과 같은 툴을 통해 Windows에서도 빌드할 수 있다.(여기서는 Cygwin 사용)
    • 준비 단계
      • NASM 다운로드 : http://www.nasm.us/
      • libx264 다운로드 : https://www.videolan.org/developers/x264.html
    • 진행 순서
      • 다음과 같은 순서로 진행한다.
        • Cygwin 설치
          • setup-x86_64 실행
          • Choose A Download Site 화면에서, http://ftp.daum.net와 같은 국내 서버를 선택하는 것이 속도 면에서 좋다.
          • Select Packages에서 Devel Category를 펼친다음 아래 항목들 선택(Search에 입력하여 검색 가능)
            • gcc-core, gcc-g++, git, make, yasm
          • Editors에서 vim을 선택
          • [다음(N)]을 계속 눌러 설치 완료
        • libx264 압축해제 후, Cygwin 디렉토리에 복사
          • 7zip 등을 이용해 2단계에 걸쳐 압축 해제
          • x264-snapshot-xxxxxxxx-xxxx폴더를 편의상 x264로 이름 변경
          • C:\cygwin64\home\[UserName]폴더에 복사
        • NASM 설치
        • libx264 빌드
          • Cygwin64 Terminal 실행
          • 터미널 화면에서,
            • NASM 경로 설정
              • PATH=[NASM경로]:$PATH
            • 설정 변경
              • cd x264
              • ./configure --enable-shared --disable-avs
                • (이렇게 해서 avs를 제외하지 않으면, AVS 관련 파일에서 컴파일 에러가 난다.)
            • make & install 하기
              • make
              • make install
        • ffmpeg 빌드
          • 터미널 화면에서,
            • git 설정 변경
              • git config --global core.autocrlf false
            • ffmpeg 다운로드
              • git clone --branch n3.1.11 https://git.ffmpeg.org/ffmpeg.git
                • (ffserver가 ffmpeg3.2 버전부터는 중단되므로, 3.1.x버전을 다운로드 받아야 한다.)
                • (현재 3.1.x 최신버전은 3.1.11이므로, 3.1.11 버전을 다운로드한다.)
            • ffmpeg 폴더로 이동 
              • cd ffmpeg
            • 설정 변경(libx264코덱 사용 설정 포함)
              • ./configure --prefix=../ffmpeg-3.1.11 --enable-gpl --enable-libx264 --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib
            • config 헤더파일 수정(빌드시 에러 방지 위해)
              • vi config.h
                • (vim 사용법 요약 : i 누르면 입력(끼워넣기)모드, ESC누르면 커서이동모드, 커서이동모드에서는 / 입력 후 검색할 단어 입력 가능, 커서이동모드에서 : 입력 후 wq 입력후 엔터키를 누르면 저장 후 종료)
                • HAVE_ARC4RANDOM의 값을 1에서 0으로 수정 (링크에서 나는 에러 패치)
                • #ifndef 다음라인(약 3~4번째 라인)에 _XOPEN_SOURCE 700 추가 (sigaction 함수선언 문제 해결)
                • 저장 후 종료
            • make & install 하기
              • make
                • make -j5를 하면 더 빨리 빌드됨(-j 옵션은 동시빌드 개수)
              • make install
  3. 필요한 파일들을 가져다가 사용
    • 필요 파일들
      • ffmpeg.exe
      • ffserver.exe
      • ffprobe.exe
      • libx264-152.dll
      • cygwin1.dll
    • 파일 원본 위치 : 
      • C:\cygwin64\home\[UserName]\ffmpeg-3.1.11\bin
      • C:\cygwin64\home\[UserName]\x264
      • C:\cygwin64\bin
    • 위의 파일들을 같은 폴더에 복사해서 실행하면 된다.


반응형
반응형

http://pgmaru.tistory.com/155

위 글에, Windows에서 ffserver 및 ffmpeg를 빌드하고 설치하는 방법, 

ffserver에 영상을 feeding하는 방법 등을 설명하였다.

물론, 처음 해보는 것이라 정신 없이 이것저것 테스트하면서 쓰다 보니

오로지 나를 위한 글이 되어 버리긴 했다.

좀 정리가 되면 나중에 다시 써야겠다.


그런데, Windows 10에서는 Linux를 사용할 수 있다는 것을 이제 와서 떠올리게 되었다.

https://msdn.microsoft.com/en-us/commandline/wsl/install-win10

그래서 어쩌면, 위 글처럼 난리법석을 치지 않고서도 

쉽게 ffserver를 구현할 수 있는 방법이 있을 수도 있다.

물론 해보지 않고서는 모르겠지만...

조만간 한 번 시도해 보고, 다시 글을 남겨야겠다.

반응형
반응형


테스트1 : rtsp 스트리밍
  • config file : testsample.conf
HTTPPort 7000
RTSPPort 7001
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000

<Feed test.ffm>
        File /test.ffm
        FileMaxSize 1M
        ACL allow 127.0.0.1
</Feed>

<Stream test.rtsp>
        Feed test.ffm
        Format rtp
        VideoSize 640x480
        NoAudio
        Metadata title "test"
</Stream>

<Stream stat.html>
        Format status
        ACL allow localhost
</Stream>
  • 명령
ffserver -f testsample.conf

ffmpeg -re -i result.avi -vcodec copy -acodec copy http://localhost:7000/test.ffm



반응형
반응형
자유도(Degree of Freedom)에 대한 설명은, 다음 사이트에서 찾을 수 있다.

기존에 만들었던 떨림보정에서, 자유도를 낮추는 작업을 하였다.

기존 떨림보정은, 자유도가 6이었다.

수정본의 자유도는, 4와 2이다.

PTZ로 고정되어 있는 상태에서, 바람에 의해 화면이 약간 떨리는 정도라면,

CCTV의 화면이 뒤집히거나 상하 또는 좌우 반전이 될 일이 없다.

따라서, 자유도 2의 보정으로도 충분할지 모른다.


자유도를 낮추어서 얻을 수 있는 잇점은,

화질이 좋지 않을 때 떨림보정으로 인해

화면이 이상하게 뒤집히거나 기울어지는 현상을 방지할 수 있다는 것이다.


아래의 테스트 화면을 보면,

자유도 4의 경우에는 회전까지 보정이 되고,

자유도 2의 경우에는 상하좌우 움직임만 보정이 된다.

  • 원본



  • 자유도 4


  • 자유도 2




반응형
반응형

OpenCV 최신버전을 알아보려 OpenCV사이트에 들어가 봤는데,

의아하게도 가장 최근에 업데이트된 버전이 2.4.13이었다.

3.x.버전도 있는데 왜 2.x 버전이 최신 버전인지 궁금해서 검색을 하다가,

다음 내용을 통해 그 차이점을 알게 되었다.

Why there are two versions of OpenCV 3.x and 2.4.xx ?

요약해 보면, OpenCV 3.x에 기존 OpenCV 2.x버전에서 쓰던 코드를 

거의 그대로 옮겨 올 수 있고,

새로운 기능들도 많이 추가되었기 때문에,

실질적으로 최신 버전이라고 할 수 있을 것이다.

하지만 일부 그대로 옮겨 올 수 없는 코드들도 존재하기 때문에, 

기존에 OpenCV 2.x 버전 기준으로 만들어진 시스템을 고려하여

2.x 버전의 업데이트도 당분간 계속 유지하는 것으로 볼 수 있다.


따라서, 시스템을 새로 만드는 경우라면 고민 없이 3.x 버전을 쓰면 되고,

기존에 2.x 버전으로 만들어진 시스템을 업데이트하는 경우라면

상황에 따라 3.x로 바꿀지, 아니면 2.x 버전을 유지할지를 선택할 수 있다.


반응형
반응형

OpenCV3의 샘플들을 살펴보던 중에,

KCF(kcf.cpp)를 발견하게 되었다.

OpenCV Extra Modules에 포함되어 있으며,

정확한 경로는 다음과 같다.

  • opencv_contrib/modules/tracking/samples/kcf.cpp


이 파일은, tracking 알고리즘 증에서 KCF(Kernelized Correlation Filters)를 구현한 것이다.

테스트해보니, 속도가 빠르면서도 좋은 성능을 보여 주는 것 같다.


KCF에 대한 자세한 설명은, 다음 사이트에 나와 있다.


위 사이트에 따르면, 이 방식은 트랙킹 방식 중에서 최상위에 속하는 TLD나 Struck 보다도

좋은 성능을 발휘한다고 한다.

그리고, 앞으로의 개발을 위해 프레임워크를 Open Source로 공개한다고도 한다.


반응형

'영상처리 프로젝트' 카테고리의 다른 글

신규 떨림보정(자유도 4, 자유도 2) 테스트  (0) 2016.12.22
OpenCV 2.x와 3.x의 차이  (0) 2016.10.20
opencv_contrib 빌드하기  (0) 2016.03.22
OpenCV속도비교2  (1) 2016.02.29
OpenCV 3.x에서의 OpenCL  (0) 2016.02.25
반응형

  • OpenCV Extra Modules 소개
    1. 다음 사이트에 가면, OpenCV Extra Modules에 대해 잘 소개되어 있다.
    2. 내용인즉슨, 새로운 API가 OpenCV에 추가되는 경우, 아직 안정성이나 성능이 검증되지 않았으므로, 처음에는 공식 배포본 대신, Extra Modules(opencv_contrib)에 포함시킨다.
    3. 이후 안정성이 검증되고 사용 빈도가 많아지면, 메인 모듈(공식 배포본)에 포함되어 배포된다.


  • OpenCV Extra Modules 빌드 방법
    1. 다음 사이트의 [Download ZIP] 버튼을 통해, opencv-contrib-master.zip 파일을 다운로드 받는다.
    2. 압축을 해제한다.
    3. 다음 사이트 내용을 참고하여, OpenCV 빌드를 준비한다.(7번까지 진행)
    4. CMake GUI화면의 'OPENCV_EXTRA_MODULES_PATH'항목에 [opencv-contrib-master폴더]/modules를 선택해 준다.
    5. http://pgmaru.tistory.com/53의 8번부터 계속 진행한다.


  • VisualStudio2008로 빌드할 경우의 문제해결 방법
    • CMake를 통해 솔루션이 생성된 다음, VisualStudio2008로 빌드를 진행하게 되면, 몇몇 파일에서 컴파일 에러가 발생한다.
    • 빌드 진행을 위해서는, 다음과 같이 소스를 수정해 주어야 한다.
      1. [opencv-contrib-master폴더]/modules/line_descriptor/samples/knn_matching.cpp의 114행
        • result += (uchar) ( bin_vector[i] * pow( 2, i ) );
        • result += (uchar) ( bin_vector[i] * pow( 2.0, i ) );
        • 으로 변경해 준다
      2. [opencv-contrib-master폴더]/modules/optflow/samples/optical_flow_evaluation.cpp의 10행
        • 다음 내용을 추가해 준다.

        #ifdef WIN32

            #ifndef NAN

                static const unsigned long __nan[2] = {0xffffffff, 0x7fffffff};

                #define NAN (*(const float *) __nan)

            #endif

        #endif


반응형

'영상처리 프로젝트' 카테고리의 다른 글

OpenCV 2.x와 3.x의 차이  (0) 2016.10.20
KCF(Kernelized Correlation Filters)  (0) 2016.05.23
OpenCV속도비교2  (1) 2016.02.29
OpenCV 3.x에서의 OpenCL  (0) 2016.02.25
OpenCV 속도 비교 테스트 - 2.1 vs 3.1(with TBB)  (0) 2016.02.18
반응형
<조건>
항목 내용
원본 동영상 사이즈 640*360
Resize 크기 1280*720
OpenCV 버전 OpenCV3.1(TBB) 
기능 Resize+떨림+객체+안개+윤곽


CPU 사양 속도
i5 3470 3.20GHz 10.86 FPS
Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz 4.39 FPS


집 PC : 10.8566FPS

(사양 : i5 3470 3.20GHz, RAM 8GB, 64bit Window, x64 기반 프로세서)

(디스플레이 : NVidia GeForce GT630)

사무실 개발PC : 10.8554FPS

(사양 : i5-3470 3.20GHz, Ram 4GB, 32bit window)

(디스플레이 : Inte4l(R) HD Graphics)


반응형
반응형

영상처리 속도개선을 위해 사용되는 방법들 중에 대표적인 것이,

병렬처리와 GPU 사용일 것이다.

병렬처리는 TBB나 IPPCV등을 통해서 구현되며,

GPU 사용은 CUDA와 OpenCL등을 통해 구현된다.


CUDA는 그래픽카드가 NVidia인 경우에만 사용 가능하다.

반면 OpenCL은 기타 여러가지 경우에 사용 가능하다.

이에 대한 내용은 다음 사이트에 잘 나와 있다.

Platform -> OpenCL

OpenCV상에서 실제로 OpenCL을 사용할 때의 키워드는 UMat이다.

그리고, 다음 사이트에도 중요한 내용이 담겨 있다.

OpenCV3.0 Architecture

이 내용을 알아야 UMat을 잘 사용할 수 있다.

특히, getMat(), getUMat()을 사용하는 경우,

get...을 통해 얻어진 Matrix가 해제될 때까지는

원본 Mat을 사용할 수 없다는 사실에 유의해야 한다.


또한, 다음 내용도 참고할 필요가 있다.

OpenCL Module Introduction

CPU와 GPU간 데이터 전송은 성능저하를 유발할 수 있기 때문에

필요한 경우에만 사용해야 하고,

GPU가 double형 연산을 지원하지 못하는데 double형 연산을 구현하는 경우

에러가 발생한다는 내용 등이 쓰여져 있다.

반응형

'영상처리 프로젝트' 카테고리의 다른 글

opencv_contrib 빌드하기  (0) 2016.03.22
OpenCV속도비교2  (1) 2016.02.29
OpenCV 속도 비교 테스트 - 2.1 vs 3.1(with TBB)  (0) 2016.02.18
OpenCV 3.0 빌드 체험기2  (0) 2015.12.15
OpenCV 3.0 빌드 체험기  (0) 2015.12.10

+ Recent posts