PyPI超1000万次下载、GitHub 5k+ star,一款开源光学字符识别(OCR)工具RapidOCR“异军突起”,获得了海量的关注和下载。今天,客栈邀请到了RapidOCR的开发者SWHL,揭开这款“小而美”工具背后的故事。
RapidOCR的诞生之路
我是从大二那年真正开始接触技术的。当时学校开了门教PowerBuilder的课程——我在第一次看到这门语言时,就为之着迷。因为我内心一直在寻找一种所见即所得的东西,PowerBuilder中UI可以拖拽快速生成。当时我的想法是:QQ不就是这么写的嘛。
这门课的课程设计,我提前一周就写完了。因为我发现我喜欢它,喜欢去研究它,喜欢去写。我相信每个程序员都有一份对代码的热忱和敬畏,也是这份热爱让我能在这条路上越走越远。
真正和OCR结缘是2020年硕士毕业后的第一份工作。当时的我负责藏语、彝语这些小语种的识别任务,算是误打误撞闯进了这个领域。那会儿对开源还懵懵懂懂,结果赶上PaddleOCR刚开源,一下子成为了OCR领域SOTA(State-of-the-Art)。当时我第一次拿张随手截的藏文图片跑模型,屏幕突然跳出正确识别结果时,我愣在工位上——不是惊喜,是震撼。自己亲手调参训练的模型,居然能“看懂”这种平时根本读不出来的文字,我惊呆了。
但在使用过程中,我发现PaddleOCR存在使用门槛较高的问题:因为百度是为了通过PaddleOCR推广PaddlePaddle深度学习框架,因此产品功能设计需兼顾框架推广使命,导致用户体验复杂化,使用门槛也高了很多。可以说,PaddleOCR有了自己的使命,同时也有了它的禁锢。
有许多使用者都反馈了类似困扰,当时正值ONNX模型格式与ONNXRuntime推理引擎初兴,这一系列促使我萌生了基于ONNXRuntime推理ONNX格式PaddleOCR模型的想法,RapidOCR由此逐步成型——它正是为解决这些实际痛点而诞生的工具。

项目最早是我们公司另一位同事搭建的,当时仓库名还叫“白嫖OCR”,后来觉得不够正式,就改成了RapidOCR。后来那位同事专注C++开发,而我作为算法工程师,一直深耕这个方向,就接手了项目主导开发,成了项目的主理人。
这些年走下来,我越来越觉得,技术的温度不在参数有多漂亮,而在它能不能真正帮到人。从PowerBuilder到PaddleOCR,再到RapidOCR,每一步都带着点“意外”的缘分,但回头看,又像是顺着自己的好奇心和那点“爱折腾”的劲一步步走出来的路。
RapidOCR 与 PaddleOCR 的生态互补关系
RapidOCR 与 PaddleOCR 的关系并非简单的“复制”,而是在继承、解耦、轻量化与工程化的基础上,形成了互补共生的开源 OCR 生态。
从定位差异看,PaddleOCR作为全功能工业级OCR工具包,覆盖训练、推理及多模态全链路能力,适用于算法研发与大规模训练场景;而RapidOCR聚焦轻量级推理优先的跨平台引擎定位,剥离训练模块,强化工程侧部署效率,形成“PaddleOCR重全栈能力、RapidOCR重部署效率”的明确分工。
本质上,这两者是互补的关系。 PaddleOCR 是模型生产的工厂, RapidOCR 是模型分发与部署的引擎。用前者去训练、导出,再用后者轻量部署,共同覆盖从研发到边缘落地的完整链路。
这些年下来,我越发觉得,好的开源工具不是“各自为战”,而是形成生态,这才是程序员最爱的“务实浪漫”——不搞虚头巴脑的推广,解决实际痛点,让技术真正落地生根。

