2020-03-19 16:13:40

다음 파이썬 코드는 웹캠으로 촬영되는 영상의 프레임을 샘플링해서 이미지 파일로 저장해주는 코드입니다. 특정 대상에 대한 이미지 데이터베이스를 만들기 위해서 작성한 코드입니다. 모든 프레임을 저장하면 사실상 각 이미지간 차이가 거의 없기 때문에 4개 프레임마다 하나씩 저장하는 식으로 코딩했습니다. img1.jpg, img2.jpg, img3.jpg,...와 같은 이름의 이미지 파일이 images라는 이름의 하위 디렉토리에 저장됩니다. q키를 입력하면 영상 촬영이 종료되고, 이어서 프로그램도 종료됩니다. 

 

참고로 이 코드는 opencv-python 패키지에 의존합니다. 즉, opencv-python 패키지를 설치해주셔야 합니다. 

>> conda install opencv-python

 

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
31
32
33
34
35
36
37
38
39
import cv2
 
# open webcam (웹캠 열기)
webcam = cv2.VideoCapture(0)
 
if not webcam.isOpened():
    print("Could not open webcam")
    exit()
    
 
sample_num = 0    
captured_num = 0
    
# loop through frames
while webcam.isOpened():
    
    # read frame from webcam 
    status, frame = webcam.read()
    sample_num = sample_num + 1
    
    if not status:
        break
 
    # display output
    cv2.imshow("captured frames", frame)
    
    if sample_num == 4:
        captured_num = captured_num + 1
        cv2.imwrite('./images/img'+str(captured_num)+'.jpg', frame)
        sample_num = 0
        
    
    # press "Q" to stop
    if cv2.waitKey(1& 0xFF == ord('q'):
        break
    
# release resources
webcam.release()
cv2.destroyAllWindows()   
cs

 

위 코드를 실행시키고 충분히 데이터가 수집될 때까지 웹캠으로 영상을 촬영했더니 다음과 같은 이미지 파일들이 생성되었습니다. 참고로 저는 가위, 바위, 보를 분류할 수 있는 분류기를 재미삼아 만들고 있기 때문에, 가위, 바위, 보에 대한 이미지들을 수집했습니다. 다른 이미지들을 얻기 위해 손을 이리저리 돌려가며 촬영했습니다. 

 

바위

 

가위

 

 

잠시만 촬영했는데도 수백장의 이미지가 수집되었네요. ㅎㅎ 아마 이 방법이 가장 빠르게 수백, 수천, 수만 장의 이미지를 수집하는 방법이 아닐까 싶습니다. 구글의 teachable machine이 딥러닝 모델을 훈련시키기 위해 필요한 이미지들을 이러한 방식으로 수집하더군요. ㅎㅎ  

 

언제나 질문과 지적에는 열려 있습니다. 댓글로 남겨주세요.^^