yolo5纸张卡片顶点检测,实现任意倾斜角度较正
向AI转型的程序员都关注了这个号????????????
机器学习AI算法工程 公众号:datayx
因为之前有在做一些规则卡片类的OCR识别任务,就难免会遇到这样的问题:用户上传的照片里卡片的角度是任意的,不规则的,或多或少都会存在不同的倾斜和形变。所以在识别的时候必须要先对其进行矫正再进行检测识别。当时有想到借鉴人脸检测中的关键点回归对卡片的四个角进行回归,但是后来感觉有点麻烦,而且数据有限,如果使用传统的opencv去寻找角点的话实际效果又不太稳定,刚好那段时间v5出来了,突发奇想可以使用v5去做,然后发现效果奇好。
一、数据准备
这里使用银行卡作为示例,其他类型卡片操作一样。首先是使用labelimg对银行卡的四个角度进行标注,将卡片的四个角点当作检测目标,这里需要注意的是,框的标注中心点尽量要对齐角点,因为我们最终要的不是检测框,而是角点的坐标(即检测框的中心点):
标注完后,可以得到voc格式的xml文件,然后就可以用来训练了。
项目代码 获取:
关注微信公众号 datayx 然后回复 yolo 即可获取。
AI项目体验地址 https://loveai.tech
二、v5训练
2.1 准备数据集
首先从github上把yolov5下载下来
https://github.com/ultralytics/yolov5
解压后将以下makeTxt.py和voc_label.py文件拷贝到文件夹中,训练过yolo的同学应该对这两个文件比较熟悉,makeTxt文件是用来划分训练集和测试集,voc_label文件是用来将voc格式转换为coco格式:
makeTxt.py
voc_label.py
然后将刚才标注的数据拷贝到data文件中,格式如下,Annotations存放xml文件,images存放标注图片,然后新建一个point.yaml文件,定义自己的训练数据集,其他的文件可以暂时不用管,按照步骤来后面会自己慢慢产生:
修改模型文件,到mdoels文件夹里,找到yolov5s.yaml,拷贝一份,定义为yolov5s-point.yaml,将里面的nc类别数改为1即可,因为检测任务比较简单,5s模型已经足够了,所以没必要上更大的模型:
OK,配置修改完成。别忘了把官方的模型文件下载下来,放到weights里,用于预训练加载。
三、开始训练
首先对数据集进行划分,同级目录下打开终端,运行makeTxt.py:
训练结束后的权重和训练可视化信息可以在runs文件夹中找到:
四、结果可视化
这里我将runs里面的权重拷贝到外面的weights文件中,将待测试的图片拷贝到inference\images中,运行:
效果还是非常的奈斯。这还只是将角点在原图检测出来,还有后续的操作,需要自己在v5推理后处理那块自己去修改,这里删改的地方太多了,有点乱就不贴上来了。
在后处理阶段,只提取检测框中心点,这才是我们需要的:
得到四个角点的坐标后,就可以用opencv做一个透视变换,得到新纠正后方方正正的图,识别起来就very easy了:
透视变换核心代码如下:
五、可能会遇到的问题
以上效果都是经过调优后得到的结果,实际串联部署起来有很好的鲁棒性,使用过程中有比较多的优化步骤因为文章篇幅的原因没有全部写出来,这里列出一些实际使用中可能还会存在的问题,需要自己去解决:
检测框的置信度不高;
误检问题,即如果检测出来4个点以上;漏检问题,检测出来低于4个点;
图片大角度(0,90,180,270)分类问题,可以再训练一个很小的分类网络做辅助;
如果训练的图片卡片角点也是方方正正的,对形变的卡片检测效果并不太好,需要考虑使用更多的数据增强;
其他训练tricks调优。
一些后话:该方法对角点明显的数据纠正效果比较好,也比较通用,当然在服务器资源足够的情况下可以考虑,如果在资源缺乏的设备中,使用v5去做就有点奢侈,可以尝试其他更小的模型去做,如果自己的数据场景没有这么复杂也可以使用传统的opencv的方法去将四个角点找出再做变换,可以很大程度上节省资源,不过稳定性可能会差一些。这个方法思想比较简单,主要还是突发奇想,对yolov5的一个扩展应用,如果有更好的纠正方式可以评论分享,相互学习。
阅读过本文的人还看了以下文章:
TensorFlow 2.0深度学习案例实战
基于40万表格数据集TableBank,用MaskRCNN做表格检测
《基于深度学习的自然语言处理》中/英PDF
Deep Learning 中文版初版-周志华团队
【全套视频课】最全的目标检测算法系列讲解,通俗易懂!
《美团机器学习实践》_美团算法团队.pdf
《深度学习入门:基于Python的理论与实现》高清中文PDF+源码
特征提取与图像处理(第二版).pdf
python就业班学习视频,从入门到实战项目
2019最新《PyTorch自然语言处理》英、中文版PDF+源码
《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码
《深度学习之pytorch》pdf+附书源码
PyTorch深度学习快速实战入门《pytorch-handbook》
【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》
《Python数据分析与挖掘实战》PDF+完整源码
汽车行业完整知识图谱项目实战视频(全23课)
李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!
《神经网络与深度学习》最新2018版中英PDF+源码
将机器学习模型部署为REST API
FashionAI服装属性标签图像识别Top1-5方案分享
重要开源!CNN-RNN-CTC 实现手写汉字识别
yolo3 检测出图像中的不规则汉字
同样是机器学习算法工程师,你的面试为什么过不了?
前海征信大数据算法:风险概率预测
【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类
VGG16迁移学习,实现医学图像识别分类工程项目
特征工程(一)
特征工程(二) :文本数据的展开、过滤和分块
特征工程(三):特征缩放,从词袋到 TF-IDF
特征工程(四): 类别特征
特征工程(五): PCA 降维
特征工程(六): 非线性特征提取和模型堆叠
特征工程(七):图像特征提取和深度学习
如何利用全新的决策树集成级联结构gcForest做特征工程并打分?
Machine Learning Yearning 中文翻译稿
蚂蚁金服2018秋招-算法工程师(共四面)通过
全球AI挑战-场景分类的比赛源码(多模型融合)
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
python+flask搭建CNN在线识别手写中文网站
中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx
机大数据技术与机器学习工程
搜索公众号添加: datanlp
长按图片,识别二维码
yolo5纸张卡片顶点检测,实现任意倾斜角度较正相关推荐
- opencv判断 线夹角_python opencv实现直线检测并测出倾斜角度(附源码+注释)
由于学习需要,我想要检测出图片中的直线,并且得到这些直线的角度.于是我在网上搜了好多直线检测的代码,但是没有搜到附有计算直线倾斜角度的代码,所以我花了一点时间,自己写了一份直线检测并测出倾斜角度的代码 ...
- cesium借助 turf 工具库绘制矩形 --任意倾斜角度 --vue2.0
流程演示 2.外部引入turf npm install @turf/turf // 调用绘制的功能模块 import { bearingToAzimuth, point } from "@t ...
- cad镂空图案切割_贺卡纸张卡片激光镂空雕花设备 激光打标机
贺卡纸张卡片激光镂空雕花设备 激光打标机 贺卡不止精致,更包含了人们浓浓的拳拳之情.精美的贺卡种类千姿百态,如此复杂的图案加工是怎么实现的呢? 现在的贺卡镂空工艺基本上已采用激光雕刻方式,传统的刀模冲 ...
- matlab snapnow,任意倾斜椭圆方程的画法.pdf
任意倾斜椭圆方程的画法 椭圆的旋转变换 标准椭圆方程为 .下面介绍两种画任意形式的椭圆方法,比如椭圆心不在原点,带有倾斜角的椭圆,结合基本 公式和程序画任意形式的倾斜椭圆. Contents 初始 ...
- MPU6050原始数据计算加速度、角速度、倾斜角度
一.简介 依据MPU6050六轴运动传感器的原始数据,计算设备当前状态的加速度.角速度和倾斜角度.本项目的主控芯片是nRF52832(SDK:Nordic SDK 17.0.2.),但算法通用,读取原 ...
- STM32测量倾斜角度
介绍 在本文中,我们将学习如何使用6轴陀螺仪/加速度传感器和STM32F103C8微控制器测量倾斜角度. 这可以通过简单地将6轴陀螺仪/加速度传感器与STM32接口来实现. 加速度计发送X,Y和Z加速 ...
- Emgucv4.4.0.4099版本PCB开发板纠偏(直线倾斜角度计算方法、确定参考点坐标)MinEnclosingCircle(拟合圆函数)
原图 PCB原图文件百度云链接: https://pan.baidu.com/s/1Q4JYpmY6epPoO6dP45GcRw 提取码:zzxd 代码 //计算直线倾斜角度 public doubl ...
- 黑客观察手机倾斜角度就能猜出你的密码,首次命中率高达74%!
本文讲的是黑客观察手机倾斜角度就能猜出你的密码,首次命中率高达74%!, 近日,安全研究人员发现了一种黑客入侵智能手机的新方式,即使用户手机有PIN码和密码保护,黑客也只需要通过窥探其输入手机密码时倾 ...
- cesium 球体半倾斜角度
cesium 球体半倾斜角度 // 定位到某个位置var camera = viewer.scene.camera;camera.flyTo({//镜头的经纬度.高度.镜头默认情况下,在指定经纬高度俯 ...
最新文章
- python自动输入支付密码_Python之控制台输入密码的方法
- anaconda的python使用教程-Python安装教程之Anaconda入门使用总结
- Python 实现搭建本地IP代理池
- 网页HTTP协议 get和post请求区别?(HTTP中Get、Post、Put与Delete的区别)
- mac下pip install 安装只能选择python2.7的问题
- java dos 菜单栏_学习java之电脑的常用快捷键和DOS窗口下的常用命令
- Ajax工作原理和原生JS的ajax封装
- android音频杂音问题_如何让短视频音质更好,AE+PR短视频音频输出处理讲解
- 小程序源码:首席省钱赚钱专家微信小程序源码下载,淘宝客 外卖侠 外卖cps 首席多多客 八合一小程序源码
- dell服务器运维,【产品鉴赏】戴尔DELL R710服务器
- 编译原理 第三章 上下文无关文法与语法分析
- Win10下安装Ubuntu16.04-空间不可用-个人志
- android客户端与pc服务器实现socket通信(wifi),Android客户端与PC服务器实现Socket通信(wifi)...
- 【原】[webkit移动开发笔记]之无法自动播放的audio元素
- 基于Go语言GoFrame+Layui搭建MVC项目教程
- 算法学习系列(贪心算法)—机器人攀登问题
- (Emitted value instead of an instance of Error) postcss-viewport-units:
- C/C++ 如何构造出强悍的宏
- 基于Proteus学习单片机系列(二)——驱动数码管
- http常见状态码以及其代表的含义
热门文章
- 关于Chrome Devtools你可能有所不知的几个技巧
- lucene(全文搜索)_建立索引_根据关键字全文搜索_源码下载
- linux monit安装配置
- c 中html上传文件大小,IOS微信内置浏览器对html标签input type=file上传的文件大小size错误?...
- 株洲市码高机器人编程_码高机器人教育
- 本次安装visual studio所用的安装程序不完整_阁楼影院安装案例
- mysql sql dateadd_在SQL语句中DATEADD和DATEDIFF函数
- java apktoo_apktool.jar最新版下载|apktool_2.0.3.jar 官方版_最火软件站
- lambda python aws_AWS Lambda Layer For Python Pakage
- php class 直接,PHP类(Class)入门教程