OpenCV机器学习-人脸识别

一 基本概念

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

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

2 人脸识别

哈尔(haar)级联方法

Harr是专门为解决人脸识别而推出的;

在深度学习还不流行时,Harr已可以商用;

深度学习方法(DNN)

3 Haar人脸识别步骤

创建Haar级联器

导入图片并将其灰度化

调用detectMultiScale方法进行人脸识别

detectMultiScale

csharp 复制代码
detectMultiScale(img,
double scaleFactor=1.1,
int minNeighbors=3,
...)
csharp 复制代码
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 其他脸部特征的检测

csharp 复制代码
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)

csharp 复制代码
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+1
    winname='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的安装

csharp 复制代码
brew install tesseract tesseract-lang
pip3 install pytesseract
csharp 复制代码
import cv2
import numpy as np

import pytesseract

plate=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 导入模型

csharp 复制代码
readNetFromTensorflow
readNetFromCaffe
readnetDarknet,YOLO
readNet

3 导入模型API参数

csharp 复制代码
readNetFromTensorFlow(model,config)
readNetFromCaffe/Darknet(config,model)
readNet(model,[config,[framework]])

4 blobFromImage函数

将图像转成张量

csharp 复制代码
blobFromImage(image,
scalefactor=1.0,
size=Size(),
mean=Scalar(),
swapRB=false,
swapRB=false,
crop=false...) 

mean的含义

5 将张量送入网络并执行

csharp 复制代码
net.setInput(blob)
net.forward()
csharp 复制代码
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])




#得到结果,显示
相关推荐
CodeJourney.9 分钟前
ChemBlender:科研绘图创新解决方案
数据库·人工智能·信息可视化·excel
电鱼智能的电小鱼13 分钟前
产线视觉检测设备技术方案:基于EFISH-SCB-RK3588/SAIL-RK3588的国产化替代赛扬N100/N150全场景技术解析
linux·人工智能·嵌入式硬件·计算机视觉·视觉检测·实时音视频
妄想成为master19 分钟前
计算机视觉----基于锚点的车道线检测、从Line-CNN到CLRNet到CLRKDNet 本文所提算法Line-CNN 后续会更新以下全部算法
人工智能·计算机视觉·车道线检测
夜幕龙28 分钟前
LeRobot 项目部署运行逻辑(七)—— ACT 在 Mobile ALOHA 训练与部署
人工智能·深度学习·机器学习
未来之窗软件服务1 小时前
人体肢体渲染-一步几个脚印从头设计数字生命——仙盟创梦IDE
开发语言·ide·人工智能·python·pygame·仙盟创梦ide
戌崂石1 小时前
最优化方法Python计算:有约束优化应用——线性不可分问题支持向量机
python·机器学习·支持向量机·最优化方法
Echo``1 小时前
40:相机与镜头选型
开发语言·人工智能·深度学习·计算机视觉·视觉检测
Christo31 小时前
关于在深度聚类中Representation Collapse现象
人工智能·深度学习·算法·机器学习·数据挖掘·embedding·聚类
Apache RocketMQ1 小时前
Apache RocketMQ ACL 2.0 全新升级
人工智能
QX_hao1 小时前
【project】--数据挖掘
人工智能·数据挖掘