2026-08-24 · 1 分钟阅读

移动端神经 OCR:CRAFT、CRNN、EasyOCR 与 ExecuTorch

光学字符识别(OCR)已经由传统的图像滤波方法转入了深度神经网络。在移动应用中,常见的做法是分两阶段完成:先用检测模型找到网页中文本的位置,再用识别模型读出文字。EasyOCR 使这类工作流变得广受欢迎,而现在我们可以借助 ExecuTorch 将同样的流程放到手机本地执行。本文将说明 CRAFT 和 CRNN 如何配合,移动端会遇到哪些图像大小限制,以及类 worm 的方法如何用 ExecuTorch 完成移植。

CRAFT 与 CRNN:经典的神经网络组合

CRAFT,全名是 Character Region Awareness for Text Detection,负责文本检测。它不会直接给出整个词或行级的边界,而是输出一个字符区域图和一个字符亲和力图。前一张图标出每个字符落在哪里,后一张图则判断相邻字符是否属于同一单词。这种基于字符级别的设计能更好地适应、弯曲、倾斜或不规范的排列。

接下来,由 CRNN 完成识别。CRNN 是卷积循环神经网络,前面的卷积部分(通常基于 VGG 或 ResNet)负责提取视觉特征,中间的 Bi-LSTM 学习字符出现的顺序关系,最后由 CTC 解码器把概率输出转换成最终字符序列。整个过程无需对字符做一一分割,非常适合手机上的短文本识别。

移动端的图像尺寸限制与性能瓶颈

手机的内存、电池和散热资源都有限。如果把 1200 万像素的照片直接送进 CRAFT,中间张量会变得巨大,等待时间会明显增加。因此,移动端 OCR 往往会限制输入图片的最大边,例如将边长调整到 512、768 或 960 像素,同时保持宽高比,再对空余区域进行填零。

另一个重要限制是推理运行时的静态输入尺寸。ExecuTorch 在很多场景下编译模型时会固定输入的张量形状。若运行时改变宽高,模型需要重新编译。臣常见做法是:让 CRAFT 接收固定 B×768 的正方形输入,而让 CRNN 在高 baseline 固定为某个数值,比如 32 像素,宽度则在 128、256、512 像素之间选择。

为了进一步减少热度计算,还可以在进入 CRAFT 之前加入一个轻量级提醒步骤,比如轮廓检测。先找出可能是文字的区域,然后只对这些小区域执行重型 OCR 网络。这样实际参与计算和像素数量大幅下降,内存占用和延迟都能得到明显控制。

将 EasyOCR 思路移植到 ExecuTorch

EasyOCR 是一个基于 PyTorch 的 Python 库,它使用 CRAFT 作为语言检测器,使用一种接近 CRNN 的结构作为识别器。由于 ExecuTorch 是 PyTorch 的端侧运行时,移植过程比 ONNX 或 TFLite 更加顺畅。无需额外转换,模型文件基本可以直接被端侧运行库加载,错误概率也会比转换方式低很多。

具体实现时,先按固定输入大小导出 CRAFT,并将其权重量化到 float16 或 int8,这样可以显著减少体积并提升 NPU 上的计算速度。随后,针对 CRNN 分别准备 128、256 和 512 三种宽度的模型,供应用在文本区域长度不同时灵活选择。最后,把 CRAFT 检测出的矩形图片裁剪并传给 CRNN。

这套流程完全可以离线运行。手机取法、预处理、CRAFT 检测、BBox 解码、CRNN 识别和 CTC 解码都在本地完成,不需要将图片传到服务器,因此既节省了时间,也保护了用户隐私。在常见的旗舰机型上,一次识别可以在一两秒内完成,甚至更快。

移动端 OCR 中两个模型职责的比较
对比项CRAFTCRNN
角色文本检测文本识别
输出字符区域图+亲和力图字符序列
移动输入固定正方形固定高度,可变宽度
典型开销较高在缩略区域上中等
← 向右滚动查看更多 →

总之,CRAFT 与 CRNN 是移动端OCR领域中可靠的一套底层模型。图像尺寸的限制是客观存在的,但可以通过 ROI 检测、缩放、边值填充和量化等技术加以克服。以 EasyOCR 为参考做法,用 ExecuTorch 将这些模型带到手机本地,已经可以打造快速、安全且无需联网的 OCR 会话应用。

让我们合作吧

您需要更多信息、项目帮助或开发构想吗?

无论是简单的问题还是完整的项目,我都在这里。联系我,让我们将您的想法变为现实。

联系我

切换主题

选择一个专业主题进行探索: