OpenCV机器学习-人脸识别

2024-06-23 23:52

本文主要是介绍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])#得到结果,显示

这篇关于OpenCV机器学习-人脸识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088641

相关文章

在PyCharm中安装PyTorch、torchvision和OpenCV详解

《在PyCharm中安装PyTorch、torchvision和OpenCV详解》:本文主要介绍在PyCharm中安装PyTorch、torchvision和OpenCV方式,具有很好的参考价值,... 目录PyCharm安装PyTorch、torchvision和OpenCV安装python安装PyTor

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert