寄语
  本来说准备更新之前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.xmlimport 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我很可爱,请我喝冰可乐
- Post link: https://dy1320.top/2021/09/02/pyface/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.



GitHub Issues