๐Ÿ˜Lbp Face3 Recognize

import cv2
import numpy as np
import os, glob

# ๋ณ€์ˆ˜ ์„ค์ • ---โ‘ 
base_dir = './faces'
min_accuracy = 85

# LBP ์–ผ๊ตด ์ธ์‹๊ธฐ ๋ฐ ์ผ€์Šค์ผ€์ด๋“œ ์–ผ๊ตด ๊ฒ€์ถœ๊ธฐ ์ƒ์„ฑ ๋ฐ ํ›ˆ๋ จ ๋ชจ๋ธ ์ฝ๊ธฐ ---โ‘ก
face_classifier = cv2.CascadeClassifier(\
                './data/haarcascade_frontalface_default.xml')
model = cv2.face.LBPHFaceRecognizer_create()
model.read(os.path.join(base_dir, 'all_face.xml'))

# ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์•„์ด๋”” ๋งคํ•‘ ์ •๋ณด ์ƒ์„ฑ ---โ‘ข
dirs = [d for d in glob.glob(base_dir+"/*") if os.path.isdir(d)]
names = dict([])
for dir in dirs:
    dir = os.path.basename(dir)
    name, id = dir.split('_')
    names[int(id)] = name

# ์นด๋ฉ”๋ผ ์บก์ฒ˜ ์žฅ์น˜ ์ค€๋น„ 
cap = cv2.VideoCapture(0)
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print("no frame")
        break
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    # ์–ผ๊ตด ๊ฒ€์ถœ ---โ‘ฃ
    faces = face_classifier.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in faces:
        # ์–ผ๊ตด ์˜์—ญ ํ‘œ์‹œํ•˜๊ณ  ์ƒ˜ํ”Œ๊ณผ ๊ฐ™์€ ํฌ๊ธฐ๋กœ ์ถ•์†Œ ---โ‘ค
        cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,255),2)
        face = frame[y:y+h, x:x+w]
        face = cv2.resize(face, (200, 200))
        face = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)
        # LBP ์–ผ๊ตด ์ธ์‹๊ธฐ๋กœ ์˜ˆ์ธก ---โ‘ฅ
        label, confidence = model.predict(face)
        if confidence < 400:
            # ์ •ํ™•๋„ ๊ฑฐ๋ฆฌ๋ฅผ ํผ์„ผํŠธ๋กœ ๋ณ€ํ™˜ ---โ‘ฆ
            accuracy = int( 100 * (1 -confidence/400))
            if accuracy >= min_accuracy:
                msg =  '%s(%.0f%%)'%(names[label], accuracy)
            else:
                msg = 'Unknown'
        # ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์ •ํ™•๋„ ๊ฒฐ๊ณผ ์ถœ๋ ฅ ---โ‘ง
        txt, base = cv2.getTextSize(msg, cv2.FONT_HERSHEY_PLAIN, 1, 3)
        cv2.rectangle(frame, (x,y-base-txt[1]), (x+txt[0], y+txt[1]), \
                    (0,255,255), -1)
        cv2.putText(frame, msg, (x, y), cv2.FONT_HERSHEY_PLAIN, 1, \
                    (200,200,200), 2,cv2.LINE_AA)
    cv2.imshow('Face Recognition', frame)
    if cv2.waitKey(1) == 27: #esc 
        break
cap.release()
cv2.destroyAllWindows()