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