易语言调用RapidOCR实现本地文字识别例子 含源码

智谱

AI 正在加载摘要

前言

在易语言开发中,文字识别(OCR)一直是一个常见需求。传统的方案如大漠字库虽然速度快,但需要预先制作字库,对于未知字体或复杂场景的适应性较差。而在线OCR API虽然省事,却受限于网络延迟和调用次数。

RapidOCR提供了一个轻量级、完全离线的OCR解决方案。它基于ONNX Runtime推理引擎,无需安装庞大的深度学习框架,一个DLL即可完成文字检测、方向分类和文字识别三大任务。更重要的是,RapidOCR支持返回文字坐标,这意味着我们不仅能知道图片中有什么字,还能精确定位每个字的位置——这对于游戏自动化、UI元素定位等场景尤为重要。

本文将通过一个完整的易语言调用示例,详细解析RapidOCR的使用方法

效果展示:

QQ20260417-144227

源码下载地址:

为什么选择RapidOCR

在众多OCR方案中,RapidOCR有其独特的优势:

  • 完全离线:不需要联网,数据本地处理,隐私安全有保障

  • 免字库:基于深度学习模型,能识别任意字体,无需预先制作字库

  • 返回坐标:可以获取每个文字块甚至单字的坐标信息,便于后续的点击定位等操作

  • 轻量化部署:一个DLL配合几个模型文件即可运行,无需Python环境

当然,它也有局限性——相比大漠字库的个位数毫秒级速度,RapidOCR的识别耗时通常在几十到上百毫秒,不适合需要超高频率调用的场景

核心代码解析

1. 模型初始化

使用RapidOCR的第一步是加载模型。RapidOCR需要三类模型:检测模型(det)用于找出图中文字的位置、方向模型(cls)用于判断文字方向、识别模型(rec)用于识别具体字符。此外还需要一个字典文件用于字符映射。

.子程序 Init, 整数型, 公开
.局部变量 det, 字节集
.局部变量 cls, 字节集
.局部变量 rec, 字节集
.局部变量 keys, 字节集
.局部变量 ret, 整数型

det = #模型_det
cls = #模型_cls
rec = #模型_rec
keys = #模型_字典_简体中文_UTF8

ret = model (det, 取字节集长度 (det), cls, 取字节集长度 (cls), rec, 取字节集长度 (rec), keys, 4)
ptr = ret
返回 (ret)

这里的关键是model函数,它来自RapidOCR.dll。函数接收四个字节集数据及其长度,返回一个模型指针。这个指针后续将用于所有OCR调用。注意第四个参数4表示线程数量,可根据CPU核心数调整。

模型文件通常以资源形式嵌入程序(如代码中的#模型_det),这样发布时只需一个exe和一个dll,更加简洁。

2. 调用OCR识别

加载模型后,就可以调用ocr函数进行识别了:

.子程序 RapidOCR_Duo, 文本型, 公开
.参数 参_图片路径, 文本型
.局部变量 padding, 整数型, , , 60
.局部变量 maxSideLen, 整数型, , , 1024
.局部变量 boxScoreThresh, 小数型, , , 0.5
.局部变量 boxThresh, 小数型, , , 0.3
.局部变量 unClipRatio, 小数型, , , 1.5
.局部变量 doAngle, 逻辑型, , , 假
.局部变量 mostangle, 逻辑型, , , 假
.局部变量 局_返回内容指针, 整数型
.局部变量 局_返回内容长度, 整数型

图片数据 = 读入文件 (参_图片路径)
ocr (ptr, 图片数据, 取字节集长度 (图片数据), 1, padding, maxSideLen, boxScoreThresh, boxThresh, unClipRatio, doAngle, mostangle, 局_返回内容指针, 局_返回内容长度)
局_结果数据 = 指针到字节集 (局_返回内容指针, 局_返回内容长度)
del (局_返回内容指针)
返回 (到文本 (编码_编码转换对象 (局_结果数据)))

这段代码中有几个关键参数值得关注:

  • padding (60) :在图片四周添加白边的像素数。当文字框没有完全框住文字时,增大此值可以提升识别率。

  • maxSideLen (1024) :图片长边缩放阈值。超过此值会等比缩放,低于则不处理。设置合适的值可以在识别精度和速度间取得平衡。

  • boxScoreThresh (0.5) :文字框置信度阈值。如果某些文字区域没有被检测到,可以适当降低此值。

  • unClipRatio (1.5) :文字框扩展比例。值越大,检测框会越”宽松”。对于大图片,此值应适当增大。

注意事项与调优建议

  1. 内存管理:每次初始化模型都会分配内存,程序退出前务必调用delmodel (ptr)释放,否则会造成内存泄漏。

  2. 多线程支持:RapidOCR.dll支持多线程调用,可以在不同线程中共享同一个模型指针。这对需要并发识别的场景很有用。

  3. GPU加速:如果CPU支持AVX512指令集,使用CPU版本即可获得不错的性能;如需更高速度,可以使用GPU版本的DLL,配合CUDA环境运行。

  4. 方向检测的取舍doAngle参数控制是否启用方向分类。只有在图片可能旋转(90°~270°)的情况下才需要开启,因为方向分类会增加耗时。

  5. 参数调优思路

    • 文字框漏检 → 降低boxScoreThreshboxThresh

    • 文字框偏小 → 增大unClipRatiopadding

    • 小字识别率低 → 适当增大maxSideLen或取消缩放

结语

RapidOCR为易语言开发者提供了一个强大而灵活的本地OCR方案。虽然调用接口相对底层,参数较多,但正因如此,它能够适应各种复杂场景——从简单的截图识字,到需要精确定位的游戏自动化,再到批量文档处理,都能胜任。

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
看完了?看完了愣着啊点赞干什么
点赞53 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容