当前位置: 首页 > news >正文

OpenCV | 告别人工目检:深度学习技术引领工业品缺陷检测新时代

文章目录

    • 机器视觉
    • 缺陷检测
    • 工业上常见缺陷检测方法
    • 内容简介
    • 作者简介
    • 目录
    • 读者对象
    • 如何阅读本书
    • 获取方式


机器视觉

机器视觉是使用各种工业相机,结合传感器跟电气信号实现替代传统人工,完成对象识别、计数、测量、缺陷检测、引导定位与抓取等任务。其中工业品的缺陷检测极大的依赖人工完成,特别是传统的3C制造环节,产品缺陷检测依赖于人眼睛来发现与检测,不仅费时费力还面临人员成本与工作时间等因素的制约。使用机器视觉来实现产品缺陷检测,可以节约大量时间跟人员成本,实现生产过程的自动化与流水线作业。

缺陷检测

常见得工业品缺陷主要包括划痕、脏污、缺失、凹坑、裂纹等,这些依赖人工目检(眼睛检测)的缺陷都可以通过机器视觉的缺陷检测算法来实现替代。当前工业缺陷检测算法目前主要分为两个方向,基于传统视觉的算法和基于深度学习的算法,前者主要依靠对检测目标的特征进行量化,比如颜色,形状,长宽,角度,面积等,好处是可解释性强、对样本数量没有要求、运行速度快,缺点是依赖于固定的光照成像,稍有改动就要改写程序重新部署,而且检测规则和算法跟开发者经验其主导作用。基于深度学习的缺陷检测算法刚好能弥补前者的不足之处,能够很好适应不同的光照,更好地适配同类缺陷要求,缺点是对样本数量有一定要求,对硬件配置相比传统也会有一定要求。

《OpenCV应用开发:入门、进阶与工程化实践》一书第十四 章 通过案例详细介绍基于OpenCV如何实现传统方式的缺陷检测跟基于深度学习的缺陷检测。

工业上常见缺陷检测方法

方法一:基于简单二值图像分析实现划痕提取,效果如下:
图片

方法二:复杂背景下的图像缺陷分析,基于频域增强的方法实现缺陷检测,运行截图:

图片

方法三:复杂背景下的图像缺陷分析,基于空域增强实现图像缺陷分析,针对复杂背景的图像,通过空域滤波增强以后实现缺陷查找,运行截图如下:

图片
方法四:基于样品模板比对实现基于空域增强实现图像缺陷分析,通过二之分析与轮廓比对实现缺陷查找,运行截图如下:
图片
方法五:基于深度学习UNet模型网络,实现裂纹与划痕检测,运行截图如下:
图片
方法六:基于深度学习实例分割网络模型网络,实现细微缺陷检测,运行截图如下:
图片
以上内容均来自最近出版的一本新书《OpenCV应用开发:入门、进阶与工程化实践》一书第十四章,分享给大家。

在这里插入图片描述

内容简介

本书专注于介绍OpenCV4在工业领域的常用模块,通过合理的章节设置构建了阶梯式的知识点学习路径。化繁就简、案例驱动,注重算法原理、代码演示及在相关场景的实际使用。本书还介绍了必备的深度学习知识与开发技巧,拓展OpenCV开发者技能。全书共16章,分为3篇。
● 基础篇(第1~4章):主要介绍OpenCV的简单使用、像素操作、色彩空间、图像直方图。
特色:从如何配置OpenCV开发环境开始到完成第一个OpenCV代码演示,从图像的表示到基本的像素操作,方便读者全面扎实地掌握基本图像处理知识与函数使用技巧,为深入学习打下坚实基础。
● 进阶篇(第5~12章):主要介绍卷积操作、二值图像分析、形态学分析、特征提取、视频分析、机器学习、DNN。
特色:结合代码演示学习OpenCV框架中主要图像处理模块的算法原理与相关函数使用,通过多个案例打通知识节点,学会使用OpenCV传统算法解决实际问题。
● 高级与实战篇(第13~16章):主要介绍YOLO 5自定义对象检测、缺陷检测、OpenVINO加速与CUDA加速。
特色:面向工程应用,帮助OpenCV开发者提升技能,通过实战案例增强OpenCV应用能力,掌握视觉开发必备的深度学习知识,以及从模型训练到部署加速的技巧。

