• 我们在任意一个硬盘的根目录下创建一个Code-project文件夹

  • 在该文件夹下分别创建C-project和Python-project文件夹

  • 在Python-project文件夹下创建face recognition文件夹

  • 用pycharm在该文件夹创建项目

  • 再在该文件夹下创建face_photo文件夹

  • 在根目录下创建main.py,如果已经有了就无需创建

  • 更换国内镜像源

复制链接到仓库URL后点击应用:https://pypi.tuna.tsinghua.edu.cn/simple/
  • 下载所需库

  • 在main中输入代码
# 导入模块
import os
import cv2 as cv
from PIL import Image
import numpy as np
# 发送邮件报警
import smtplib
from email.mime.text import MIMEText # 判断非英文或拼音退出
def SlowSnail(s):
up = 0
low = 0
for c in s:
if c.isupper():
up += 1
elif c.islower():
low += 1
if up + low == len(s):
return 1
else:
return 0 # 保存照片
def savePhoto():
# 读取摄像头cv.VideoCapture(设备号)
cap = cv.VideoCapture(0) num = 1
while (cap.isOpened()): # 检测是否在开启状态
ret_flag, Vshow = cap.read() # 得到每帧图像, cap.read(是否有图像True或者false, 图像)
cv.imshow('Capture_Test', Vshow)
# 保存图片
# 按键判断
k = cv.waitKey(1) & 0xFF
if k == ord(' '):
name = input("待识别人员姓名(英文或拼音):")
# 非英文或拼音退出
if SlowSnail(name) == 0:
continue
cv.imwrite('face_photo/' + str(num) + "." + name + ".jpg", Vshow)
print('success to save' + str(num) + '.jpg')
print('-------------------------------')
num += 1
elif k == ord('s'): # 退出
break
# 释放内存
cv.destroyAllWindows()
# 释放摄像头
cap.release() # 数据训练
def getImageAndLabels(path):
# 储存人脸数据
facesSamples = []
# 储存姓名数据
ids = []
# 储存图片信息
imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
# 加载分类器
face_detector = cv.CascadeClassifier(
'venv/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
# 遍历列表中的图片
for imagePath in imagePaths:
# 打开图片, 灰度化 Pil有九种不同的模式:1(黑白), L(灰度), P, RGB, RGBA, CMYK, YCbCr, I, F
PIL_img = Image.open(imagePath).convert('L')
# 将图像转换为数组
img_numpy = np.array(PIL_img, 'uint8')
# 获取图片人脸特征 face_detector.detectMultiScale(图像, 缩放倍数, 检测n次人脸才确定, 0, 最小人脸尺寸, 最大人脸尺寸)
faces = face_detector.detectMultiScale(img_numpy)
# 获取每张图片的id, 姓名
id = int(os.path.split(imagePath)[1].split('.')[0])
# 保存id和面部特征
for x, y, w, h in faces:
ids.append(id)
facesSamples.append(img_numpy[y:y + h, x:x + w])
# 打印脸部特征, id
print('id', id)
print('fs', facesSamples)
return facesSamples, ids # 报警模块, 识别非该项目录入人脸, 识别摄像头前不认识的人脸
def warning():
# 发送邮件
# 设置服务器所需信息
# QQ邮箱服务器地址
mail_host = 'smtp.qq.com'
# QQ用户名
mail_user = '2**********5'
# 密码(部分邮箱为授权码)
mail_pass = 'i**********f'
# 邮件发送方邮箱地址
sender = '2*********@qq.com'
# 邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
receivers = ['26*********@qq.com'] # 设置email信息
# 邮件内容设置
message = MIMEText('有未知人员在镜头前', 'plain', 'utf-8')
# 邮件主题
message['Subject'] = 'warning!!!'
# 发送方信息
message['From'] = sender
# 接受方信息
message['To'] = receivers[0] # 登录并发送邮件
smtpObj = smtplib.SMTP()
# 连接到服务器
smtpObj.connect(mail_host, 25)
# 登录到服务器
smtpObj.login(mail_user, mail_pass)
# 发送
smtpObj.sendmail(
sender, receivers, message.as_string())
# 退出
smtpObj.quit()
print('The message was sent successfully\n') # 准备识别的图片
def face_detect_demo(img):
# 转换为灰度图片
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 加载分类器
face_detector = cv.CascadeClassifier(
'venv/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
# 获取图片人脸特征 face_detector.detectMultiScale(图像, 缩放倍数, 检测n次人脸才确定, 0, 最小人脸尺寸, 最大人脸尺寸)
face = face_detector.detectMultiScale(gray, 1.1, 5, cv.CASCADE_SCALE_IMAGE, (50, 50), (300, 300))
for x, y, w, h in face:
# 绘制识别框
cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
# 人脸识别
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
cv.putText(img, 'unkonw', (x + 10, y - 10), cv.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
else:
cv.putText(img, str(names[ids - 1]), (x + 10, y - 10), cv.FONT_HERSHEY_SIMPLEX, 0.75, (255, 0, 0), 1)
# 显示图像
cv.imshow('result', img) # 名字标签
def name():
path = 'face_photo/'
imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
for imagePath in imagePaths:
name1 = str(os.path.split(imagePath)[1].split('.', 2)[1])
names.append(name1) # 主进程
# 保存识别图片
savePhoto() # 数据训练
# 图片路径
path = 'face_photo/'
# 获取图像数组、id标签数组、姓名
face, ids = getImageAndLabels(path)
# 加载识别器
recognizer = cv.face.LBPHFaceRecognizer_create()
# 训练
recognizer.train(face, np.array(ids))
# 保存文件
recognizer.write('trainer.yml') # 加载训练数据集文件
recogizer = cv.face.LBPHFaceRecognizer_create()
# 加载数据
recogizer.read('trainer.yml')
# 名称
names = []
# 警报全局变量
warningtime = 0 # 读取摄像头cv.VideoCapture(设备号)
# 读取视频:cap = cv.VideoCapture('视频名.后缀')
cap = cv.VideoCapture(0)
name()
# 等待esc退出
while True:
# cap.read(是否有图像True或者false, 图像)
flag, frame = cap.read()
# 没有图像则退出循环, 有图像则调用检测函数
if not flag:
break
face_detect_demo(frame)
if cv.waitKey(1) == 27: # 连续读取的时候需要把参数设置为1或更高
break
# 释放内存
cv.destroyAllWindows()
# 释放摄像头
cap.release()
  • 代码中的报警模块,此处用的是QQ邮箱,需要提前登录球球邮箱网页版点击设置-账户,滑到最下面开启SMTP,并且生成授权码

  • 运行无错误后,1、空格拍照,2、输入英文名字或者拼音,3、 循环1和2直到按下s退出,4、按esc退出识别

python,opencv-python人脸识别,并且发邮件对镜头前未知人员进行报警的更多相关文章

  1. 【Python+OpenCV】人脸识别基于环境Windows+Python3 version_3(Anaconda3)+OpenCV3.4.3安装配置最新版安装配置教程

    注:本次安装因为我要安装的是win10(64bit)python3.7与OpenCV3.4.3教程(当下最新版,记录下时间2018-11-17),实际中这个教程的方法对于win10,32位又或是64位 ...

  2. 基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释

    先来普及一下概念, 计算机对人脸是如何识别的呢? 或者说图像是如何识别的.主要是获取单张图片的特征值记录了特征值以后,如果下一张图片来了以后两张图片特征值进行对比,如果相似度很高那么计算机就认定这两个 ...

  3. Python的开源人脸识别库:离线识别率高达99.38%

    Python的开源人脸识别库:离线识别率高达99.38%   github源码:https://github.com/ageitgey/face_recognition#face-recognitio ...

  4. Python的开源人脸识别库:离线识别率高达99.38%(附源码)

    Python的开源人脸识别库:离线识别率高达99.38%(附源码) 转https://cloud.tencent.com/developer/article/1359073   11.11 智慧上云 ...

  5. Python 使用 face_recognition 人脸识别

    Python 使用 face_recognition 人脸识别 官方说明:https://face-recognition.readthedocs.io/en/latest/readme.html 人 ...

  6. Python 人工智能之人脸识别 face_recognition 模块安装

    Python人工智能之人脸识别face_recognition安装 face_recognition 模块使用系统环境搭建 系统环境 Ubuntu / deepin操作系统 Python 3.6 py ...

  7. python 与 百度人脸识别api

    用python来做人脸识别代码量少 思路清晰, 在使用之前我们需要在我们的配置的编译器中通过pip       install baidu-aip  即可 from aip import AipFac ...

  8. 基于 OpenCV 的人脸识别

    基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...

  9. 使用OpenCV进行人脸识别

    不断维护的地址:http://plzcoding.com/face-recognition-with-opencv/ 怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Re ...

  10. PyQt5+Caffe+Opencv搭建人脸识别登录界面

    PyQt5+Caffe+Opencv搭建人脸识别登录界面(转载) 最近开始学习Qt,结合之前学习过的caffe一起搭建了一个人脸识别登录系统的程序,新手可能有理解不到位的情况,还请大家多多指教. 我的 ...

随机推荐

  1. 零基础入门——从零开始学习PHP反序列化笔记(二)

    魔术方法 魔术方法介绍 __construct() 触发时机:实例化对象之前 构造函数,在实例化一个对象的时候,首先会去自动执行的一个方法; <?php class User { public ...

  2. openlayers学习笔记

    https://www.cnblogs.com/suRimn/p/10649816.html

  3. 银河麒麟等 Linux系统 安装 .net 5,net 6及更高版本的方法

    最近项目上用到 银河麒麟的操作系统,需要搭建 .net 跨平台方案.一开始使用各种命令都安装不上,很多提示命令找不到,或者下载包时候网络无法下载. 网上教程很多,但没有一个是成功的,多数使用 apt ...

  4. Windows平台的JDK安装及IDEA配置JDK的过程

    1.下载安装包 jdk-8u201-windows-x64.exe,即jdk1.8.0_201 链接:https://pan.baidu.com/s/1WYaTlProtHkC_KyMHIUBxQ?p ...

  5. java与es8实战之一:以builder pattern开篇

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于<java与es8实战>系列 < ...

  6. VictoriaLogs:一款超低占用的 ElasticSearch 替代方案

    背景 前段时间我们想实现 Pulsar 消息的追踪流程,追踪实现的效果图如下: 实现其实比较简单,其中最重要的就是如何存储消息. 消息的读取我们是通过 Pulsar 自带的 BrokerInterce ...

  7. 利用接口测试框架实现web状态的监控

    之前,我们已经说明了如何实现一个我们的接口测试框架RATF,当然这个框架不止可以用于管理我们的接口测试代码,我们还可以用他来对我们的web进行简单粗暴的监控. 原理: 1. 通过使用配置文件,对要监控 ...

  8. prometheus 监控实战篇

    prometheus 监控 目录 prometheus 监控 1.上传tar包 2.解压到对应文件夹 3.配置开机自启动 4.配置Prometheus 5.black_exporter 监控网站状态 ...

  9. Python/Java/Php/C#/Go/C/C++这几个主力语言,谁到底真的不行

    1.前言 阿里最近又进行了史诗级的大裁员,IT行业肉眼可见的持续性衰退与没落.当潮水退却,才能看出谁在裸泳.作为当今计算机编程界的几大主力语言,谁才真正的裸泳者呢? 2.描述 1.Python: Py ...

  10. KRPano多屏互动原理

    KRPano可以实现多个屏幕之间的同步显示,主要应用到Websocket技术进行通信. 在控制端,我们需要发送当前KRPano场景的实时的视角和场景信息,可以使用如下的代码: embedpano({ ...