一.案例概述

本案例需要一定的Python编程基础并掌握OpenCV基本使用
时间仓促:初略编写文档

效果如下:

开发环境:
操作系统:Windows 10
开发工具:PyCharm 2019.2版本
python版本:3.6.7
计算机视频库包:opencv_contrib_python-4.1.0.25-cp36-cp36m-win_amd64.whl
算法支持包:numpy(安装opencv默认安装numpy)
下载地址:
Python3.6.7: https://www.python.org/downloads/
Pycharm工具: http://www.jetbrains.com/pycharm/download/#section=windows
第三方包下载:https://pypi.org/project/opencv-contrib-python/#files

二.编写案例准备资源:

准备工作:

 1.开发环境、开发工具及第三方包准备完善并创建空项目。2.准备一些个人的图片(或者通过代码保存个人面部存入本地)要求:图片名称有一定规律3.爬虫文件 - 爬取明星照片并存储本地4.将明星图片和个人图片通过opencv处理保存面部图片5.开始编写人脸识别的代码

三.代码编写顺序

一.爬虫代码直接下载运行:点击下载
链接: https://pan.baidu.com/s/1BNzSQ2Xk9GkYslhwKXLYSQ 提取码: qmy1
二.安装python爬虫需要的第三方包

  • requests(用户网络访问)
  • beautifulsoup4(用户数据结构解析)
  • pypinyin(用于中文转换为拼音)

三.运行python爬虫代码

四.将图片转换为面部图片进行存储

# 获取小头像信息
import cv2
import os
# 图片张数变量
def read_image():dirs = os.listdir("d_img")for j,dir in enumerate(dirs):print(dir)# 判断是否有存储头像的路径file_path = "x_face/%s"%str(dir);if not os.path.exists(file_path):os.makedirs(file_path);passnum = 0;for i in range(0,20):image = cv2.imread('d_img/%s/%d.jpg'%(dir,i))gray = cv2.cvtColor(image,code = cv2.COLOR_BGR2GRAY);# 数据参数face_detector = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml");# [3]进行数据对比:minNeighbors = 每一个目标至少要被检测 -整数face_01 = face_detector.detectMultiScale(gray, minNeighbors=4);# 绘制矩形人脸检测print("第%d张图片===:"%i,face_01)print(type(face_01))if isinstance(face_01,tuple):print("没有检查的头像")passelse:print("****有检查的头像****")for x, y, w, h in face_01:# time.sleep(10)x_face = gray[y:y + h, x:x + w];x_face = cv2.resize(x_face,dsize=(200,200));bo_photo = cv2.imwrite("%s\%d.jpg" % (file_path, num), x_face);print("保存成功:%d" % num)passnum+=1;passpasspass
if __name__ == '__main__':read_image();pass

运行结果 - 生产以下文件:

五.人脸识别 - 主代码


# 人脸识别 - 主代码
import cv2
import os
import time
import numpy as np;
# 图片张数变量
def Get_x_faces():dirs = os.listdir("x_face")print(dirs)X = []# Y = []# for j,dir in enumerate(dirs):for i in range(0,9):image = cv2.imread('x_face/%s/%d.jpg'%(dir,i))gray = cv2.cvtColor(image,code = cv2.COLOR_BGR2GRAY);print("读取",gray.shape)# NoneType  ndarrayif len(str(image))!=0:print("加入。。。。")X.append(gray)Y.append(j)passreturn [X,Y,dirs]passif __name__ == '__main__':X,Y,dirs = Get_x_faces();print("X=",X)print("Y=",Y)print("dirs=",dirs)#asarray都可以将结构数据转化为ndarrayX = np.asarray(X);Y = np.asarray(Y);# 产生一个随机数 -index = [i for i in range(0,len(X))];print(index)#现场修改序列,改变自身内容。(类似洗牌,打乱顺序)np.random.shuffle(index);print("***********",index)# 打乱顺序 :相同规则打乱X = X[index]Y = Y[index]print("88888888",Y)# 训练数据print("训练数据为:",len(X),len(Y))X_train = X[:len(X)]Y_train = Y[:len(Y)];print("800000",Y_train)# 算法Eigen 特征的意思# 主成分分析(PCA)——Eigenfaces(特征脸)——函数:cv2.face.EigenFaceRecognizer_createmodel = cv2.face.EigenFaceRecognizer_create();print(model)# 算法学习print("算法学习", len(X_train), len(Y_train));model.train(X, Y);print("已经学会了数据。。。。")# 测试数据# X_test, Y_test = X[-5:], Y[-5:];# 开始验证# for data in X_test:#     # print(data)#     result = model.predict(data);#     print("=================")#     print(result)#     print(dirs[result[0]])#     passVideo_face = cv2.VideoCapture(0);face_detector = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")# while循环调取视频图形while True:flag,frame = Video_face.read();gray = cv2.cvtColor(frame,code=cv2.COLOR_BGR2GRAY);faces = face_detector.detectMultiScale(gray,1.3,5);if isinstance(faces, tuple):print("没有检查的头像")passelse:print("有头像了。。。。")# for循环遍历数据for x, y, w, h in faces:cv2.rectangle(frame, pt1=(x, y), pt2=(x + w, y + h), color=[0, 0, 255], thickness=2);face = gray[y:y + h, x:x+w];print("===]]]", face.shape)face_1 = cv2.resize(face, dsize=(200, 200));print("=================")print(face_1.shape)# 开始对比print("~~~~"*20)print(" 参数为:",face_1.shape);result = model.predict(face_1);print("对比返回结果:", result)print('该人脸是:', dirs[result[0]])a1 = dirs[result[0]]if result[1]<1600:a1 = "NO"passcv2.putText(frame, a1, (x, y), cv2.FONT_ITALIC, 1, [0, 0, 255], 2);passpasscv2.imshow('face', frame)cv2.waitKey(100)passvideo.release()cv2.destroyAllWindows();pass

