OpenCV(12)-OpenCV的机器学习
OpenCV的机器学习
基本概念
计算机视觉是机器学习的一种应用,而且是最有价的应用
人脸识别
- 哈尔(Haar)级联方法
- 深度学习方法(DNN)
Haar人脸识别方法
- 哈尔(Haar)级联方法是专门为解决人脸识别而推出的,在深度学习还不流行时,哈尔已可以商用
- Haar人脸识别步骤:
- 创建Haar级联器
- 导入图片并将其灰度化
- 调用detectMultiScale方法进行人脸识别
- detectMultiScale(img, double scaleFactor = 1.1, int minNeighbors = 3)
- scaleFactor缩放比例
- minNeighbors最小像素值
#创建Haar级联器
facer = cv2.CascadeClassifier('训练文件')
#导入图片并将其灰度化
img = cv2.imread('p.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#调用detetMultiScale方法进行人脸识别
#返回值faces是[[x,y,h,w]]数组
faces = facer.detectMultiScale(gray, 1.1, 3)for(x,y,w,h) in faces:cv2.rectangle(img,(x,y),(x+w, y+h),(0,0,255),2)
Haar其他脸部特征的检测
眼鼻口等
在检测出的人脸上再检测眼睛,能提高准确度
Haar+Tesseract车牌识别
车牌识别具体步骤
- 通过Haar定位车牌的大体位置
- 对车牌进行预处理
- 对车牌进行二值化处理
- 进行形态学处理
- 滤波去除噪点
- 缩放
- 调用Tesseract进行文字识别
#引入Tesseract库
import pytesseract
#创建Haar级联器
flate = cv2.CascadeClassifier('训练文件')
#导入图片并将其灰度化
img = cv2.imread('p.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#车牌定位
flates = plate.detectMultiScale(gray, 1.1, 3)for(x,y,w,h) in flates:cv2.rectangle(img,(x,y),(x+w, y+h),(0,0,255),2)#对获取的车牌进行预处理
#1.提取ROil
roi = gray[y:y+h, x:x+w]
#2.进行二值化
ret, roi_bin = cv2.threshold(roi, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)#lang指定语言,多个语言用+号连接
#config参数配置 分段形式常选8 11 引擎模式 常选3默认
pytesseract.image_to_string(roi, lang = 'chi_sim+eng', config = '--psm 8 --oem 3')
深度学习基础知识
- 深度学习是计算机视觉最为重要的方法
- 深度学习简史
- 深度学习很早就被提出,但一直停滞不前
- 2011,微软在语音识别上使用,取得了突破
- 2012,DNN在图像识别领域取得惊人的效果,在ImageNet评测的错误率从26%降低到15%
- 2016,AlphaGo击败人类,引起世界震惊
深度学习网络
- DNN (Deep Neural Netword) 深度神经网络
- RNN (Recurrent Neural Netword) 循环神经网络
- CNN (Convolutional Neural Netword) 卷积神经网络
- RNN主要用途
- 语音识别
- 机器翻译
- 生成图像描述
CNN主要用途
- 图片分类、检索
- 目标定位检测
- 目标分割
- 人类识别
几种CNN网络实现
- LetNet,1998,第一代CNN,28*28手写字
- AlexNet,2012,ImageNet比赛的冠军
- VGG、GoogleLeNet、ResNet
几种CNN目标检测网络实现
- RCNN、Fast RCNN、Fast RCNN
- SSD(Single Shot Detectors)
- YOLO、YOLOv2…YOLOv5
模型训练
深度学习库
- TensorFlow,Google
- caffe->caffe2->torch(pytorch) 贾扬清
- MXNet,Apache
训练数据集
- MNIST、Fashion-MNIST 手写字母
- VOC 举办挑战赛时的数据集,2012年后不再举办
- COCO,用于目标检测的大型数据集
- ImageNet
训练模型
- Tf训练出的模型是.pb文件
- Pytorch训练出的模型是.pth文件
- Caffe训练出的模型是.caffe文件
- ONNX开放性神经交换格式训练出的模型是.onnx文件
OpenCV对DNN的支持
- OpenCV 3.3 将DNN转正
- OpenCV只能使用DNN,不能训练DNN模型
OpenCV支持的模型
- Tensor
- Flowtorch(pytorch)
- Caffe
- DarkNet
OpenCV使用DNN
- DNN使用步骤
- 读取模型,并得到深度神经网络
- 读取图片/视频
- 将图片转成张量,送入深度神经网络
- 进行分析,并得到结果
导入模型
- readNetFromTensorflow(model, config)
- model 训练出的模型文件
- config 对网络模型的描述,如输入规格,尺寸,宽高,网络的每一层级及其作用
- readNetFromCaffe(config, model)
- readNetDarknet(config, model), YOLO
- readNet(model, [config, [framework]])
blobFromImage函数读取图像并将图像转成张量
- 将图像转成张量
- blobFromImage(image,scalefactor = 1.0, size = Size(), mean = Scalar(), swapRB = false, crop = false…)
- scalefactor 缩放因子
- size 指定图像尺寸
- mean 平均差值 RGB三元组 消除输入图像中光照的变化 (103, 116, 123)
- swapRB RB是否进行交换 根据不同模型要求设置
- crop 是否以图像的中心点为中心,对图像进行裁剪
将张量送入网络并执行
- net.setInput(blob) 将张量塞进网络
- net.forward() 让网络自动对图片进行分析
[实战]物体分类
#导入模型,并得到深度神经网络
net = cv2.readNetFromCaffe(config, model)
#读取图片,并将将图片转成张量
blob = dnn.blobFromImage(img, 1.0, (224,224), (104, 117, 123))
#将张量送入深度神经网络中,并进行预测
net.setInput(blob)
r = net.forward()
#得到结果,显示
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])
OpenCV(12)-OpenCV的机器学习相关推荐
- Day 12: OpenCV —— Java开发者的人脸检测
今天我准备学习如何用Java来进行人脸检测.人脸检测有助于在任何数字图像上识别人脸,在做了一些研究后,我发现OpenCV的库可以帮我检测图像中的人脸.不过,我没能找到一个完整的通过Java使用Open ...
- 【OpenCV】OpenCV介绍及C++环境配置
文章目录 OpenCV介绍 Windows OpenCV环境配置 OpenCV介绍 OpenCV是一个跨平台计算机视觉和机器学习软件库,可以运行在Linux.Windows.Android和Mac O ...
- 【OpenCV学习】 《OpenCV3编程入门》--毛星云 01 邂逅OpenCV(OpenCV基本概念与基本架构) ROS系统上的运用(python实现)
对 <OpenCV3编程入门>第一章的学习笔记:理解什么是计算机视觉,什么是OpenCV,以及其中的联系等等. PS:此书为2014年出版,opencv的版本和接口也与现在有些不一致了,作 ...
- 如何在ARM开发板上从源码编译安装OpenCV和OpenCV contrib
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文主要介绍如何在ARM开发板上从源码编译安装OpenCV和OpenCV contrib. OpenC ...
- CV之OpenCV:OpenCV库涉及概念、常见函数、常用案例、HALCON软件简介之详细攻略
CV之OpenCV:OpenCV库涉及概念.常见函数.常用案例.HALCON软件简介之详细攻略 目录 CV入门 OpenCV使用过程 1.基本教程 OpenCV的相关概念 1.基本概念
- 12 聚类模型 -- 机器学习基础理论入门
12 聚类模型 – 机器学习基础理论入门 4.1 聚类问题介绍 定义 聚类分析又称群分析,目标时将样本划分为紧密关系的子集或簇 应用 聚类分析在实际中应用非常广泛,如:市场细分.社交圈分析.天体数据分 ...
- vs2017python配置opencv_[opencv +VS2017] opencv、vs2017安装配置,环境搭建
文章目录 [opencv] 3.4.1下载安装 一.前言 二.说明 三.下载opencv 3.1 获取链接 3.2 下载结果 四.安装opencv 五.配置opencv环境 六.vs2017 6.1下 ...
- [opencv +VS2017] opencv、vs2017安装配置,环境搭建
文章目录 [opencv] 3.4.1下载安装 一.前言 二.说明 三.下载opencv 3.1 获取链接 3.2 下载结果 四.安装opencv 五.配置opencv环境 六.vs2017 6.1下 ...
- OpenCV之ml 模块. 机器学习:支持向量机(SVM)介绍 支持向量机对线性不可分数据的处理
支持向量机(SVM)介绍 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 CvSVM::train 训练一个SVM分类器, 以及用 CvSVM::predict 测试训练结果. 什么是支持向 ...
最新文章
- Ubuntu 中的 dpkg 安装deb、删除deb、显示已安装包列表、解压deb文件、显示deb包内文件列表、配置deb软件包
- 【组队学习】【30期】时间序列分析
- Spring Boot 解决跨域问题的 3 种方案
- 浏览器事件捕获冒泡以及阻止冒泡
- 指定输出路径_新手Python必须知道的文件路径和变量命名技巧
- python打印星星居中_python实现while循环打印星星的四种形状
- Oracle MySQL社区版与Oracle MySQL企业版特征对比
- android 的 sp 智能指针用法介绍 sp wp
- leetcode954. Array of Doubled Pairs
- 手机QQ Hybrid 的架构演进
- 令人敬畏的泰格伍兹 万维钢_令人敬畏的桌面壁纸:Windows 7版
- Window系统电脑登录过个微信方法,微信多开(实测)
- java写 狐狸找兔子_狐狸找兔 算法分析
- 环境工程部门怎么实施自动化软件学习时间更多
- J: Participate in E-sports [大数牛顿迭代判断是否是平方数]
- Java的静态类详解
- 大学生闲置物品交易平台UML建模
- 微软服务器搭建ngrok,ngrok搭建(Windows服务端+Windows客户端)
- 【答学员问】34岁想转行做it还可以吗?
- 三月的天,小孩子的脸
热门文章
- 某运营商电子运维自动签收脚本
- STM32学习笔记:FLASH读写之二
- [转]四大开源商业智能平台大比拼[http://database.ctocio.com.cn/analysis/289/7610289.shtml]
- 计算机网络 性能指标 非性能指标
- HttpSession解析
- 【转】福昕幻影(Foxit Phantom)
- Unity3D中引用Spine2D动画研究学习(一)
- html绘制坐标曲线,Word2010中怎么绘制曲线坐标图?
- 白帽子讲web安全概览
- 内网如何下载docker镜像