OpenCV机器学习-人脸识别

一 基本概念

1 计算机视觉与机器学习的关系

计算机视觉是机器学习的一种应用,而且是最有价的应用。

2 人脸识别

哈尔(haar)级联方法
Harr是专门为解决人脸识别而推出的;
在深度学习还不流行时,Harr已可以商用;
深度学习方法(DNN)

3 Haar人脸识别步骤

创建Haar级联器
导入图片并将其灰度化
调用detectMultiScale方法进行人脸识别

detectMultiScale

detectMultiScale(img,
double scaleFactor=1.1,
int minNeighbors=3,
...)
import cv2
import numpy as np# 第一步 创建Haar级联器
facer=cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')# 第二步 导入人脸识别图片并将其灰度化
img=cv2.imread('p3.png')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 第三步 进行人脸识别
faces=facer.detectMultiScale(gray,1.1,5)for(x,y,w,h)in faces:cv2.rectangle(img,(x,y),(x+w,y+w),(0,0,255))cv2.imshow('img',img)
cv2.waitKey(0)

在这里插入图片描述

4 其他脸部特征的检测

import cv2
import numpy as np# 第一步 创建Haar级联器
facer=cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')eye=cv2.CascadeClassifier('./haarcascades/haarcascade_eye.xml')# 第二步 导入人脸识别图片并将其灰度化
img=cv2.imread('p3.png')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 第三步 进行人脸识别
faces=facer.detectMultiScale(gray,1.1,5)
for(x,y,w,h)in faces:cv2.rectangle(img,(x,y),(x+w,y+w),(0,0,255),2)eyes = eye.detectMultiScale(gray, 1.1, 3)
for (x, y, w, h) in eyes:cv2.rectangle(img, (x, y), (x + w, y + w), (0, 0, 255),2)cv2.imshow('img',img)
cv2.waitKey(0)

import cv2
import numpy as np# 第一步 创建Haar级联器
facer=cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')eye=cv2.CascadeClassifier('./haarcascades/haarcascade_eye.xml')mouth=cv2.CascadeClassifier('./haarcascades/haarcascade_mcs_mouth.xml')nose=cv2.CascadeClassifier('./haarcascades/haarcascade_mcs_nose.xml')# 第二步 导入人脸识别图片并将其灰度化
img=cv2.imread('p3.png')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 第三步 进行人脸识别#检测出的人脸再检测眼睛
faces=facer.detectMultiScale(gray,1.1,5)
i=0
for(x,y,w,h)in faces:cv2.rectangle(img,(x,y),(x+w,y+w),(0,0,255),2)roi_img=img[y:y+h,x:x+w]eyes = eye.detectMultiScale(roi_img, 1.1, 3)for (x, y, w, h) in eyes:cv2.rectangle(roi_img, (x, y), (x + w, y + w), (0, 0, 255),2)i=i+1winname='face'+str(i)cv2.imshow(winname,roi_img)#mouths = mouth.detectMultiScale(gray, 1.1, 3)
#for (x, y, w, h) in mouths:
#    cv2.rectangle(img, (x, y), (x + w, y + w), (255, 0, 0), 2)#noses = nose.detectMultiScale(gray, 1.1, 3)
#for (x, y, w, h) in noses:
#    cv2.rectangle(img, (x, y), (x + w, y + w), (255, 255, 0), 2)cv2.imshow('img',img)
cv2.waitKey(0)

二 车牌识别的具体步骤

通过Haar定位车牌的大体位置;
对车牌进行预处理;
调用tesseract进行文字识别;

1 车牌预处理包括的内容

对车牌进行二值化处理;
进行形态学处理;
滤波去噪点;
缩放;

2 Tesseract的安装

brew install tesseract tesseract-lang
pip3 install pytesseract
import cv2
import numpy as npimport pytesseractplate=cv2.CascadeClassifier('./haarcascades/haarcascade_russian_plate_number.xml')
img=cv2.imread('./chinacar.jpeg')gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)plates=plate.detectMultiScale(gray,1.1,3)for(x,y,w,h) in plates:cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)#对获取到车牌进行预处理
#1.提取ROI
roi=gray[y:y+h,x:x+w]
#进行二值化
ret,roi_bin=cv2.threshold(roi,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)print(pytesseract.image_to_string(roi,lang='chi_sim+eng',config='--psm 8 --oem 3'))cv2.imshow('roi_bin',roi_bin)
cv2.imshow('img', img)
cv2.waitKey()

三 深度学习

1 DNN