作者简介

贾志刚
OpenVINO中文社区创始成员、英特尔物联网创新大使、华为晟腾HAE、51CTO学院金牌讲师。在机器视觉缺陷检测、生物医学细胞分类与检测识别、安防监控视频内容分析与提取、人工智能软件开发、深度学习框架集成开发等方面有深入研究,开发过多个图像处理算法模块并成功应用在医学检测与工业检测领域。开设有公众号“OpenCV学堂”,并著有《Java数字图像处理:编程技巧与应用实践》《OpenCV Android开发实战》等书。

张 振
上海赫立苏州研究院(赫芯科技)院长,具备丰富的机器视觉检测一线研发、管理与运营经验。深耕半导体/SMT缺陷检测领域10余年,拥有自主知识产权的软件和相关专利数十项。多年成功创业经历,积累了丰富的研发创新和团队管理经验,并参与市场与客户需求分析、技术分析与评估、方案制订、算法迭代、验收指标制定、标准机型量产的全流程管理与实践。

目录

前言基础篇第1章 OpenCV简介与安装 / 21.1 OpenCV简介 / 21.1.1 OpenCV历史 / 21.1.2 OpenCV的模块与功能 / 31.1.3 OpenCV4里程碑 / 41.1.4 OpenCV发展现状与应用趋势 / 41.2 OpenCV源码项目 / 41.3 OpenCV4开发环境搭建 / 51.4 第一个OpenCV开发程序 / 61.5 图像加载与保存 / 71.5.1 加载图像 / 71.5.2 保存图像 / 81.6 加载视频 / 91.7 小结 / 12第2章 Mat与像素操作 / 132.1 Mat对象 / 132.1.1 什么是Mat对象 / 132.1.2 一切图像皆Mat / 142.1.3 Mat类型与深度 / 152.1.4 创建Mat / 152.2 访问像素 / 182.2.1 遍历Mat中的像素 / 182.2.2 像素算术运算 / 202.2.3 位运算 / 212.2.4 调整图像亮度与对比度 / 222.3 图像类型与通道 / 232.3.1 图像类型 / 232.3.2 图像通道 / 232.3.3 通道操作 / 242.4 小结 / 25第3章 色彩空间 / 263.1 RGB色彩空间 / 263.2 HSV色彩空间 / 283.3 LAB色彩空间 / 293.4 色彩空间的转换与应用 / 303.5 小结 / 31第4章 图像直方图 / 324.1 像素统计信息 / 324.2 直方图的计算与绘制 / 344.2.1 直方图计算 / 354.2.2 直方图绘制 / 364.3 直方图均衡化 / 374.4 直方图比较 / 404.5 直方图反向投影 / 414.6 小结 / 43进阶篇第5章 卷积操作 / 465.1 卷积的概念 / 465.2 卷积模糊 / 495.3 自定义滤波 / 535.4 梯度提取 / 565.5 边缘发现 / 595.6 噪声与去噪 / 615.7 边缘保留滤波 / 645.8 锐化增强 / 665.9 小结 / 68第6章 二值图像 / 706.1 图像阈值化分割 / 706.2 全局阈值计算 / 726.3 自适应阈值计算 / 766.4 去噪与二值化 / 776.4.1 去噪对二值化的影响 / 776.4.2 其他方式的二值化 / 786.5 小结 / 79第7章 二值分析 / 807.1 二值图像分析概述 / 807.2 连通组件标记 / 827.3 轮廓发现 / 857.3.1 轮廓发现函数 / 857.3.2 轮廓绘制函数 / 877.3.3 轮廓发现与绘制的示例代码 / 877.4 轮廓测量 / 887.5 拟合与逼近 / 907.6 轮廓分析 / 957.7 直线检测 / 977.8 霍夫圆检测 / 997.9 最大内接圆与最小外接圆 / 1017.10 轮廓匹配 / 1027.11 最大轮廓与关键点编码 / 1047.12 凸包检测 / 1067.13 小结 / 107第8章 形态学分析 / 1088.1 图像形态学概述 / 1088.2 膨胀与腐蚀 / 1098.3 开/闭操作 / 1118.4 形态学梯度 / 1138.5 顶帽与黑帽 / 1158.6 击中/击不中 / 1168.7 结构元素 / 1198.8 距离变换 / 1208.9 分水岭分割 / 1218.10 小结 / 124第9章 特征提取 / 1259.1 图像金字塔 / 1259.1.1 高斯金字塔 / 1259.1.2 拉普拉斯金字塔 / 1289.1.3 图像金字塔融合 / 1299.2 Harris角点检测 / 1319.3 shi-tomas角点检测 / 1339.4 亚像素级别的角点检测 / 1359.5 HOG特征与使用 / 1379.5.1 HOG特征描述子 / 1379.5.2 HOG特征行人检测 / 1399.6 ORB特征描述子 / 1409.6.1 关键点与描述子提取 / 1409.6.2 描述子匹配 / 1449.7 基于特征的对象检测 / 1489.7.1 单应性矩阵计算方法 / 1489.7.2 特征对象的位置发现 / 1509.8 小结 / 152第10章 视频分析 / 15310.1 基于颜色的对象跟踪 / 15310.2 视频背景分析 / 15510.3 帧差法背景分析 / 15710.4 稀疏光流分析法 / 15810.5 稠密光流分析法 / 16110.6 均值迁移分析 / 16310.7 小结 / 166第11章 机器学习 / 16711.1 KMeans分类 / 16711.1.1 KMeans图像语义分割 / 16711.1.2 提取主色彩构建色卡 / 17011.2 KNN分类 / 17211.2.1 KNN函数支持 / 17211.2.2 KNN实现手写数字识别 / 17311.3 SVM分类 / 17511.3.1 SVM的原理与分类 / 17511.3.2 SVM函数 / 17611.3.3 SVM实现手写数字识别 / 17611.4 SVM与HOG实现对象检测 / 17711.4.1 数据样本特征提取 / 17811.4.2 SVM特征分类 / 17911.4.3 构建SVM对象检测器 / 17911.5 小结 / 181第12章 深度神经网络 / 18212.1 DNN概述 / 18212.2 图像分类 / 18312.3 对象检测 / 18612.3.1 SSD对象检测 / 18712.3.2 Faster-RCNN对象检测 / 18812.3.3 YOLO对象检测 / 19012.4 ENet图像语义分割 / 19312.5 风格迁移 / 19512.6 场景文字检测 / 19712.7 人脸检测 / 19912.8 小结 / 201高级与实战篇第13章 YOLO 5自定义对象检测 / 20413.1 YOLO 5对象检测框架 / 20413.2 YOLO 5对象检测 / 20513.3 自定义对象检测 / 20813.3.1 数据集制作与生成 / 20913.3.2 模型训练与查看损失曲线 / 21013.3.3 模型导出与部署 / 21113.4 小结 / 212第14章 缺陷检测 / 21314.1 简单背景下的缺陷检测 / 21314.2 复杂背景下的缺陷检测 / 21614.2.1 频域增强的缺陷检测 / 21614.2.2 空间域增强的缺陷检测 / 21914.3 案例:刀片缺陷检测 / 22014.4 基于深度学习的缺陷检测 / 22214.4.1 基于分类的缺陷检测 / 22314.4.2 基于分割的缺陷检测 / 22614.5 小结 / 228第15章 OpenVINO加速 / 22915.1 OpenVINO框架安装与环境配置 / 22915.1.1 OpenVINO安装 / 23015.1.2 配置C++开发支持 / 23215.2 OpenVINO2022.x版SDK推理演示 / 23315.2.1 推理SDK介绍 / 23415.2.2 推理SDK演示 / 23515.3 OpenVINO支持UNet部署 / 23615.4 OpenVINO支持YOLO 5部署 / 23715.5 小结 / 239第16章 CUDA加速 / 24016.1 编译OpenCV源码支持CUDA加速 / 24016.2 用CUDA加速传统图像处理 / 24516.2.1 Mat与GpuMat / 24516.2.2 加速图像处理与视频分析 / 24616.3 加速DNN / 24816.4 小结 / 249

