印章/公章識別:PaddleX下的“Seal-Recognition”模型

????????最近做項目需要對印章進行識別,并提取其中的印章文字,又不希望這個模型太大,還要方便部署,于是乎這個模型是個不錯的選擇。

一、模型簡介

????????“Seal-Recognition”模型是PaddleX旗下的一款模型(PaddleX 是基于飛槳框架構建的低代碼開發工具,它集成了眾多開箱即用的預訓練模型,可以實現模型從訓練到推理的全流程開發,支持國內外多款主流硬件,助力AI 開發者進行產業實踐。模型豐富一鍵調用:將覆蓋文本圖像智能分析、OCR、目標檢測、時序預測等多個關鍵領域的 200+ 飛槳模型整合為 19 條模型產線,通過極簡的 Python API 一鍵調用,快速體驗模型效果。同時支持 20+ 單功能模塊,方便開發者進行模型組合使用)。印章文本識別是一種自動從文檔或圖像中提取和識別印章內容的技術。印章文本識別產線中包含版面區域分析模塊、印章印章文本檢測模塊和文本識別模塊。

二、模型安裝(本地)

? ? ? ? 1、推薦使用conda創建虛擬環境,python版本為3.8~3.10(因為paddleX的支持版本是這樣的),我的是3.10。

? ? ? ? 2、安裝paddlepaddle

????????這里給出地址:https://github.com/PaddlePaddle/PaddleX/blob/release/3.0-beta1/docs/installation/paddlepaddle_install.md推薦使用GPU進行推理,不然可能會出現很多錯誤,下面給出pip安裝的指令。也可前往官網進行下載。

# cpu
python -m pip install paddlepaddle==3.0.0b1 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/# gpu,該命令僅適用于 CUDA 版本為 11.8 的機器環境
python -m pip install paddlepaddle-gpu==3.0.0b1 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/# gpu,該命令僅適用于 CUDA 版本為 12.3 的機器環境
python -m pip install paddlepaddle-gpu==3.0.0b1 -i https://www.paddlepaddle.org.cn/packages/stable/cu123/

? ? ? ? 3、安裝paddleX

? ? ? ? 它提供了wheel包和插件安裝模式,由于需要模型推理與集成?,這里使用wheel包安裝。指令如下:(!!!請務必保證 PaddlePaddle 安裝成功,安裝成功后,方可安裝paddleX)

pip install https://paddle-model-ecology.bj.bcebos.com/paddlex/whl/paddlex-3.0.0b1-py3-none-any.whl

?三、模型使用

? ? ? ? 到這里,其實印章模型并沒有下載,需要我們創建pipeline后,會自動下載。只需要幾行即可完成推理。代碼如下:

from paddlex import create_pipelinepipeline = create_pipeline(pipeline="seal_recognition")output = pipeline.predict("seal_text_det.png")
for res in output:res.print() ## 打印預測的結構化輸出res.save_to_img("./output/") ## 保存可視化結果

?????????運行這段代碼,會自動下載該模型所需要的文件,會自動保存在C:\Users\XXXX\.paddlex目錄下,如果你不想下載到C盤,官方也給出了方式。例如,若您的配置文件保存在?./my_path/seal_recognition.yaml?,則只需執行:

from paddlex import create_pipeline
pipeline = create_pipeline(pipeline="./my_path/seal_recognition.yaml")
output = pipeline.predict("seal_text_det.png")
for res in output:res.print() ## 打印預測的結構化輸出res.save_to_img("./output/") ## 保存可視化結果

? ? ? ? 他會自動下載所印章文本識別產線中包含版面區域分析模塊、印章印章文本檢測模塊和文本識別模塊。當然你可以根據自己的需求進行下載。給出官網:https://github.com/PaddlePaddle/PaddleX/blob/release/3.0-beta1/docs/pipeline_usage/tutorials/ocr_pipelines/seal_recognition.md他的結果都是每個樣本的預測結果均為dict類型,打印出來也是dict類型,針對于我的項目,我需要提取其中的文字信息,所以做了以下的代碼更改:

 # 處理每個預測結果(代碼片段)for res in output:if 'ocr_result' in res:ocr_result = res['ocr_result']rec_text = ocr_result.get('rec_text', None)  # 安全提取 `rec_text`if rec_text:total_num += 1# 判斷 `rec_text` 的類型if isinstance(rec_text, list):# 如果是列表,將列表中的元素拼接為一個字符串combined_text = ''.join(rec_text)seal_texts.append(combined_text)else:# 如果是單一字符串,直接添加seal_texts.append(rec_text)print(f"{filename}中的印章信息: {seal_texts[-1]}")

