python识别发票二维码_发票二维码扫描增强_02_算法概述-程序员宅基地

技术标签: python识别发票二维码  

技术选型

为了解决二维码无法扫描的问题,必须选择合适的技术手段。由于我们的App引用的是别人开发的基于Zbar的图像识别插件,在没有能力修改图像识别插件的前提下,我决定在服务端解决这个问题,考虑到算法的通用型,在服务端验证通过的程序后期也可以考虑移植到App端,提高本地扫描速度,降低服务器性能消耗。IOS和Android的插件都存在相机对焦完成的事件,在该事件中可以拿到图像信息,我计划在拿到对焦完成的图片后,进行简单压缩后传输至服务器进行解析处理,再将服务器返回的解析结果作为解码结果传递给前台应用。

对图片的分析与操作属于计算机图形处理的范畴,OpenCV是一个非常强大的图形处理库,比较适合当前这个需求。因为之前也没接触过图形处理这一块,基本上也是边学边做,主要是从处理思想去找对应的图形处理工具。

OpenCV支持多种语言,例如C++、Python,目前网络上比较多的参考文档都是基于C++,考虑到编程语言的简易程度,决定采用Python进行开发。考虑到需要发布HTTP服务给App端调用,最终Python程序需要集成到Django项目中。

所以最后采用的技术栈为:Python3.6 + opencv-python + numpy(用于支持矩阵运算),使用pip安装两个库:

pip install numpy

pip install opencv-python

思路分析

我们首先拿一张真实拍摄的二维码进行分析:

449287-20180702235056259-720605473.jpg

这张图片从肉眼来看,基本是一个正方形,用户基本是摄像头垂直于二维码上方拍摄,而不是倾斜拍摄,比较符合我们对客户的扫描结果预期。

如果我们可以拿到一张正方形的二维码图片,根据定位点和坐标点可以很容易构建坐标系去分割图像,获取每个点内的0/1值,从而构建一个新的二维码图像。

但是从该图片去建立坐标系时,可以发现该图片其实不是一个真正的正方形,并且连一个矩形都算不上,无法使用缩放的方式恢复正方形,从截图的二维码左右边长和红色框的长度比较可以看出来,左侧线段长度要比右侧线段短一些,所以连一个平行四边形都不算,这在后面我们选择图形变换算法时也是一个非常重要的决定项。

449287-20180703001642257-1057388478.png

我们梳理一下解决思路,对于一张正常拍摄的完整二维码图像,我们需要进行以下步骤的处理来解析图像内容:

1.将图像转换成一个正方形

2.根据定位图形和坐标点信息建立坐标系

3.根据坐标系切割图像,并提取每一个单元格中的数据信息

4.根据提取的数据信息,重构一个标准的二维码图像

按照以上思路,我将程序主体拆分为以下三个部分,将在后续章节对每一个部分详细介绍

1.图像预处理

2.图像坐标系构建

3.数据读取和重构

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39572152/article/details/110374268

智能推荐

关于SQLContext过期,SparkSession登场_sqlcontext 过期了-程序员宅基地

