728x90
반응형
이번 주차에는 사진 속에서 얼굴을 인식하고
사람이 마스크를 썼는지 안 썼는지까지 판단하는 코드를 작성해보았다.
위대하신 분들이 만들어놓은 딥러닝 코드를 활용해서 결과를 보는 것이 신기할 따름이다.
from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
from tensorflow.keras.models import load_model
import numpy as np
import cv2
facenet = cv2.dnn.readNet('models/deploy.prototxt', 'models/res10_300x300_ssd_iter_140000.caffemodel')
model = load_model('models/mask_detector.model')
cap = cv2.VideoCapture('videos/04.mp4')
while True:
ret, img = cap.read()
if ret == False:
break
h, w, c = img.shape
# 이미지 전처리하기
blob = cv2.dnn.blobFromImage(img, size=(300, 300), mean=(104., 177., 123.))
# 얼굴 영역 탐지 모델로 추론하기
facenet.setInput(blob)
dets = facenet.forward()
# 각 얼굴에 대해서 반복문 돌기
for i in range(dets.shape[2]):
confidence = dets[0, 0, i, 2]
if confidence < 0.5:
continue
# 사각형 꼭지점 찾기
x1 = int(dets[0, 0, i, 3] * w)
y1 = int(dets[0, 0, i, 4] * h)
x2 = int(dets[0, 0, i, 5] * w)
y2 = int(dets[0, 0, i, 6] * h)
face = img[y1:y2, x1:x2]
face_input = cv2.resize(face, dsize=(224, 224))
face_input = cv2.cvtColor(face_input, cv2.COLOR_BGR2RGB)
face_input = preprocess_input(face_input)
face_input = np.expand_dims(face_input, axis=0)
mask, nomask = model.predict(face_input).squeeze()
if mask > nomask:
color = (0,255,0)
else:
color = (0,0,255)
# 사각형 그리기
cv2.rectangle(img, pt1=(x1, y1), pt2=(x2, y2), thickness=2, color=color)
cv2.imshow('result', img)
if cv2.waitKey(1) == ord('q'):
break
코드를 보면 굉장히 길고 복잡해보이지만
블록단위로 보면 그렇게 복잡하지 않다.
모델을 불러오는 방법은 2가지가 사용되었다
cv2.dnn.readNet 함수로 얼굴인식 모델을 불러오고
load_model을 이용하여 마스크 착용 판단 모델을 불러온다.
위에 함수는 opencv함수고 아래는 텐서플로우 함수다.
동영상을 불러와서 이미지 한장씩 검사한다.
사진 속에서 찾은 얼굴이 한 명이 아니기 때문에 영상을 불러오는 와중에 반복문으로
찾은 얼굴 개수만큼 마스크 판단 함수를 돌린다.
얼굴을 찾아서 사각형을 그리는데
마스크를 쓰면 초록색, 마스크를 안 쓰면 빨간색으로 그린다.
결과는 아래와 같다.
사이즈가 커서 그런지 속도가 느린데 판단은 꽤 정확하다
누가 만든 모델인지 이 코로나 시국에 참신한 모델을 만들어냈다.
제발 코로나 끝났으면....ㅠㅠ
728x90
반응형
'공부 > 코딩' 카테고리의 다른 글
스파르타코딩클럽 이미지로 시작하는 딥러닝 5주차 개발일지 (0) | 2021.07.21 |
---|---|
스파르타코딩클럽 이미지로 시작하는 딥러닝 4주차 개발일지 (2) | 2021.07.17 |
스파르타코딩클럽 이미지로 시작하는 딥러닝 2주차 개발일지 (0) | 2021.07.11 |
스파르타코딩클럽 이미지로 시작하는 딥러닝 1주차 개발일지 (0) | 2021.07.11 |
스파르타코딩클럽 스파르톤 밤샘 코딩마라톤 생존일지! (5) | 2021.07.10 |