這樣會安全提取出文字,不過由于印章被文字遮擋的比較多,因此文字并不是這么的精確。

????????當然他的這個res.print()里面的ocr_result字段其實還包含了一個score,是用來給識別出來的印章進行一個評分,滿分為1 ,如果識別的文字不是很準確或者文字根本就沒有識別出來,可以查看這個得分來進行一個評判。比如我的page6就沒有被識別出文字,但是有socre。

? ? ? ? 如果對于預測的結果不太滿意,官方也給出了方案,可以自己進行微調。如果印章文本識別產線提供的默認模型權重在您的場景中,精度或速度不滿意,您可以嘗試利用您自己擁有的特定領域或應用場景的數據對現有模型進行進一步的微調,以提升印章文本識別產線的在您的場景中的識別效果。這里我沒有進行微調,如有需要,可以參照官網:PaddleX/docs/pipeline_usage/tutorials/ocr_pipelines/seal_recognition.md at release/3.0-beta1 · PaddlePaddle/PaddleX · GitHub

? ? ? ??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73541.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73541.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73541.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

An effective algorithm for peptide de novo sequencing from MS/MS spectra

1. 研究背景 數據庫搜索方法 需要已知的蛋白數據庫,但對于未知蛋白質,無法適用。de novo 測序方法 直接從 MS/MS 數據推斷氨基酸序列,非常重要。 2. 現有方法的問題 暴力搜索方法:枚舉所有可能的肽序列并與 MS/MS 數據比對&…

算法專題一:雙指針