外部的认可对项目的帮助
在维护RapidOCR的过程中,我积极主动地去和大家去交流、参加竞赛和加入开源相关的社区,提升项目的曝光。这也使得RapidOCR获得了多项竞赛奖项并被 openKylin 等社区认可。
这些认可提升了项目的可信度和技术权威,有了这些社区的奖项,便于我向其他的一些开发者或是企业推广,对方就会更信任我们的技术实力,也降低了他们使用的门槛。

另一个主要帮助是吸引了高质量的贡献维护者,因为我一个人的精力是有限的,我希望能吸引更多志同道合的人参与代码贡献。现在随着项目规模的上升,也有很多没见过的小伙伴积极主动地来维护这个项目。这让我感到激动又欣喜。因为每个人看到的点不一样,大家提出来的建议会让我学到很多东西。现阶段这个项目获得的认可只是初步的,后续还有很多工作要做。
今年有幸在中国开源年会上,促成了RapidOCR项目加入了AtomGit平台,也很有幸受到程序员客栈的邀请入驻LaunchBox项目。

RapidAI团队的工作内容
RapidAI是一个致力于搭建AI模型从学术界到工程界之间的桥梁,解决AI模型应用的最后一公里的开源组织。
一般来说,RapidAI下的开源项目都有一个主导的小伙伴,小伙伴往往都是身兼多职的,并没有明确的单一角色分配。我在团队中也是身兼多职的,承担的角色主要是主力开发 + 文档维护 + 社区答疑。
对于各个任务,我这里有明确优先级:核心功能开发 > 紧急 Bug 修复 > 新特性提案 > 社区互动。我会利用 GitHub Actions自动执行单元测试,自动发版、自动格式化代码,减少重复劳动。比如我修了一些 Bug 之后,我可以打一个 tag 自动跑单元测试,自动发下一个版本,我已经逐渐建了很多小工具来满足自动化需求。
还有就是我会借助Github的 Issue 和 Discussions 两个模块来管理社区。我一般会给 Issue 打标签,引导大家清晰地反馈自己的问题和诉求。对于一些不是明显 Bug 或者非Bug的讨论,我就会引导他们去 Discussions 模块讨论。如果在Discussions中遇到真正的Bug,我会将其从Discussion部分转到Issue模块,从而避免有效信息淹没在冗杂的讨论中。这样做以后,我们对于新需求和 Bug 就有了明确分工。
此外,我也会利用碎片化的时间来完成反馈和项目的维护。对于社区琐碎的问答、Bug 反馈以及一些邮件反馈的问题,我一般会在茶余饭后时间快速回复,进行初步整理和筛选。对于真正的开发和 Bug 解决,我一般放到一整块的业余时间来集中开发。
还有社区共建的工作,比如有一些人会积极的反馈 Bug,我就会鼓励他成为“临时的维护者”,问他有没有兴趣来修一下这个Bug,让他可以成为贡献者参与进来。后期我会补充完整的贡献者文档,进一步降低贡献的门槛。
最后还有团队协作的部分,我们团队协作目前是通过PR的方式来协作的。我会做最终审核的reviewer来推进各个特性和修复Bug。经过这些分工以后,这个开源项目对我精力的消耗没有这么大,还是能够比较好的平衡工作和生活的。
下载量突破1000w、Star数5k+
RapidOCR 目前 PyPI 累计下载量突破 1000w、Star 数 5k+,这样的成绩的确有些超出我的预期。
因为起初 RapidOCR 的pypi库是3个单独库,后来考虑到后续长远发展,今年上半年我们把它整合为了一个rapidocr库,在代码层面与推理引擎彻底解耦。用户可以按需来安装推理引擎使用RapidOCR。光今年就涨了2000 star,之前我观察到 RapidOCR 有一天的下载量竟然突破了50万,还是很惊喜且自豪的。

RapidOCR未来的迭代方向
第一,先修复已有的 Bug ,作为一个成熟的工具,稳定可靠是前提,不可能一味的追求新的特性。
第二,跟进PaddleOCR v5小语种模型:主要包括俄罗斯文、阿拉伯文、印第文、泰米尔文和泰卢固文等。

