OpenCV完结篇——计算机视觉(人脸识别 || 车牌识别)

文章目录

  • Haar人脸识别方法
  • Haar识别眼鼻口
  • Haar+Tesseract进行车牌识别
  • 深度学习基础知识
  • dnn实现图像分类

在这里插入图片描述
在这里插入图片描述

Haar人脸识别方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
scaleFactor调整哈尔级联器的人脸选框使其能框住人脸
在这里插入图片描述
官方教程指路
在这里插入图片描述
每个特征都是通过从黑色矩形下的像素总和减去白色矩形下的像素总和获得的单个值
在这里插入图片描述
级联器模型文件位置

# -*- coding: utf-8 -*-
import cv2
import numpy as npcv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,创建Haar级联器
facer = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')#第二步,导入人脸识别的图片并将其灰度化
img = cv2.imread('E:/pic/Pic/11.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#第三步,进行人脸识别
#[[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, 255, 0), 3)cv2.imshow('img', img)
if cv2.waitKey(0) & 0xff == 27:cv2.destroyAllWindows()

在这里插入图片描述

Haar识别眼鼻口

# -*- coding: utf-8 -*-
import cv2
import numpy as npcv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,创建Haar级联器
facer = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
eye = cv2.CascadeClassifier('./haarcascade_eye.xml')
mouse = cv2.CascadeClassifier('./haarcascade_mcs_mouth.xml')#第二步,导入人脸识别的图片并将其灰度化
img = cv2.imread('E:/pic/Pic/11.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#第三步,进行人脸识别
#[[x,y,w,h]]
faces = facer.detectMultiScale(gray, 1.1, 5)
eyes = eye.detectMultiScale(gray, 1.1, 5)
mouses = mouse.detectMultiScale(gray, 1.1, 5)for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)for (x, y, w, h) in eyes:cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 3)# for (x, y, w, h) in mouses:
#     cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 255), 3)cv2.imshow('img', img)
if cv2.waitKey(0) & 0xff == 27:cv2.destroyAllWindows()

在这里插入图片描述
识别嘴就会不精确了

# -*- coding: utf-8 -*-
import cv2
import numpy as npcv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,创建Haar级联器
facer = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
eye = cv2.CascadeClassifier('./haarcascade_eye.xml')
mouse = cv2.CascadeClassifier('./haarcascade_mcs_mouth.xml')#第二步,导入人脸识别的图片并将其灰度化
img = cv2.imread('E:/pic/Pic/11.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#第三步,进行人脸识别
#[[x,y,w,h]]
faces = facer.detectMultiScale(gray, 1.1, 5)
eyes = eye.detectMultiScale(gray, 1.1, 5)
mouses = mouse.detectMultiScale(gray, 1.1, 5)for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)for (x, y, w, h) in eyes:cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 3)for (x, y, w, h) in mouses:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 255), 3)cv2.imshow('img', img)
if cv2.waitKey(0) & 0xff == 27:cv2.destroyAllWindows()

在这里插入图片描述
识别鼻子

# -*- coding: utf-8 -*-
import cv2
import numpy as npcv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,创建Haar级联器
facer = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
eye = cv2.CascadeClassifier('./haarcascade_eye.xml')
mouse = cv2.CascadeClassifier('./haarcascade_mcs_mouth.xml')
nose = cv2.CascadeClassifier('./haarcascade_mcs_nose.xml')#第二步,导入人脸识别的图片并将其灰度化
img = cv2.imread('E:/pic/Pic/11.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#第三步,进行人脸识别
#[[x,y,w,h]]
faces = facer.detectMultiScale(gray, 1.1, 5)
eyes = eye.detectMultiScale(gray, 1.1, 5)
mouses = mouse.detectMultiScale(gray, 1.1, 5)
noses = nose.detectMultiScale(gray, 1.1, 5)for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)for (x, y, w, h) in eyes:cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 3)for (x, y, w, h) in mouses:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 255), 3)for (x, y, w, h) in noses:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 3)cv2.imshow('img', img)
if cv2.waitKey(0) & 0xff == 27:cv2.destroyAllWindows()

在这里插入图片描述
只要不测口,还是比较准确的

