머리말
내 컴퓨터가 나를 알 수 있어야만 내 컴퓨터라고 부를 수 있어요!
오늘은 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.fisherface3 .LBPHFaceRecognizerLBP는 이미지의 로컬 텍스처 특징을 추출할 수 있습니다. 초기 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)테스트 결과:
블로거가 원고를 검토했습니다. 테스트 과정에서 발생한 문제:
(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 중국어 웹사이트의 기타 관련 기사를 참조하세요!