第三,实现提供完全离线 + 无外联依赖的部署,因为有很多小伙伴反馈想部署在 docker 里,因为有一些模型是需要联网下载的,它是托管在魔搭上面。RapidOCR有内置的模型,如果用默认模型以外的,就需要联网下载了。因为许多政务、军工、金融场景严禁外网访问,但现有方案可能隐式下载模型,今后我们可能会发布 All-in-One 离线安装包(含 Python wheel + 预转换 ONNX 模型 + 运行时依赖),确保首次运行不触发任何网络请求(已移除自动更新检查、遥测等代码),并专项支持国产操作系统(统信 UOS、麒麟)及 CPU 架构(ARM64、LoongArch)。
第四,完善文档,虽然我们现在有一个完整的文档网站,但是它并不是那么完善。我们早期的文档偏重“快速上手”,缺乏故障排查指南、性能调优参数说明;API 变更未及时同步至中文/英文文档,这也是我们今后优化的方向。
我们新版的文档计划主要包括:
①将文档结构化为:入门 → 进阶 → 部署 → 定制开发;
②增加典型场景配置示例(如“高精度模式 vs 速度优先模式”);
③提供Dockerfile 模板和 Windows 批处理脚本,降低部署门槛。
OCR 技术新的变革
从近期一系列开源 OCR 模型的发展趋势可以看出,OCR 技术正在迅速超越传统的“文字识别”范畴。例如 PaddleOCR-VL、MinerU 和 HunyuanOCR 等新一代模型,已不再局限于提取图像中的文本,而是面向复杂文档的全方位理解。它们能够精准处理表格结构、数学公式、化学式、手写批注、多栏排版等多样化的文档元素,真正迈向“智能文档解析”的新阶段,而且我认为这个变革现在正在发生。
关于未来,我想自己会侧重于文档智能这块。暂时还没想好定下什么样的目标。因为现在发展太快了,很多事情赶不上变化。这就像打工人的工资水平一样,具有工资粘性。
程序员如何抓住大语言模型的技术浪潮
站在技术浪潮的潮头回望,可以见到:大语言模型掀起的这波技术浪潮,绝非昙花一现的泡沫,而是堪比个人计算机普及、互联网爆发、移动计算革命的第四次全方位技术革命最耀眼的存在。它不是简单的工具迭代,而是重新定义“程序员如何与代码对话”的底层变革。展望未来,我认为今后最值得学习的是如何有效利用大语言模型这波技术升级。
当然,技术的终极意义,从来不是堆砌参数,而是让人类能以更高效的方式解决问题:作为程序员的我们,应该时刻保持敏锐,保持好奇心,乐于去尝试,去探索新奇技术,尝试去升级自己已有知识体系,提高格局和见识,最终让技术真正服务于人。这才是一个程序员在技术革命中最该修炼的内功。
开源改变世界
像很多小伙伴喜欢跑步一样,我只是喜欢开源而已。开源于我,仅仅是一个爱好。自己乐在其中的同时,顺道让这个世界变得更好一点。
我做的这件事,只是着眼于一个很小的点开始的,自己就没想过怎么样改变世界。当然,如果能让这个世界变得更好,也是一件好事。
我虽然没想过要‘改变世界’,但我相信,当越来越多像我这样的人,出于热爱去写一行代码、修一个 Bug、写一篇文档,世界就会在不知不觉中被推动一点点。这种‘相信’,或许就是我对‘开源改变世界’最朴素的信仰。
最后,欢迎对RapidOCR项目有兴趣的小伙伴来尝试使用,也欢迎广大有能力有想法的小伙伴加入我们~
=故事征集=
《LaunchBox》是程序员客栈推出的,旨在为全球优秀技术极客与开发者提供展示、推广和孵化前沿技术项目的顶级平台。无论您的项目聚焦AI、区块链、开源技术,还是其他颠覆性创新领域,LaunchBox都欢迎前来首发。
欢迎大家推荐朋友或自己来参加我们的节目,分享与对话是一件利他又利己的事。
289

被折叠的 条评论
为什么被折叠?



