import cv2
import numpy as np
import os
# ๋ณ์ ์ค์ ---โ
base_dir = './faces/' # ์ฌ์ง ์ ์ฅํ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก
target_cnt = 400 # ์์งํ ์ฌ์ง ๊ฐฏ์
cnt = 0 # ์ฌ์ง ์ดฌ์ ์
# ์ผ๊ตด ๊ฒ์ถ ๋ถ๋ฅ๊ธฐ ์์ฑ --- โก
face_classifier = cv2.CascadeClassifier(\
'./data/haarcascade_frontalface_default.xml')
# ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋ฒํธ๋ฅผ ์
๋ ฅ ๋ฐ์ ๋๋ ํ ๋ฆฌ ์์ฑ ---โข
name = input("Insert User Name(Only Alphabet):")
id = input("Insert User Id(Non-Duplicate number):")
dir = os.path.join(base_dir, name+'_'+ id)
if not os.path.exists(dir):
os.mkdir(dir)
# ์นด๋ฉ๋ผ ์บก์ณ
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read()
if ret:
img = frame.copy()
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# ์ผ๊ตด ๊ฒ์ถ --- โฃ
faces = face_classifier.detectMultiScale(gray, 1.3, 5)
if len(faces) == 1:
(x,y,w,h) = faces[0]
# ์ผ๊ตด ์์ญ ํ์ ๋ฐ ํ์ผ ์ ์ฅ ---โค
cv2.rectangle(frame, (x,y), (x+w, y+h), (0,255,0), 1)
face = gray[y:y+h, x:x+w]
face = cv2.resize(face, (200, 200))
file_name_path = os.path.join(dir, str(cnt) + '.jpg')
cv2.imwrite(file_name_path, face)
cv2.putText(frame, str(cnt), (x, y), cv2.FONT_HERSHEY_COMPLEX, \
1, (0,255,0), 2)
cnt+=1
else:
# ์ผ๊ตด ๊ฒ์ถ์ด ์๊ฑฐ๋ 1์ด์ ์ธ ๊ฒฝ์ฐ ์ค๋ฅ ํ์ ---โฅ
if len(faces) == 0 :
msg = "no face."
elif len(faces) > 1:
msg = "too many face."
cv2.putText(frame, msg, (10, 50), cv2.FONT_HERSHEY_DUPLEX, \
1, (0,0,255))
cv2.imshow('face record', frame)
if cv2.waitKey(1) == 27 or cnt == target_cnt:
break
cap.release()
cv2.destroyAllWindows()
print("Collecting Samples Completed.")