寄语

  本来说准备更新之前Android的聊天软件代码的,但是由于放假打工仔没有,时间回来
上课又很惨!!最近在学python,在加上那个是一个大工程不是一两篇文章能写完的只能
等日后闲下来再更新了!如果需要源代码可以发邮箱联系

入门的第一步opencv

人脸识别用到的是opencv模块,你只需要直接使用pip就可以直接安装命令如下:

pip install opencv-python

  由于俺用的是PyCharm可以直接再导入包的时候直接导入(以下都是基于opencv)
首先要先学习读取图片imshow()函数imshow()函数有两个参数:显示图像的帧名称
以及要显示的图像本身。直接调用imshow()函数图像确实会显示,但随即会消失。要保
证图片一直在窗口上显示,要通过 waitKey()函数。waitKey()函数的参数为等待键
盘触发的时间,单位为毫秒,其返回值是-1(表示没有键被按下)
#导入包
import cv2 as cv

#读取图片
img = cv.imread('c1.jpg')
#显示图片 第一个参数是为这张图片命名
cv.imshow('origionl',img)

#延时显示
cv.waitKey(0)
#释放内存
cv.destroyAllWindows()

如何在图片上画图

OpenCV 的强大之处的一个体现就是其可以对图片进行任意编辑和处理
import cv2 as cv

#读取图片
img = cv.imread('c1.jpg')#图片路径可以自己指定
#画图
x,y,w,h=50,50,100,100
#图片,位置,大小,颜色,线宽
cv.rectangle(img,(x,y),(w+x,h+y),(0,79,256),2)
#显示图片  第一个参数是为这张图片命名
cv.imshow('origionl',img)

#延时显示
cv.waitKey(0)
#释放内存
cv.destroyAllWindows()

导入人脸特征模块

  在opencv的目录下opencv_4.5.3/opencv/sources/data/haarcascades/
会有各种人脸识别模块我使用的是默认特征的haarcascade_frontalface_default.xml
import cv2 as cv

def face_detector():
#导入人脸特征模块 要找到自己安装的路径
  face_detect = cv.CascadeClassifier('D:/xlxz/py/opencv_4.5.3/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
  face = face_detect.detectMultiScale(img_resize)
  for x,y,w,h in face:
     cv.rectangle(img_resize,(x,y),(x+w,y+h),(0,256,0),2)
     cv.imshow('test',img)

img = cv.imread('-1a2e1cbe7da98d4b.jpg')
face_detector()

cv.waitKey(0)
cv.destroyAllWindows()

动态识别视频中的人脸

视频中的人脸检测 视频是一张一张图片组成的,在视频的帧上重复这个过程就能完成视频中的人脸检测
import cv2 as cv

def face_detector(img):
#导入人脸特征模块
  face_detect = cv.CascadeClassifier('D:/xlxz/py/opencv_4.5.3/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
  face = face_detect.detectMultiScale(img)
  for x,y,w,h in face:
    #画圆
     cv.rectangle(img,(x,y),(x+w,y+h),(0,256,0),2)
     
    
  cv.imshow('face',img)
#读取视频
cap = cv.VideoCapture('D:/音乐/MV/MV/mv1.mp4')
#建立死循环
while True:
    flag,img=cap.read()
    #判断视频有没有播放完
    if not flag:
        break

    face_detector(img)
#按下q键退出视频
    if ord('q')==cv.waitKey(10):
        break

cv.destroyAllWindows()
cap.release()

训练人脸识别

import cv2 as cv
import os
from PIL import Image
import numpy as np

def getImageAndLabels(path):
    face_simple = []
    id = []
    #导入人脸特征
    face_detect = cv.CascadeClassifier('D:/xlxz/py/opencv_4.5.3/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
    image_path = [os.path.join(path,f) for f in os.listdir(path)]
    print(image_path)
    print(os.listdir(path))
    #读取照片路径
    for Imagepath in image_path:
        #读取图像
        gray = Image.open(Imagepath).convert('L')
        gray_array = np.array(gray,'uint8')
        face = face_detect.detectMultiScale(gray_array)
        ids = int(os.path.split(Imagepath)[1].split('.')[0])
        for x,y,w,h in face:
            face_simple.append(gray_array[x:x+w,y:y+h])
            id.append(ids)
    return face_simple,id
if __name__ == '__main__':

       path = 'face2/jm/'#这个目录自己随便创,然后下面放要训练的人脸
       #创建对象
       recognizer = cv.face.LBPHFaceRecognizer_create()
       #获取训练参数
       face,id = getImageAndLabels(path)
       recognizer.train(face,np.array(id))
       recognizer.write('trainer/tran.yml')
       #生成的yml文件用来人脸识别 文件夹自己创就可以

人脸识别

由得到的人脸数据来进行检测是不是这个人
import cv2 as cv

recognizer = cv.face.LBPHFaceRecognizer_create()
recognizer.read('trainer/tran.yml')

img = cv.imread('2.pgn')
#灰度处理
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

face_detect = cv.CascadeClassifier('D:/xlxz/py/opencv_4.5.3/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
face= face_detect.detectMultiScale(gray)

for x,y,w,h in face:
    cv.rectangle(gray,(x,y),(x+w,y+h),(0,256,0),2)
    id,confidence = recognizer.predict(gray[x:x+w,y:y+h])
    print('id:  ',id,' confidence',confidence)
    cv.imshow('face',img)
    cv.waitKey(0)
cv.destroyAllWindows()
如果人脸匹配就会返回id