文章浏览阅读1.6k次。关于SQLContext过期问题。源码中解释道:spark2.0之后使用sparksession替代,不过仍然保留了SQLContext。那么他们两个有不同吗?这里只说一个重要的。在你使用SparkSession代替SQLContext的时候package SparkSqlimport org.apache.spark.sql.{DataFrame, SQL..._sqlcontext 过期了

使用VsCode开发Lua插件推荐(Lua)_vscode编写lua程序-程序员宅基地

文章浏览阅读3.7w次,点赞7次,收藏20次。在我看来能够跳转的Lua插件就是好插件,今天推荐的一款插件就是这么一款。通过Vscode插件搜索Lua (Lua Language Server coded by Lua),支持跳转定义、查询引用、代码检查、高亮等。下载好后即可使用。这里说一下设置代码检查配置。在settings.json配置"Lua.diagnostics.severity" : { "redefi..._vscode编写lua程序

Rospy的官方教程代码讲解(二)消息头和用户数据_rospy tutorial-程序员宅基地

文章浏览阅读2.9k次,点赞6次,收藏12次。Rospy的官方教程代码讲解(二)消息头和用户数据刚刚发现的重大事实是ROS wiki里的rospy教程和github里rospy_tutorials代码是完全不同的 Σ(っ°Д°;)っ男默女泪啊 щ(゚Д゚щ) 我整个人都方了有木有。。。 先讲rospy_tutorials的,因为这个好像没有相关教程,只有代码(´•ω•`)Rospy的官方教程代码讲解二消息头和用户数据消息头_rospy tutorial

Uboot和系统移植(17)------- Linux内核的启动过程_嵌入式linux kernel如何获取 uboot的版本-程序员宅基地

文章浏览阅读828次,点赞2次,收藏7次。目录一,makefile和链接脚本的简单分析二,head.S文件分析1.前段分析2.内核启动的汇编阶段分析3.内核启动的C语言阶段分析3.1内核启动文件main.c -------> Do necessary setups3.2补充进程知识3.3rest_init三,cmdline常用参数一,makefile和链接脚本的简单分析1、Makefile分析(1)kernel的Makefile写法和规则等和uboot的Makefile是一样的,甚至Makefile中的很多内容都是一样的。(2)ke_嵌入式linux kernel如何获取 uboot的版本

蓝盾实训营day9——Windows主机安全加固和Android木马生成-程序员宅基地

文章浏览阅读458次。Windows主机安全加固禁用guest账户设置账户锁定策略设置Administrator不允许终端登陆使用注册表更改远程桌面监听的端口用netstat -an 查看端口打开情况,关闭不必要的端口关闭自动播放,防止U盘插入后病毒自动运行 7. ...

语音分离---TasNet-程序员宅基地

文章浏览阅读4.9k次,点赞2次,收藏27次。语音分离:1)分离噪声: 降噪2)分离混响:降混响3)分离人声:说话人分离4)分离回声:回声消除TasNet 系列在语音分离方法有不错的表现,有用到降噪&说话人分离&回声消除等方面,采用的是 encoder + seperator(generate mask) + decoder 的结构;主要提出的点有:1) time-domain (对比时频域算法,用encoder 和 decoder 来替代stft 和 istft 类似的变换。可以不需要考虑是否保留phase和频域分辨率_tasnet

随便推点

9、XCTF get_post_请再以post方式随便提交一个名为post且值为1的变量-程序员宅基地

文章浏览阅读340次。X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?打开网站,看到下面请用GET方式提交一个名为a,值为1的变量。构造payload,http://111.200.241.244:50152/?a=1得到,请再以POST方式随便提交一个名为b,值为2的变量在构造一个http://111.200.241.244:50152/?a=1Poat data b=2得到flag。基础知识:HTTP协议中共定义了八种方法或者叫“动作”来表明对Request-URI指定的资源的_请再以post方式随便提交一个名为post且值为1的变量

Trojan-Spy.Win32.Delf.uv分析-程序员宅基地

文章浏览阅读209次。安天CERT:高喜宝一、 病毒标签:病毒名称: Trojan-Spy.Win32.Delf.uv病毒类型: ***文件 MD5: AEB1EC3571803651FB644C73C4521BD5公开范围: 完全公开危害等级: 4文件长度: 12,683 字节感染系统: Windows98以上版本开发工具: Borland Delph..._trojan-spy.win32.travnet.404558

提升应用性能的关键步骤——UniApp性能优化策略与技巧详解-程序员宅基地

文章浏览阅读2.5k次,点赞19次,收藏29次。作者主页」「个人网站」ChatGPT体验地址。_uniapp性能优化

origin绘图同时添加柱状图和折线图_origin柱状图加折线图-程序员宅基地

文章浏览阅读8.5w次,点赞27次,收藏117次。在绘制数据图时,为了清晰反应不同数据之间的关系,往往需要在同一个图中同时添加柱状图和点线图。这时候需要左右两个纵坐标。下面介绍这种图的绘制方法1、首先绘制一个柱状图,具体绘制方法可以参考上一篇博客:origin绘图软件安装包及入门使用2在图的右侧插入刻度线,插入顺序如下图所示,点击图-->新图层(轴)-->右Y轴3、添加完后双击右侧刻度线修改刻度的起始值和要插入的点线图数值范围对应4、插入折线图,选择图->添加点线图,从book中选择要绘制点线图的数据导入到右侧_origin柱状图加折线图

使用HTML制作一个简单的个人主页_简单个人主页-程序员宅基地

文章浏览阅读10w+次,点赞648次,收藏4.2k次。此网页我对html有了一个简单,初步的认识后制作的一个网页,主要目的是练习html的一些简单操作,由于时间关系,有很多做的不好,细节处理不到位的地方。废话不多说,先来看效果1、首页这一个网页就是进行了网页背景、背景音乐、段落的处理、水平线以及超链接的简单练习。2、我的相册这一页主要是对大量图片进行一个排版的练习3、我的计划这一页主要是对文本有序无序以及表格内部的背景颜色等等的练习4、我的家乡这一部分是对段落、还有文本与图片结合的练习5、我的故事这个是对表格进阶版的练习,文字_简单个人主页

程序员 如何浪漫表白-程序员宅基地

文章浏览阅读220次。这是 一个傻子 给我的浪漫表白。开篇第一章,希望以后写的东西越来越厉害!转载于:https://www.cnblogs.com/lyy9902/p/8310575.html_电脑 程序员 浪漫表白

推荐文章

热门文章

相关标签