首先,无论是做检测还是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)相关推荐

  1. 在OpenCV中基于深度学习的边缘检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 导读 分析了Canny的优劣,并给出 ...

  2. 使用深度学习进行自动车牌检测和识别

    作者 | 小白 来源 | 小白学视觉 介绍 在现代世界的不同方面,信息技术的大规模集成导致了将车辆视为信息系统中的概念资源.由于没有任何数据,自主信息系统就没有任何意义,因此需要在现实和信息系统之间改 ...

  3. 【深度学习】使用深度学习进行自动车牌检测和识别

    介绍 在现代世界的不同方面,信息技术的大规模集成导致了将车辆视为信息系统中的概念资源.由于没有任何数据,自主信息系统就没有任何意义,因此需要在现实和信息系统之间改革车辆信息.这可以通过人工代理或特殊智 ...

  4. C#中的深度学习:预处理硬币检测数据集

    在这里,我们将预处理硬币数据集,以供以后在监督学习模型中进行训练.在机器学习中预处理数据集通常涉及以下任务: 下载源1.5 MB 清理数据--通过平均周围数据的值或使用其他策略来填补丢失或损坏的数据留 ...

  5. 图像识别中的深度学习【香港中文大学王晓刚】

    深度学习发展历史 深度学习是近十年来人工智能领域取得的重要突破.它在语音识别.自然语言处理.计算机视觉.图像与视频分析.多媒体等诸多领域的应用取得了巨大成功.现有的深度学习模型属于神经网络.神经网络的 ...

  6. 图像识别中的深度学习

    图像识别中的深度学习 来源:<中国计算机学会通讯>第8期<专题> 作者:王晓刚 深度学习发展历史 深度学习是近十年来人工智能领域取得的重要突破.它在语音识别.自然语言处理.计算 ...

  7. OpenCV深度学习人脸识别示例——看大佬如何秀恩爱

    (欢迎关注"我爱计算机视觉"公众号,一个有价值有深度的公众号~) 提到OpenCV人脸识别,你是否还停留在Haar级联人脸检测+LBP特征人脸识别上?对于小规模数据库如何用Open ...

  8. 「每周CV论文推荐」 初学深度学习人脸关键点检测必读文章

    人脸关键点检测是人脸图像中重要的基石,今天给大家介绍入门深度学习人脸关键点检测必读的文章. 作者&编辑 | 言有三 1 DCNN Cascade 听这个名字就知道是一个很早期的,使用Casca ...

  9. 【每周CV论文推荐】 初学深度学习人脸关键点检测必读文章

    欢迎来到<每周CV论文推荐>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的. 人脸关键点检测是人脸图像中重要的基石,今天给 ...

最新文章

  1. 大连网络推广浅谈网站过度优化的表现以及解决方法!
  2. ASP.NET MVC WebAPI 资源整理
  3. Windows下Android平台搭建_1
  4. lync 安装后相关防病毒软件的设置
  5. 记一次oracle数据库连不上处理
  6. 神策数据罗彦博:如何正确使用漏斗分析提升转化?
  7. 分布式Session一致性概述
  8. 深入解析hostname
  9. 学习笔记:首次进行JUnit+Ant构建自动的单元测试(一)
  10. Keras-2 Keras Mnist
  11. PreparedStatement设置时间
  12. 【一周一算法】算法3:最常用的排序——快速排序
  13. 13. 永无止境:网站的伸缩性架构
  14. C语言实现快速排序算法
  15. java语言编译系统_请问C语言,JAVA之类的语言编译程序是属于 系统软件 还是 应用软件??...
  16. 【CentOS】如何在线安装pcre
  17. android实现系统状态栏的隐藏方法,Android隐藏系统状态栏(沉浸式状态栏)和设置状态栏颜色...
  18. 兰州大学计算机学院研究生院导师,兰州大学研究生导师介绍:赵志光
  19. 软考中级-软件设计师-视频学习时长记录
  20. 完美解决windows10系统磁盘占用100%并出现卡顿、假死无反应

热门文章

  1. 万吨黄金做后盾 央行数字货币正式拉开序幕
  2. Archlinux软件包管理
  3. 怎么编辑PDF文件,PDF去水印的方法
  4. Andoroid 11 开机广播处理超时导致第三方应用启动延迟
  5. 最早研究计算机网络目的的,最早研究计算机网络的目的是什么
  6. BT种子文件文件结构分析(转)
  7. 【系统问题】.NET Framework 3.5 安装错误
  8. 《Redis官方教程》Redis集群规范
  9. Win10搜索框无法使用怎么办?Win10搜索栏用不了的解决办法
  10. LeetCode:二叉树层序遍历