Python을 사용하여 간단한 얼굴 인식을 구현하는 방법 알아보기

coldplay.xixi
풀어 주다: 2021-03-22 10:16:07
앞으로
3493명이 탐색했습니다.

Python을 사용하여 간단한 얼굴 인식을 구현하는 방법 알아보기

머리말

내 컴퓨터가 나를 알 수 있어야만 내 컴퓨터라고 부를 수 있어요!

오늘은 Python을 이용해 간단한 얼굴인식 기술을 구현해보겠습니다!

Python에서는 간단한 얼굴 인식을 달성하는 방법이 많이 있습니다. Python Glue 언어의 특성에 따라 패키지를 호출하여 이 목표를 빠르고 정확하게 달성할 수 있습니다. 여기에 소개된 것은 정확도가 더 높은 것입니다.

(무료 학습 추천: python 동영상 튜토리얼)

1. 우선

얼굴 인식을 달성하는 데 필요한 단계를 정리합니다.

과정은 대략 다음과 같습니다. 이처럼 여기에서는 먼저 얼굴, 즉 얼굴을 정확하게 구별할 수 있는 분류기를 찾아야 하는데, 여기서는 이미 훈련된 분류기를 사용할 수 있으며 분류 정확도도 상대적으로 높습니다. 이에 소요되는 시간을 절약할 수 있습니다.

ps: 블로거의 보물 소스는 아래 링크에 올려두었습니다~

추천: GitHub 프로젝트

https://github.com/opencv/opencv/tree/master/data/haarcascades

저는 Python을 사용하고 있기 때문에 , 물론, 패키지의 사용은 필수입니다. 코드를 보기 전에 먼저 전체 프로젝트에 필요한 패키지를 나열합니다:

· CV2(Opencv): 이미지 인식, 카메라 호출

· os: 파일 연산

· numpy: NumPy(NumPy)(NumPy)는 수많은 차원 배열 및 행렬 연산을 지원하는 Python 언어의 확장 라이브러리입니다. 또한 배열 연산을 위한 수많은 수학 함수 라이브러리도 제공합니다.

· PIL: Python Imaging Library, Python 플랫폼의 이미지 처리를 위한 사실상의 표준 라이브러리

2. 다음

1. 블로거의 테스트 후. , 이 명령문을 작성할 때

"face_Detector = cv2.CascadeClssifier(r 'C:UsersadminDesktoppythondatahaarcascade_frontalface_default.xml')"을 실행한 후 실제 경로의 디렉터리 이름에 한자가 포함되지 않도록 하세요. 그렇지 않으면 오류를 보고하기 쉽습니다. .

이렇게 하면 컴퓨터가 당신을 볼 수 있습니다!

2. 알고리즘을 통해 비교 모델 구축

이번에 사용한 알고리즘은 opencv

에 포함된 알고리즘입니다. (저는 2.4.8을 사용하고 있습니다.)

FaceRecognizer 클래스를 제공합니다. 세 가지 얼굴 인식 알고리즘(우리는 세 번째 알고리즘 사용)을 포함하여 몇 가지 관련 얼굴 인식 알고리즘 및 기능 인터페이스가 포함되어 있습니다. 1.eigenface

2.fisherface

3 .LBPHFaceRecognizer

LBP는 이미지의 로컬 텍스처 특징을 추출할 수 있습니다. 초기 LBP 연산자는 3X3 창에서 중앙 픽셀의 픽셀 값을 임계값으로 사용하고 주변 8개의 픽셀을 비교하여 픽셀의 픽셀 값이 더 큰 경우입니다. 임계값보다 높으면 픽셀이 1로 표시되고, 그렇지 않으면 0으로 표시됩니다. 이렇게 하면 8비트 바이너리 코드를 얻을 수 있고 이를 10진수나 LBP 코드로 변환하여 이 창의 LBP 값을 구하고, 이 값은 이 창에 텍스처 정보를 반영하는 데 사용됩니다.

LBPH는 원래 LBP를 개선한 것입니다. opencv 지원을 통해 함수를 직접 호출하여 LBPH

얼굴 인식

모델을 직접 생성할 수 있습니다.

이전 부분과 동일한 디렉터리에 데이터 세트 생성 스크립트를 작성하는 데 사용되는 trainner.py라는 Python 파일을 만듭니다. 동일한 디렉터리에 훈련된 인식기를 저장할 trainner라는 폴더를 만듭니다.

#-----获取人脸样本-----
import cv2

#调用笔记本内置摄像头,参数为0,如果有其他的摄像头可以调整参数为1,2
cap = cv2.VideoCapture(0)
#调用人脸分类器,要根据实际路径调整3
face_detector = cv2.CascadeClassifier(r'X:/Users/73950/Desktop/FaceRec/haarcascade_frontalface_default.xml')  #待更改
#为即将录入的脸标记一个id
face_id = input('\n User data input,Look at the camera and wait ...')
#sampleNum用来计数样本数目
count = 0

