2015/12/22

Python 3.4 에 OpenCV 3.0 설치하기

Python 3.4 버전에 OpenCV 3.0 버전을 이용하기 위해 비공식으로 배포되고 있는 OpenCV Binary 패키지를 이용했다.

먼저 필요한 파일은 아래 경로에서 다운 받았다.
http://www.lfd.uci.edu/~gohlke/pythonlibs/

필요한 패키지는 OpenCV, Numpy, Scipy 이다.
http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv
opencv_python-3.0.0-cp34-none-win32.whl

http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy
numpy-1.10.2+mkl-cp34-none-win32.whl

http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy
scipy-0.16.1-cp34-none-win32.whl

아래 내용은 위 패키지를 설치한 내용이다.

X:\temp> pip install opencv_python-3.0.0-cp34-none-win32.whl
Unpacking x:\temp\opencv_python-3.0.0-cp34-none-win32.whl
Installing collected packages: opencv-python
Successfully installed opencv-python
Cleaning up...

X:\temp> pip install "numpy-1.10.2+mkl-cp34-none-win32.whl"
Unpacking x:\temp\numpy-1.10.2+mkl-cp34-none-win32.whl
Installing collected packages: numpy
Successfully installed numpy
Cleaning up...

X:\temp> pip install scipy-0.16.1-cp34-none-win32.whl
Unpacking x:\temp\scipy-0.16.1-cp34-none-win32.whl
Installing collected packages: scipy
Successfully installed scipy
Cleaning up...

설치를 마치고 테스트를 해 보았다.
OpenCV 웹사이트에서 샘플 코드를 가져와 테스트를 해 보았다.

import numpy as np
import cv2

img = np.zeros((512,512,3), np.uint8)

img = cv2.line(img,(0,0),(511,511),(255,0,0),5)

img = cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)

img = cv2.circle(img,(447,63), 63, (0,0,255), -1)

img = cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)

pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
img = cv2.polylines(img,[pts],True,(0,255,255))

font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)

cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

아래 이미지는 위 코드를 실행하여 출력된 화면이다.

이제 간단한 이미지 처리 테스트는 Python 을 이용하면 편할 것 같다.

2015/12/03

SVN 서버에 log 없이 Commit 할 수 없도록 설정하기

Visual SVN을 사용하고 있는데 사용자들로 하여금 Commit 할 때 Log 메시지를 필수로 넣게하고자 방법을 찾아 보았다.
SVN 서버 설정에는 Commit 관련하여 hook 라는 여러가지 이벤트를 처리할 수 있는 방법이 있다.

Visual SVN 의 Repository 의 Property를 보면 Hooks 탭을 볼 수있는데 이 탭에서 여러가지 Event에 대한 설정을 할 수 있다.
Commit 관련하여 시작할 때와 파일을 올리고 Commit 하기 직전 그리고 Commit을 완료한 시점에 대한 hook를 설정할 수 있다.
start-commit
run before commit transaction begins, can be used to do special permission checking
pre-commit
run at the end of the transaction, but before commit. Often used to validate things such as a non zero length log message.
post-commit
runs after the transaction has been committed. Can be used for sending emails, or backing up repository.
- 출처 : Stack Overflow

pre-commit hook에 Windows 배치스크립트를 작성하여 검사할 수 있으며 이 스크립트가 0이 아닌 에러코드를 넘길 경우 Commit이 취소 된다.

아래 코드는 Stack Overflow에서 얻은 로그를 6자 이상 넣도록 하는 배치코드 이다.
setlocal enabledelayedexpansion

set REPOS=%1
set TXN=%2

set SVNLOOK="%VISUALSVN_SERVER%\bin\svnlook.exe"

SET M=

REM Concatenate all the lines in the commit message
FOR /F "usebackq delims==" %%g IN (`%SVNLOOK% log -t %TXN% %REPOS%`) DO SET M=!M!%%g

REM Make sure M is defined
SET M=0%M%

REM Here the 6 is the length we require
IF NOT "%M:~6,1%"=="" goto NORMAL_EXIT

:ERROR_TOO_SHORT
echo "Commit note must be at least 6 letters" >&2
goto ERROR_EXIT

:ERROR_EXIT
exit /b 1

REM All checks passed, so allow the commit.
:NORMAL_EXIT
exit 0