2016년 5월 31일 화요일

github 사용법

글올리기, 간편 안내
funmv

git init # 내 컴퓨터의 파일이 있는 특정 폴더로 가서 실행
git add pg_pong.ipynb # 로드할 파일 지정
git commit -m "policy gradients example"
git remote add origin https://github.com/funmv/RL.git # 먼저 git에 repository(폴더)를 만들어 놓아야 함

git push -u origin master # 여기서 id, pw를 필요로 함

그 외 명령: git clean -f 

2016년 5월 20일 금요일

(python) decoration, thread & yield

작성 중...

1. decoration pattern, @ 사용.
호출부에서 read_batches(50) 시,

read_batches = mpgen(read_batches(50))

처럼 원 함수의 기능 확장.


2. python에서는 GIL문제로 thread 대신에 multiprocessing 사용.
mpgen을 통해 주 프로세스와는 별도의 데이터 생성 프로세스가 시작
Queue는 thread에서 데이터 공유에 사용(아래, 최대 3개까지의 item 저장 가능)


3. yield
함수의 형태를 가지는 iterator (generator, 생성기라고 부름)를 만들어 줌.
iterator란?
c = iter(range(5))
c.next(), c.next(),... # 0,1,2,...

함수의 인자를 비휘발성으로 만듬
함수 재호출 시, yield 다음이 수행
return은 결과값 반환, yield는 iterator 반환


4. functools.wraps:
디버깅 시 func.__doc__ 또는 func.__name__ 등의 속성을 요청 시
원 함수 read_batches의 속성이 안나오고 decoration된 mpgen함수의 속성이 나오는 것을 방지.
함수 속성을 인자인 원 함수 f로 되돌리는 역할.
데코레이터에서 closure문제 해결을 위해 사용.



def mpgen(f):
    def main(q, args, kwargs):
        try:
            for item in f(*args, **kwargs):
                q.put(item)
        finally:
            q.close()

    @functools.wraps(f) 
    def wrapped(*args, **kwargs): #*args(리스트 받고), **kwargs(map 받음)
        q = multiprocessing.Queue(3)
        proc = multiprocessing.Process(target=main, args=(q, args, kwargs))
        proc.start()
        try:
            while True:
                item = q.get()
                yield item
        finally:
            proc.terminate()
            proc.join()

    return wrapped
     

@mpgen # mpgen의 인자함수로 read_batches을 사용함을 지정
def read_batches(batch_size):
    def gen_vecs():
        for im, c, p in gen.generate_ims(batch_size):
            yield im, code_to_vec(p, c)

    while True:
        yield unzip(gen_vecs()) # yield는 휘발성이 없는 함수(iterator 만듬)


2016년 5월 16일 월요일

(python) debugger

import ipdb 에서 빠져나올 때는 cntl+z
import pdb
pdb.set_trace()

명령법


(python) video read and write

opencv의 cv와 cv2의 차이
cv2 내에 cv있음. cv2가 최신.
import cv2.cv as cv

python 에서 버전 확인
import cv2
cv2.__version__

video 읽기
installed\opencv\3rdparty\ffmpeg\opencv_ffmpeg_64.dll 필요
이것을 작업 폴더에 복사해서 이름을 opencv_ffmpeg249_64.dll로 바꿈


테스트
import cv2
cap = cv2.VideoCapture('tmp1.mp4')
cap.grab() # true로 나와야 함


(Ref)
1. cv & cv2
2. about video working
3. opencv version