金融OCR领域实习日志(一)

news2024/12/30 3:48:02

一、OCR基础

任务要求:

image-20240124141837955

工作原理

OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相)检查纸上打印的字符,经过检测暗、亮的模式肯定其形状,而后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并经过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提升识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也随之产生。

一般技术流程为:

img

应用场景

根据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左右

  • 数据安全:……

某个国外帖子显示的数据:

image-20240124141600017

image-20240124142105432

技术难点

1.不同拍摄角度:指通过正拍、斜拍和图像反转等不同角度进行拍摄;

2.不同光线:指在亮光(可能会出现反光)、暗光和部分亮光部分暗光的情形下拍摄;

3.文字不清晰:指存在因污损、遮挡、折痕、印章、背景纹理等造成文字不清楚的样本;

4.边框不完整:主要指图片样本中物体(证件、票据、车牌等)边框没有完整出现在画面中;

5.其他特殊情况:主要指卡证类样本需考虑带有少数民族文字、生僻字,同时考虑到证件等用于高安全场景,对复印、扫描、屏幕翻拍、PS等样本进行告警;印刷体样本需考虑不同字号、不同排版方向,以及弯曲的文本。

评价指标

OCR评价指标包括字段粒度和字符粒度的识别效果评价指标。

  • 以字段为单位的统计和分析,适用于卡证类、票据类等结构化程度较高的OCR应用评测。
  • 以字符(文字和标点符号)为单位的统计和分析,适用于通用印刷体、手写体类非结构化数据的OCR应用评测。具体指标包括以下几个:

在这里插入图片描述

img

此外,从服务角度来说,识出率(准确率)平均耗时(处理速度)数据安全等也是衡量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实现截屏识别文字

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

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

相关文章

先进车辆驾驶舱系统的强大网络安全协议

近年来,车辆驾驶舱系统发展迅速,融入了导航、娱乐和车辆性能监控系统等先进技术。随着驾驶舱变得更加互联和依赖软件,它们也变得更容易受到网络安全威胁。实施强大的网络安全协议对于保护驾驶员和乘客以及保持车辆运行的完整性至关重要。 本…

支付宝推出新年“五福节”活动,新增四大AI玩法;大型语言模型综合指南

🦉 AI新闻 🚀 支付宝推出新年“五福节”活动,新增四大AI玩法 摘要:支付宝宣布今年的“集五福”活动升级为“五福节”,新增了四大AI玩法:飙戏小剧场、时空照相馆、会说话红包和大家来找福。用户可以通过拼…

uniapp canvas做的刮刮乐解决蒙层能自定义图片

最近给湖南中烟做元春活动&#xff0c;一个月要开发4个小活动&#xff0c;这个是其中一个难度一般&#xff0c;最难的是一个类似鲤鱼跃龙门的小游戏&#xff0c;哎&#xff0c;真实为难我这个“拍黄片”的。下面是主要代码。 <canvas :style"{width:widthpx,height:hei…

c语言-枚举和联合体

文章目录 前言一、枚举类型1.1 枚举类型的定义1.2 枚举类型的使用1.3 枚举的优点 二、联合体类型2.1 联合体类型的定义2.2 联合体类型的特点2.3 联合体大小的计算 总结 前言 本篇文章介绍c语言中的枚举类型和联合体类型 一、枚举类型 1.1 枚举类型的定义 枚举类型和结构体类…

【C++干货铺】C++中的四种类型转换

个人主页点击直达&#xff1a;小白不是程序员 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 C语言中的类型转换 为什么C需要四种类型转化 C强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast RTTI C语言中的类型转换 在C语言中&…

2023 IoTDB Summit:中核武汉核电运行技术股份有限公司主管工程师方华建《IoTDB在核电数字化转型过程的应用实践》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

ERP读书笔记20240125-1

ERP&#xff08;Enterprise Resource Planning&#xff0c;企业资源计划&#xff09;的发展经历了从 MRP&#xff08;Material Requirements Planning&#xff0c;物料需求计划&#xff09;到 MRP2&#xff08;Manufacturing Resources Planning&#xff0c;制造资源计划&#…

OpenCV-26 拉普拉斯算子

一、拉普拉斯算子概念及其推导 索贝尔算子是模拟一阶导数&#xff0c;一阶导数越大的地方说明变化越剧烈&#xff0c;越有可能是边缘。 但是如果我们对f&#xff08;t&#xff09;求二阶导数呢&#xff1f; 可以发现边缘处的二阶导数 0&#xff0c;因此&#xff0c;我们可以利…

