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应用开发:入门、进阶与工程化实践》(贾志刚,张振)

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

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

相关文章

搭建Vue前端项目的流程

1、安装nodejs 测试安装是否成功 $ npm -v 6.14.16 $ node -v v12.22.122、全局安装npm install -g vue/cli,后续会使用到vue命令 $ vue --version vue/cli 5.0.8使用vue create demo_project_fe命令创建项目,使用箭头键来选择,确认使用回车…

【K8s】1# 使用kuboard-spray安装K8s集群

文章目录 搭建k8s集群1.推荐配置1.1.服务器配置1.2.软件版本 2.使用Kuboard-Spray安装k8s集群2.1.配置要求2.2.操作系统兼容性2.3.安装 Kuboard-Spray2.4.加载离线资源包2.5.规划并安装集群2.6.安装成功2.7.访问集群 3.涉及的命令3.1.linux 4.问题汇总Q1:启动离线集…

SSH无密登陆配置

1 SSH介绍 ssh命令用于远程登录到其他计算机,实现安全的远程管理。 基本语法: ssh 域名/IP地址 示例: (1)从hadoop100服务器上远程连接hadoop101服务器 [hadoophadoop100 ~]$ ssh hadoop101 如果出现如下内容 Ar…

【Jmeter】循环执行某个接口,接口引用的参数变量存在规律变化

变量设置成下面的值即可 ${__V(supplierId_${supplierIdNum})}

听GPT 讲Rust源代码--src/tools(21)

File: rust/src/tools/miri/src/shims/x86/mod.rs 在Rust的源代码中,rust/src/tools/miri/src/shims/x86/mod.rs文件的作用是为对x86平台的处理提供支持。它包含一些用于模拟硬件操作的shim函数和相关的类型定义。 具体来说,该文件中的函数是通过使用一组…

从零开始的Docker Desktop使用,Docker快速上手,Docker介绍和基础使用

目录 1 Docker简介和安装和基础配置1.1 Docker简介1.2 安装Docker Desktop1.3 换源1.4 Docker基础使用1.5 对Docker操作1.5.1 获取当时所有镜像(docker images)1.5.2 拉镜像(docker pull)1.5.3 删除镜像(docker rmi)1.5.4加载镜像(docker run) 1.6 使用交互式容器1.6.1 查看容器…

蓝桥杯:日期问题

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

【CMake保姆级教程】定义变量、指定C++标准、指定输出路径

文章目录 前言一、变量1.1 为什么需要变量?1.2 set的使用1.3 使用变量 二、指定C标准2.1 为什么需要指定C标准?2.2 指定使用的C标准 三、指定输出路径3.1 为什么需要指定输出路径?3.2 设置输出路径 总结 前言 CMake是一个强大的构建工具&…

【虹科分享】金融服务急需数据层改造

文章速览: 数字化转型正在颠覆银行与金融业金融服务的未来Redis Enterprise赋能实时金融应用 金融服务越来越注重实时互动体验,重构关键业务流程,从数据层入手该怎么做? 一、数字化转型正在颠覆银行与金融业 金融科技行业的初创…

网络技术基础与计算思维实验教程_4.2_静态路由项配置实验

实验内容 实验目的 实验原理 关键命令 实验步骤 构建 安装完成以后 可以看到路由器有三个快速以太网接口 为3安装 分别构建两个以太网 用交叉线连接router1和2 配置IP地址 完成配置过程 查看路由表 根据路由表添加 现在可以实现PC0和PC1之间的ICMP报文传输 Router(config)#…

虾皮跨境电商物流:打造高效便捷的全球供应链解决方案

随着全球化的推进和电子商务的蓬勃发展,跨境电商物流成为了越来越多商家和消费者关注的焦点。虾皮(Shopee)作为一家领先的电商平台,不仅提供了丰富多样的商品选择,还致力于为卖家和消费者提供高效便捷的跨境电商物流服…

@vue/cli脚手架

0_vue/cli 脚手架介绍 目标: webpack自己配置环境很麻烦, 下载vue/cli包,用vue命令创建脚手架项目 vue/cli是Vue官方提供的一个全局模块包(得到vue命令), 此包用于创建脚手架项目 脚手架是为了保证各施工过程顺利进行而搭设的工作平 vue/cli的好处 开箱即用 0配置webpack babe…

STL中优先队列(堆)的详解

文章目录 priority_queue的基本介绍堆(heap)堆的概念与结构 priority_queue 的介绍与使用 priority_queue的基本介绍 这个priority_queue翻译成中文就是优先级队列,但其实我们很难去一眼看出他的意思到底是什么,他的逻辑结构实际上类似于数据结构中的堆…

[NISACTF 2022]easyssrf

[NISACTF 2022]easyssrf wp ssrf 的题目,提示了会使用 curl 连接输入的网站并返回响应包。 测试连接百度 直接在输入框中写 www.baidu.com 是无法连接的,需要在前面加入 http 或者 https ,因为 curl 的使用方式就是: curl htt…

VS Code配置C语言环境

首先安装一个C语言的编译器,然后将其位置添加到系统环境变量中。(之后需要重启一下vs,才能检测到编译器) 打开vscode下载4个插件: C/C Extension PackCode RunnerInclude AutocompleteCMake Tools 然后打开设置把三个选项勾上。…

cad x命令炸开图纸怎么恢复?

cad x命令炸开图纸怎么恢复?cad图纸使用x命令炸开后,想要组合在一起,该怎么操作呢?下面我们就来看看cad炸开命令的详细使用教程 今天我们主要解决在cad中用x炸开后恢复的问题,当然附带一些基础知识也一起普及一下。 …

Python中实现消息队列:构建高效异步通信系统的完整指南

更多资料获取 📚 个人网站:ipengtao.com 消息队列的基础概念 在开始之前,先了解一些消息队列的基础概念。 1 什么是消息队列? 消息队列是一种通信方式,它允许将消息从一个应用程序传递到另一个应用程序。消息队列提…

目标检测入门体验,技术选型,加载数据集、构建机器学习模型、训练并评估

Hi, I’m Shendi 1、目标检测入门体验,技术选型,加载数据集、构建机器学习模型、训练并评估 在最近有了个物体识别的需求,于是开始学习 在一番比较与询问后,最终选择 TensorFlow。 对于编程语言,我比较偏向Java或nod…

多切片联合构建3D生物空间图谱

空间转录组(ST,Spatial transcriptomics)技术正在革新探索组织空间结构的方式。目前,ST数据分析通常仅限于单个2D组织切片,限制了我们理解3D空间中发生的生物过程。在这里,作者提出了STitch3D,一…

SpringIOC之LocaleContext

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…