当前位置: 首页 > news >正文

搭建自己的OCR服务,第一步:选择合适的开源OCR项目

一、OCR是什么?

光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。

亦即将图像中的文字进行识别,并以文本的形式返回。

二、OCR的基本流程

1. 图像输入、预处理:

  不同的图像格式有不同的存储、压缩方式,目前有OpenCV、CxImage等。

2. 二值化:

  如今数码摄像头拍摄的图片大多是彩色图像,彩色图像所含信息量巨大,不适用于OCR技术。为了让计算机更快的、更好地进行OCR相关计算,

  我们需要先对彩色图进行处理,使图片只剩下前景信息与背景信息。二值化也可以简单地将其理解为“黑白化”。

3. 图像降噪:

  对于不同的图像根据噪点的特征进行去噪的过程称为降噪。

4. 倾斜校正:

  由于一般用户,在拍照文档时,难以拍摄得完全符合水平平齐与竖直平齐(我本人就经常拍的歪歪扭扭),

  因此拍照出来的图片不可避免的产生倾斜,这就需要图像处理软件进行校正。 

5. 版面分析:

  将文档图片分段落,分行的过程称为版面分析。 

6. 字符切割:

  由于拍照、书写条件的限制,经常造成字符粘连、断笔,直接使用此类图像进行OCR分析将会极大限制OCR性能。

  因此需要进行字符切割,即:将不同字符之间分割开。 

7. 字符识别:

  早期以模板匹配为主,后期以结合深度网络的特征提取为主。版面还原:将识别后的文字像原始文档图片那样排列,

  段落、位置、顺序不变地输出到Word文档、PDF文档等,这一过程称为版面还原。

8. 后期处理:根据特定的语言上下文的关系,对识别结果进行校正。

9. 输出:将识别出的字符以某一格式的文本输出。

三、OCR的使用现状

ocr的发展已经有了非常多的积累,一般人或者企业使用, 都是直接使用第三方的服务,目前提供第三方服务的大企业也非常多,百度,阿里云,腾讯等等,都提供了非常方便的api接口,可以进行调用,识别的速度、精确度和效果也都是非常不错的。唯一的缺点就是api的调用是需要收费的,对于调用频次不高的个人和企业,这个费用还是非常低的。

1,为什么企业要使用开源的而不是直接使用api服务?

目前因为公司的现状,使用开源的有几个目的

  1. 每天调用的频次比较高 , 以后可能越来越高, 所以基于费用的考虑是最主要的。
  2. 目前ocr的算法研究基本趋于成熟,并且目前对识别的精度要求不是太高,目前开源项目基本能够满足。
  3. 对于cv和深度学习进行一定程度的积累和了解,为后续工作做一些铺垫。
  4. 学习开源ocr的模型构建,方便后续对于模型的更新。

2,目前常用的几个OCR开源的项目

目前针对ocr的相关开源项目还是很多的,做了一些简单的调研和试用,在这里进行记录。对于调研不准确的希望大家指出。

第一名:PaddleOCR

PaddleOCR 是百度开源的中文识别的ocr开源软件,PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地。

支持多种OCR相关前沿算法,在此基础上打造产业级特色模型PP-OCR和PP-Structure,并打通数据生产、模型训练、压缩、预测部署全流程。

  

开源地址: https://github.com/PaddlePaddle/PaddleOCR.git

官网地址: https://www.paddlepaddle.org.cn/

优势

  1. github上面star非常多,项目非常活跃
  2. 模型只针对中文进行训练
  3. 后面做背书的公司非常强(baidu)
  4. 相关的中文文档非常齐全
  5. 识别的精确度比较高
  6. 安装和教程详细
  7. 支持前沿算法和标注工具

劣势

  1. 目前使用的训练模型是基于百度公司自己的PaddlePaddle框架,对于小公司来说并不主流(对比于ts或者pytorch),所使用深度学习框架为后续其他深度学习无法做很好的铺垫
  2. 项目整体比较复杂,学习成本较高

所以根据自己实际情况,我最终选择了这个百度飞浆OCR开源项目学习。

第二名:Tesseract

