【OpenCV图像处理15】人脸识别项目

简介: 【OpenCV图像处理15】人脸识别项目

十五、人脸识别项目

主要方法:

  • 哈尔(Haar)级联方法
  • 深度学习方法(DNN)

Haar是专门为解决人脸识别而推出的,在深度学习还不流行时,Haar已可以商用。

1、Haar人脸识别

基本步骤:

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

detectMultiScale()用法:

detectMultiScale(image, scaleFactor: None, minNeighbors: None, flags: None, minSize: None, maxSize: None)

代码实现:

import cv2
# 创建Haar级联器
facer = cv2.CascadeClassifier('../haarcascades/haarcascade_frontalface_default.xml')
# 导入图像并将其灰度化
img = cv2.imread('../resource/people.bmp')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 调用detectMultiScale方法进行人脸识别
# [[x, y, w, h]]
faces = facer.detectMultiScale(gray, 1.1, 5)
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、Haar其它脸部特征的检测

代码实现:

import cv2
# 创建Haar级联器
facer = cv2.CascadeClassifier('../haarcascades/haarcascade_frontalface_default.xml')
eye = cv2.CascadeClassifier('../haarcascades/haarcascade_eye.xml')
# 导入图像并将其灰度化
img = cv2.imread('../resource/people.bmp')
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 + h,), (0, 0, 255), 2)
    roi_img = img[y:y + h, x:x + w]
    eyes = eye.detectMultiScale(roi_img, 1.1, 5)
    for (x, y, w, h) in eyes:
        cv2.rectangle(roi_img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    i = i + 1
    winname = 'face' + str(i)
    cv2.imshow(winname, roi_img)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3、Haar + Tesseract车牌识别

基本步骤:

  • 通过Haar定位车牌的大体位置
  • 对车牌进行预处理
  • 对车牌进行二值化处理
  • 进行形态学处理
  • 滤波去除噪点
  • 缩放
  • 调用Tesseract进行文字识别

代码实现:

import cv2
# 引入Tesseract库
import pytesseract
# 创建Haar级联器
plate = cv2.CascadeClassifier('../haarcascades/haarcascade_russian_plate_number.xml')
# 带车牌的图像
img = cv2.imread('../resource/plate.webp')
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]
# 2.进行二值化
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('plate', img)
cv2.imshow('roi_bin', roi_bin)
cv2.waitKey(0)
cv2.destroyAllWindows()
88888

4、深度学习基础知识

深度学习是计算机视觉最为重要的方法。

深度学习简史:

1、深度学习很早就被提出,但一直停滞不前。

2、2011年,微软在语音识别上使用,取得了突破。

3、2012年,DNN在图像识别领域取得惊人的效果,在ImageNet评测的错误率从26%降低到15%。

4、2016年,AlphaGo击败人类,引起世界震惊。

深度学习网络模型:

  • DNN(Deep Neural Network,深度神经网络)
  • RNN(Recurrent Neural Network,循环神经网络)
  • CNN(Convolutional Neural Network,卷积神经网络)

RNN主要用途:

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

CNN主要用途:

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

几种CNN网络实现:

  • LeNet,1998年,第一代CNN,28 * 28手写字。
  • AlexNet,2012年,ImageNet比赛的冠军。
  • VGG、GoogLeNet、ResNet

几种CNN目标检测网络实现:

  • RCNN、Fast RCNN、Faster RCNN
  • SSD(Single Shot Detectors)
  • YOLO、YOLOv2、…、YOLOv5

深度学习库:

  • tensorflow,Google
  • caffe ->caffe2->torch(pytorch),Facebook贾扬清
  • MXNet,Apache

训练数据集:

  • MNIST、Fashion-MNIST:手写字母
  • VOC:举办挑战赛时的数据集,2012年后不再举办
  • COCO:用于目标检测的大型数据集
  • ImageNet

训练模型:

  • Tensorflow训练出的模型是.pb文件
  • Pytorch训练出的模型是.pth文件
  • Caffe训练出的模型是.caffe文件
  • ONNX开放性神经网络交换格式.onnx

OpenCV对DNN的支持:

  • OpenCV 3.3 将DNN转正
  • OpenCV 只能使用DNN,不能训练DNN模型

OpenCV支持的模型:

  • Tensorflow
  • Pytorch/torch
  • Caffe
  • DarkNet