读者对象

本书适合以下读者阅读:

  • 计算机视觉领域的从业者。
  • OpenCV的爱好者。
  • 高等院校相关专业的师生。
  • C++/Python开发者。

如何阅读本书

本书共16章,分为3篇,由浅入深地讲解OpenCV的技术及应用。
基础篇(第1~4章)主要介绍了OpenCV4框架中基础模块相关的图像知识、函数及应用。
进阶篇(第5~12章)深入介绍了OpenCV4核心模块的功能与应用场景,主要包括图像卷积、二值分析、形态学分析、特征提取、视频分析、机器学习模块等,其中穿插大量实践案例。
高级与实战篇(第13~16章)全面介绍了OpenCV4支持的各种性能加速技术与深度学习模型推理技术,从项目实现出发,讲解了对象检测、缺陷检测、深度学习模型加速等高级应用层面的OpenCV开发技术。

获取方式

京东图书:《OpenCV4应用开发:入门、进阶与工程化实践》(贾志刚,张振)

相关文章:

OpenCV | 告别人工目检:深度学习技术引领工业品缺陷检测新时代

文章目录 机器视觉缺陷检测工业上常见缺陷检测方法内容简介作者简介目录读者对象如何阅读本书获取方式 机器视觉 机器视觉是使用各种工业相机,结合传感器跟电气信号实现替代传统人工,完成对象识别、计数、测量、缺陷检测、引导定位与抓取等任务。其中工…...