Tesseract 一款由HP实验室开发由Google维护的开源OCR引擎,支持多语言,多平台,使用python开发。

开源地址: https://github.com/tesseract-ocr/tesseract.git

优势

  1. github上面star非常多,项目非常活跃
  2. 识别的语言和文字非常多
  3. 后面做背书的公司非常强(google)

劣势

  1. 不是专门针对中文场景
  2. 相关文档主要是英文,对于阅读和理解起来有一定困难
  3. 学习成本比较高
  4. 源码较多,并且部分源码是c++,学习起来难度比较大

所以根据自己实际情况放弃了这个项目的学习。

第三名:EasyOCR

EasyOCR是用Python编写基于Tesseract的OCR识别库,用于图像识别输出文本,目前支持80多种语言。

开源地址: https://github.com/JaidedAI/EasyOCR.git

优势

  1. github上面的star也是比较多,但是最近不是特别活跃
  2. 支持的语言也是非常多的,多达80多种
  3. 识别的精确度尚可

劣势

  1. 从官方的页面体验来说识别的速度较慢
  2. 识别的文字种类多,学习难度较高
  3. 相关的官方文档是基于英文的,学习难度较高,对于新手不太友好

所以根据自己实际情况放弃了这个项目的学习。

相关文章:

搭建自己的OCR服务,第一步:选择合适的开源OCR项目

一、OCR是什么? 光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。 亦即将图像中的文字进行识别,并以文本的形式返回。 二、OCR的基本流程 1…...

【C++】VScode配置C/C++语言环境(简洁易懂版)

目录 一、下载VScode(装好直接跳第五步)二、安装VScode三、VScode设置语言为中文四、VScode切换主题(个人爱好)五、下载C语言编译器(MinGW-W64 GCC)六、配置编译器环境变量七、配置VScode八、使用单独窗口…...

【hive】—原有分区表新增加列(alter table xxx add columns (xxx string) cascade;)

项目场景: 需求:需要在之前上线的分区报表中新增加一列。 实现方案: 1、创建分区测试表并插入测试数据 drop table test_1; create table test_1 (id string, score int, name string ) partitioned by (class string) row format delimit…...

verilog学习笔记7——PMOS和NMOS、TTL电路和CMOS电路

文章目录 前言一、PMOS和NMOS1、NMOS2、PMOS3、增强型和耗尽型4、两者面积大小 二、CMOS门电路1、非门2、与非门3、或非门4、线与逻辑5、CMOS传输门6、三态门 三、TTL电路四、TTL电路 VS CMOS电路五、数字电平六、使用CMOS电路实现逻辑函数1、上拉网络 PUN2、下拉网络 PDN3、实…...

Java知识点二

Java知识点二 1、Comparable内部比较器,Comparator外部比较器2、源码结构的区别:1)Comparable接口:2)Comparator接口: 2、Java反射 1、Comparable内部比较器,Comparator外部比较器 我们一般把Comparable叫…...

基于单片机压力传感器MPX4115检测-报警系统-proteus仿真-源程序

