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

初窥强大,AI识别技术实现图像转文字(OCR技术)

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️
🐴作者:秋无之地

🐴简介:CSDN爬虫、后端、大数据、人工智能领域创作者。目前从事python全栈、爬虫和人工智能等相关工作,主要擅长领域有:python全栈、爬虫、大数据开发、人工智能等。

🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、留言💬、关注🤝,关注必回关

前言:

上一篇讲到采用AI技术Docling实现高效地解析和转换多种文档格式。无论是PDF、Word文档,还是PPT、Excel表格,Docling都能够高效地解析和转换多种文档格式,将文档内容以HTML、Markdown和JSON等格式呈现,并支持OCR识别和表格结构的解析。

今天就来“初窥强大”,AI识别技术实现图像转文字(OCR技术)。

一、OCR技术的介绍

1、OCR技术是个啥

OCR(Optical Character Recognition,光学字符识别)技术是一种将图像中的文字转换为计算机可编辑文本格式的技术。

OCR 技术凭借其高效、准确的文字识别能力,在众多行业和领域都有广泛应用,以下是一些主要的方面。

金融行业

  • 票据处理:银行等金融机构每天会处理大量的票据,如支票、汇票、存单等。OCR 技术可快速准确地识别票据上的文字信息,包括金额、账号、日期等,实现票据处理的自动化,提高处理效率,降低人工录入的错误率。
  • 信用卡审批:在信用卡申请审批过程中,OCR 技术可以识别申请人提交的身份证、工作证明等文件上的文字信息,快速提取关键数据,辅助银行进行风险评估和审批决策。

医疗行业

  • 病历管理:医院的病历资料通常包含大量的文字信息,使用 OCR 技术可以将纸质病历快速转换为电子文本,方便医生查阅、检索和分析患者的病史、诊断结果等信息,提高医疗服务的效率和质量。
  • 医疗报告解读:对于一些医学检验报告、影像诊断报告等,OCR 技术能够识别其中的文字内容,结合自然语言处理技术,帮助医生更快速地理解报告信息,做出准确的诊断。

教育行业

  • 试卷批改:在考试阅卷过程中,OCR 技术可以识别学生答题卡上的答案信息,实现客观题的自动批改,提高阅卷效率。同时,对于一些手写的主观题,也可以通过 OCR 技术进行文字识别,辅助教师进行批改。
  • 数字化教学资源建设:将纸质教材、教案、文献资料等转化为电子文本,便于制作数字化教学资源,如电子课件、在线课程等,方便学生学习和教师教学。

物流行业

  • 快递面单识别:快递包裹上的面单包含了收件人、寄件人、地址等重要信息,OCR 技术可以快速准确地识别这些信息,实现包裹信息的自动化录入和跟踪,提高物流配送的效率和准确性。
  • 物流单据处理:在物流运输过程中,涉及到各种单据,如托运单、提货单等。OCR 技术可以对这些单据上的文字信息进行识别和提取,实现物流信息的数字化管理,方便物流企业进行业务调度和跟踪。
2、技术原理
  • 图像预处理:对输入的图像进行处理,包括灰度化、降噪、二值化、倾斜校正等操作,以提高图像的质量,便于后续的字符分割和识别。例如,通过灰度化将彩色图像转换为黑白图像,减少数据量;利用降噪算法去除图像中的噪声点,使文字更加清晰。
  • 字符分割:尝试将文本中的字符分割开,对于手写文字或不规则排列的文字,这一步尤为重要。方法包括基于字符间距、笔画连接等特征进行分割。比如在识别手写体时,根据笔画的走势和间隔,将每个字符准确地分离出来。
  • 特征提取:提取字符的特征,如笔画特征、轮廓特征、结构特征等。这些特征是识别字符的关键依据,不同的字体、字号可能具有不同的特征组合。以汉字为例,可能会提取笔画的端点、交叉点、弯曲度等特征。
  • 分类识别:将提取的特征与预定义字库对比,以找出最匹配的字符。常用的分类方法包括模板匹配、神经网络、支持向量机等。例如模板匹配就是将待识别字符与字库中的模板进行逐一比对,计算相似度,选择相似度最高的模板对应的字符作为识别结果。
  • 后处理:对识别结果进行校正、修补和质量评估等处理。如通过语言模型、上下文信息来纠正可能出现的识别错误,提高识别的准确性和可靠性。比如在一段英文文本中,根据语法和词汇搭配,对识别出的单词进行校正。