5、OpenCV使用DNN实现图像分类

DNN使用步骤:

1、读取模型,并得到深度神经网络

2、读取图像/视频

3、将图像转成张量,送入深度神经网络

4、运行分析,并得到结果

导入模型:

# 第一种:Tensorflow
readNetFromTensorflow(model, config)
# 第二种:Caffe/Darknet
readNetFromCaffe/Darknet(config, model)
# 第三种:Net
readNet(model, [config, [framework]]

blobFromImage()用法:

dnn.blobFromImage(image, scalefactor: None, size: None, mean: None, swapRB: None, crop: None, ddepth: None

参数说明:

  • scalefactor:缩放因子
  • size:输入图像尺寸
  • mean:平均差值

将张量送入网络并执行:

net.setInput(blob)
r = net.forward()

代码实现: 物体分类

import cv2
from cv2 import dnn
import numpy as np
# 1.导入模型,创建神经网络
config = '../config/bvlc_googlenet.prototxt'
model = '../model/bvlc_googlenet.caffemodel'
net = dnn.readNetFromCaffe(config, model)
# 2.读取图像,转成张量
img = cv2.imread('../resource/r_cat.jpg')
blob = dnn.blobFromImage(img,
                         1.0,  # 缩放因子
                         (224, 224),  # 输入图像尺寸
                         (104, 117, 123))  # 平均差值
# 3.将张量输入到网络中,并进行预测
net.setInput(blob)
r = net.forward()
# 读取类目
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])
# 4.得到结果,显示
第 1 项, 匹配: Siamese cat, Siamese
类所在行: 285   可能性: 0.22166264
第 2 项, 匹配: tabby, tabby cat
类所在行: 282   可能性: 0.13451944
第 3 项, 匹配: tiger cat
类所在行: 283   可能性: 0.1054367


目录
相关文章
|
3月前
|
算法 计算机视觉
基于qt的opencv实时图像处理框架FastCvLearn实战
本文介绍了一个基于Qt的OpenCV实时图像处理框架FastCvLearn,通过手撕代码的方式详细讲解了如何实现实时人脸马赛克等功能,并提供了结果展示和基础知识回顾。
126 7
基于qt的opencv实时图像处理框架FastCvLearn实战
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
399 3
|
2月前
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
81 2
WK
|
4月前
|
计算机视觉 Python
如何使用OpenCV进行基本图像处理
使用OpenCV进行基本图像处理包括安装OpenCV,读取与显示图像,转换图像颜色空间(如从BGR到RGB),调整图像大小,裁剪特定区域,旋转图像,以及应用图像滤镜如高斯模糊等效果。这些基础操作是进行更复杂图像处理任务的前提。OpenCV还支持特征检测、图像分割及对象识别等高级功能。
WK
52 4
yolov5项目如何安装pycocotools和opencv-python?
本文提供了解决yolov5项目中安装pycocotools和opencv-python包失败的两种方法:手动安装或使用国内镜像源进行安装。
yolov5项目如何安装pycocotools和opencv-python?
|
4月前
|
机器学习/深度学习 算法 机器人
|
4月前
|
机器学习/深度学习 人工智能 监控
利用Python和OpenCV实现实时人脸识别系统
【8月更文挑战第31天】本文将引导您了解如何使用Python结合OpenCV库构建一个简易的实时人脸识别系统。通过分步讲解和示例代码,我们将探索如何从摄像头捕获视频流、进行人脸检测以及识别特定个体。本教程旨在为初学者提供一条明晰的学习路径,帮助他们快速入门并实践人脸识别技术。
|
5月前
|
机器学习/深度学习 人工智能 计算机视觉
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
|
6月前
|
机器学习/深度学习 监控 算法
使用Python和OpenCV实现简单的人脸识别系统
使用Python和OpenCV实现简单的人脸识别系统
71 0
|
7月前
|
弹性计算 Java PHP
新手用户注册阿里云账号、实名认证、购买云服务器图文教程参考
对于初次购买阿里云产品的用户来说,第一步要做的是注册账号并完成实名认证,然后才是购买阿里云服务器或者其他云产品,本文为大家以图文形式展示一下新手用户从注册阿里云账号、实名认证到购买云服务器完整详细教程,以供参考。
新手用户注册阿里云账号、实名认证、购买云服务器图文教程参考

热门文章

最新文章