# -*- coding: utf-8 -*-
import cv2
import numpy as npcv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,创建Haar级联器
facer = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
eye = cv2.CascadeClassifier('./haarcascade_eye.xml')
mouse = cv2.CascadeClassifier('./haarcascade_mcs_mouth.xml')
nose = cv2.CascadeClassifier('./haarcascade_mcs_nose.xml')#第二步,导入人脸识别的图片并将其灰度化
img = cv2.imread('E:/pic/Pic/11.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#第三步,进行人脸识别
#[[x,y,w,h]]
faces = facer.detectMultiScale(gray, 1.1, 5)
# eyes = eye.detectMultiScale(gray, 1.1, 5)
# mouses = mouse.detectMultiScale(gray, 1.1, 5)
# noses = nose.detectMultiScale(gray, 1.1, 5)i = 0for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)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), (255, 255, 0), 3)noses = nose.detectMultiScale(roi_img, 1.1, 5)for (x, y, w, h) in noses:cv2.rectangle(roi_img, (x, y), (x + w, y + h), (0, 0, 255), 3)# mouses = mouse.detectMultiScale(roi_img, 1.1, 5)# for (x, y, w, h) in mouses:#     cv2.rectangle(roi_img, (x, y), (x + w, y + h), (0, 255, 255), 3)# i += 1# winname = 'face' + str(i)# cv2.imshow(winname, roi_img)# for (x, y, w, h) in mouses:
#     cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 255), 3)# for (x, y, w, h) in noses:
#     cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 3)cv2.imshow('img', img)
if cv2.waitKey(0) & 0xff == 27:cv2.destroyAllWindows()

在这里插入图片描述
测口准确度太低!!!

# -*- coding: utf-8 -*-
import cv2
import numpy as npcv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,创建Haar级联器
facer = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
eye = cv2.CascadeClassifier('./haarcascade_eye.xml')
mouse = cv2.CascadeClassifier('./haarcascade_mcs_mouth.xml')
nose = cv2.CascadeClassifier('./haarcascade_mcs_nose.xml')#第二步,导入人脸识别的图片并将其灰度化
img = cv2.imread('E:/pic/Pic/11.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#第三步,进行人脸识别
#[[x,y,w,h]]
faces = facer.detectMultiScale(gray, 1.1, 5)
# eyes = eye.detectMultiScale(gray, 1.1, 5)
# mouses = mouse.detectMultiScale(gray, 1.1, 5)
# noses = nose.detectMultiScale(gray, 1.1, 5)i = 0for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)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), (255, 255, 0), 3)noses = nose.detectMultiScale(roi_img, 1.1, 5)for (x, y, w, h) in noses:cv2.rectangle(roi_img, (x, y), (x + w, y + h), (0, 0, 255), 3)mouses = mouse.detectMultiScale(roi_img, 1.1, 5)for (x, y, w, h) in mouses:cv2.rectangle(roi_img, (x, y), (x + w, y + h), (0, 255, 255), 3)# i += 1# winname = 'face' + str(i)# cv2.imshow(winname, roi_img)# for (x, y, w, h) in mouses:
#     cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 255), 3)# for (x, y, w, h) in noses:
#     cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 3)cv2.imshow('img', img)
if cv2.waitKey(0) & 0xff == 27:cv2.destroyAllWindows()

在这里插入图片描述

Haar+Tesseract进行车牌识别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装很简单,这里贴一个安装教程

配置出现问题的,可以看看这篇博客

测试一下,识别文字还是很准的!!!
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as np# cv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,创建Haar级联器
carplate = cv2.CascadeClassifier('./haarcascade_russian_plate_number.xml')#第二步,导入带车牌的图片并将其灰度化
img = cv2.imread('./chinacar.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#第三步,进行车牌定位
#[[x,y,w,h]]
carplates = carplate.detectMultiScale(gray, 1.1, 5)for (x, y, w, h) in carplates:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)cv2.imshow('img', img)
if cv2.waitKey(0) & 0xff == 27:cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as np# cv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,创建Haar级联器
carplate = cv2.CascadeClassifier('./haarcascade_russian_plate_number.xml')#第二步,导入带车牌的图片并将其灰度化
img = cv2.imread('./chinacar.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#第三步,进行车牌定位
#[[x,y,w,h]]
carplates = carplate.detectMultiScale(gray, 1.1, 5)for (x, y, w, h) in carplates:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)# 对获取到的车牌进行预处理
# 1.提取ROI
roi = gray[y: y+h, x:x+w]
# 2.进行二值化
ret, roi_bin = cv2.threshold(roi, 10, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)cv2.imshow('img', img)
cv2.imshow('roi_bin', roi_bin)
if cv2.waitKey(0) & 0xff == 27:cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as np# 引入tesseract库
import pytesseract# cv2.namedWindow('img', cv2.WINDOW_NORMAL)
#第一步,创建Haar级联器
carplate = cv2.CascadeClassifier('./haarcascade_russian_plate_number.xml')#第二步,导入带车牌的图片并将其灰度化
img = cv2.imread('./chinacar.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#第三步,进行车牌定位
#[[x,y,w,h]]
carplates = carplate.detectMultiScale(gray, 1.1, 5)for (x, y, w, h) in carplates:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)# 对获取到的车牌进行预处理
# 1.提取ROI
roi = gray[y: y+h, x:x+w]
# 2.进行二值化
ret, roi_bin = cv2.threshold(roi, 10, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)pytesseract.pytesseract.tesseract_cmd = r'D:\Program Files\Tesseract_OCR\tesseract.exe'
print(pytesseract.image_to_string(roi, lang='chi_sim+eng', config='--psm 8 --oem 3'))cv2.imshow('img', img)
cv2.imshow('roi_bin', roi_bin)
if cv2.waitKey(0) & 0xff == 27:cv2.destroyAllWindows()

在这里插入图片描述
具体实现还需要进一步优化!!!

深度学习基础知识

深度学习是计算机视觉最为重要的方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

dnn实现图像分类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
from cv2 import dnn
import numpy as np# 1.导入模型,创建神经网络
# 2.读取图片,转成张量
# 3.将张量输入到网络中,并进行预测
# 4.得到结果,显示# 导入模型,创建神经网络
config = "./bvlc_googlenet.prototxt"
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()# 读取类目
classes = []
path = './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 list(range(0, 3)):z[i] = np.where(r[0] == order[i])[0][0]print('No.', i + 1, ' matches:', classes[z[i]], end='')print('category row is at:', z[i] + 1, ' ', 'posibility:', order[i])

在这里插入图片描述
在这里插入图片描述

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

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

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

相关文章

代理IP可以用于哪些实际场景?遇到问题如何解决

随着互联网的普及和网络应用的广泛使用,代理IP已成为许多人工作和生活中不可或缺的一部分。代理IP可以用于多种实际场景,并在遇到问题时提供有效的解决方案。下面将详细介绍代理IP的实际应用场景及遇到问题时的解决方法。 一、代理IP的实际应用场景 1. 网…

开源运维监控系统-Nightingale(-夜莺)应用实践(未完)

一、前言 某业务系统因OS改造,原先的Zabbix监控系统推倒后未重建,本来计划用外部企业内其他监控系统接入,后又通知需要自建才能对接,考虑之前zabbix的一些不便,本次计划采用一个类Prometheus的监控系统,镜调研后发现Nightingale兼容Prometheus,又有一些其他功能增强,又…

Docker Compose;docker-compose;docker compose

(一) Docker Compose | 菜鸟教程 --> --> --> -->

ESP32-Web-Server编程-建立第一个网页

ESP32-Web-Server编程-建立第一个网页 HTTP 简述 可能你每天都要刷几个短视频,打开几个网页来娱乐一番。当你打开一个网络上的视频或者图片时,其实际发生了下面的流程: 其中客户端就是你的浏览器啦,服务器就是远程一个存放视频或…

查询word文档的GUID码

通过word中自带的VBA脚本,Application.ProductCode 方法返回全球唯一标识符 (GUID)。 (不同word查出来的码都一样,貌似微软把这个接口功能给禁了) 语法 expression. ProductCode 表达式是必需的。 一个代表 Application 对象的…

【JAVA学习笔记】72 - 满汉楼 - 餐饮管理系统

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter26 一、需求说明 满汉楼项目功能多,界面复杂,涉及到复杂的awt和swing技术和事件编程,做如下调整: 1.去掉界面和事件处理(工作中使用很少),使…

数据库之存储过程

优点 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度,效率要比T-SQL语句高。当对数据库进行复杂操作时,可将此复杂操作用存储过程封…

如何在VS2022上的MFC项目中操作Excel(VS2010、VS2012、VS2015、VS2017、VS2019使用方法一样)

先决条件 本机安装office2003、2007、2010、2016及以后版本,总之必须安装office导入Excel库文件,导入方式可参考: 如何在vs2017及以前版本(vs2010、vs2015)上添加 添加类型库中的MFC类如何在vs2019及以后版本(如vs2022)上添加 添加ActiveX控…

flutter布局详解及代码示例(上)

布局 基本布局 Row(水平布局):在水平(X轴)方向上排列子widget的列表。Column(垂直布局):在垂直(Y轴)方向上排列子widget的列表。Stack(可重叠布…

有一种浪漫,叫接触Linux

大家好,我是五月。 嵌入式开发 嵌入式开发产品必须依赖硬件和软件。 硬件一般使用51单片机,STM32、ARM,做成的产品以平板,手机,智能机器人,智能小车居多。 软件用的当然是以linux系统为蓝本&#xff0c…

顺子日期(14)

顺着日期 public class Main {public static void main(String[] args) {int res 0;//2022年int[] days new int[] {31,28,31,30,31,30,31,31,30,31,30,31};//31,28,31,30,31,30,31,31,30,31,30,31//一三五七八十腊//构造2022年每一天的日期yyyymmddStringBuffer date new…

Redis-性能优化

Redis缓存设计 缓存与数据库双写不一致 在大并发下,同时操作数据库与缓存会存在数据不一致性问题 1、双写不一致情况,线程1写数据库,[线程2写数据库,并更新缓存],线程1更新缓存,此时旧缓存覆盖了新的 2…

json_encode() 返回 false

当 json_encode() 返回 false 时,表示 JSON 编码过程失败。这通常是因为要编码的数据包含了无效的 UTF-8 字符,而默认情况下 json_encode() 会对无效的 UTF-8 字符进行严格的处理 通过添加 JSON_INVALID_UTF8_IGNORE 选项,你告诉 json_encod…

Linux详解——常用命令(一)

目录 一、Linux中命令格式: 1.ls 命令 2.操作文件命令 3.网络相关命令 4.tar命令 5.systemctl 服务命令 一、Linux中命令格式: 命令 -选项 参数 如: ls -l /usr 注意:在linux中命令严格区分大小写 1.ls 命令 ls 显示文件和目录列表 (list) 常用参数: …

Miniconda虚拟环境安装(chatglm2大模型安装步骤二)

1.服务器配置 服务器系统:Centos7.9 x64 显卡:RTX3090 (24G) 2.安装环境 2.1 检查conda是否安装 输入命令:conda -V 如果显示conda 4.7.12,说明已经有不需要安装 2.2 安装Miniconda 在家目录建一个mi…

【计算机网络笔记】ARP协议

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

3D点云目标检测:VoxelNex解读(带源码/未完)

VoxelNext 通用vsVoxelNext一、3D稀疏卷积模块1.1、额外的两次下采样1.2、稀疏体素删减 二、高度压缩三、稀疏池化四、head五、waymo数据集训练六、训练自己的数据集bug修改 通用vsVoxelNext 一、3D稀疏卷积模块 1.1、额外的两次下采样 使用通用的3D sparse conv,…

window关于下载anaconda 2023年以后的版本,jupyter notebook闪退,没有内核的问题

这种问题的解决办法: 下载anaconda较早版本,比如我下载的是:2022年5月的版本。 下载之后,打开jupyter好像也会没有内核和闪退。 下面解决步骤: 1.注意:打开anaconda powershell prompt 2.重点来了&#xf…

【Qt】获取当前系统用户名:9种获取方式

目的 有时&#xff0c;在项目开发中&#xff0c;需要显示或者用到当前系统用户名信息。以下是几种获取系统用户名解决方案&#xff1a; 解决方案 1. 使用QDir::home() #include <QApplication> #include <QDir> #include <QDebug>int main(int argc, cha…

网工笔记(五):HTTP协议

当工作中遇到关于网络7层协议的问题时&#xff0c;时常会出现一个尴尬的局面&#xff0c;开发的同学认为这是网络组的问题&#xff0c;而网工的同学却认为是应用上的问题应该由开发组负责。今天希望通过这篇文章给网络7层做一个简单的说明。 关于七层协议的学习主要就是HTTP。…