跟着cherno手搓游戏引擎【10】使用glm窗口特性

修改ImGui层架构&#xff1a; 创建&#xff1a; ImGuiBuild.cpp&#xff1a;引入ImGui #include"ytpch.h" #define IMGUI_IMPL_OPENGL_LOADER_GLAD//opengl的头文件需要的定义&#xff0c;说明使用的是gald #include "backends/imgui_impl_opengl3.cpp" …

C++力扣题目56--合并区间 738--单调递增的数字 968--监控二叉树

56. 合并区间 力扣题目链接(opens new window) 给出一个区间的集合&#xff0c;请合并所有重叠的区间。 示例 1: 输入: intervals [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: interv…

Netty的解码器和编码器

链路图 一个完整的RPC请求中&#xff0c;netty对请求数据和响应数据的处理流程如下图所示 网络线路中传输的都是二进制数据&#xff0c;之后netty将二进制数据解码乘POJO对象&#xff0c;让客户端或者服务端程序处理。 解码的工具称为解码器&#xff0c;是一个入站处理器InBo…

分布式应用程序设计项目管理

1. 项目的定义 项目是一种特定的、新颖的行动&#xff0c;目的是以有条不紊、逐步的方式构建一个尚未存在确切对应物的未来现实。它是对精心制定的需求的回应&#xff0c;旨在满足业主的需要。项目包括一个可能是物理或智力的目标&#xff0c;并且需要使用给定的资源来执行一系…

Gold-YOLO(NeurIPS 2023)论文与代码解析

paper&#xff1a;Gold-YOLO: Efficient Object Detector via Gather-and-Distribute Mechanism official implementation&#xff1a;https://github.com/huawei-noah/Efficient-Computing/tree/master/Detection/Gold-YOLO 存在的问题 在过去几年里&#xff0c;YOLO系列已经…

某马头条——day10

热文章数据查询 分布式任务调度xxl-job 概述 环境搭建 docker化部署 docker run -p 3306:3306 --name mysql57 \ -v /opt/mysql/conf:/etc/mysql \ -v /opt/mysql/logs:/var/log/mysql \ -v /opt/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORDroot\ -d mysql:5.7 dock…

uniapp开发过程一些小坑

问题1、uniapp使用scroll-view的:scroll-into-view“lastChatData“跳到某个元素id时候&#xff0c;在app上不生效&#xff0c;小程序没问题 使用this.$nextTick或者 setTimeout(()>{that.lastChatData 元素id },500) 进行延后处理就可以了。 问题2&#xff1a;uniapp开…

NE8实现HTTP Upgrade和HTTP CONNECT代理服务器

看到一个文章[Go] 不到 100 行代码实现一个支持 CONNECT 动词的 HTTP 服务器 在NET8中如何实现 创建项目为MiniApi 编辑Program.cs文件。 var builder WebApplication.CreateSlimBuilder(args);var app builder.Build();// 将HTTP请求通过协议升级机制转为远程TCP请求&…

02 分解质因子

一、数n的质因子分解 题目描述&#xff1a; 输入一个数n&#xff08;n<10^6&#xff09;,将数n分解质因数&#xff0c;并按照质因数从小到大的顺序输出每个质因数的底数和指数。 输入 5 输出 5 1 输入 10 输出 2 1 5 1 朴素解法&#xff1a; 首先求出1~n的所有质数…

༺༽༾ཊ—Unity之-02-简单工厂模式—ཏ༿༼༻

首先我们打开一个项目 在这个初始界面我们需要做一些准备工作 建基础通用包 创建一个Plane 重置后 缩放100倍 加一个颜色 任务&#xff1a;使用【简单工厂模式】生成四种不同怪物 【按不同路径移动】 首先资源商店下载四个怪物模型 接下来我们选取四个怪物作为预制体并分别起名…

Git 入门精讲

我们为什么要学习git&#xff1f; 就当下的发展而言&#xff0c;只要你从事开发就一定会接触git。作为最强大的分布式版本控制器&#xff0c;git 与 svn 有着本质上的区别。 Git是一种分布式版本控制系统&#xff0c;每个开发者都可以在本地维护完整的代码库&#xff0c;可以离…

第21课 在Android Native开发中架起java与c++互通的桥梁

在开始本节课&#xff0c;我尝试把项目拷贝到另一台电脑上以便继续工作&#xff0c;但出现了大量的“could not be resolved”问题&#xff0c;尝试包含新的include路径也无法解决该问题&#xff0c;最后删除了项目的Native Support&#xff0c;然后重新添加Native Support才解…