3、技术应用
  • 文档处理:能快速将纸质文档中的文字转换为电子文本,便于编辑、存储和检索,提高办公效率。如将大量的纸质合同、文件转换为电子文档,方便进行文字搜索和内容修改。
  • 数字图书馆:把扫描的图书、文献等转化为可搜索的文本,既方便读者查阅,也有利于图书资源的长期保存和传播。
  • 车牌识别:在智能交通系统中,用于识别车辆号牌,实现自动收费、违章监控等功能。通过对车牌图像的处理和字符识别,快速准确地获取车牌号码信息。
  • 身份证识别:在公安、银行等领域,快速识别身份证上的文字信息,用于身份验证和信息录入,提高业务办理的效率和准确性。
  • 图像识别:在处理包含文字的图像时,能够提取其中的文字信息,为图像分析和理解提供支持。比如在分析广告图片、宣传海报等时,提取其中的文字内容进行语义分析。

二、OCR技术的接入

1、选择第三方OCR服务

看到这里,或许有人疑惑,为啥要接入第三方的服务,自己安装训练不可以吗?

可以,但效率太低,而且第三方的服务已经很成熟,而且有些是免费试用的或有一定试用额度的。

常用的第三方OCR服务有如下几种:

  • 阿里云的OCR服务
  • 百度的OCR服务

  • 华为云的OCR服务

基于识别准确度、使用成本和接入复杂度,优先选择阿里云的OCR服务

2、开通服务

在阿里云控制台——>搜索“文字识别”——>服务管理与开通,点击开通,结果如下:

  • 统一识别有每月200次的额度
  • 通用票证识别免费试用

3、根据开发文档安装SDK

打开“通用票证识别”的文档:RecognizeGeneralStructure - 通用票证抽取_文字识别(OCR)-阿里云帮助中心

点击“调试页面”,可以看到SDK的python示例:

安装SDK命令:

pip install alibabacloud_ocr_api20210707==3.1.2
4、连接服务
@staticmethod
def create_client() -> ocr_api20210707Client:"""使用AK&SK初始化账号Client@return: Client@throws Exception"""# 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。# 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。config = open_api_models.Config(# 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。,access_key_id='xxx',# 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,access_key_secret='xxx')# Endpoint 请参考 https://api.aliyun.com/product/ocr-apiconfig.endpoint = f'ocr-api.cn-hangzhou.aliyuncs.com'return ocr_api20210707Client(config)
5、调用函数
@staticmethod
def main(img_link=''):client = aliyunOcrImgPiao.create_client()recognize_general_structure_request = ocr_api_20210707_models.RecognizeGeneralStructureRequest(url=img_link,keys=['统一社会信用代码','名称类型','公司类型','注册资本','住所','成立日期','法定代表人'])runtime = util_models.RuntimeOptions()img_info = {}try:# 复制代码运行请自行打印 API 的返回值resp = client.recognize_general_structure_with_options(recognize_general_structure_request, runtime)# print(resp.body.data)for i in resp.body.data.sub_images:img_info = i.kv_info.databreakexcept Exception as error:# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。# 错误 messageprint(error)# 诊断地址print(error)UtilClient.assert_as_string(error)#更改keynew_info = {'creditCode':img_info['统一社会信用代码'],'legalPerson':img_info['法定代表人'],'companyName': img_info['名称类型'],'companyType':img_info['公司类型'],'businessAddress':img_info['住所'],'RegistrationDate':img_info['成立日期'],'registeredCapital':img_info['注册资本'],}print("输出结果:",new_info)return new_info

三、完整代码

