当前位置:首页 » 编程软件 » ocr编程

ocr编程

发布时间: 2025-01-11 05:51:24

Ⅰ Tesseract OCR 文字识别 攻略

OCR技术,即光学字符识别,是通过图像识别技术解析照片中的印刷体文字,但不识别手写体。在业界,Tesseract是广泛应用的OCR工具,由Google维护,但也存在挑战,尤其是在医疗领域。识别医疗文档时,如病历照片,由于折叠、扭曲、光照等问题,识别准确度受到严重影响。同时,化验单等文档不仅要求识别文字,还需将识别结果标准化填充至特定表格中。

针对医疗场景,本文旨在探讨如何针对Tesseract进行定制改造,开发适用于不同医院表单格式的通用OCR系统。首先,安装Tesseract有多种方法,如MacOS的MacPorts或Homebrew,MacPorts安装步骤相对简单。安装完成后,通过命令行执行tesseract进行文字识别,如微信对话截图,结果并不完美,部分文字识别失败,如表情符号和部分特殊字符。

python编程中,Pytesseract是Tesseract的Python封装,便于使用,但功能有限。通过调整图像处理和语言设置,如使用Image.open()配合lang参数,可以改善识别效果。然而,对于带有表情符号的文字,Tesseract可能无法识别。深入研究可能需要查看其源代码。此外,对于复杂文档,如预先分段再识别,可以考虑结合其他技术,如Custom-OCR-YOLO,以提高识别精度。

Ⅱ vb编程识别图片中文字

识别图片里文字的方法,通常称为OCR(Optical Character Recognition,光学字符识别),需要利用非常复杂的模式识别算法才能实现。自己用VB开发OCR程序工作量太大。
可以考虑采用OCR插件,即在电脑上安装OCR控件,然后在VB程序中调用该控件。如WPS,紫光、汉王的OCR系统都带有可调用的控件,但都比较大,而且有使用限制。我曾经用过一个免费的91OCR控件,识别效果还马马虎虎可以。

Ⅲ PaddlePaddle:在Serverless架构上十几行代码实现OCR能力

简介:飞桨深度学习框架采用基于编程逻辑的组网范式,对于普通开发者而言更容易上手,同时支持声明式和命令式编程,兼具开发的灵活性和高性能。

飞桨(PaddlePaddle)以网络多年的深度学习技术研究和业务应用为基础,是中国首个自主研发、功能完备、开源开放的产业级深度学习平台,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体。

飞桨深度学习框架采用基于编程逻辑的组网范式,对于普通开发者而言更容易上手,同时支持声明式和命令式编程,兼具开发的灵活性和高性能。另外飞桨不仅广泛兼容第三方开源框架训练的模型部署,并且为不同的场景的生产环境提供了完备的推理引擎,包括适用于高性能服务器及云端推理的原生推理库PaddleInference,面向分布式、流水线生产环境下自动上云、A/B测试等高阶功能的服务化推理框架PaddleServing,针对于移动端、物联网场景的轻量化推理引擎PaddleLite,以及在浏览器、小程序等环境下使用的前端推理引擎Paddle.js。同时,透过与不同场景下的主流硬件高度适配优化及异构计算的支持,飞桨的推理性能也领先绝大部分的主流实现。

安装飞桨

飞桨可以被认为是一个Python的依赖库,官方提供了pip,conda,源码编译等多种安装方法。以pip安装方法为例,飞桨提供了CPU和GPU两个版本安装方法:

CPU版本安装方法:

pipinstallpaddlepaddle

GPU版本安装方法:

pipinstallpaddlepaddle-gpu

实践:手写数字识别任务

MNIST是非常有名的手写体数字识别数据集,在无论是Tensorflow的官方网站还是PaddlePaddle的新手入门,都是通过它做实战讲解,它由手写体数字的图片和相对应的标签组成,如:

MNIST数据集分为训练图像和测试图像。训练图像60000张,测试图像10000张,每一个图片代表0-9中的一个数字,且图片大小均为28*28的矩阵。这一小节将会以PaddlePaddle官方提供的MNIST手写数字识别任务为例,进行PaddlePaddle框架的基本学习。与其他深度学习任务一样,飞桨同样要通过以下四个步骤完成一个相对完整的深度学习任务:

数据集的准备和加载;

模型构建;

模型训练;

模型评估。

加载内置数据集

飞桨框架内置了一些常见的数据集,在这个示例中,开发者可以加载飞桨框架的内置数据集,例如本案例所涉及到的手写数字体数据集。这里加载两个数据集,一个用来训练模型,一个用来评估模型。

importpaddle.vision.transformsasTtransform=T.Normalize(mean=[127.5],std=[127.5],data_format='CHW')

下载数据集

train_dataset=paddle.vision.datasets.MNIST(mode='train',transform=transform)val_dataset=paddle.vision.datasets.MNIST(mode='test',transform=transform)

模型搭建

通过Sequential将一层一层的网络结构组建起来。注意,需要先对数据进行Flatten操作,将[1,28,28]形状的图片数据改变形状为[1,784]。