在这里插入图片描述

2 RNN

在这里插入图片描述

3 RNN主要用途

语音识别
机器翻译
生产图像描述

4 CNN

在这里插入图片描述

5 CNN主要用途

图片分类、检索
目标定位检测
目标分割
人脸识别

四 DNN实现图像分类

1 DNN 使用步骤

读取模型,并得到深度神经网络;
读取图片/视频;
将图片转成张量,送入深度神经网络;
进行分析得到结果

2 导入模型

readNetFromTensorflow
readNetFromCaffe
readnetDarknet,YOLO
readNet

3 导入模型API参数

readNetFromTensorFlow(model,config)
readNetFromCaffe/Darknet(config,model)
readNet(model,[config,[framework]])

4 blobFromImage函数

将图像转成张量

blobFromImage(image,
scalefactor=1.0,
size=Size(),
mean=Scalar(),
swapRB=false,
swapRB=false,
crop=false...) 

mean的含义
在这里插入图片描述

5 将张量送入网络并执行

net.setInput(blob)
net.forward()
import cv2
from cv2 import dnn
import numpy as np#导入模型,创建神经网络
config="./model/bvlc_googlenet.protoxt"
model="./model/bvlc_googlenet.caffemodel"
net=dnn.readNetFromCaffe(config,model)
#读图片,转成张量
img=cv2.imread('./smallcat.jpeg')
blob=dnn.blobFromImage(img,1.0(224,224),(104,117,123))
#将张量输入到网络中,并进行预测
net.setInput(blob)
r=net.forward()#读net.forwar()#读取类目
classes=[]
path='./model/synset_words.txt'
with open(path,'rt') as f:classes =[x[x.find(" ")+1:]for x in f]
order=sorted(r[0],reverse=True)z=list(range(3))
for i in range(0,3):z[i]=np.where(r[0]==order[i])[0][0]print('第',i+1, '项,匹配:',classes[z[i]],end='')print('类所在行:',z[i]+1,' ','可能性:',order[i])#得到结果,显示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/32910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

示例:WPF中如何绑定ContextMenu和Menu

一、目的:开发过程中,有些模块的右键ContextMenu菜单是需要动态显示的,既是根据不同条件显示不同的菜单,很多是通过代码去生成ContextMenu的MenuItem,本文介绍通过绑定的方式去加载ContextMenu,Menu菜单栏的…

【操作系统】期末复习,一篇就够了!【全面】

并发是指多个事件在同一时间间隔内发生 并行是指多个事件在同一时刻发生 设计实时操作系统时,首先应该考虑的是( ) B、实时性和可靠性 .单道批处理系统的主要缺点是( ) A、CPU利用率不高 批处理系统的主要缺点是&…

家政预约小程序14权限配置

目录 1 创建用户2 创建角色3 启用登录4 实现退出总结 我们现在小程序端的功能基本开发好了,小程序开发好之后需要给运营人员提供管理后台,要分配账号、配置权限,我们本篇就介绍一下权限如何分配。 1 创建用户 在微搭中,用户分为内…

简单了解ESD模型与TLP曲线

上文讲了ESD和EOS的区别,说实话远不止那些。今日再稍加深入的介绍ESD。 一 ESD原理 ESD-Electro Static Discharge静电放电,具有不同静电电位的物体互相靠近或者直接接触引起的电荷转移。正常情况下,物体内部的正负电荷是相等的&#xff0c…

RMDA通信1:通信过程和优势,以太网socket为何用户空间拷贝到内核空间

视频分享: 1.1 RDMA基本原理和优势,以太网socket通信为什么要用户空间拷贝到内核空间_哔哩哔哩_bilibili 一、以太网socket通信 1.1 以太网socket通信过程 1、发送端发起一次通信操作,数据由用户空间拷贝到内核空间。拷贝由CPU完成&#x…

【YOLO 系列】基于YOLO V8的车载摄像头交通信号灯检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

前言 随着智能交通系统的发展,交通信号灯的准确识别对于提高道路安全和交通效率具有至关重要的作用。传统的交通信号灯识别方法依赖于固定的传感器和摄像头,存在安装成本高、维护困难等问题。为了解决这些问题,我们启动了这个项目&#xff0…

中文邮件模板之向论文的作者咨询论文相关问题

目录 1. 内容 2. 邮件昵称 3. 格式很重要! 1. 内容 尊敬的: 您好,很抱歉在您百忙之中打扰您。 我是大学的一名硕士生,最近在做项目【】,您发表的论文【】给了我很大的启发。 论文中没有给出具体参数,如和…

