专栏首页机器学习入门与实战darknet图像定位+tornado实现票据识别API,识别率达到95%以上

darknet图像定位+tornado实现票据识别API,识别率达到95%以上

此项目用于对中国购车发票进行内容识别,目前完成的是身份证,vin,发动机号,价格的识别提供了展示的demo页,以及提供了传入文件,路径,base64码的多种方式调用的api,返回识别出来的json数据。

完整代码下载地址:

关注微信公众号 datanlp 然后回复 发票 即可获取。

Quick Start

  • 首先找一张发票的图片:

http://club2.autoimg.cn/album/g13/M0F/A4/A3/userphotos/2015/10/10/21/500_wKgH1FYZE2mALP-JAAJQY1pp49o236.jpg

  • 启动识别服务(web接口服务) ./api_invoice/main.py 开启的是8888端口,暂时未做配置化,可以直接在main.py中修改
  • 访问demo页
    • 访问http://128.0.0.1:8888/invoice/index
    • 选择上传图片,会识别出来图片并将结果显示在页面上
    • 并显示识别的方法和识别定位的图片
  • 访问接口:
    • http://127.0.0.1:8888/invoice/url?url=http%3A%2F%2Fclub2.autoimg.cn%2Falbum%2Fg13%2FM0F%2FA4%2FA3%2Fuserphotos%2F2015%2F10%2F10%2F21%2F500_wKgH1FYZE2mALP-JAAJQY1pp49o236.jpg
    • 传入图片连接,返回json数据,例如: {"cardno": "130102198707041249", "vinno":"LSGHD5289FD298030", "engineno": "152306132", "price": "¥61500.00"}
    • 还支持上传文件,图片base64字符串传参等多种方式

代码执行过程说明

  • 使用tornado启动web服务,json格式化数据
  • 首先对图片做处理,opencv,PIL,找到需要识别的局部图片并截取出来
    • 使用darknet的yolo定位的方法,标识一批样本中关键数据的局部图片的位置
    • 然后进行训练
    • 训练完成后会得出一个权重文件
    • 改造darknet的代码
    • 为了能够更快的处理,在darknet里面启动了一个web服务
    • 可以传入图片地址(服务器绝对地址,无后缀)
    • 识别后返回图片中关键局部位置的坐标点
    • 再使用坐标点将图片的关键部位切割出来
    • 效果还好,主要是识别速度稍慢,作为第二方案,还有优化余地,甚至可以替代第一方案
    • 使用二值化加上轮廓等方法找到图片中最大方格,然后找到四个点
    • 对四个点对应的四边形进行矫正,变成正方形,使得字体不会是歪的
    • 检查长宽,处理横竖图片问题,这里还可以改进优化
    • 缩放到固定大小
    • 生成一张翻转的图片,因为暂时无法确定是否倒过来的,暂时做识别两次的处理,可以优化
    • 然后按照比例切出对应识别区域
    • 最后把这个局部的图片切割出来
    • 缺点是部分图片的方格不完整,图片打印的比较歪,明暗度差异的问题会导致识别准确率下降
    • 图像处理方式
    • 深度学习图片定位方式
  • 图片定位切割完成之后,做正向反向识别- 首先使用机器识别- 先将图片再次切割,根据灰度值和波峰波谷算法将每个字符切割开- 使用训练好的但字符模型镜像识别,有三个不同的模型,依次进行识别- 其次使用tesseract识别- 原图识别- 灰度图识别- 默认阈值二值化识别- 批量默认阈值二值化识别- 遍历阈值二值化识别
  • 识别结果校验
    • 如果不通过校验,则继续往下走

识别率校验

  • 将图片网络地址放到img.txt中,文件放到data/invoice目录下
  • 执行ipi_invoice/test.py,将文件导入到数据库
  • 然后删除img.txt文件
  • 继续执行执行ipi_invoice/test.py,将会逐个识别并将结果记录到数据库,
  • 通过sql可以判断出来识别率

模型训练

  • 训练出的模型包括:识别10个数字类别模型;用于身份证识别的 识别"数字+X" 11个类别的模型;识别"大写字母+数字" 26个类别的模型。
  • 训练样本处理的目录为/creatTrainDataSet, 模型训练的目录为 /train/ -准备图片:本项目将发票系统中的数字,字母图片切割出来,转换成统一的28*28图片
    • 为尽可能提高训练模型识别率,将图片做相应处理,剔除噪声较多的图片,尤其是每一类别有相同噪声的图片。
    • 已经处理好的训练样本图片见压缩包:/dataset/numberAndX.tar.gz,/dataset/numberAndUpper.tar.gz,解压缩到自定义目录
    • 修改/train目录下相应的模型训练文件,生成对应训练模型,已有模型在目录/trainmodel/下
    • 修改/train/keras_predict.py中需要识别的的图片路径或目录,使用已有模型识别图片类型。

darknet图片定位

给服务传入一个发票图片文件的路径,就可以返回对这个图片预测出来的身份证,vin码,

本文分享自微信公众号 - 机器学习入门与实战(datanlp)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • seq2seq模型

    在⾃然语⾔处理的很多应⽤中,输⼊和输出都可以是不定⻓序列。以机器翻译为例,输⼊可以是⼀段不定⻓的英语⽂本序列,输出可以是⼀段不定⻓的法语⽂本序列,例如:

    大数据技术与机器学习
  • 深度学习的优化方法

    机器学习模型在训练数据集和测试数据集上的表现。如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时,它在测试数据集上却不⼀定更准确...

    大数据技术与机器学习
  • BERT中文实战:文本相似度计算与文本分类

    谷歌提供了以下几个版本的BERT模型,每个模型的参数都做了简单的说明,中文的预训练模型在11月3日的时候提供了,这里我们只需要用到中文的版本

    大数据技术与机器学习
  • darknet图像定位+tornado实现票据识别API,3w张发票识别率达到95以上

    机器学习AI算法工程
  • 嵌入式和单片机的区别在哪?

    单片机和嵌入式,其实没有什么标准的定义来区分他们,对于进行过单片机和嵌入式开发的开发者来说,都有他们自己的定义,接下来,就谈谈这两个概念的理解。

    刘盼
  • 分享一个介绍语言模型的好视频

    嗨,不知道大家是怎么度过这个四年才能遇见一次的2月29号的?我的朋友圈里好多人选择了吃一顿好的~

    朴素人工智能
  • Elasticsearch 文件目录解释

    下载后解压的Elasticsearch中,有以下几个基本的目录: home---这是Elasticsearch解压的目录   bin---这里面是ES启动的脚...

    用户1154259
  • Sensory TrulyNatural - 设备端的高度可定制自然语言识别

    Embedded, Large Vocabulary Continuous Speech Recognition with NLU

    用户6026865
  • EagleEye全链路追踪

      当下微服务盛行的阶段,系统之间服务的依赖和复杂性也逐步提高。所以要保证业务的正常运行和团队的SLA,就需要对线上问题的避免和快速定位。这时就体现日志的重要性...

    OPice
  • 青少年守护,守护孩子的“好奇心”

    暑假期间 很多孩子们除了完成老师布置的家庭作业 就是在网上当个成天冲浪的 “小肥宅” 美好的网络乐趣无穷 ? 然而,没了学校的监管,爸妈的监督 低俗、暴力、沉...

    腾讯大讲堂

扫码关注云+社区

领取腾讯云代金券