Inkscape SVG 编辑器 导入 Gazebo

概述 本教程描述了拉伸 SVG 文件的过程,这些文件是 2D 的 图像,用于在 Gazebo 中为您的模型创建 3D 网格。有时是 更容易在 Inkscape 或 Illustrator 等程序中设计模型的一部分。 在开始之前,请确保您熟悉模型编辑器。 本教程将向您展示如…...

基于比较的排序算法总结(java实现版)

目录 什么是基于比较的排序算法 什么是排序算法的稳定性 基础排序算法的稳定性 插入排序法 希尔排序法 冒泡排序法 总结 高级算法的稳定性 快速排序法 堆排序法 归并排序法 总结 注意 什么是基于比较的排序算法 基于比较的排序算法定义:之所以能给元素…...

集群与分布式的概念及区别

目前在工作中经常接触到集群的概念,通过这篇文章总结一下集群的几种方式以及和分布式对比学习 1.集群(Cluster) 集群是由多个计算机节点组成的网络,旨在共同提供服务,并确保高性能和高可用性。在高可用集群中&#xf…...

基于ssm+vue的在线听书网站论文

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,书籍信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大…...

hive命令启动出现classnotfound

环境:ambari集群三个节点node104、node105和node106,其中node105上有hiveserver2,并且三个节点均有HIVE CLIENT 注意:“./”指hive安装目录 其中装有hiveserver2的node105节点,由于某种需要向lib目录下上传了某些jar包…...

拥抱数字化转型,共赢数字时代 | 创维汽车商学院走进竹云

数字化浪潮汹涌而来,变革与创新接踵而至。随着数字技术日益融入经济社会发展的各个领域,数字经济与实体经济的“双向奔赴”也不断催生着新产业、新业态、新模式,为经济社会发展持续注入创新活力。12月19日,创维汽车商学院带领嘉宾…...

蓝桥杯:日期问题

目录 引言一、日期问题1.题目描述2.代码实现3.测试 二、回文日期1.题目描述2.代码实现3.测试 引言 关于这个蓝桥杯的日期问题,其实有一个明确的思路就感觉很简单,这个思路就是不用依照日期的顺序去把每一天走完,而是根据一个数加一&#xff…...

vue 简单实现购物车:商品基础信息最终的 html 文件 + 商品计数器的组件处理,实现了购物车;

购物车实现过程: Ⅰ、商品购物车作业需求:1、商品购物车页面示例:2、具体需求: Ⅱ、html 文件的构建:商品购物车.html Ⅲ、组件文件的构建:商品购物车1.js Ⅳ、小结: Ⅰ、商品购物车作业需求&am…...