# -*- coding: utf-8 -*-
import os
import sysfrom typing import Listfrom alibabacloud_ocr_api20210707.client import Client as ocr_api20210707Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_ocr_api20210707 import models as ocr_api_20210707_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClientclass aliyunOcrImgPiao:'''阿里云票证OCR识别(不限额度)'''def __init__(self):pass@staticmethoddef create_client() -> ocr_api20210707Client:"""使用AK&SK初始化账号Client@return: Client@throws Exception"""# 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。# 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。config = open_api_models.Config(# 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。,access_key_id='xxx',# 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,access_key_secret='xxx')# Endpoint 请参考 https://api.aliyun.com/product/ocr-apiconfig.endpoint = f'ocr-api.cn-hangzhou.aliyuncs.com'return ocr_api20210707Client(config)@staticmethoddef main(img_link=''):client = aliyunOcrImgPiao.create_client()recognize_general_structure_request = ocr_api_20210707_models.RecognizeGeneralStructureRequest(url=img_link,keys=['统一社会信用代码','名称类型','公司类型','注册资本','住所','成立日期','法定代表人'])runtime = util_models.RuntimeOptions()img_info = {}try:# 复制代码运行请自行打印 API 的返回值resp = client.recognize_general_structure_with_options(recognize_general_structure_request, runtime)# print(resp.body.data)for i in resp.body.data.sub_images:img_info = i.kv_info.databreakexcept Exception as error:# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。# 错误 messageprint(error)# 诊断地址print(error)UtilClient.assert_as_string(error)#更改keynew_info = {'creditCode':img_info['统一社会信用代码'],'legalPerson':img_info['法定代表人'],'companyName': img_info['名称类型'],'companyType':img_info['公司类型'],'businessAddress':img_info['住所'],'RegistrationDate':img_info['成立日期'],'registeredCapital':img_info['注册资本'],}print("输出结果:",new_info)return new_infoif __name__ == '__main__':obj_ = aliyunOcrImgPiao()obj_.main(img_link='https://xxx.com/123.png')

版权声明

本文章版权归作者所有,未经作者允许禁止任何转载、采集,作者保留一切追究的权利。

相关文章:

初窥强大,AI识别技术实现图像转文字(OCR技术)

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据、人工智能领域创作者。目前从事python全栈、爬虫和人工智能等相关工作,主要擅长领域有:python…...

【Apache Paimon】-- 作为一名小白,如何系统地学习 Apache paimon?

