當前位置:首頁 » 編程軟體 » 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技術憑借高精確度、速度快和多語言支持等優點,成為文本提取領域的重要工具。然而,處理復雜場景、手寫字體識別和依賴圖像質量等問題仍需用戶在實際應用中加以考慮和優化。

熱點內容
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 瀏覽:831
ftp伺服器怎麼上傳 發布:2025-01-11 08:43:45 瀏覽:518
閱讀腳本是什麼 發布:2025-01-11 08:39:27 瀏覽:777
booljava 發布:2025-01-11 08:36:08 瀏覽:768
我的世界伺服器必要弄的東西 發布:2025-01-11 08:32:56 瀏覽:424
postgre資料庫 發布:2025-01-11 08:32:22 瀏覽:481
android登錄源碼 發布:2025-01-11 08:32:10 瀏覽:676