OpenCV(12)-OpenCV的机器学习

news2024/11/27 14:52:08

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])

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

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

相关文章

Android 深入系统完全讲解(21)

关键性 EGLSurface 代码位置 继续再看看,代码跑到 C 里面去了。 然后关键点: 获取本地窗口,创建 Surface,然后 toEGLHandle 进行包裹,变成 EGL 上下文。 EGLSurface 。 绘制的设计本质逻辑 在这里就回归一点&#xff…

Unity学习笔记--File.ReadAllLines和File.ReadAllText的使用以及注意事项(一定要看到最后!!!)

目录前言一、File.ReadAllLines参数返回例子二、File.ReadAllText参数返回例子注意事项可能出现的问题总结前言 最近在做文件存储以及读取的时候,需要用到C#给我们提供的类:File 具体使用方法可以看官方文档:C# File 类 这篇文章只会说File.…

深度学习基础理念(一)

文章目录1. 机器学习 Machine Learing机器学习类别2. 机器如何找函数深度学习输入类型和输出类型机器如何找函数的1. 机器学习 Machine Learing 什么是机器学习,顾名思义 机器 拥有会学习的能力,机器学习就是让机器具备能够找函数的能力 机器学习就是找…

【C语言课程设计】通讯录(1.0版本)

前言 相信各位对于通讯录都不是很陌生吧。通讯录我们在学校的大作业,课程设计经常会去使用它。那么今天我们将使用C语言来实现一个简单的通讯录。 目录 前言 一、通讯录的需求 二、工程文件的创建 三、通讯录的声明和定义 四、通讯录各函数的声明和定义 五、通…

Mysql入门技能树-数据查询-练习篇

SELECT 下列 SQL 语句,哪一项不合法? 答案是:C select now(),3.14 now() |3.14| ----------------------- 2023-01-16 16:47:04|3.14|MySQL查询表中所有的数据可以通过“SELECT * 通配符”或者“SELECT 所有字段”实现。 SE…

hadoop3.x源码编译及cmake的问题解决:CMake failed with error code 1

一、准备工作 基础环境:centos7 (1)官方源码中编译之前对基础环境及版本的要求(重点是红色部分) Requirements: * Unix System* JDK 1.8 * Maven 3.3 or later * ProtocolBuffer 2.5.0 * CMake 3.1 or newer (if com…

OSCP-Vulnhub靶机记录-Hacker_Kid-v1.0.1

Vulnhub靶机记录-Hacker_Kid-v1.0.1介绍&安装信息收集页面源代码DIG信息收集xxe漏洞探测9999端口SSTI模板注入发现具有Capabilities特殊操作权限的程序原理介绍&安装 靶机名称:Hacker_Kid-v1.0.1 靶机难度:中等 虚拟机环境:此靶机推…

【Linux】线程互斥

目录🌈前言🌸1、Linux线程互斥🍧1.1、线程间互斥相关背景概念🍨1.2、互斥量(锁)相关背景🍯1.3、互斥量(锁)相关API🍯1.3.1、初始化和销毁互斥锁🍰1.3.2、互斥量加锁和解锁🍲1.3.3、互…

Python爬虫403错误的解决方案

前言程序使用一段时间后会遇到HTTP Error 403: Forbidden错误。 因为在短时间内直接使用Get获取大量数据,会被服务器认为在对它进行攻击,所以拒绝我们的请求,自动把电脑IP封了。 解决这个问题有两种方法。一是将请求加以包装,变成…

1.浮动float

提示:如果多一个盒子(都设置浮动,则它们会按照属性值一行内显示并且顶端对齐排列) 注意: 浮动的元素是互相贴靠在一起的,(没有缝隙),如果父级宽度装下这些浮动盒子&#…

MyBatis 详解 (2) -- 增删改操作

MyBatis 详解 2 -- 增删改操作前言一、准备工作1.1 创建数据库和表1.2 添加实体类1.3 添加 mapper 接口 (数据持久层)1.4 创建与接口对应的 xml 文件二、增加操作2.1 默认返回受影响的行数2.2 特殊的新增:返回自增 id三、删除操作四、修改操作五、实现完整交互5.1 添…

爆肝9万字,我已从小白晋升ARM嵌入式工程师!带你从零熟悉常用的M4嵌入式功能,建议收藏(含码源)

📚 前言 📑博客主页:丘比特惩罚陆 💖欢迎关注:点赞收藏⭐留言✒ 💬系列专栏:web前端、嵌入式、笔记专栏 🎮 加入社区: 丘比特惩罚陆 🥇人生格言:选…

【教学赛】金融数据分析赛题1:银行客户认购产品预测(0.9676)

本文是对天池教学赛,银行客户认购产品预测的记录,教学赛网址如下: 【教学赛】金融数据分析赛题1:银行客户认购产品预测_学习赛_天池大赛-阿里云天池 1. 读取数据 import pandas as pd# 加载数据 train pd.read_csv(train.csv) …

P5587 打字练习————C++

题目 打字练习 题目描述 R 君在练习打字。 有这样一个打字练习网站,给定一个范文和输入框,会根据你的输入计算准确率和打字速度。可以输入的字符有小写字母、空格和 .(英文句号),输入字符后,光标也会跟…

c语言小练pintia11-20

11.计算平均分已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均成绩(结果按整型输出)。输入格式:本题无输入输出格式:按照下列格式输出结果:math 87, eng 72, com…

深耕地市区县市场,新华三智行中国走新路

2022年就这样结束了,但是企业数字化的进程从未结束。回顾这一年,对于任何企业而言,数字化优先的战略仍然在继续。不仅如此,数字化走向地市区县市场,带来了更多的机遇和发展,让我们看到了中国的数字经济还有…

Flurry iOS端调研和使用

Flurry iOS端调研使用 flurry官方资料较少,且只有英文文档没有代码demo。公司项目确定要用Flurry,所以深入调研,顺便记录过程。有需要的小伙伴也可以顺便参考 一.创建应用拿api_key 官网:https://www.flurry.com/ 用邮箱去官网…

【目标检测】55、YOLOv8 | YOLOv5 团队 Ultralytics 再次出手,又实现了 SOTA

文章目录一、YOLO 系列算法的简单回顾二、YOLOv8 简介2.1 安装和简单使用2.2 Ultralytics HUB2.2.1 Upload Dataset2.3 YOLOv8 主要改动三、YOLOv8 细节详述论文:暂无 官方文档:https://docs.ultralytics.com/ 代码:https://github.com/ult…

【算法数据结构初阶篇】:链表问题

一、反转单双链表 一、数据结构图 二、代码演示 public class Code01_ReverseList {public static class Node {public int value;public Node next;public Node(int data) {value data;}}public static class DoubleNode {public int value;public DoubleNode last;public …

Spring Cloud Gateway从注册中心自动注册配置路由信息

环境信息Spring Boot:2.0.8.RELEASESpring Boot内置的tomcat:tomcat-embed-core 8.5.37Spring Cloud Gateway:2.0.4.RELEASENacos:2.0.4.RELEASE需求Spring Cloud Gateway注册到注册中心(这里是Nacos,其它注…