印章/公章识别: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.mzph.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),也称为同步有限状态机,用于描述有先后顺序或时序规律的事情。 “同步”&…