适用于验证码的OCR,识别快速,使用简单!
环境
windows 11
python 3.9
前言
Muggle OCR 是一个高效本地 OCR 模块,旨在通过简单的几步设置提供强大的文本识别功能,无论是在处理印刷文本还是解析验证码,都能让用户在工作中畅通无阻。Muggle OCR 易于安装和使用,支持双模型,识别快速准确。
实操
首先下载源码
# 克隆代买
git clone https://github.com/litongjava/muggle_ocr.git
cd muggle_ocr# 安装依赖
pip install -r requirements.txt# 安装muggle ocr
python setup.py install# 安装其它依赖
pip install absl-py ml-dtypes wrapt gast astunparse opt_einsum 这里需要注意的是 python 版本需要3.8以上
安装完毕后,我们再来看看如何使用?看下面的示例
import time# 1. 导入包
import muggle_ocr"""
使用预置模型,预置模型包含了[ModelType.OCR, ModelType.Captcha] 两种
其中 ModelType.OCR 用于识别普通印刷文本, ModelType.Captcha 用于识别4-6位简单英数验证码"""# 打开印刷文本图片
with open(r"test1.png", "rb") as f:ocr_bytes = f.read()# 打开验证码图片
with open(r"test2.png", "rb") as f:captcha_bytes = f.read()# 2. 初始化;model_type 可选: [ModelType.OCR, ModelType.Captcha]
sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.OCR)# ModelType.Captcha 可识别光学印刷文本
for i in range(5):st = time.time()# 3. 调用预测函数text = sdk.predict(image_bytes=ocr_bytes)print('test1 text={}, time={}'.format(text, time.time() - st))# ModelType.Captcha 可识别4-6位验证码
sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha)
for i in range(5):st = time.time()# 3. 调用预测函数text = sdk.predict(image_bytes=captcha_bytes)print('test2 text={}, time={}'.format(text, time.time() - st))"""
使用自定义模型
支持基于 https://github.com/kerlomz/captcha_trainer 框架训练的模型
训练完成后,进入导出编译模型的[out]路径下, 把[graph]路径下的pb模型和[model]下的yaml配置文件放到同一路径下。
将 conf_path 参数指定为 yaml配置文件 的绝对或项目相对路径即可,其他步骤一致,如下示例:
ocr.yaml和ocr.pb文件从源码包中拷贝过来
"""
with open(r"test2.png", "rb") as f:b = f.read()
sdk = muggle_ocr.SDK(conf_path="./ocr.yaml")
st = time.time()
text = sdk.predict(image_bytes=b)
print('test3 text={}, time={}'.format(text, time.time() - st)) 

使用上述图片测试,执行代码可以得到
MuggleOCR Session [ocr] Loaded.
test1 text=曹文轩教授作序推荐, time=0.012343645095825195
test1 text=曹文轩教授作序推荐, time=0.008872270584106445
test1 text=曹文轩教授作序推荐, time=0.0076770782470703125
test1 text=曹文轩教授作序推荐, time=0.00856161117553711
test1 text=曹文轩教授作序推荐, time=0.007288694381713867
MuggleOCR Session [captcha] Loaded.
test2 text=3n3d, time=0.013895511627197266
test2 text=3n3d, time=0.008069753646850586
test2 text=3n3d, time=0.007512807846069336
test2 text=3n3d, time=0.007458209991455078
test2 text=3n3d, time=0.007974863052368164
MuggleOCR Session [ocr] Loaded.
test3 text=3n3D, time=0.010023832321166992 示例中分别使用模型 ModelType.OCR 和 ModelType.Captcha 对不同类型的图片进行了文字识别,前者针对印刷文本,后者针图片验证码。第三个示例使用了配置文件 yaml 初始化模型,若指定 conf_path 参数则优先使用自定义模型。需要注意的是,muggle ocr 仅支持单行文本识别,如有多行本文识别需求可以考虑 earyocr 或者 umi-ocr。
参考资料
https://github.com/litongjava/muggle_ocr
https://xugaoxiang.com/2020/12/06/easyocr/
https://xugaoxiang.com/2023/06/27/umi-ocr/
过往精彩
手把手AI实战(七)制作搞笑动画视频
手把手AI实战(六)老照片动起来
手把手AI实战(五)视频风格转换
手把手AI实战(四)让图片开口说话
手把手AI实战(三)让图片中的人物舞动起来
手把手AI实战(二)古诗词教学视频
手把手AI实战(一)治愈系动画视频
相关文章:
适用于验证码的OCR,识别快速,使用简单!
环境 windows 11python 3.9 前言 Muggle OCR 是一个高效本地 OCR 模块,旨在通过简单的几步设置提供强大的文本识别功能,无论是在处理印刷文本还是解析验证码,都能让用户在工作中畅通无阻。Muggle OCR 易于安装和使用,支持双模型&a…...
超简单适合练手的双指针题:判断子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列&#…...
打破老美垄断,潘展乐商业价值起飞
文|琥珀食酒社 作者 | 积溪 奥运会上的潘展乐 真是牛逼坏了 拿下男子100米自由游金牌 打破欧美长达近百年垄断 搞定男子4x100米混合泳金牌 终结了美国在这项目上 10年不败的神话 比赛前 美国选手对他爱答不理 招呼都不打 比赛后美国选手想套热乎 潘展乐…...
java面试题:简化URL
1 问题场景 编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。 注意:字符串长度在 [0, 500000] 范围内。 2 答案 2.1 解决方案一 直接使用String方法解决 public s…...
用 echarts 开发地图、点击展示自定义信息框
1、下载所需地市的json 链接:DataV.GeoAtlas地理小工具系列 在右侧输入需要的名称,然后下载json文件到本地 2、在html 中准备容器,并设置宽高 <div id"mapContent"> <div ref"mapChart" style"width:10…...
Android 应用兼容性变更调试
引言 本文将介绍如何调试和解决这些兼容性问题,并记录调试过程中实际操作的步骤和方法。在Android应用开发中,随着Android系统版本的不断更新,应用的兼容性问题变得越来越复杂。 推荐:《Android系统开发中高级定制专栏导读》08-03 16:04:53.518 6555 6555 D Compatibili…...
76 多态
多态(polymorphism)是指基类的同一个方法在不同派生类对象中具有不同的表现和行为。 派生类继承了基类的行为和属性之后,还会增加某些特定的行为和属性,同时还可能会对继承来的某些行为进行一定的改变,这都是多态的表现…...
数据采集工具之Canal
本文主要介绍canal采集mysql数据的tcp、datahub(kafka)模式如何实现 1、下载canal https://aliyun-datahub.oss-cn-hangzhou.aliyuncs.com/tools/canal.deployer-1.1.5-SNAPSHOT.tar.gz canal的原理类似于mysql的主从复制,canal模拟的是从节点拉取主节点的binlog数…...
【后端】消息中间件小册
1.RabbitMQ RabbitMQ 是一个流行的消息中间件系统,采用 AMQP(高级消息队列协议)来管理消息的传递。它的工作原理涉及多个组件和机制来确保消息的可靠性和完整性。以下是 RabbitMQ 的基本工作原理以及如何保证消息不丢失的机制: R…...
【进阶篇-Day14:JAVA中IO流之转换流、序列化流、打印流、Properties集合的介绍】
目录 1、转换流1.1 转换流分类:1.2 转换流的作用(1)按照指定的字符编码读写操作:(2)将字节流转换为字符流进行操作: 2、序列化流2.1 序列化的基本使用:2.2 序列化的操作流程…...
【Material-UI】Checkbox 组件中的 Label Placement 设置详解
文章目录 一、Checkbox 组件简介1. 组件概述2. labelPlacement 属性 二、labelPlacement 属性的使用方法三、各标签位置的效果与应用场景1. Top(顶部)2. Start(左侧)3. Bottom(底部)4. End(右侧…...
XJTUSE-离散数学-集合
基本概念 集合的包含与相等,如子集幂集:以A的所有子集组成的集合称为A的幂集AB <> 集合的基本运算 基本运算证明会考 交运算并运算补运算差运算:A \ B 环和运算:环积运算: 集合的其他表示方法 文图表示法 …...
安徽省消防设施操作员题库
1.()是做人的基本准则,也是社会道德和职业道德的一项基本规范。 A.诚实守信(正确答案) B.爱岗敬业 C.以人为本 D.钻研业务 2.()是指为了追求完美,坚持工匠精神,在工作中不放松对自己的要求。 A.爱岗敬业 B.精益求精(正确答案) C.勤奋刻苦 D.专…...
Singularity容器安装与使用
Singularity容器技术 docker的缺点: 资源限制问题:Slurm利用cgroups实现资源分配,Docker通过ocker daemon无法实现。 权限问题:Docker daemon使用 root用户启动,HPC场录期望使用普通用户运行容器。 singuiarily主要是适合HPC中的普通用户,…...
Linux 文件、重定向、缓冲区
个人主页:仍有未知等待探索-CSDN博客 专题分栏: Linux 目录 一、文件 1、文件的理解(浅层) 1.文件是什么? 2.文件操作的前提 3.文件的存储 4.一个进程可以打开多个文件吗?如果可以怎么管理的…...
WEB漏洞-SQL注入之MYSQL注入
跨库注入的原理:针对同一IP下的不同域名 同一服务器下 网站A对应数据库A 网站B对应数据库B 网站C对应数据库C 如果某网站的存在注入点,注入点的权限恰好是root权限,也就是最高权限,那么可以通过跨库注入获取其他网站的数据库…...
mysql 查询 from a, b 和 a left join b 有什么区别
在MySQL中,from a, b 和 a left join b 有显著的区别,主要体现在查询结果和使用场景上。 基本语法与返回结果: from a, b:这种写法实际上是将两个表作为一个整体来处理,即假设这两个表是同一个表。因此,它…...
禁用ssh 22端口
在Linux系统中,要关闭SSH端口,可以通过修改SSH配置文件或防火墙规则来实现。 方法一:修改SSH配置文件 1. 使用root用户登录Linux系统。 2. 打开SSH配置文件,可以使用任何文本编辑器,如vi或nano。在大多数Linux发行版上…...
C++基础编程的学习3
nullptr关键字 在C11之前,空指针通常用NULL或0表示。然而,这些表示方法存在类型安全问题。C11引入了nullptr关键字,它提供了一个明确的、类型安全的空指针值。 Lambda表达式 Lambda表达式是C11引入的一种便捷的匿名函数定义方式。当Lambda…...
Java中的Optional类:解锁优雅编程的秘密
引言 在Java开发的世界里,空指针异常(NullPointerException)一直是让无数程序员头疼的问题之一。它不仅打断了程序的正常执行流程,还可能隐藏在复杂的业务逻辑之中,难以定位。自Java 8起,一个新的类——Op…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...
多模态学习路线(2)——DL基础系列
目录 前言 一、归一化 1. Layer Normalization (LN) 2. Batch Normalization (BN) 3. Instance Normalization (IN) 4. Group Normalization (GN) 5. Root Mean Square Normalization(RMSNorm) 二、激活函数 1. Sigmoid激活函数(二分类&…...
Vue.js教学第二十一章:vue实战项目二,个人博客搭建
基于 Vue 的个人博客网站搭建 摘要: 随着前端技术的不断发展,Vue 作为一种轻量级、高效的前端框架,为个人博客网站的搭建提供了极大的便利。本文详细介绍了基于 Vue 搭建个人博客网站的全过程,包括项目背景、技术选型、项目架构设计、功能模块实现、性能优化与测试等方面。…...
React与原生事件:核心差异与性能对比解析
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
Linux--vsFTP配置篇
一、vsFTP 简介 vsftpd(Very Secure FTP Daemon)是 Linux 下常用的 FTP 服务程序,具有安全性高、效率高和稳定性好等特点。支持匿名访问、本地用户登录、虚拟用户等多种认证方式,并可灵活控制权限。 二、安装与启动 1. 检查是否已…...