目录 一、整体规划 1. 了解基本概念与背景 2. 学习资料的选择 3. 学习路径与规划 4. 学习建议 5. 注意事项 6. 参考学习资料 二、详细计划 阶段 1:了解基础(1-2 周) 阶段 2:深入掌握核心功能(3-4 周&#xf…...

Elasticvue使用总结

用了好多es的可视化客户端,但平时用的最多的是Elasticvue这个浏览器插件。总结一下使用教程。 连接 首页大盘 说明: 节点情况:一共三个节点,三个节点既是master节点又是data节点。(一个节点可以既是master又是data&a…...

尚硅谷爬虫note002

一、for循环 语法: for 变量 in 要遍历的数据 方法体 【for i in 要遍历的数据】:字符串中 i 表示变量 1. 循环字符串 2. range(5)方法 :0~4 for i in range(5) 3. range(1&…...

小白零基础如何搭建CNN

1.面向对象编程 1.1类(Class)和对象(Object) class Animal:"""定义一个动物类Animal,包含基本属性和行为。"""def __init__(self, name, species, age0):"""__init__…...

在vivado中对数据进行延时,时序对齐问题上的理清

在verilog的ISP处理流程中,在完成第一个模块的过程中,我经常感到困惑,到底是延时了多少个时钟?今日对这几个进行分类理解。 目录 1.输入信号激励源描述 1.1将数据延时[9]个clk 1.2将vtdc与hzdc延时[9]个clk(等价于单bit的数据…...

《只狼》运行时提示“mfc140u.dll文件缺失”是什么原因?要怎么解决?

《只狼》运行时提示“mfc140u.dll文件缺失”是什么原因?要怎么解决? 宝子们,是不是在玩《只狼》的时候,突然弹出一个提示:“找不到mfc140u.dll文件”?这可真是让人着急上火!别慌,今…...

vue学习笔记7

打包发布 目标:明确打包的作用 说明:vue脚手架只是开发过程中,协助开发的工具,当真正开发完了 > 脚手架不参与上线 打包的作用: 将多个文件压缩合并成一个文件,语法降级,less sass ts 语法…...

Unity 增量打包AssetBundle

背景 打包太慢了,想要没改动的资源不重新打包浪费时间。 来源 官方文章:https://forum.unity.com/threads/about-incremental-build-and-asset-bundle-hashes.1436032/ 官网AB介绍:https://learn.unity.com/tutorial/assets-resources-and…...

嵌入式八股文面试题(二)C语言算法

相关概念请查看文章&#xff1a;C语言概念。 1. 如何实现一个简单的内存池&#xff1f; 简单实现&#xff1a; #include <stdio.h> #include <stdlib.h>//内存块 typedef struct MemoryBlock {void *data; // 内存块起始地址struct MemoryBlock *next; // 下一个内…...

尚硅谷爬虫note005

一、编解码 1.get请求的quote方法 将汉字转为Unicode字符 # _*_ coding : utf-8 _*_ # Time : 2025/2/12 16:33 # Author : 20250206-里奥 # File : demo19_get请求的quote方法 # Project : PythonProject10-14# 景甜page # https://www.baidu.com/s?ieutf-8&f8&rsv…...

xml 和json互转工具

工具1 有个问题会导致springboot返回捕获的异常编程xml格式 import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import org.json.JSONObject; import org.json.XML; import org.w3c.dom.Document;import javax.xm…...

ElementUI 抽屉组件高度封装

在前端开发中&#xff0c;ElementUI 的el-drawer组件虽实用&#xff0c;但为满足复杂业务需求&#xff0c;如统一样式、特定交互和灵活使用&#xff0c;常需二次封装。下面将带你实现一个高度封装的 ElementUI 抽屉组件。 创建基础封装组件 创建MyDrawer.vue&#xff0c;引入e…...

深入解析:如何在C#和C/C++之间安全高效地通过P/Invoke传递多维数组

在工业控制、机器人编程和物联网等领域&#xff0c;我们经常需要让C#这样的托管语言与C/C编写的底层库进行交互。在这个过程中&#xff0c;遇到需要传递多维数组的场景时&#xff0c;许多开发者会意外遭遇System.Runtime.InteropServices.MarshalDirectiveException异常。本文将…...

轻量级在线ETL数据集成工具架构设计与技术实现深度剖析

在当今数字化时代,企业面临着海量异构数据的整合挑战。ETL(Extract, Transform, Load)工具作为数据集成的核心,负责将分散在不同数据源中的数据进行抽取、转换和加载,以构建统一的数据视图。本文将深入剖析一款基于诺依框架开发的在线ETL数据集成工具,重点阐述其架构设计…...

二、k8s项目的生命周期

项目的生命周期 创建-----------》发布-----------》更新--------》回滚----------》删除 kubectl create deployment nginx1 --imagenginx:1.22 --replicas3 基于deployment控制器创建pod 控制器的名称是nginx1 pod使用的镜像:nginx:1.22 --replicas3 pod的数量有多少 3个…...

GPT 系列模型发展史:从 GPT 到 ChatGPT 的演进与技术细节

从 GPT 到 ChatGPT&#xff0c;OpenAI 用短短几年时间&#xff0c;彻底改变了自然语言处理&#xff08;NLP&#xff09;的格局。让我们一起回顾这段激动人心的技术演进史&#xff01;&#x1f680; &#x1f539; GPT&#xff08;2018&#xff09;&#xff1a; 划时代的起点&a…...

C#语言的云计算

C#语言在云计算中的应用 引言 随着信息技术的飞速发展&#xff0c;云计算已经成为了现代计算架构的重要组成部分。传统的本地计算方式逐渐被云计算所取代&#xff0c;使得企业与开发者能够更高效地处理数据、部署应用程序以及进行资源管理。在众多编程语言中&#xff0c;C#以…...

金仓数据库-KingbaseES-学习-01-单机部署(非图形化安装)

目录 一、环境信息 二、介绍 三、下载地址 四、安装步骤 1、配置内核参数 &#xff08;1&#xff09;文件系统相关 &#xff08;2&#xff09;共享内存与信号量&#xff08;IPC&#xff09; &#xff08;3&#xff09;网络与端口配置 &#xff08;4&#xff09;关键场…...

海外服务器都有什么作用?

海外服务器具体就是指部署在中国大陆以外地区的服务器&#xff0c;企业选择租用海外服务器能够显著提高不同国家和地区用户的访问速度&#xff0c;当网站的服务器部署在目标用户所在地附近时&#xff0c;数据信息所传输的距离就会缩短&#xff0c;大大降低了网络访问的延迟度&a…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...