python Opencv 기반 얼굴 마스크 검사
python 3.6.6
opencv-python 4.5.1
2.디자인 요구
1.opencv-python 을 사용 하여 얼굴 마스크 를 검사 합 니 다.
3.설계 원리
디자인 프로 세 스 도 는 그림 3-1 과 같다.
그림 3-1 마스크 검사 절차 도
먼저 그림 을 읽 고 opencv 의 haar 코 특징 분류 기 를 사용 하여 코 가 감지 되면 마스크 를 쓰 지 않 았 음 을 증명 합 니 다.코 가 감지 되면 opencv 의 haar 눈 특징 분류 기 를 사용 하고 눈 이 감지 되 지 않 으 면 종료 합 니 다.눈 이 감지 되면 RGB 색상 공간 을 HSV 색상 공간 으로 전환한다.마스크 구역 검 사 를 실시 하 다.마스크 구역 검사 절 차 는 먼저 좌표 원점 에서 가 까 운 가로 좌 표를 마스크 구역 으로 하여 가로 좌 표를 시작 하고 좌표 원점 에서 먼 가로 좌 표를 마스크 구역 으로 하여 가로 좌 표를 끝 내 는 것 이다.좌표 원점 에서 멀리 떨 어 진 세로 좌 표 는 마스크 구역 에서 세로 좌 표를 시작 하고 좌표 원점 에서 멀리 떨 어 진 세로 좌표 와 눈 높이 의 2 배 와 마스크 구역 으로 종 좌 표를 끝 냅 니 다.여기 서 서술 한 것 은 잘 모 르 겠 지만 그림 3-2 를 볼 수 있 습 니 다.
그림 3-2 마스크 구역 검사 도
마지막 으로 마스크 구역 을 알 았 을 때 는 픽 셀 점 만 판단 하면 마스크 착용 여 부 를 판단 할 수 있다.
프로그램 코드
"""
# File : mask_check.py
# Time :2021/6/10 15:02
# Author :Meng
# version :python 3.6
# Description:
"""
import cv2 # opencv
import time # time
""" """
def nose_dection(img):
img = cv2.GaussianBlur(img,(5,5),0)#
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #
nose_cascade = cv2.CascadeClassifier("haarcascade_mcs_nose.xml")
nose_cascade.load("data/haarcascades/haarcascade_mcs_nose.xml") #
''' opencv haar '''
noses = nose_cascade.detectMultiScale(gray, 1.3, 5) #
for(x,y,w,h) in noses:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2) #
flag = 0 # , ,
if len(noses)>0:
flag = 1
return img,flag
"""" """
def eye_dection(img):
img = cv2.GaussianBlur(img,(5,5),0)#
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #
eyes_cascade = cv2.CascadeClassifier("haarcascade_eye_tree_eyeglasses.xml")
eyes_cascade.load("data/haarcascades/haarcascade_eye_tree_eyeglasses.xml") #
''' opencv haar '''
eyes = eyes_cascade.detectMultiScale(gray, 1.3, 5) #
for (x,y,w,h) in eyes:
frame = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) #
print("x y w h is",(x,y,w,h))
# frame = cv2.rectangle(img, (x, y+h), (x + 3*w, y + 3*h), (255, 0, 0), 2) #
return img,eyes
def empty(a):
pass
def main():
image = cv2.imread("images/backgound.png") #
cv2.imshow('skin', image) #
cv2.createTrackbar("Hmin", "skin", 0, 90, empty) # bar
cv2.createTrackbar("Hmax", "skin", 25, 90, empty)
capture = cv2.VideoCapture(0) # , 0 ,
while True:
ref,img=capture.read() #
# img = cv2.imread("./images/005.jpg") #
img_hsv = img
image_nose,flag_nose = nose_dection(img) # ,
if flag_nose == 1: # ,
frame = cv2.putText(image_nose, "NO MASK", (10, 30), cv2.FONT_HERSHEY_COMPLEX, 0.9,(0, 0, 255), 1) #
cv2.imshow('img', image_nose) #
if flag_nose == 0: # ,
img_eye,eyes = eye_dection(img) # ,
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # HSV
H, S, V = cv2.split(hsv) #
minH = cv2.getTrackbarPos("Hmin", 'skin') # bar
maxH = cv2.getTrackbarPos("Hmax", 'skin')
if minH > maxH:
maxH = minH
thresh_h = cv2.inRange(H, minH, maxH) #
if len(eyes) > 1: # , eyes[0]
#
mask_x_begin = min(eyes[0][0],eyes[1][0]) # x x
mask_x_end = max(eyes[0][0],eyes[1][0]) + eyes[list([eyes[0][0], eyes[1][0]]).index(max(list([eyes[0][0], eyes[1][0]])))][2] # x + x
mask_y_begin = max(eyes[0][1] + eyes[0][3],eyes[1][1] + eyes[1][3]) + 20 # y
if mask_y_begin > img_eye.shape[1]: #
mask_y_begin = img_eye.shape[1]
mask_y_end = max(eyes[0][1] + 3 * eyes[0][3],eyes[1][1] + 3 * eyes[1][3]) + 20 #
if mask_y_end > img_eye.shape[1]:
mask_y_end = img_eye.shape[1]
frame = cv2.rectangle(img_eye, (mask_x_begin, mask_y_begin), (mask_x_end, mask_y_end), (255, 0, 0), 2) #
total_mask_pixel = 0
total_face_pixel = 0
# , 0 total_mask_pixel+1, total_face_pixel+1
for i in range(mask_x_begin,mask_x_end):
for j in range(mask_y_begin,mask_y_end):
if thresh_h[i,j] == 0:
total_mask_pixel += 1
else:
total_face_pixel += 1
print("total_mask_pixel",total_mask_pixel)
print("total_face_pixel", total_face_pixel)
if total_mask_pixel > total_face_pixel:
frame = cv2.putText(img_eye, "HAVE MASK", (mask_x_begin, mask_y_begin - 10),cv2.FONT_HERSHEY_COMPLEX, 0.9, (0, 0, 255), 1) #
if total_mask_pixel < total_face_pixel:
frame = cv2.putText(img_eye, "NO MASK", (mask_x_begin, mask_y_begin - 10), cv2.FONT_HERSHEY_COMPLEX,0.9, (0, 0, 255), 1) #
cv2.imshow("skin", thresh_h) #
cv2.imshow("img", img_eye) #
# cv2.imwrite('005_result.jpg',img_eye)
c = cv2.waitKey(10)
if c==27:
break
capture.release() #
cv2.destroyAllWindows() #
if __name__ == '__main__':
main()
결과 전시검사 결 과 는 다음 과 같 습 니 다.
그림 5-1 HSV 변환 결과 그림
그림 5-2 마스크 검사 결과 도
그림 5-3 마스크 검사 결과 그림(귀 를 코 로 오심 하 다 니)
결론
이 실험 은 opencv-python 을 사용 하여 얼굴 마스크 검 사 를 실시 했다.코,눈 검 사 를 할 때 opencv 가 자체 적 으로 가지 고 있 는 xml 파일 입 니 다.결과적으로 이런 방법 은 실행 가능 하 다.지하철역,기차 역 출입구 에 적용 해 안면 마스크 검 사 를 할 수 있다.
이 실험 도 한계 가 있다.예 를 들 어 그림 속 에 두 사람,눈 이 가 려 지 는 등 특수 한 상황 이 있다.관심 있 으 면 xml 파일 을 직접 훈련 할 수 있 습 니 다.물론 딥 러 닝 기반 표적 탐지 모델 인 R-CNN 시리즈,YOLO 시리즈,SSD 등 을 사용 해 모형 훈련 을 할 수도 있다.
python 이 Opencv 를 바탕 으로 얼굴 마스크 검 사 를 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Opencv 얼굴 마스크 검 측 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Opencv 학습 노트 (2): Opencv 의 기본 데이터 형식 과 데이터 구조매트릭스 데이터 형식: C 언어 에서 2 차원 데이터 중의 데이터 형식, 예 를 들 어 int, float, char 등 과 같다.Opencv 에서 행렬 의 데이터 형식 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.