六.大功告成
如有BUG或疑问以及需要完整代码的小伙伴:
加QQ群提问和下载源代码: 群号:485024315

Python编程 - 基于OpenCV实现人脸识别(实践篇)爬虫+人脸识别相关推荐

  1. 案例-使用python实现基于opencv的车辆识别

    写在开头,接触opencv也有很长一段时间了,中间还接触了halcon.但都是基于C++实现,发现如果有什么idea,还是使用python可以快速实现.基于C++版本的后期会有更新. 首先,这个案例是 ...

  2. 基于OpenCV的刷脸考勤&人脸校验&用户管理系统(源码&教程)

    1.研究背景 随着人工智能时代的来临,深度学习赋予了以人脸图像为中心的计算机视觉任务更多的可能.人脸检测是人脸识别系统组成的关键部分之一,其目的是检测出任意给定图片中的包含的一个或多个人脸,是人脸识别 ...

  3. Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件

    Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 目录 利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 1.先下载ff ...

  4. Python 毕业设计 - 基于 opencv 的人脸识别上课考勤系统,附源码

    一.简介 这个人脸识别考勤签到系统是基于大佬的人脸识别陌生人报警系统二次开发的. 项目使用Python实现,基于OpenCV框架进行人脸识别和摄像头硬件调用,同时也用OpenCV工具包处理图片.交互界 ...

  5. Linux毕业设计:基于OpenCV和QT库实现的人脸识别考勤/门禁系统(arm嵌入式ubuntu)

    本文介绍:Linux上以opencv和qt库实现的人脸识别系统,可应用于考勤.门禁等场景,具有人脸录入.删除.人脸检测.识别.用户管理等完整功能.可运行于ARM嵌入式linux.ubuntu即纯软件. ...

  6. 基于OpenCV修复表格缺失的轮廓--如何识别和修复表格识别中的虚线

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达推荐阅读 42个pycharm使用技巧,瞬间从黑铁变王者Google ...

  7. arcgis下的python编程-基于ArcGIS的Python编程秘笈(第2版)

    基于ArcGIS的Python编程秘笈(第2版) 译者简介 审阅人简介 1 面向ArcGIS的Python语言基础 1.1 使用IDLE进行Python脚本开发 1.1.1 Python Shell窗 ...

  8. 【Python】基于OpenCV与UDP实现的视频流传输

    文章目录 前言 原理 代码 服务端 客户端 运行效果 参考资料 前言 2021年电赛的测量题(如下)需要实现局域网视频传输,我们的方案是使用gst-rtsp-server 搭建 RTSP 服务器 进行 ...

  9. 案例-使用python实现基于opencv的形状识别

    该案例主要涉及到不同形状的图形.根据获得轮廓,计算边数.来判断属于什么形状,并将之输出在图片上.具体代码和结果如下: import cv2 from urllib3 import connection ...

最新文章

  1. 如何创建 java虚拟机_Java虚拟机如何创建对象?
  2. 基于正态分布的图片高斯模糊算法
  3. 跟锦数学190314
  4. 计算机删除等级列在哪里,插入与删除Excel表格的单元格、行和列
  5. wpf将文字转化为图形_将创新转化为实际应用
  6. 2020 年微服务领域开源数字化报告发布,阿里扛起微服务大旗
  7. 从数组中取值,并且比较字符串的值
  8. CUDA入门(六) 异步并行执行解析
  9. 物体检测算法:R-CNN,SSD,YOLO 动手学深度学习v2 pytorch
  10. tcp服务器修改ip,修改本地连接的TCP/IP属性设置
  11. 线性定常系统的离散化
  12. PayPal美元提现到国内银行卡教程!
  13. pt-archiver详解
  14. 清华天才王垠和阿里 P10 面试官赵海平神仙打架后,我们来说说技术面试中的该与不该!...
  15. 女生干前端开发个人思考
  16. FTP无法在资源管理器中打开
  17. 4.智能快递柜(通信篇-SOCKET)
  18. python卡尔曼滤波室内定位_基于Unscented卡尔曼滤波的室内定位
  19. linux rescue 黑屏,linux援救模式:linux rescue使用详细图解
  20. cad net 绘制带圆弧的多段线

热门文章

  1. 帝国理工学院计算机科学与技术申请条件,伦敦帝国理工学院计算机理学硕士研究生申请要求及申请材料要求清单...
  2. java使用jna访问本地库
  3. 多重关系抽取(Multiple-Relations)的一些最新顶会论文(海量论文,干货满满)
  4. 硕盟type c六合一拓展坞|苹果电脑转换器
  5. HTML网页设计基础笔记 • 【目录】
  6. Unity3D UGUI实现冷却时间的技能图标
  7. phpstorm 突然打开不了了
  8. 项目管理手记 28 ERP项目的高层支持要知行合一
  9. stegsolve的功能
  10. 深银色心扉之Silverlight-MMORPG游戏引擎第一阶段移植