mnist=paddle.nn.Sequential(

paddle.nn.Flatten(),

paddle.nn.Linear(784,512),

paddle.nn.ReLU(),

paddle.nn.Dropout(0.2),

paddle.nn.Linear(512,10))

模型训练

在训练模型前,需要配置训练模型时损失的计算方法与优化方法,开发者可以使用飞桨框架提供的prepare完成,之后使用fit接口来开始训练模型。

#预计模型结构生成模型对象,便于进行后续的配置、训练和验证

model=paddle.Model(mnist)

#模型训练相关配置,准备损失计算方法,优化器和精度计算方法

model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),paddle.nn.CrossEntropyLoss(),

paddle.metric.Accuracy())

#开始模型训练

model.fit(train_dataset,

epochs=5,

batch_size=64,

verbose=1)

训练结果:

,.Epoch1/5step938/938[==============================]-loss:0.1801-acc:0.9032-8ms/stepEpoch2/5step938/938[==============================]-loss:0.0544-acc:0.9502-8ms/stepEpoch3/5step938/938[==============================]-loss:0.0069-acc:0.9595-7ms/stepEpoch4/5step938/938[==============================]-loss:0.0094-acc:0.9638-7ms/stepEpoch5/5step938/938[==============================]-loss:0.1414-acc:0.9670-8ms/step

模型评估

开发者可以使用预先定义的验证数据集来评估前一步训练得到的模型的精度。

model.evaluate(val_dataset,verbose=0)

结果如下:

{'loss':[2.145765e-06],'acc':0.9751}

可以看出,初步训练得到的模型效果在97.5%附近,在逐渐了解飞桨后,开发者可以通过调整其中的训练参数来提升模型的精度。

与Serverless架构结合

PaddlePaddle团队首次开源文字识别模型套件PaddleOCR,目标是打造丰富、领先、实用的文本识别模型/工具库。该模型套件是一个实用的超轻量OCR系统。主要由DB文本检测、检测框矫正和CRNN文本识别三部分组成。该系统从骨干网络选择和调整、预测头部的设计、数据增强、学习率变换策略、正则化参数选择、预训练模型使用以及模型自动裁剪量化8个方面,采用19个有效策略,对各个模块的模型进行效果调优和瘦身,最终得到整体大小为3.5M的超轻量中英文OCR和2.8M的英文数字OCR。

本地开发

#index.py

importbase64

importbottle

importrandom

frompaddleocrimportPaddleOCR

ocr=PaddleOCR(use_gpu=False)

@bottle.route('/ocr',method='POST')

deflogin():

filePath='./temp/'+(''.join(random.sample('zyxwvutsrqponmlkjihgfedcba',5)))

withopen(filePath,'wb')asf:

f.write(base64.b64decode(bottle.request.body.read().decode("utf-8").split(',')[1]))

ocrResult=ocr.ocr(filePath,cls=False)

return{'result':[[line[1][0],float(line[1][1])]forlineinocrResult]}

bottle.run(host='0.0.0.0',port=8080)

开发完成之后,运行该项目:

pythonindex.py

可以看到服务已经启动:

然后通过Postman工具进行测试,首先准备一张图片(此处以PaddleOCR项目内置的测试图片为例):

通过将图片转换为Base64编码,并以POST方法请求刚刚启动的Web服务,可以看到PaddleOCR的执行结果:

部署到Serverless架构

目前各大云厂商的FaaS平台均已经逐渐支持容器镜像部署。所以,可以将项目打包成镜像,并通过ServerlessDevs部署到阿里云函数计算。

部署前准备

首先需要完成Dockerfile文件:

FROMpython:3.7-slim

RUNaptupdate&&aptinstallgcclibglib2.0-devlibgl1-mesa-glxlibsm6libxrender1-y&&-buildpaddleocrlescikit-buildpaddleocr

#Createappdirectory

WORKDIR/usr/src/app

#Bundleappsource

COPY..

编写符合ServerlessDevs规范的Yaml文档:

#s.yaml

