OpenCV机器学习-人脸识别

news2025/1/12 0:55:27

一 基本概念

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+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的安装

brew install tesseract tesseract-lang
pip3 install pytesseract
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 导入模型

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.coloradmin.cn/o/1854439.html

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

相关文章

thrift接口调用工具

写了一个thrift接口调用工具 导入thrift文件就可以直接调用相应接口 工具会根据thrift文件中接口的参数名,参数类型,返回值等等,自动生成接口参数,和结果json化显示。 https://github.com/HuaGouFdog/Fdog-Kit

C++初学者指南第一步---14.函数调用机制

C初学者指南第一步—14.函数调用机制 文章目录 C初学者指南第一步---14.函数调用机制1.记住:内存的结构2.函数调用是如何工作的3. 不要引用局部变量4. 常见编译器优化5. Inlining内联 1.记住:内存的结构 堆(自由存储) 用于动态存…

鸿蒙开发系统基础能力:【@ohos.hiAppEvent (应用打点)】

应用打点 本模块提供了应用事件打点能力,包括对打点数据的落盘,以及对打点功能的管理配置。 说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import hiAppEve…

英伟达下一代DLSS或利用人工智能

英伟达的黄仁勋在2024年Computex展会上的问答环节中,提前透露了公司未来几代深度学习超采样(DLSS)技术的发展方向。在回答有关DLSS的问题时,黄仁勋表示,未来我们将看到通过纯粹的人工智能生成的纹理和对象。他还提到&a…

通过ESP32读取I2C温湿度传感器项目:协议与代码实例

简介 在本项目中,我们将使用ESP32开发板读取I2C温湿度传感器的数据。我们将详细介绍I2C协议,并提供图文并茂的代码实例,帮助你快速上手。 项目流程 选择硬件:ESP32开发板、I2C温湿度传感器(如DHT12、HTU21D、SHT30等&a…

yii2 ActiveForm使用技巧

持续更新&#xff1a; 1、搜索输入框&#xff1a;form-inline <?php $form ActiveForm::begin([action > [index],method > get,options > [class > form-inline] &#xff08;增加此行代码&#xff09; ]); ?>

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

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

【嵌入式开发】STM32+USB的快速开发

目录 一、概述 二、STM32+USB开发流程 2.1 建立新的工程 2.2 系统配置 2.3 时钟配置 2.4 操作系统 2.5 选择USB配置 2.6 在USB_HOST中选择支持的子类(class) 2.7 Clock 配置 三、注意事项 3.1 应用驱动配置 3.2 上电调试基础工作 一、概述 USB作为大家耳熟能详的…

Spdlog日志库的安装配置与源码解析(Linux)

为什么使用日志库而不是控制台输出&#xff1f; 日志库通常提供了更丰富的功能&#xff0c;比如可以设置日志输出级别、输出到不同的目标&#xff08;比如控制台、文件、网络等&#xff09;&#xff0c;以及格式化输出等。 使用日志库可以使代码更易于维护。通过统一的日志接口…

【web2】jquary,bootstrap,vue

文章目录 1.jquary&#xff1a;选择器1.1 jquery框架引入&#xff1a;$("mydiv") 当成id选择器1.2 jquery版本/对象&#xff1a;$(js对象) -> jquery对象1.3 jquery的页面加载事件&#xff1a;$ 想象成 window.onload 1.4 jquery的基本选择器&#xff1a;$()里内容…

计算机网络知识点汇总(三)

1.2 计算机网络体系结构与参考模型 1.2.1 计算机网络分层结构 计算机网络的各层及其协议的集合称为网络的体系结构(Architecture)。换言之&#xff0c;计算机网络的体系结构就是这个计算机网络及其所应完成的功能的精确定义。要强调的是&#xff0c;这些功能究竟是用何种硬件…

探索FlowUs息流:个人和团队知识管理稳定解决方案|FlowUs稳定保障你的笔记安全无忧

FlowUs息流&#xff1a;稳定运营保障你的笔记安全无忧 在知识管理工具的选择上&#xff0c;稳定性是用户最关心的问题之一。FlowUs息流以其稳定的运营记录&#xff0c;为用户提供了一个可靠的工作环境。我们深知&#xff0c;一个知识管理平台的稳定性直接影响到团队的生产力和…

阿里云推出首个 AI 程序员!

AI圈最近又发生了啥新鲜事&#xff1f; 该栏目以周更频率总结国内外前沿AI动态&#xff0c;是快速了解AI发展趋势一个不错的方式&#xff0c;感兴趣的可以点击订阅合集以及时收到最新推送 DeepSeek Coder V2开源发布&#xff0c;首超GPT4-Turbo的代码能力 全球首个在代码、数…

告别繁琐邀请码,Xinstall助你轻松搭建高效App推广体系!

随着互联网流量的不断变迁&#xff0c;App推广和运营面临着前所未有的挑战。如何快速搭建起满足用户需求的运营体系&#xff0c;成为众多企业亟待解决的问题。在这个背景下&#xff0c;Xinstall凭借其强大的功能和灵活的解决方案&#xff0c;成为了App推广的得力助手。 一、传…

【IVIF】Equivariant Multi-Modality Image Fusion

2024CVPR Zixiang Zhao团队 分析透彻&#xff0c;方法耳目一新 统一融合架构 1、Motivation Our approach is rooted in the prior knowledge that natural imaging responses are equivariant to certain transformations 我们的方法根植于自然成像响应对于某些变换的等变性…

线程C++

#include <thread> #include <chrono> #include <cmath> #include <mutex> #include <iostream> using namespace std;mutex mtx; void threadCommunicat() {int ans 0;while (ans<3){mtx.lock();//上锁cout << "ans" <…

MongoDB数据库的安装和删除

MongoDB数据库的删除和安装 1、删除MongoDB数据库2、下载MongoDB数据库1)、自定义安装2)、注意可视化可以取消勾选 1、删除MongoDB数据库 没有下载过的&#xff0c;可以直接跳到下面的安装过程↓ 我们电脑中如果有下载过MongoDB数据库&#xff0c;要更换版本的话&#xff0c;其…

opencascade AIS_InteractiveContext源码学习5 immediate mode rendering 即时模式渲染

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…

安卓中使用ttf字体文件

官方文档中提供的方法要设备能访问google&#xff1f; 官方方法 直接下载字体的fft文件 我要使用的是lexend 需要的格式可以在里面搜索 使用下载的ttf文件 解压出来 可以单独使用static里面的&#xff0c;里面是直接的lexend的各种格式 但是我这里直接使用Lexend-Vari…

塞贝壳效应

塞贝克效应&#xff08;Seebeck effect&#xff09;&#xff0c;通常被称为第一热电效应&#xff0c;是由托马斯约翰塞贝克&#xff08;Thomas Johann Seebeck&#xff09;在1821年发现的一种热电现象。这个效应描述了当两种不同的导体或半导体在它们的接点处有温度差时&#x…