Silinu's AI Study

1. Webcam으로 데이터 수집하기 본문

Project/Finger Detection

1. Webcam으로 데이터 수집하기

Silinu 2023. 11. 5. 16:22

본 내용에서는 yolo는 커스텀한 데이터를 활용하여 yolo model을 통해 학습하고 실시간으로 적용하는 것을 목표로 한다.

본 내용에서는 예제로써 손가락의 숫자를 맞추는 것을 목표로 한다.

 

현재 사용한 Webcam은 다이소에서 5,000원에 파는 pc용 화상 카메라이다.

그리고 anaconda 가상 환경을 사용한 Jupyter notebook 환경에서 진행한다. 만약 가상 환경이 깔려져 있지 않다면 아래 링크를 참조합니다.

https://silinu-ai.tistory.com/3

 

Jupyter notebook(주피터 노트북) 설치하기

총 2가지 단계로 이루어져 있다. 1. 아나콘다 다운로드 https://www.anaconda.com/products/individual#windows Free Download | Anaconda Anaconda's open-source Distribution is the easiest way to perform Python/R data science and machine learni

silinu-ai.tistory.com

 

 

본 내용에서 cv2를 사용하기 때문에 Jupyter notebook 창에서 import cv2가 되지 않는다면 anaconda prompt 창의 가상환경에서 다음과 같이 설치해야 한다.

conda install opencv

 

 

이제 다음과 같이 진행한다.

  1. 이미지 저장 폴더 생성하기
  2. 카메라 켜기 및 이미지 저장하기

 

1. 이미지 저장 폴더 생성하기

현재 작성 중인 코드의 폴더(편의 상 A 폴더라고 지칭함)에 All_Data 폴더( 이미지 저장 폴더) 를 만든다.

import os

path = os.getcwd()
Img_path = os.path.join(path,"All_Data")
if not os.path.isdir(Img_path):
	os.mkdir(Img_path)

 

 

2. 카메라 켜기 및 이미지 저장하기

이미지 파일 저장 경로에 한글이 있을 경우 아래 함수를 작성한다.

import cv2
# 파일 위치가 한글 경로가 존재할 때 사용함(경로에 한글이 없다면 작성 안해도 됨)
# 출처 : https://jangjy.tistory.com/337
def imwrite(filename, img, params=None):
    try:
        ext = os.path.splitext(filename)[1]
        result, n = cv2.imencode(ext, img, params)
        if result:
            with open(filename, mode='w+b') as f:
                n.tofile(f)
            return True
        else:
            return False
    except Exception as e:
        print(e)
        return False

 

카메라를 켜고 이미지를 저장한다. 만약 종료하고 싶다면 esc 키를 누른다.

import cv2
# 카메라 켜기
cap = cv2.VideoCapture(0)
# 웹캠 오류 처리
if not cap.isOpened():
    print("camera open failed")
    exit()
img_num = 0
camera_num = 0
while True:
    # 카메라 읽기
    status, img = cap.read()
    if not status:
        print("Can't read camera")
        break
    # 카메라 창 띄우기
    cv2.imshow("PC_Webcam",img)
    img_path = os.path.join(Img_path,f"img{img_num}.png")
    # 한글 경로가 없다면 1번, 있다면 2번을 사용할 것
    # 1번
    # img_captured = cv2.imwrite(img_path,img)
    # 2번
    img_captured = imwrite(img_path,img)
    img_num+=1
    # esc 누르면 종료하기
    if cv2.waitKey(1) == 27:
        break
cap.release()
cv2.destroyAllWindows()

 

이렇게 했을 때 A 폴더/All_Data 폴더에 img0.png, img1.png...가 저장되는 것을 확인할 수 있다.

아래 보면 현재 본인이 실행하고 있는 폴더("정리")/All_Data 폴더에 이미지들이 잘 저장된 것을 확인할 수 있다.