金融OCR领域实习日志(一)——OCR技术从0到1全面调研
一、OCR基础
任务要求:
工作原理
OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相)检查纸上打印的字符,经过检测暗、亮的模式肯定其形状,而后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并经过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提升识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也随之产生。
一般技术流程为:
应用场景
根据OCR的应用场景而言,我们可以大致分成识别特定场景下的专用OCR以及识别多种场景下的通用OCR。就前者而言,证件识别以及车牌识别就是专用OCR的典型案例。针对特定场景进行设计、优化以达到最好的特定场景下的效果展示。那通用的OCR就是使用在更多、更复杂的场景下,拥有比较好的泛性。在这个过程中由于场景的不确定性,比如:图片背景极其丰富、亮度不均衡、光照不均衡、残缺遮挡、文字扭曲、字体多样等等问题,会带来极大的挑战。
**文档文字识别:**可以将图书馆、报社、博物馆、档案馆等的纸质版图书、报纸、杂志、历史文献档案资料等进行电子化管理,实现精准地保存文献资料。
**自然场景文字识别:**识别自然场景图像中的文字信息如车牌、广告干词、路牌等信息。对车辆进行识别可以实现停车场收费管理、交通流量控制指标测量、车辆定位、防盗、高速公路超速自动化监管等功能。
**票据文字识别:**可以对增值税发票、报销单、车票等不同格式的票据进行文字识别,可以避免财务人员手动输入大量票据信息,如今已广泛应用于财务管理、银行、金融等众多领域。
**证件识别:**可以快速识别身份证、银行卡、驾驶证等卡证类信息,将证件文字信息直接转换为可编辑文本,可以大大提高工作效率、减少人工成本、还可以实时进行相关人员的身份核验,以便安全管理。
以及金融领域具体应用场景:
**自动化文档处理:**通过OCR技术识别和提取文档关键信息后,利用关键信息进行文档分类、文档重命名、目录创建与归档工作
**发票识别:**文字检测+识别,根据发票内容信息特点提取所需的内容。
**合同分析:**通过OCR识别,智能结构化抽取合同关键信息,支持图片、PDF、word多种格式,可通过API接口传输至企业业务系统,协助企业工作人员完成自动填单、内容一致性检查,让合同审阅更高效。
★商业化方案及其优缺点
1.paddleOCR
飞桨首次开源文字识别模型套件PaddleOCR,目标是打造丰富、领先、实用的文本识别模型/工具库。最新开源的超轻量PP-OCRv3模型大小仅为16.2M。同时支持中英文识别;支持倾斜、竖排等多种方向文字识别;支持GPU、CPU预测;用户既可以通过PaddleHub很便捷的直接使用该超轻量模型,也可以使用PaddleOCR开源套件训练自己的超轻量模型。
-
优点
-
轻量模型,执行速度快
-
支持pip直接安装
-
ocr识别效果好,效果基本可以比肩大厂收费ocr(非高精版)
-
支持表格和方向识别
-
支持补充训练且很方便
-
-
缺点
-
部分符号识别效果一般,如 '|‘识别为’1’
-
对于部分加粗字体可能出现误识别,需要自己补充训练
-
偶尔会出现部分内容丢失的情况
-
源文档配套教程:安装使用说明
2.CnOCR
CnOCR 是 Python 3 下的文字识别(Optical Character Recognition,简称OCR)工具包,支持简体中文、繁体中文(部分模型)、英文和数字的常见字符识别,支持竖排文字的识别。自带了20+个训练好的识别模型,适用于不同应用场景,安装后即可直接使用。同时,CnOCR也提供简单的训练命令供使用者训练自己的模型。
- 优点
- 轻量模型,执行速度快,速度略快于paddle ocr
- 支持pip直接安装
- ocr识别效果好,识别效果比肩paddle ocr
- 支持训练自己的模型
- 缺点
- 部分符号识别效果差
- 部分场景下会出现空格丢失情况
- 模型补充训练没有paddle ocr方便
源文档配套教程:安装使用说明
3.chinese_lite OCR
超轻量级中文 ocr,支持竖排文字识别, 支持 ncnn、mnn、tnn 推理, 模型大小仅4.7M。
-
优点
-
轻量模型,执行速度快,速度优于CnOCR和Paddle OCR
-
ocr识别效果尚可,优于一般开源模型,但比不上CnOCR和Paddle OCR
-
作者提供了多种语言下的Demo
-
-
缺点
- 不支持pip安装
- 文本位置识别略差
- 不支持补充训练
- 类手写字体识别效果一般
- 部分场景下会出现误识别竖版文字的情况
例如:
姓 名: 张三
性 别: 男
年 龄: 19
户 籍: 北京误识别为 '姓性年户'
原文配套:安装使用说明
4.EasyOCR
EasyOCR是一个用于从图像中提取文本的python模块。它是一种通用的OCR,可以读取自然场景文本和文档中的密集文本。我们目前正在支持80多种语言并不断扩展。
-
优点
-
支持pip安装,但需要自己手动下载模型
-
ocr识别效果尚可,优于一般开源模型
-
-
缺点
-
速度很慢,900 * 1200像素图片平均需要30s左右
-
不支持补充训练
-
5.Tesseract OCR
Tesserat OCR 是一款可在各种操作系统运行的 ,由Google开发的OCR引擎。它可以免费使用,并支持多种语言。虽然它没有一个官方的云工具,但是它可以集成到各种编程语言和应用程序中,因此可以很容易地创建自己的OCR云工具。
-
优点
- 支持补充训练
-
缺点
-
安装使用困难,不支持pip安装,官网下载配置教程(Tesseract-OCR 下载安装和使用)
-
中文识别效果差
-
官方文档
6.Google Vision API
Google Cloud Vision API是谷歌提供的云端视觉分析服务,可以通过API调用来实现图像分析、OCR文字识别等功能。相比于Tesseract OCR,它具有更强大的图像分析能力和更便捷的使用方式。
总结
paddle ocr和cnocr,两者都能实现商业化精准度。其中cnocr执行速度快,速度略快于paddle ocr识别效果比肩paddle ocr,但paddle ocr模型补充训练方便
某些场景下,如小图片且对速度要求较高可以尝试使用chinese_lite ocr.
此外由部分stackoverflow用户反馈可知paddle和Tesseract的区别如下:
-
数据来源区别:Tesseract对印刷体扫描文档效果更好,paddle更适用于手写体等场景,但二者都支持训练
-
速度区别:CPU情况下T优于P,但paddle在GPU支持下比Tesseract速度快出一大截
-
预处理区别:如果不提供预处理(例如二值化),对RGB图像而言,paddle的效果优于Tesseract。在二值化情况下Tesseract的长文本效果通常优于paddle
-
正确率&精度差别:T的表现略高于P,主要原因是paddle主要有单词和标点之间缺少空格的问题,但易于纠正,在后处理算法之后精度与Tesseract相当。且非90度旋转中表现良好。
-
模型大小:P的轻量级模型大小为2MB左右,T则为23MB左右
-
数据安全:……
某个国外帖子显示的数据:
技术难点
1.不同拍摄角度:指通过正拍、斜拍和图像反转等不同角度进行拍摄;
2.不同光线:指在亮光(可能会出现反光)、暗光和部分亮光部分暗光的情形下拍摄;
3.文字不清晰:指存在因污损、遮挡、折痕、印章、背景纹理等造成文字不清楚的样本;
4.边框不完整:主要指图片样本中物体(证件、票据、车牌等)边框没有完整出现在画面中;
5.其他特殊情况:主要指卡证类样本需考虑带有少数民族文字、生僻字,同时考虑到证件等用于高安全场景,对复印、扫描、屏幕翻拍、PS等样本进行告警;印刷体样本需考虑不同字号、不同排版方向,以及弯曲的文本。
评价指标
OCR评价指标包括字段粒度和字符粒度的识别效果评价指标。
- 以字段为单位的统计和分析,适用于卡证类、票据类等结构化程度较高的OCR应用评测。
- 以字符(文字和标点符号)为单位的统计和分析,适用于通用印刷体、手写体类非结构化数据的OCR应用评测。具体指标包括以下几个:
此外,从服务角度来说,识出率(准确率)、平均耗时(处理速度)、数据安全等也是衡量OCR系统好坏的指标之一。
参考文档
csdn:OCR入门教程系列(一):OCR基础导论
OCR识别技术的应用:电子资料自动重命名与归档
csdn:6款开源中文OCR使用介绍(亲测效果)
使用Tesseract OCR、Google Cloud Vision API的区别
Stack Overflow:与Tesseract相比,PaddleOCR的性能如何
Put to Test: PaddleOCR Engine Example and Benchmark
csdn:PaddleOCR训练属于自己的模型详细教程(从打标,制作数据集,训练到应用,以行驶证识别为例)
利用OCR解决增值税发票内容文本识别:涉及paddleOCR,区域分割,视平面变换
Tesseract-OCR 下载安装和使用
Tesseract OCR 下载及安装教程 (中英文语言包)
python+Tesseract OCR实现截屏识别文字
相关文章:

金融OCR领域实习日志(一)——OCR技术从0到1全面调研
一、OCR基础 任务要求: 工作原理 OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相)检查纸上打印的字符,经过检测暗、亮的模式肯定其形状,而后用…...

ELK日志解决方案
ELK日志解决方案 ELK套件日志系统应该是Elasticsearch使用最广泛的场景之一了,Elasticsearch支持海量数据的存储和查询,特别适合日志搜索场景。广泛使用的ELK套件(Elasticsearch、Logstash、Kibana)是日志系统最经典的案例,使用Logstash和Be…...

嵌入式学习-驱动
嵌入式的一些基本概念 CPU与MCU的区别 CPU(中央处理器,central processing unit) 指集成了运算器、控制器、寄存器、高速缓存等功能模块的芯片,负责执行计算机程序指令的处理器。MCU(单片微型计算机或单片机,microco…...

系统架构17 - 软件工程(5)
软件工程 软件测试测试原则测试方法静态测试动态测试黑盒测试白盒测试灰盒测试自动化测试 测试阶段单元测试集成测试系统测试性能测试验收测试其它测试AB测试Web测试链接测试表单测试 测试用例设计黑盒测试用例白盒测试用例 调试 系统维护遗留系统系统转换转换方式数据转换与迁…...

空气质量预测 | Python实现基于线性回归、Lasso回归、岭回归、决策树回归的空气质量预测模型
文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 政府机构使用空气质量指数 (AQI) 向公众传达当前空气污染程度或预测空气污染程度。 随着 AQI 的上升,公共卫生风险也会增加。 不同国家有自己的空气质量指数,对应不同国家的空气质量标准。 对于空气质量预测,…...

MYSQL数据库基本操作-DQL-基本查询
一.概念 数据库管理系统一个重要功能就是数据查询。数据查询不应是简单返回数据库中存储的数据,还应该根据需要对数据进行筛选以及确定数据以什么样的格式显示。 MySQL提供了功能强大,灵活的语句来实现这些操作。 MySQL数据库使用select语句来查询数据…...

gdb 调试 - 在vscode图形化展示在远程的gdb debug过程
前言 本地机器的操作系统是windows,远程机器的操作系统是linux,开发在远程机器完成,本地只能通过ssh登录到远程。现在目的是要在本地进行图形化展示在远程的gdb debug过程。(注意这并不是gdb remote !!&am…...

Android 13.0 SystemUI下拉状态栏定制二 锁屏页面横竖屏时钟都居中功能实现二
1.前言 在13.0的系统rom定制化开发中,在关于systemui的锁屏页面功能定制中,由于在平板横屏锁屏功能中,时钟显示的很大,并且是在左旁边居中显示的, 由于需要和竖屏显示一样,所以就需要用到小时钟显示,然后同样需要居中,所以就来分析下相关的源码,来实现具体的功能 如图…...

docker 部署xxl-job
docker 部署xxl-job XXL-JOB github地址 https://github.com/xuxueli/xxl-job XXL-JOB 文档地址 https://www.xuxueli.com/xxl-job/ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品…...

Kafka(九)跨集群数据镜像
目录 1 跨集群镜像的应用场景1.1 区域集群和中心集群1.2 高可用(HA)和灾备(DR)1.3 监管与合规1.4 云迁移1.5 聚合边缘集群的数据 2 多集群架构2.1 星型架构2.2 双活架构2.2 主备架构2.2.1 如何实现Kafka集群的故障转移2.2.1.1 故障转移包括的内容1. 灾难恢复计划2. 非计划内的故…...

第3讲 谈谈final、finally、 finalize有什么不同?
参考 三者区别 final final 是 java 关键字可修饰变量(类成员变量、类静态变量、局部变量和形参):表示不可修改当前变量的值(这里的值可以是地址,也可以是基本类型的值)#(注意:fi…...

MC3172 串口模块
MC3172 支持12个串口对应关系如下 串口模块初始化 第一个是uart0~11 inpin RX 脚 管脚号 outpin TX脚 管脚号 baud 波特率 read_ptr ,数据读取指针 void uart_init(u32 uart_num,u8 in_pin,u8 out_pin,u32 baud,u8* read_ptr) {INTDEV_SET_CLK_RST(uart_num,(INTDEV_RUN|…...

VUE3 加载自定义SVG文件
网上代码通篇一律,需要修改多处地方,特别是component下还要创建一个index.vue的组件,奇奇怪怪。 要在 Vue 项目中使用 svg-sprite-loader 来管理 SVG 图标,你需要执行以下几个步骤: npm install svg-sprite-loader -…...

【数据分析】numpy基础第五天
文章目录 前言Z-Score标准化Z-Score应用示例 Min-Max归一化Min-Max应用示例 总结 前言 第五天是我们的numpy学习计划中的最后一天。 在数据处理和数据分析中,数据预处理是非常重要的一步。我们不可能完全靠肉眼来分析数据,总会有用到各种算法模型的时候…...

CSS 双色拼接按钮效果
<template><view class="sss"><button> <!-- 按钮 --><view class="span"> 按钮 </view> <!-- 按钮文本 --></button></view></template><script></script><style>body {b…...

T05垃圾收集算法与垃圾收集器ParNew CMS
垃圾收集算法与垃圾收集器ParNew & CMS 垃圾收集算法 #### f 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法。根据对象存活周期不同将内存分为几块,一般将java堆分为新生代和老年代,然后根据各个年代的特点选择不同的垃圾收集算法。 在新…...

每日一道面试题:Java中序列化与反序列化
写在开头 哈喽大家好,在高铁上码字的感觉是真不爽啊,小桌板又拥挤,旁边的小朋友也比较的吵闹,影响思绪,但这丝毫不影响咱学习的劲头!哈哈哈,在这喧哗的车厢中,思考着这样的一个问题…...

论文阅读:Vary-toy论文阅读笔记
目录 引言整体结构图方法介绍训练vision vocabulary阶段PDF数据目标检测数据 训练Vary-toy阶段Vary-toy结构数据集情况 引言 论文:Small Language Model Meets with Reinforced Vision Vocabulary Paper | Github | Demo 说来也巧,之前在写论文阅读&…...

【Linux】开始使用 vim 吧!!!
Linux 1 what is vim ?2 vim基本概念3 vim的基本操作 !3.1 vim的快捷方式3.1.1 复制与粘贴3.1.2 撤销与剪切3.1.3 字符操作 3.2 vim的光标操作3.3 vim的文件操作 总结Thanks♪(・ω・)ノ感谢阅读下一篇文章见!…...

多线程面试合集
前言 前文介绍了JVM相关知识,本文将重点介绍多线程相关知识以及工作中的一些经验。 多线程面试合集 什么是多线程?为什么我们需要多线程? 多线程是指在一个进程中同时执行多个线程,每个线程可以执行不同的任务。多线程可以提高…...

从微服务到云原生
很多文章介绍云原生概念,说它包含微服务,又包含了其它几个方面的东西,还扯到文化层面、组织层面和技术层面,搞技术的人一听到公司文化问题和组织部门问题,就十分地晕眩,不能让我好好地坐下来写写代码、搞搞…...

bxCAN 主要特性
bxCAN 主要特性 ● 支持 2.0 A 及 2.0 B Active 版本 CAN 协议 ● 比特率高达 1 Mb/s ● 支持时间触发通信方案 发送 ● 三个发送邮箱 ● 可配置的发送优先级 ● SOF 发送时间戳 接收 ● 两个具有三级深度的接收 FIFO ● 可调整的筛选器组: — CAN1 和…...

武忠祥2025高等数学,基础阶段的百度网盘+视频及PDF
考研数学武忠祥基础主要学习以下几个方面的内容: 1.微积分:主要包括极限、连续、导数、积分等概念,以及它们的基本性质和运算方法。 2.线性代数:主要包括向量、向量空间、线性方程组、矩阵、行列式、特征值和特征向量等概念,以及它们的基本…...

用JavaFX写了一个简易的管理系统
文章目录 前言正文一、最终效果1.1 主页面1.2 动物管理页面-初始化1.3 动物管理页面-修改&新增1.4 动物管理页面-删除&批量删除 二、核心代码展示2.1 启动类2.2 数据库配置-db.setting2.3 日志文本域组件2.4 自定义表格视图组件2.5 自定义分页组件2.6 动物管理页面2.7 …...

第二百九十回
文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容,本章回中将介绍如何通过相机获取视频文件.闲话休提,让我们一起Talk Flutter吧。 1. …...

bert实现完形填空简单案例
使用 bert 来实现一个完形填空的案例,使用预训练模型 bert-base-chinese ,这个模型下载到跟代码同目录下即可,下载可参考:bert预训练模型下载-CSDN博客 通过这个案例来了解一下怎么使用预训练模型来完成下游任务,算是对…...

Jmeter 分布式测试
Jmeter单机进行压测,受到单台机器的性能影响,Jmeter支持分布式测试,用一个控制节点去控制多个工作节点去模拟更多的用户。 版本信息 内容版本号JDK1.8Jmeter5.6.2 分布式测试原理 jmeter 官网对分布式测试有说明,jmeter分布式…...

在 Ubuntu 上安装 Docker Engine
系列文章目录 前言 要在 Ubuntu 上开始使用 Docker Engine,请确保满足先决条件,然后按照安装步骤进行操作。 一、先决条件 注意事项 如果您使用 ufw 或 firewalld 管理防火墙设置,请注意当您使用 Docker 暴露容器端口时,这些端口…...

Mac安装nvm,安装多个不同版本node,指定node版本
一.安装nvm brew install nvm二。配置文件 touch ~/.zshrc echo export NVM_DIR~/.nvm >> ~/.zshrc echo source $(brew --prefix nvm)/nvm.sh >> ~/.zshrc三.查看安装版本 nvm -vnvm常用命令如下:nvm ls :列出所有已安装的 node 版本nvm…...

【开源】基于JAVA+Vue+SpringBoot的智慧家政系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询家政服务4.2 新增单条服务订单4.3 新增留言反馈4.4 小程序登录4.5 小程序数据展示 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的智慧家政系统࿰…...