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.hqwc.cn/news/223182.html

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

相关文章

【李宏毅-元学习】

一、基本概念 1、元学习:学习如何学习,超参数调整 2、机器学习和元学习 机器学习:定义函数(未知参数)-定义损失函数-优化(最小化损失函数) 3、什么是元学习 机器学习通过三个步骤找到了学习算…

MySQL 8 手动安装后无法启动的问题解决

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,(…

前缀和与差分

1.前缀和: 前缀和是指某序列的前n项和 2.一维前缀和: s[i]a[1]a[2]...a[i],s[r]-s[l-1]a[l]...a[r] 3.前缀和运算 int sum[N],a[N] for(int i1;i<n;i){ sum[i]sum[i-1]a[i]; } 4.查询操作,假设要求序列中第l个数到第r个数的和 ,这样使得查询操作的时间复杂度为O&#…

动态网页从数据库取信息,然后展示。

把数据库的驱动放在bin目录下。 通过servlet 读取数据库的内容&#xff0c;生成session,然后跨页面传给展示页。 package src;import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSe…

C# 使用PanGu分词

写在前面 这是官方介绍&#xff1a;盘古分词是一个中英文分词组件。作者eaglet 曾经开发过KTDictSeg 中文分词组件&#xff0c;拥有大量用户。作者基于之前分词组件的开发经验&#xff0c;结合最新的开发技术重新编写了盘古分词组件。 盘古分词组件需要配合其字典文件使用&am…

【上海大学数字逻辑实验报告】一、基本门电路

一、 实验目的 熟悉TTL中、小规模集成电路的外形、管脚和使用方法&#xff1b;了解和掌握基本逻辑门电路的输入与输出之间的逻辑关系及使用规则。 二、 实验原理 实现基本逻辑运算和常用逻辑运算的单元电路称为逻辑门电路。门电路通常用高电平VH表示逻辑值“1”&#xff0c;…

【中间件】配置中心中间件intro

中间件middleware 内容管理 why use 配置中心配置中心feature配置中心develop主流配置中心Apollo浅谈 本文从理论上介绍一下服务化中服务治理系统中的配置中心的理论并浅析Apllo 配置在生产中是很关键的一个部分&#xff0c;cfeng在work中遇到几次配置问题引发的问题&#xff0…

根据密码构成规则检测密码字符串

从键盘输入密码字符串&#xff0c;程序根据给定密码构成规则检测并给出对应提示。 (笔记模板由python脚本于2023年11月27日 19:27:47创建&#xff0c;本篇笔记适合熟悉Python字符串str对象的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.…

[原创][1]探究C#多线程开发细节-“Thread类的简单使用“

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

部署Jenkins

一、介绍 Jenkins 、Jenkins概念 Jenkins是一个功能强大的应用程序&#xff0c;允许持续集成和持续交付项目&#xff0c;无论用的是什么平台。这是一个免费的源代码&#xff0c;可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允…

01-鸿蒙4.0学习之开发环境搭建 HelloWorld

HarmonyOS开发学习 1.环境配置 1.下载地址 开发工具&#xff1a;DevEco Studio 3.1.1 Release 下载地址 安装选择快捷方式 安装nodejs和Ohpm 安装SDK 选择同意Accept 检测8项目是否安装成功 2.创建项目 —— hello word

用python实现kindle文件转换pdf

上一篇文章讲了下用工具转换相关的格式&#xff1a;https://blog.csdn.net/weixin_42019349/article/details/134654695 今天来分享一个python库实现上述功能&#xff0c;实现文件转换自由 ^_^ 主角就是pypandoc库 # 安装方式 pip install pypandoc# pypandoc主要有三个函数…