关键词:
如果dilb和face_recognition第三方包安装失败,请移步到Python 解决dilb和face_recognition第三方包安装失败_水w的博客-CSDN博客
本篇是在上篇的工作基础上进行的。
目录
解决报错AttributeError: module 'cv2' has no attribute 'face'
6 人脸检测多个
整个代码如下:
# 导入cv模块
import cv2 as cv
# 检测函数
def face_detect_demo():
gary = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
face_detect = cv.CascadeClassifier(
'D:/my/python-pycharm/python-envs/venv-deep/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
face = face_detect.detectMultiScale(gary)
for x, y, w, h in face:
cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
cv.imshow('result', img)
# 读取图像
img = cv.imread('face2.jpg')
# 检测函数
face_detect_demo()
# 等待
while True:
if ord('q') == cv.waitKey(0):
break
# 释放内存
cv.destroyAllWindows()
效果如下:
可以看到,大部分的人脸都被检测出来了。在人数很多的情况下,有一个没有被检测到,但在简单的场景下还是能基本完成要求的。
当然,我们也可以改变调用的这个haarcascade_frontalface_alt2.xml文件,换成该路径下的其他的,比如haarcascade_frontalface_default.xml,效果会稍有不同。
7 视频检测
整个代码如下:
# 导入cv模块
import cv2 as cv
# 检测函数
def face_detect_demo(img):
gary = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
face_detect = cv.CascadeClassifier('D:/my/python-pycharm/python-envs/venv-deep/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
face = face_detect.detectMultiScale(gary)
for x, y, w, h in face:
cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
cv.imshow('result', img)
# 读取摄像头
cap = cv.VideoCapture(0)
# 循环
while True:
flag, frame = cap.read()
if not flag:
break
face_detect_demo(frame)
if ord('q') == cv.waitKey(1):
break
# 释放内存
cv.destroyAllWindows()
# 释放摄像头
cap.release()
此处就不展示效果了。
8 拍照保存
整个代码如下:
# 导入模块
import cv2
# 摄像头
cap = cv2.VideoCapture(0)
falg = 1
num = 1
while (cap.isOpened()): # 检测是否在开启状态
ret_flag, Vshow = cap.read() # 得到每帧图像
cv2.imshow("Capture_Test", Vshow) # 显示图像
k = cv2.waitKey(1) & 0xFF # 按键判断
if k == ord('s'): # 保存
cv2.imwrite("D:/mycodetest/opencv/data/jm/" + str(num) + ".123" + ".jpg", Vshow)
print("success to save" + str(num) + ".jpg")
print("-------------------")
num += 1
elif k == ord(' '): # 退出
break
# 释放摄像头
cap.release()
# 释放内存
cv2.destroyAllWindows()
此处就不展示效果了。
9 训练数据
整个代码如下:
import os
import cv2
import sys
from PIL import Image
import numpy as np
def getImageAndLabels(path):
facesSamples = []
ids = []
imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
# 检测人脸
face_detector = cv2.CascadeClassifier(
'D:/my/python-pycharm/python-envs/venv-deep/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
# 打印数组imagePaths
print('数据排列:', imagePaths)
# 遍历列表中的图片
for imagePath in imagePaths:
# 打开图片,黑白化
PIL_img = Image.open(imagePath).convert('L')
# 将图像转换为数组,以黑白深浅
# PIL_img = cv2.resize(PIL_img, dsize=(400, 400))
img_numpy = np.array(PIL_img, 'uint8')
# 获取图片人脸特征
faces = face_detector.detectMultiScale(img_numpy)
# 获取每张图片的id和姓名
id = int(os.path.split(imagePath)[1].split('.')[0])
# 预防无面容照片
for x, y, w, h in faces:
ids.append(id)
facesSamples.append(img_numpy[y:y + h, x:x + w])
# 打印脸部特征和id
# print('fs:', facesSamples)
print('id:', id)
# print('fs:', facesSamples[id])
print('fs:', facesSamples)
# print('脸部例子:',facesSamples[0])
# print('身份信息:',ids[0])
return facesSamples, ids
if __name__ == '__main__':
# 图片路径
path = './data/jm/'
# 获取图像数组和id标签数组和姓名
faces, ids = getImageAndLabels(path)
# 获取训练对象
recognizer = cv2.face.LBPHFaceRecognizer_create()
# recognizer.train(faces,names)#np.array(ids)
recognizer.train(faces, np.array(ids))
# 保存文件
recognizer.write('trainer/trainer.yml')
# save_to_file('names.txt',names)
效果如下: 会生成一个文件,文件的路径为trainer/trainer.yml。
解决报错AttributeError: module 'cv2' has no attribute 'face'
场景:在使用cv2.face.LBPHFaceRecognizer_create()进行人脸识别的操作时,会出现这样的提示。
recognizer = cv2.face.LBPHFaceRecognizer_create()
解决方法:之所以出现这种情况,是因为缺少了相关的包。
从官网上我们看到,face模块实际上并不是opencv图书馆的一部分。更确切地说,face是部分的的opencv-contrib库。从自述文件:此存储库[ opencv-contrib]用于开发所谓的“额外”模块,提供功能。新模块通常没有稳定的API,并且它们没有经过良好测试。因此,它们不应作为官方OpenCV发行版的一部分发布,因为该库保持二进制兼容性,并试图提供良好的性能和稳定性。
(1)首先切换到你所在的环境(不建议在base环境中直接下载),接着就是下载我们需要的相关的包,用清华源下载快。
在pycharm的终端中,执行下条命令,
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python
安装成功,看到successfully之后就可以重新运行代码了。
ok,问题解决。
10 人脸识别
整个代码如下:
import cv2, os
import numpy as np
# coding=utf-8
import urllib
import urllib.request
import hashlib
# 加载训练数据集文件
recogizer = cv2.face.LBPHFaceRecognizer_create()
recogizer.read('trainer/trainer.yml')
names = []
warningtime = 0
def md5(str):
import hashlib
m = hashlib.md5()
m.update(str.encode("utf8"))
return m.hexdigest()
statusStr =
'0': '短信发送成功',
'-1': '参数不全',
'-2': '服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间',
'30': '密码错误',
'40': '账号不存在',
'41': '余额不足',
'42': '账户已过期',
'43': 'IP地址限制',
'50': '内容含有敏感词'
def warning():
smsapi = "http://api.smsbao.com/"
# 短信平台账号
user = '13******10'
# 短信平台密码
password = md5('*******')
# 要发送的短信内容
content = '【报警】\\n原因:检测到未知人员\\n地点:xxx'
# 要发送短信的手机号码
phone = '*******'
data = urllib.parse.urlencode('u': user, 'p': password, 'm': phone, 'c': content)
send_url = smsapi + 'sms?' + data
response = urllib.request.urlopen(send_url)
the_page = response.read().decode('utf-8')
print(statusStr[the_page])
# 准备识别的图片
def face_detect_demo(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换为灰度
face_detector = cv2.CascadeClassifier('D:/my/python-pycharm/python-envs/venv-deep/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
face = face_detector.detectMultiScale(gray, 1.1, 5, cv2.CASCADE_SCALE_IMAGE, (100, 100), (300, 300))
# face=face_detector.detectMultiScale(gray)
for x, y, w, h in face:
cv2.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
cv2.circle(img, center=(x + w // 2, y + h // 2), radius=w // 2, color=(0, 255, 0), thickness=1)
# 人脸识别
ids, confidence = recogizer.predict(gray[y:y + h, x:x + w])
# print('标签id:',ids,'置信评分:', confidence)
if confidence > 80:
global warningtime
warningtime += 1
if warningtime > 100:
warning()
warningtime = 0
cv2.putText(img, 'unkonw', (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
else:
cv2.putText(img, str(names[ids - 1]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
cv2.imshow('result', img)
# print('bug:',ids)
def name():
path = './data/jm/'
# names = []
imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
for imagePath in imagePaths:
name = str(os.path.split(imagePath)[1].split('.', 2)[1])
names.append(name)
cap = cv2.VideoCapture('1.mp4')
name()
while True:
flag, frame = cap.read()
if not flag:
break
face_detect_demo(frame)
if ord(' ') == cv2.waitKey(10):
break
cv2.destroyAllWindows()
cap.release()
# print(names)
如果大家想要使用代码中提到的报警功能,首先需要先去马上使用更好的短信服务-短信宝官网这个网站去注册登录,才有账号。
此处由于我代码里写的账号信息不对,因此pycharm终端输出的是“密码错误”,正常情况下会显示发生短信成功。
效果如下:
由于我们数据训练只加入了路径为./data/jm/1.lena.jpg一张图片,因此当执行代码建人脸识别时,它只能识别出这个叫lena的女孩,其他人脸识别出来都是会标注为“unknow”。
opencv是怎么实现人脸检测的
参考技术A调用opencv训练好的分类器和自带的检测函数检测人脸人眼等的步骤简单直接:1.加载分类器,当然分类器事先要放在工程目录中去。分类器本来的位置是在*\opencv\sources\data\haarcascades(harr分类器,也有其他的... 查看详情
利用opencv实现一个简单的实时人脸检测项目并显示fps(代码片段)
...地址:毕业季·进击的技术er在本期中,我将利用OpenCV实现一个简单的人脸识别,其中我们用到的权重文件,大家自行下载效果:我们本期主要用的是cv2.detectMultiScale()这个函数,cv2.detectMultiScale是Opencv中做... 查看详情
opencv进阶-ssd模型实时人脸检测
...有很强的抗干扰性。opencv自带的人脸检测模型一、先安装python参考:计算机基础-深度学习下的python下载与安装二、下载模型文件打开windows下的终端,点击左下角的徽标键,输 查看详情
python笔记-opencv图像处理和人脸识别(代码片段)
...9.拍照保存10.训练数据11.人脸识别三.简单实例1.环境配置python下编程,先安装库pipinstallopencv-pythonpipinstallopencv-contrib-python通过pip下载的只是阉割版的,部分功能不全,要实现人脸识别还需在官网Home-OpenCV下载完整的库(... 查看详情
python-opencv实现人脸识别功能(代码片段)
使用python-opencv实现人脸识别功能。思路如下:1.使用opencv库打开摄像头。2.加载opencv中自带的人脸特征识别分类器3.输出结果代码如下:importcv2importmatplotlib.pyplotasplt#1.读取笔记本相机cap=cv2.VideoCapture(0)#2.在每一帧数据中进行人脸... 查看详情
opencvforjava实现人脸检测(代码片段)
opencv是一个很优秀的图像处理框架,可以通过源码编译,让他支持java开发,这里如果在windows下开发,可以直接使用opencv-453.jar和opencv_java452.dll动态库就够了。 下面给出一个简单的代码,实现人脸检测ÿ... 查看详情
就是这么霸道,使用opencv10行代码实现人脸检测
...释这些概念,希望这能帮助初学者以简单的方式理解Python的OpenCV库。在本演示中,我们将拍摄一张图片并在其中搜索人脸,我们将使用预先训练好的分类器来执行此搜索,现在让我们开始使用预先训练的模型吧。... 查看详情
利用opencv带你玩转人脸识别-中篇(人脸检测,检测多个,视频检测快速入门)(代码片段)
...#x1f433;博客主页:苏凉.py的博客🌐系列专栏:python-opencv快速入门👑名言警句:海阔凭鱼跃,天高任鸟飞。📰要是觉得博主文章写的不错的话,还望大家三连支持一下呀!!!👉关... 查看详情
如何从同一图像中检测多个人脸?
...布时间】:2021-01-1511:51:15【问题描述】:我正在尝试使用python和opencv从同一图像中裁剪多个面孔,但它显示错误。如果有任何其他方法,请告诉我。以下是错误代码。importcv2#Loadsomepre-traineddataonfacefrontalsfromopencv(haa 查看详情
opencv基于残差网络实现人脸检测(代码片段)
OpenCV基于残差网络实现人脸检测OpenCV3.3版本第一次把深度神经网络(DNN)模块引入到正式发布版本中,最新的OpenCV3.4中DNN模块发布了两个必杀技,一个支持FasterR-CNN的对象检测,比SSD与YOLO这些模型有更好的检测精度与小对象检测能... 查看详情
使用opencv实现android人脸检测app(代码片段)
...ff1a;https://blog.csdn.net/jiangjunshow本篇文章手把手教大家使用OpenCV来实现一个能在安卓手机上运行的人脸检测APP。其实不仅仅是能检测人脸,还能检测鼻子,嘴巴,眼睛和耳朵。花了不少精力写这篇文章,希望点赞收... 查看详情
opencv-python实战(14)——人脸检测详解(仅需6行代码学会4种人脸检测方法)(代码片段)
OpenCV-Python实战(14)——人脸检测详解(仅需6行代码学会4种人脸检测方法)0.前言1.人脸处理简介2.安装人脸处理相关库2.1安装dlib2.2安装face_recognition2.3安装cvlib3.人脸检测3.1使用OpenCV进行人脸检测3.1.1基于Haar级联... 查看详情
opencv+openvino实现人脸landmarks实时检测(代码片段)
缘由自从OpenCV3.3版本引入深度神经网络(DNN)模块之后,OpenCV对DNN模块支持最好的表现之一就是开始支持基于深度学习人脸检测,OpenCV本身提供了两个模型分别是基于Caffe与Tensorflow的,Caffe版本的模型是半精度16位的,tensorflow版本... 查看详情
opencv实现人脸,人眼,微笑检测(代码片段)
1.首先实现人脸检测1importcv223img=cv2.imread("people.jpg",1)#读入图像4#导入人脸级联分类器引擎,“.xml”文件里包含了训练出来的人脸特征5face_engine=cv2.CascadeClassifier(cv2.data.haarcascades+‘haarcascade_frontalface_default.xml‘)6 查看详情
python+opencv人脸识别身份认证系统设计:专栏总述
本专栏依托于Python编程语言,在内容上尽可能涵盖了人脸识别的各个技术模块,从人脸数据采集、数据预处理、数据分析、人脸识别模型的训练到最后的人脸识别,均有详细的操作步骤和注释代码,能帮助学习者... 查看详情
opencv-活体检测
...uo;识真”而不止“识脸”。▲使用工具:opencv,python,matlab首先1.构建图像数据集2.实现一个能够进行活体检测的卷积神经网络(我们称之为「LivenessNet」)3.训练活体检测网络4.创建一个能够使用我们训练好的活体检测... 查看详情
python|opencv的人脸检测和人类识别
✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。 查看详情
人脸检测实战终极:使用opencv和python进行人脸对齐(代码片段)
使用OpenCV和Python进行人脸对齐这篇博文的目的是演示如何使用OpenCV、Python和面部标志对齐人脸。给定一组面部标志(输入坐标),我们的目标是将图像扭曲并转换为输出坐标空间。在这个输出坐标空间中,整个数... 查看详情