一、系统方案 本设计采用52单片机作为主控器,液晶1602显示,MPX4115检测压力,按键设置报警,LED报警。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 /***************************************…...

Pytorch02 神经网路搭建步骤

文章目录 import numpy as np import torch from PIL.Image import Image from torch.autograd import Variable# 获取数据 def get_data():train_Xnp.asarray([3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,7.042,10.791,5.313,7.997,5.654,9.27,3.1])train_Ynp.asarr…...

【源码】JavaWeb+Mysql招聘管理系统 课设

简介 用idea和eclipse都可以&#xff0c;数据库是mysql&#xff0c;这是一个Java和mysql做的web系统&#xff0c;用于期末课设作业 cout<<"如果需要的小伙伴可以http://www.codeying.top";可定做课设 线上招聘平台整合了各种就业指导资源&#xff0c;通过了…...

Java中级编程大师班<第一篇:初识数据结构与算法-数组(2)>

数组&#xff08;Array&#xff09; 数组是计算机编程中最基本的数据结构之一。它是一个有序的元素集合&#xff0c;每个元素都可以通过索引进行访问。本文将详细介绍数组的特性、用法和注意事项。 数组的基本特性 数组具有以下基本特性&#xff1a; 有序性&#xff1a; 数…...

杰哥教你面试之一百问系列:java集合

文章目录 1. 什么是Java集合&#xff1f;请简要介绍一下集合框架。2. Java集合框架主要分为哪几种类型&#xff1f;3. 什么是迭代器&#xff08;Iterator&#xff09;&#xff1f;它的作用是什么&#xff1f;4. ArrayList和LinkedList有什么区别&#xff1f;它们何时适用&#…...

【数据结构】树和二叉树概念

1.树概念及结构 树概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#xff0c;…...

C盘清理教程

C盘清理教程 首先使用space Sniffer 扫一下c盘&#xff0c;然后看一下到底是哪个文件这么大 第二步&#xff0c;创建软链接。 首先将我们需要移动的文件的当前路径拷贝下来&#xff1a;C:\Users\Tom\Desktop\test-link\abc\ghi.txt 然后假设剪切到D盘下&#xff1a;D:\ghi.…...

【实战-05】 flinksql look up join

摘要 look up join 能做什么&#xff1f; 不饶关子直接说答案&#xff0c; look up join 就是 广播。 重要是事情说三遍&#xff0c;广播。flinksql中的look up join 就类似于flinks flink Datastream api中的广播的概念&#xff0c;但是又不完全相同&#xff0c;对于初次访问…...

C++数据结构--红黑树

目录 一、红黑树的概念二、红黑树的性质三、红黑树的节点的定义四、红黑树结构五、红黑树的插入操作参考代码 五、代码汇总 一、红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过…...

Linux perf使用思考

目录 一、参考资料&#xff08;建议阅读&#xff09;二、值得思考的几个问题1、perf使用不同的性能事件进行统计有什么区别呢&#xff1f;2、那使用不同的性能事件统计出来的数据&#xff1f;排序是如何决定的&#xff0c;其中的百分比数值在不同的性能事件进行统计时各自的意义…...

自定义路由断言工厂

我们来设定一个场景: 假设我们的应用仅仅让age在(min,max)之间的人来访问。 第1步&#xff1a;在配置文件中,添加一个Age的断言配置 spring: application:name: api-gateway cloud:nacos:discovery:server-addr: 127.0.0.1:8848gateway:discovery:locator:enabled: trueroute…...

Nacos安装及在项目中的使用

目录 概要一、安装 Nacos1、下载 Nacos2、解压3、启动 Nacos 服务器4、自定义Nacos启动脚本5、访问Nacos Web控制台 二、Nacos----服务注册与发现1、添加 Nacos 依赖2、配置 Nacos 服务器地址3、使用 Nacos 注册服务4、启动服务 三、Nacos----配置管理1、创建配置数据2、从 Nac…...

overleaf中latex语法总结

α和bata $\alpha$ $\beta$上标和下标同时使用 $A_{IJ}^{IJ}$\\ %上标^下标_多个使用{}行内公式 \noindent $abc$\\ %行内公式\documentclass{article} \usepackage[utf8]{inputenc} \usepackage[namelimits]{amsmath} %数学公式 \usepackage{amssymb} %数学公式…...

Grafana配置邮件告警

1、创建一个监控图 2、grafana邮件配置 vim /etc/grafana/grafana.ini [smtp] enabled true host smtp.163.com:465 user qinziteng05163.com password xxxxx # 授权码 from_address qinziteng05163.com from_name Grafanasystemctl restart grafana-serv…...

setup中的nextTick函数

await nextTick() 是 Vue 3 的一个异步函数&#xff0c;用于等待 DOM 更新完成后执行回调函数&#xff0c; 它在 setup 函数中非常有用&#xff0c;可以确保在对 DOM 进行操作之前&#xff0c;先等待 Vue 完成相关的 DOM 更新。 下面是一个示例&#xff0c;演示了 await nextT…...

VSCode+GCC+OpenOCD:打造你的STM32专属OpenHarmony 3.1开发流水线

VSCodeGCCOpenOCD&#xff1a;构建STM32 OpenHarmony开发的高效流水线 在嵌入式开发领域&#xff0c;效率往往取决于工具链的整合程度。当OpenHarmony遇上STM32&#xff0c;如何摆脱传统IDE的束缚&#xff0c;打造一套现代化、可定制的开发环境&#xff1f;本文将带你从零搭建基…...

从0到1:企业级AI项目迭代日记 Vol.29|自然语言变工作流:Agent 自动拼装子图的实现路径

把一件复杂的事做简单&#xff0c;有两种方式&#xff1a;降低门槛&#xff0c;或者让别人替你做。团队选择了后者。那个“别人”&#xff0c;是我们自己的 AI。一、工作流太难配&#xff0c;所以让 Agent 来配昨天上线了工作流初版&#xff0c;可视化节点编排&#xff0c;支持…...

OpenWrt opkg配置进阶:手把手教你设置代理、跳过证书检查,解决国内下载慢问题

OpenWrt opkg高效配置指南&#xff1a;突破网络限制的实战技巧 每次在OpenWrt上安装软件时&#xff0c;看着缓慢的下载进度条或者突如其来的连接错误&#xff0c;是不是感觉既熟悉又无奈&#xff1f;作为一款强大的路由器操作系统&#xff0c;OpenWrt的opkg包管理器本该是我们的…...

别光盯着分号!从C2143编译错误,聊聊C++预处理和语法解析那些事儿

别光盯着分号&#xff01;从C2143编译错误&#xff0c;聊聊C预处理和语法解析那些事儿 当你盯着屏幕上的C2143错误&#xff0c;反复检查分号却依然无解时&#xff0c;有没有想过编译器到底"看"到了什么&#xff1f;这个看似简单的语法错误背后&#xff0c;隐藏着从源…...

阿钱¥¥¥openssl sm3 hmac api使用和命令行验证

1. 命令行格式验证sm3 hmacecho -n "abc" | openssl dgst -sm3 -hmac "01234567890123456789012345678901"说明&#xff1a;1. 01234567890123456789012345678901 为字符串key&#xff0c;共32位2. echo -n "abc"&#xff0c;共abc3个字符长度&a…...

不止是部署:深入webrtc-streamer容器,聊聊WebRTC网关的配置、监控与生产环境实践

不止是部署&#xff1a;深入webrtc-streamer容器&#xff0c;聊聊WebRTC网关的配置、监控与生产环境实践 当你已经成功运行了基础版的webrtc-streamer容器&#xff0c;看着浏览器里跳动的视频流&#xff0c;那种成就感不言而喻。但很快你会发现&#xff0c;这仅仅是WebRTC世界的…...

AI Agent Harness Engineering 的安全与伦理挑战:我们如何控制所创造之物?

AI Agent Harness Engineering 的安全与伦理挑战&#xff1a;我们如何控制所创造之物&#xff1f; 关键词&#xff1a;AI Agent 治理、Harness Engineering、对齐问题、灾难性遗忘、人类反馈强化学习、鲁棒性、责任归属 摘要&#xff1a;当我们把AI从“只会做一件事的工具人”升…...

CANN/asc-devkit:int64转half精度函数

__ll2half_ru 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://gitcode.c…...

权限管理测试

在 RuoYi&#xff08;若依&#xff09;系统中&#xff0c;要实现一个自定义接口的权限验证&#xff0c;通常需要遵循 “后端定义 -> 前端配置 -> 角色分配 -> 测试验证” 的流程。以下是具体的实施步骤及详细解析&#xff1a;第一步&#xff1a;后端定义接口并添加注解…...

逆向分析MIUI安全中心:我是如何找到‘USB安装确认’开关的(附配置文件详解)

逆向解析MIUI安全模块&#xff1a;从USB安装弹窗到配置开关的探索之旅 每次连接电脑安装应用时&#xff0c;那个突然弹出的确认窗口是否让你感到困扰&#xff1f;作为一名长期研究移动系统架构的开发者&#xff0c;我决定深入MIUI的安全中心模块&#xff0c;一探究竟。本文将完…...