Opencv中的深度学习(人脸检测、车牌检测、DNN)
首先,无论是做检测还是DNN图像分类,所有的模型或配置文件都需要从以下三个网站中下载IT大牛们帮我们创建的各种分类器:
# 人脸检测
''' https://github.com/opencv/opencv/tree/master/data/haarcascades '''
# googlenet caffemodel权重文件
''' http://dl.caffe.berkeleyvision.org/ '''
# googlenet caffemodel配置文件
''' https://github.com/opencv/opencv_extra/tree/master/testdata/dnn '''
下面将会围绕三个主要例子进行讲解,代码可直接copy:
1. 人脸检测之哈尔(Haar)级联法:对完整脸部的有较好的检测效果,但对于不完整脸部识别效果差,这是传统算法的缺陷所在,泛化能力比较差。
函数参数:detectMultiScale(img,scaleFactor,minNeighbors)
scaleFactor:缩放尺寸。
minNeighbors:最小像素值。
代码案例(以视频流为例):
import cv2
# 创建Haar级联器
facer = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
while (1):# get a frameret, frame = cap.read()# 调用接口faces = facer.detectMultiScale(frame, 1.1, 5)for (x, y, w, h) in faces:cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)cv2.imshow('img', frame)if cv2.waitKey(1) & 0xFF == ord('q'):break
cap.release()
cv2.destroyAllWindows()
Haar级联器还可以对脸部中细节特征进行识别,比如对眼睛进行检测(以图像为例):
import cv2
# 创建Haar级联器
facer = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')
eyer = cv2.CascadeClassifier('./haarcascades/haarcascade_eye.xml')
img = cv2.imread('p3.png')
# 调用接口
faces = facer.detectMultiScale(img , 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 = eyer.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 += 1name = 'img'+str(i)cv2.imshow(name, ROI_img)
cv2.waitKey()
2. Haar+Tesseract 车牌检测:
- Haar级联器仅用于定位车牌的位置。精度还是很不错的。
- Tesseract用于提取其中的内容,但其精度要逊色与OCR。tesseract是Python的一个OCR(光学字符识别)库。tesseract的exe下载路径为:https://github.com/UB-Mannheim/tesseract/wiki 安装成功后会在相应磁盘下有Tesseract-OCR文件夹。
- 代码案例(以图像流为例):
import pytesseract # 创建Haar级联器 carer = cv2.CascadeClassifier('./haarcascades/haarcascade_russian_plate_number.xml') img = cv2.imread('chinacar.jpeg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 调用接口 cars = carer.detectMultiScale(gray, 1.1, 3) for (x,y,w,h) in cars:cv2.rectangle(img, (x,y), (x+w, y+h), (0,0,255), 2) # 提取ROI roi = gray[y:y+h, x:x+w] # 二值化 ret, roi_bin = cv2.threshold(roi, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # 文字识别 pytesseract.pytesseract.tesseract_cmd = r"E:\Tesseract_OCR\tesseract.exe" text = pytesseract.image_to_string(roi, lang='chi_sim+eng',config='--psm 8 --oem 3') print(text) cv2.putText(img, text, (20,100), cv2.FONT_HERSHEY_SIMPLEX, 2, (0,255,255), 3) cv2.imshow('img', img) cv2.waitKey()
3. DNN图像分类
Opencv中的DNN尽可以支持检测,但不能训练。
DNN使用步骤:
读取模型,得到网络结构:readNet(model,[config])
读取数据(图片或视频)。
将图片转成张量:blobFromImage(image,scalefactor,size,mean,swapRB,crop)
送入网络:net.setInput(blob)
模型输出结果:net.forward()
使用案例:
# 导入模型 config = "./model/bvlc_googlenet.prototxt" 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() idxs = np.argsort(r[0])[::-1][:5]# 分类结果展示 path = './model/synset_words.txt' with open(path, 'rt') as f:classes = [x[x.find(" ")+1:]for x in f] for (i, idx) in enumerate(idxs): # 将结果展示在图像上if i == 0:text = "Label: {}, {:.2f}%".format(classes[idx],r[0][idx] * 100)cv2.putText(img, text, (5, 25), cv2.FONT_HERSHEY_SIMPLEX,0.7, (0, 0, 255), 2) # 显示图像 cv2.imshow("Image", img) cv2.waitKey(0)
Opencv中的深度学习(人脸检测、车牌检测、DNN)相关推荐
- 在OpenCV中基于深度学习的边缘检测
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 导读 分析了Canny的优劣,并给出 ...
- 使用深度学习进行自动车牌检测和识别
作者 | 小白 来源 | 小白学视觉 介绍 在现代世界的不同方面,信息技术的大规模集成导致了将车辆视为信息系统中的概念资源.由于没有任何数据,自主信息系统就没有任何意义,因此需要在现实和信息系统之间改 ...
- 【深度学习】使用深度学习进行自动车牌检测和识别
介绍 在现代世界的不同方面,信息技术的大规模集成导致了将车辆视为信息系统中的概念资源.由于没有任何数据,自主信息系统就没有任何意义,因此需要在现实和信息系统之间改革车辆信息.这可以通过人工代理或特殊智 ...
- C#中的深度学习:预处理硬币检测数据集
在这里,我们将预处理硬币数据集,以供以后在监督学习模型中进行训练.在机器学习中预处理数据集通常涉及以下任务: 下载源1.5 MB 清理数据--通过平均周围数据的值或使用其他策略来填补丢失或损坏的数据留 ...
- 图像识别中的深度学习【香港中文大学王晓刚】
深度学习发展历史 深度学习是近十年来人工智能领域取得的重要突破.它在语音识别.自然语言处理.计算机视觉.图像与视频分析.多媒体等诸多领域的应用取得了巨大成功.现有的深度学习模型属于神经网络.神经网络的 ...
- 图像识别中的深度学习
图像识别中的深度学习 来源:<中国计算机学会通讯>第8期<专题> 作者:王晓刚 深度学习发展历史 深度学习是近十年来人工智能领域取得的重要突破.它在语音识别.自然语言处理.计算 ...
- OpenCV深度学习人脸识别示例——看大佬如何秀恩爱
(欢迎关注"我爱计算机视觉"公众号,一个有价值有深度的公众号~) 提到OpenCV人脸识别,你是否还停留在Haar级联人脸检测+LBP特征人脸识别上?对于小规模数据库如何用Open ...
- 「每周CV论文推荐」 初学深度学习人脸关键点检测必读文章
人脸关键点检测是人脸图像中重要的基石,今天给大家介绍入门深度学习人脸关键点检测必读的文章. 作者&编辑 | 言有三 1 DCNN Cascade 听这个名字就知道是一个很早期的,使用Casca ...
- 【每周CV论文推荐】 初学深度学习人脸关键点检测必读文章
欢迎来到<每周CV论文推荐>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的. 人脸关键点检测是人脸图像中重要的基石,今天给 ...
最新文章
- 大连网络推广浅谈网站过度优化的表现以及解决方法!
- ASP.NET MVC WebAPI 资源整理
- Windows下Android平台搭建_1
- lync 安装后相关防病毒软件的设置
- 记一次oracle数据库连不上处理
- 神策数据罗彦博:如何正确使用漏斗分析提升转化?
- 分布式Session一致性概述
- 深入解析hostname
- 学习笔记:首次进行JUnit+Ant构建自动的单元测试(一)
- Keras-2 Keras Mnist
- PreparedStatement设置时间
- 【一周一算法】算法3:最常用的排序——快速排序
- 13. 永无止境:网站的伸缩性架构
- C语言实现快速排序算法
- java语言编译系统_请问C语言,JAVA之类的语言编译程序是属于 系统软件 还是 应用软件??...
- 【CentOS】如何在线安装pcre
- android实现系统状态栏的隐藏方法,Android隐藏系统状态栏(沉浸式状态栏)和设置状态栏颜色...
- 兰州大学计算机学院研究生院导师,兰州大学研究生导师介绍:赵志光
- 软考中级-软件设计师-视频学习时长记录
- 完美解决windows10系统磁盘占用100%并出现卡顿、假死无反应