edition:1.0.0name:paddle-ocraccess:defaultservices:paddle-ocr:component:fcprops:region:cn-shanghaiservice:name:paddle-ocrdescription:paddle-ocrservicefunction:name:paddle-ocr-functionruntime:custom-containercaPort:8080codeUri:./timeout:60customContainerConfig:image:'registry.cn-shanghai.aliyuncs.com/custom-container/paddle-ocr:0.0.1'command:'["python"]'args:'["index.py"]'triggers:-name:httpTriggertype:httpconfig:authType:anonymousmethods:-GET-POSTcustomDomains:-domainName:autoprotocol:HTTProuteConfigs:-path:/*

项目部署

首先构建镜像,此处可以通过ServerlessDevs进行构建:

sbuild--use-docker

构建完成之后,可以通过工具直接进行部署:

sdeploy--push-registryacr-internet--use-local-y

部署完成,可以看到系统返回的测试地址:

项目测试

此时,可以通过该测试地址进行测试,同样得到了预期效果:

项目优化

通过对部署在Serverless架构上的项目进行请求,可以看到冷启动和热启动的时间消耗:

通过冷启动与热启动的对比,我们可以发现,在热启动时,整个系统的性能是相对优秀的。但是遇到冷启动整个项目的响应时常是不可控的,此时可以考虑一下途径进行优化:

缩减容器镜像的体积,减少不必要的依赖、文件等,清理掉安装依赖时留下的缓存等;因为函数计算的冷启动包括镜像拉取时间;

部分流程进行优化,例如在PaddleOCR项目中有明确说明:“paddleocr会自动下载ppocr轻量级模型作为默认模型”,所以这就意味着该项目在Serverless架构的冷启动过程中,相对比热启动还增加了一个模型下载和解压的流程,所以这一部分在必要时是可以打入到容器镜像中,进而减少冷启动带来的影响;

开启镜像加速,可以有效降低容器镜像的冷启动,在阿里云函数计算官方文档中有相关镜像加速的性能测试描述:“开启函数计算的镜像加速后,可提速2~5倍,将分钟级的镜像拉取缩短至秒级”;

实例预留,最大程度上降低冷启动率。通过实例预留,可以通过多种算法/策略进行实例的预热和预启动,可以最大程度上降低Serverless架构冷启动带来的影响;

来源:阿里云

Ⅳ OCR识别实战之Python 自动识别图片文字

基于Python的自动识别图片文字的OCR技术,为我们提供了高效、便捷的文本提取方法。让我们深入了解这一技术的实现和优势。

一、OCR技术概述

OCR技术,即光学字符识别,能够将纸质文档、图片等载体上的文字信息转换为可编辑的文本格式。在Python中,通过集成Tesseract-OCR、OpenCV等库,实现图片文字的自动识别成为可能。

二、Python中OCR技术实现

1. 准备环境
确保Python和pip已经安装在电脑上。若使用Anaconda,它内置Python和pip,更加便捷。推荐使用VSCode编辑器,功能强大且用户友好。

安装依赖:
- Windows用户打开CMD,MacOS用户打开Terminal,执行命令安装cnocr或pytesseract。
- 安装cnocr:pip install cnocr
- 安装pytesseract:pip install pytesseract
- 若仅需识别中文,cnocr是一个合适选择。若需识别其他语言,Tesseract是更优选。

2. 使用示例代码

使用cnocr识别图片中的中文:
python
from cnocr import CnOcr
ocr = CnOcr()
res = ocr.ocr('test.png')
print("Predicted Chars:", res)

使用pytesseract识别英文:
python
import pytesseract
from PIL import Image
image = Image.open('test.png')
code = pytesseract.image_to_string(image, lang='eng')
print(code)

三、Python OCR的优缺点

优点:
- 高精确度:深度学习技术的应用,如卷积神经网络(CNN)和循环神经网络(RNN),提供高精度的文字识别能力。
- 处理速度快:优化后的OCR库能够快速处理大量图片,提高识别效率。
- 多语言支持:支持多种语言的字符识别,满足不同语言文字识别需求。
- 可定制性强:提供丰富参数和配置选项,便于根据具体需求进行定制。
- 开源生态系统:丰富的OCR相关开源库和工具,提供了资源和二次开发便利。
- 灵活性和跨平台性:Python编程语言的特性使得OCR应用开发更加灵活便捷,能够在多种操作系统上运行。

缺点:
- 复杂场景处理不足:在光线不足、字体样式复杂或背景干扰等情况下的准确率可能下降。
- 依赖图像质量:图像的清晰度、分辨率和失真情况会影响识别准确度。
- 手写字体识别效果有限:手写字体的多样性和复杂性给识别带来挑战。
- 硬件资源需求:大规模图片处理可能需要较高的计算资源,对低配置设备可能受限。
- 数据需求与质量限制:深度学习训练需要大量高质量标注数据,获取和标注数据是一项耗时耗力的任务。
- 隐私与安全问题:处理敏感信息时需注意隐私保护,避免泄露风险。

总结,Python OCR技术凭借高精确度、速度快和多语言支持等优点,成为文本提取领域的重要工具。然而,处理复杂场景、手写字体识别和依赖图像质量等问题仍需用户在实际应用中加以考虑和优化。

热点内容
什么车带导航最低配置 发布:2025-01-11 09:04:42 浏览:929
python导入excel数据 发布:2025-01-11 08:52:49 浏览:569
linux函数脚本 发布:2025-01-11 08:52:49 浏览:827
s4存储卡 发布:2025-01-11 08:48:39 浏览:975
我的世界服务器人数最多的一次 发布:2025-01-11 08:48:37 浏览:325
python音量 发布:2025-01-11 08:48:34 浏览:222
99压缩 发布:2025-01-11 08:43:47 浏览:832
ftp服务器怎么上传 发布:2025-01-11 08:43:45 浏览:519
阅读脚本是什么 发布:2025-01-11 08:39:27 浏览:778
booljava 发布:2025-01-11 08:36:08 浏览:768