交叉熵损失(Cross Entropy Loss)学习笔记

在分类任务中,我们通常使用交叉熵作为损失函数,首先给出交叉熵的计算公式: 二分类中: L 1 N ∑ i L i 1 N ∑ i − [ y i l o g ( p i ) ( 1 − y i ) ⋅ l o g ( 1 − p i ) ] \mathcal{L}\frac1{N}\sum_{i}L_i\frac1{N}\sum…...

python flask alchemy在判断None值时与flake8格式检测冲突

python flask alchemy 在判断None值时候,推荐使用/!来判断。例如: query.filter(User.nameNone)query.filter(User.name!None) 但是这样的代码提交后时过不了flake8的语法检查,会报错: flake8...................................…...

Text Intelligence - TextIn.com AI时代下的智能文档识别、处理、转换

本指南将介绍Text Intelligence,AI时代下的智能文档技术平台 Textin.com 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认…...

55.0/CSS 的应用(详细版)

目录 55.1.1 设计边框样式 55.1.2 调整边框的粗细 55.1.3 边框颜色 55.1.4 复合设置边框 55.2 模块的边距 55.3 模块的内边距 55.4 层的应用 55.4.1 层的建立 55.4.2 浮动——float 55.4.3 清除浮动 55.4.4 层的定位 55.4.5 设置层的溢出——overflow 55.4.6 设置鼠…...

磁盘类型选择对阿里云RDS MySQL的性能影响

测试说明 这是一个云数据库性能测试系列,旨在通过简单标准的性能测试,帮助开发者、企业了解云数据库的性能,以选择适合的规格与类型。这个系列还包括: * 云数据库(RDS MySQL)性能深度测评与对比 * 阿里云RDS标准版(x86) vs 经济…...

数据结构---算法的时间复杂度

文章目录 前言计算机重要存储数据结构与算法数据结构概念算法 数据库概念 算法的复杂度时间复杂度概念为什么有时间复杂度大O渐进表示法时间复杂度实例实例1:时间复杂度:O(N)实例2:这里输入参数是不确定的所以 时间复杂…...

后缀为.vue是什么文件

.vue是一种文件格式,它是用于构建Web应用程序的前端框架Vue.js的组件文件 Vue.js是一个流行的JavaScript框架,用于构建用户界面 在Vue.js中,应用程序被组织为一组可重用的组件,而.vue文件就是用来定义这些组件的 一个.vue文件包…...

前端微信小程序AES加密解密踩坑

项目场景: 今天蛮沮丧的,在和别人对接的时候aes加解密的时候踩了坑。今天有个同事请假了,所以本来他和别人对接的活,老大给了我,然后我就正式踏上了战战兢兢的对接之路。 1.一开始的时候对面先是问用的啥加密方法。这…...

代码随想录算法训练营第五十八天| 739 每日温度 496 下一个更大元素 |

目录 739 每日温度 496 下一个更大元素 | 739 每日温度 求后面第一个比他大的元素的位置&#xff0c;单调栈如果递增 求后面第一个比他小的元素的位置&#xff0c;单调栈需要递减 class Solution { public:vector<int> dailyTemperatures(vector<int>& tempe…...

配置自定义RedisTemplate 解决redis序列化java8 LocalDateTime

目录 配置自定义RedisTemplate 引入依赖 配置连接redis 编写测试类 出现问题 配置序列化 解决redis序列化java8 LocalDateTime 问题背景 问题描述 问题分析 解决方案一&#xff08;全局&#xff09; 解决方案二&#xff08;单个字段&#xff09; 配置自定义RedisTe…...

华为---登录USG6000V防火墙---console、web、telnet、ssh方式登录

目录 一、环境搭建 二、第一次登录USG6000V防火墙&#xff0c;即通过console方式登录 三、用户配置 四、web登录USG6000V防火墙 1. 用web创建的用户通过web方式登录USG6000V防火墙 2. 命令行创建的用户通过web方式登录USG6000V防火墙 五、ssh方式登录USG6000V防火墙 1. 用…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...