while True:    
    #从摄像头读取图片
    success,img = cap.read()    
    #转为灰度图片,减少程序符合,提高识别度
    if success is True: 
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
    else:   
        break
    #检测人脸,将每一帧摄像头记录的数据带入OpenCv中,让Classifier判断人脸
    #其中gray为要检测的灰度图像,1.3为每次图像尺寸减小的比例,5为minNeighbors
    faces = face_detector.detectMultiScale(gray, 1.3, 5)

    #框选人脸,for循环保证一个能检测的实时动态视频流
    for (x, y, w, h) in faces:
        #xy为左上角的坐标,w为宽,h为高,用rectangle为人脸标记画框
        cv2.rectangle(img, (x, y), (x+w, y+w), (255, 0, 0))
        #成功框选则样本数增加
        count += 1  
        #保存图像,把灰度图片看成二维数组来检测人脸区域
        #(这里是建立了data的文件夹,当然也可以设置为其他路径或者调用数据库)
        cv2.imwrite("data/User."+str(face_id)+'.'+str(count)+'.jpg',gray[y:y+h,x:x+w]) 
        #显示图片
        cv2.imshow('image',img)       
        #保持画面的连续。waitkey方法可以绑定按键保证画面的收放,通过q键退出摄像
    k = cv2.waitKey(1)        
    if k == '27':
        break        
        #或者得到800个样本后退出摄像,这里可以根据实际情况修改数据量,实际测试后800张的效果是比较理想的
    elif count >= 800:
        break

#关闭摄像头,释放资源
cap.realease()
cv2.destroyAllWindows()
로그인 후 복사

이를 통해 컴퓨터는 당신이 유일한 스타임을 깨닫게 됩니다~

3. 인식

탐지, 검증, 출력은 실제로 인식

의 과정으로 앞선 두 가지와는 다릅니다. 각각의 과정은 다르며, 이는 실제 사용에 관련된 과정이므로 통일된 파일로 통합합니다.

#-----建立模型、创建数据集-----#-----建立模型、创建数据集-----

import os
import cv2
import numpy as np
from PIL import Image
#导入pillow库,用于处理图像
#设置之前收集好的数据文件路径
path = 'data'

#初始化识别的方法
recog = cv2.face.LBPHFaceRecognizer_create()

#调用熟悉的人脸分类器
detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

#创建一个函数,用于从数据集文件夹中获取训练图片,并获取id
#注意图片的命名格式为User.id.sampleNum
def get_images_and_labels(path):
    image_paths = [os.path.join(path,f) for f in os.listdir(path)]
    #新建连个list用于存放
    face_samples = []
    ids = []

    #遍历图片路径,导入图片和id添加到list中
    for image_path in image_paths:

        #通过图片路径将其转换为灰度图片
        img = Image.open(image_path).convert('L')

        #将图片转化为数组
        img_np = np.array(img,'uint8')

        if os.path.split(image_path)[-1].split(".")[-1] != 'jpg':
            continue

        #为了获取id,将图片和路径分裂并获取
        id = int(os.path.split(image_path)[-1].split(".")[1])
        faces = detector.detectMultiScale(img_np)

        #将获取的图片和id添加到list中
        for(x,y,w,h) in faces:
            face_samples.append(img_np[y:y+h,x:x+w])
            ids.append(id)
    return face_samples,ids

#调用函数并将数据喂给识别器训练
print('Training...')
faces,ids = get_images_and_labels(path)
#训练模型
recog.train(faces,np.array(ids))
#保存模型
recog.save('trainner/trainner.yml')
로그인 후 복사
이제 컴퓨터가 당신을 인식할 수 있습니다!

다른 조합을 통해서도 전원 켜짐 감지 등 다양한 기능을 구현할 수 있다는 사실을 알고 계시나요?

다음은 블로거가 원고를 검토할 때 테스트 결과와 발생한 몇 가지 문제입니다~ 모두에게 도움이 되었으면 좋겠습니다(呲ya.jpg)

테스트 결과:

Python을 사용하여 간단한 얼굴 인식을 구현하는 방법 알아보기

Python을 사용하여 간단한 얼굴 인식을 구현하는 방법 알아보기 블로거가 원고를 검토했습니다. 테스트 과정에서 발생한 문제:

(1) 버전 문제

해결 방법:

블로거들이 수없이 실패했다면, python2.7을 직접 설치하는 것이 좋습니다. numpy 및 pip 설치 opencv-python 설치 numpy 및 해당 python 버전의 opencv

를 설치합니다.

(Anaconda2를 사용하는 경우 시작 메뉴의 Anaconda2 폴더 아래 Anaconda Prompt에 pip 관련 명령을 입력할 수 있습니다.)

트윗에 제공된 링크를 클릭하고 github에서 파일을 다운로드하여 컴파일된 폴더에 넣습니다. 파일이 있습니다. 다운로드하고 코드에서 관련 디렉터리를 변경하세요

(2) "module' object has no attribute 'face'"

해결 방법: pip install opencv-contrib-python을 입력할 수 있습니다. 문제를 해결하려면 커미션 프롬프트가 필요한 경우 끝에 --user를 추가할 수 있습니다. 즉, pip install opencv-contrib-python --user

다른 질문이 있는 경우 언제든지 문의해 주세요. 블로거~~

많은 무료 학습 추천이 있으니 python tutorial(동영상)

을 방문하세요.

위 내용은 Python을 사용하여 간단한 얼굴 인식을 구현하는 방법 알아보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!