React+TS 从零开始教程(2):简中简 HelloWolrd

源码链接:https://pan.quark.cn/s/c6fbc31dcb02 这一节,我们来见识ReactTS的威力,开始上手开发第一个组件,什么组件呢? 当然是简中简的 HelloWolrd组件啦。 在src下创建一个components,然后新建Hello.tsx …

CVPR2023论文速览Transformer

Paper1 TrojViT: Trojan Insertion in Vision Transformers 摘要原文: Vision Transformers (ViTs) have demonstrated the state-of-the-art performance in various vision-related tasks. The success of ViTs motivates adversaries to perform backdoor attacks on ViTs.…

一款有趣的Python库绘制风向图,小白容易上手

利用 Python 绘制风向图 绘制风向图通常使用 matplotlib 库的 Barbs 类来实现.这个类用于绘制风向和风速的矢量场,可以实现不同的风向图风格. 安装 ## 命令安装 matplotlib 库:pip install matplotlib用法 下面是一个简单的示例代码,绘制风向图: 使…

虚拟现实环境下的远程教育和智能评估系统(十三)

管理/教师端前端工作汇总education-admin: 首先是登录注册页面的展示 管理员 首页 管理员登录后的首页如下图所示 管理员拥有所有的权限 课程管理 1、可以查看、修改、增添、删除课程列表内容 2、可以对课程资源进行操作 3、可以对课程的类别信息进行管理&…

java的输出流File OutputStream

一、字节输出流FileOutput Stream 1、定义 使用OutputStream类的FileOutput Stream子类向文本文件写入的数据。 2.常用构造方法 3.创建文件输出流对象的常用方式 二、输出流FileOutputStream类的应用示例 1.示例 2、实现步骤 今天的总结就到此结束啦,拜拜&#x…

【Web APIs】DOM 文档对象模型 ⑤ ( 获取特殊元素 | 获取 html 元素 | 获取 body 元素 )

文章目录 一、获取特殊元素1、获取 html 元素2、获取 body 元素3、完整代码示例 本博客相关参考文档 : WebAPIs 参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/APIgetElementById 函数参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/API/Document/getE…

I2C总线8位IO扩展器PCF8574

PCF8574用于I2C总线的远程8位I/O扩展器 PCF8574国产有多个厂家有替代产品,图示为其中一款HT8574 1 产品特点 低待机电流消耗:10 uA(最大值) I2C 转并行端口扩展器 漏极开路中断输出 与大多数微控制器兼容 具有大电流驱动能力的闭…

嵌入式系统中的加解密签名

笔者来了解一下嵌入式系统中的加解密 1、背景与名词解释 笔者最近在做安全升级相关的模块,碰到了一些相关的概念和一些应用场景,特来学习记录一下。 1.1 名词解释 对称加密:对称加密是一种加密方法,使用相同的密钥(…

IDEA各种实体类运行爆红,不运行就没事

1.问题描述 如图所示,后端项目的import的各种entity爆红,点击也有导入包的提示,且这种报红几乎遍布了整个工程项目 2.我的解决方案 清空缓存,然后把target文件删掉,重新跑 3.小结 idea项目有时候就是一个核弹&…

风险评估概念

渗透服务只是风险评估的一种内容 风险评估的概念 是识别,控制,降低,或者消除可能影响到信息系统的安全风险过程。 风险评估的定义: 就是量化测评一种事情带来的影响,整个量化的过程是偏主观化(客户觉得) 风险的特…

PAL: Program-aided Language Models

PAL: Program-aided Language Models ArXiv:https://arxiv.org/pdf/2211.10435 GitHub:https://reasonwithpal.com/ 一、动机 大模型与Chain-of-Thought可以很好地将一些复杂的问题分解为若干个子问题并进行逐步推理;但是对于一些较为复杂…

[技术笔记] 元器件采购之Flash的国内、外厂商Top5

国外Top5 1、Micron(镁光)半导体 2、Toshiba(东芝) 3、Hynix(海力士) 4、Samsung(三星) 5、Intel(因特尔) 6、SanDisk(闪迪) 7…

【Unity】AssetBundle打包策略

【Unity】AssetBundle打包策略 在游戏开发过程中,AssetBundle(AB)打包策略的重要性不容忽视。游戏开发者往往手动设置游戏资源包名进行管理,难免会造成资源确实或导致冗余,因此对于AB包的打包流程来说,进行策略管理显得十分重要。…