1.移動零 題目鏈接:283. 移動零 - 力扣(LeetCode) 我們可以定義一個dest,一個cur,dest表示數組中不為零的數的最后一位,cur用來遍歷數組 class Solution {public void moveZeroes(int[] nums) {for(int cur…

【大模型實戰】利用ms-swift微調框架對QwQ-32B推理模型進行微調

1. 背景介紹 之前我們在《大模型訓練/微調的一些經驗分享》、《利用DeepSeek-R1數據微調蒸餾ChatGLM32B讓大模型具備思考能力》中做了相關模型微調的介紹。目前在基座大模型能力還沒有達到足夠牛的情況下,大模型微調在商業化、垂直領域應用依然是不可或缺&#xff0…

【Unity3D】Addressables使用流程

Package Manager - 搜索 Addressables 安裝 Window -> Asset Management -> Addressables 打開窗口 New -> 新建Packed Assets 資源組 默認資源組Default xxx (Default) 將資源,如預制體直接拖拽進資源組 Build -> New Build -> Default Buil…

k8s serviceaccount在集群內指定apiserver時驗證錯誤的問題

在主機上,找到TOKEN,可以直接指定apiserver使用 rootubuntu-server:/home# kubectl auth can-i --list --server https://192.168.85.198:6443 --token"eyJhbGciOiJSUzI1NiIsImtpZCI6IlFlMHQ3TzhpcGw1SnRqbkYtOC1NUWlWNUpWdGo5SGRXeTBvZU9ib25iZD…

Linux驅動開發-①pinctrl 和 gpio 子系統②并發和競爭③內核定時器

Linux驅動開發-①pinctrl 和 gpio 子系統②并發和競爭③內核定時器 一,pinctrl 和 gpio 子系統1.pinctrl子系統2.GPIO子系統 二,并發和競爭1.原子操作2.自旋鎖3.信號量4.互斥體 三,按鍵實驗四,內核定時器1.關于定時器的有關概念1.…

數據庫的高階知識

目錄 一、case when二、幾種常見的嵌套查詢2.1 比較運算符2.2 ANY/ALL 關鍵詞2.3 in 關鍵詞2.4 EXISTS關鍵詞2.5 in和exists的異同點 三、開窗函數 數據庫的基本知識 數據庫的高階知識 一、case when 在實際工作中,經常會涉及以下兩類問題: 數據的映射…

【Kubernetes】Service 的類型有哪些?ClusterIP、NodePort 和 LoadBalancer 的區別?

在 Kubernetes 中,Service 是一種抽象的方式,用于將一組 Pod 進行連接并暴露給外部或集群內部訪問。它的主要目的是通過提供穩定的 IP 地址和端口來允許其他服務或客戶端與一組 Pod 進行通信。 Service 類型 Kubernetes 中 Service 有四種主要類型&…

MapReduce處理數據流程

(一)Shuffle MapReduce中的Shuffle過程指的是在Map方法執行后、Reduce方法執行前對數據進行分區排序的階段 (二)處理流程 1. 首先MapReduce會將處理的數據集劃分成多個split,split劃分是邏輯上進行劃分,…

OrioleDB: 新一代PostgreSQL存儲引擎

PostgreSQL 12 引入了可插拔式的表存儲方法接口,允許為不同的表選擇不同的存儲機制,例如用于 OLTP 操作的堆表(HEAP、默認)、用于 OLAP 操作的列式表(Citus),以及用于超快速搜索處理的內存表。 …

電腦自動關機故障維修案例分享

電腦基本配置: C P U: AMD A10 9700 內存:8G 硬盤:金邦512G固態硬盤 主板:華碩 A320M-F 顯卡:集成(核心顯卡) 操作系統:Win10專業版 故障描述: 使用一段時間會黑屏…

JVM垃圾收集器相關面試題(1)

垃圾收集與內存管理摘要 一.核心垃圾收集算法對比 算法原理優點缺點適用場景標記-清除兩次遍歷(標記存活對象→清除未標記對象)實現簡單內存碎片化、雙遍歷效率低老年代(結合整理)標記-復制內存對半分,存活對象復制到…

棧(LIFO)算法題

1.刪除字符串中所有相鄰的重復字符 注意,我們需要重復處理,而不是處理一次相鄰的相同元素就結束了。對示例來說,如果只進行一次處理,結果為aaca,但是處理之后又出現了相鄰的重復元素,我們還得繼續處理&…

conda的基本使用及pycharm里設置conda環境

創建conda環境 conda create --name your_env_name python3.8 把your_env_name換成實際的conda環境名稱,python后邊的根據自己的需要,選擇python的版本。 激活conda環境 conda activate your_env_name 安裝相關的包、庫 conda install package_name …

Python基于深度學習的多模態人臉情緒識別研究與實現

一、系統架構設計 A[數據采集] --> B[預處理模塊] B --> C[特征提取] C --> D[多模態融合] D --> E[情緒分類] E --> F[系統部署] F --> G[用戶界面] 二、數據準備與處理 1. 數據收集 - 視頻數據:FER2013(靜態圖像&#xff0…

synchronized與 Java內置鎖(未寫完)

文章目錄 一、 synchronized 關鍵字二、Java對象結構1. 對象頭2. 對象體3. 對齊字節4. 對象頭中的字段長度5. Mark Word 的結構信息6. 使用 JOL 工具查看對象的布局 三、Java 內置鎖機制3.1 內置鎖的演進過程1. 無鎖狀態2. 偏向鎖狀態3. 輕量級鎖狀態4. 重量級鎖狀態 一、 sync…

LLM(3): Transformer 架構

Transformer 架構是當前大語言模型的主力架構和基礎技術,本文以通俗易懂的方式,對此作簡要介紹。 1.4 介紹 Transformer 架構 大多數現代的大規模語言模型(LLMs)依賴于 Transformer 架構,這是一種在 2017 年的論文《…

11.【.NET 8 實戰--孢子記賬--從單體到微服務--轉向微服務】--微服務基礎工具與技術--Ocelot 網關--整合日志

網關作為微服務架構的入口,承載著各服務間的請求轉發與安全校驗,其日志信息尤為關鍵。通過整合網關日志,可以將分散在不同系統中的訪問記錄、錯誤提示和異常信息集中管理,為問題排查提供全景視角。在排查故障時,統一日…

88.HarmonyOS NEXT 性能監控與調試指南:構建高性能應用

溫馨提示:本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦! HarmonyOS NEXT 性能監控與調試指南:構建高性能應用 文章目錄 HarmonyOS NEXT 性能監控與調試指南:構建高性能應用1. 性能監…

012---狀態機的基本知識

1. 摘要 文章為學習記錄。主要介紹狀態機概述、狀態轉移圖、狀態編碼、狀態機寫法、狀態機代碼示例。 2. 狀態機概述 狀態機 (Finite State Machine),也稱為同步有限狀態機,用于描述有先后順序或時序規律的事情。 “同步”&…