免费在线OCR:为Hermes提供文字提取能力,试卷发票识别再也不愁
Hi,我是执着于持续分享NAS、AI、数码、家电、软件技巧相关知识,坚持创作有深度、高质量作品的博主 设计虱聊科技。期待您的关注。
昨天我给 Hermes Agent 接了个新能力——免费的在线OCR文字识别服务。

家有神兽+上班牛马,真的是太需要这个了。
想用 Hermes 整理孩子的错题,或者统计报销数据和进度,都需要先让他正确识别发票和小票,再接入报销管理的工作流。 这些都需要一个靠谱的 OCR。
但是,主流的 OCR 方案都是需要付费的,我们又不是频繁使用,有没有免费的方案呢?
当然!
✿ 免费 OCR 路线之争
免费 OCR 之所以能识别图片内的文字,是因为后台有个 OCR 模型在做文字提取的工作。
目前有两种方式:
(1)自己在本地设备上部署一个开源的 OCR 模型,比如在电脑或者 NAS 上。
NAS 上能跑 OCR 的方案不少,拉一个适合自己设备的 OCR 模型就行(如果你的设备有 GPU,选择就更多了)。
但我已经在我的绿联 DX4600 上 跑个一个向量模型了,这台设备没有 GPU,只能靠纯 CPU 计算。
再跑个 OCR 模型,我真的有点心疼 CPU 了。
(2)找一个免费提供 OCR 模型的服务,直接调用。
后来发现 OCR.space 提供免费 API,个人低频使用,使用免费版就完全够用了。
OCR.Space 是一款基于云端的免费 OCR 工具,同时也提供免费的 API 服务。支持每月 25000 次调用,每次文件不大于 1MB 就可以了。

但直接让 Hermes 调用它会有个跨域的问题,被 CORS 挡住。
解决方案是用 Cloudflare Worker 做一层代理。Worker 跑在 Cloudflare 的边缘节点上,就不存在跨域问题了,还能把 API Key 藏在服务端。
通俗地说就是:
Hermes 直接硬闯 OCR. space 的大门会被保安拦下来,所以我们需要在 Cloudflare 雇佣一个“快递员”帮我们传递材料。Hermes 只需要跟快递员交接几句可以了,既解决了进门难的问题,又把家里的钥匙(API Key)藏在了快递员的口袋里。
✿ 三步搭建完成
第一步,在 OCR. space 注册账号,拿到 API Key。
点击 Ocr. Space 右上角的 Free OCR API。

在左边栏点击 Get your free API key,在弹出的页面简单填写信息后,就可以拿到一个免费的 API Key 了。

第二步,去 Cloudflare 建个 Worker 做代理(快递员)。
如果还没有 Cloudflare 的账号,先去注册一个。
进入 Cloudflare Dashboard 后,在左边栏找到 Workers and Pages,在弹出的页面右上角找到 创建应用程序。

选择 从Hello World!开始

Worker name 看自己喜欢。我喜欢直接一点,直接命名为 ocr。然后点右下角 部署。

稍等几秒后,会弹出一个界面,我们在绑定一栏,点击 添加绑定,为这个应用程序绑定一个 Workers AI。

这个 Workers AI 是 Cloudflare 提供的,支持每天约10000次的免费推理请求。
OCR.space 负责把图片变成“字”,而这个 Workers AI 负责把这些“字”变成“有用的信息”。
在左栏选择 Workers AI,点击右下角 添加绑定。

变量名称也可以填 AI,然后继续 添加绑定。

可以看到,快递员 Workers 已经绑定了 Cloudflare 免费提供的 Workers AI,现在我们给他安排工作,点击右上角的 编辑代码。

在弹出的窗口中,粘入以下代码,将第一步获得的 OCR. space 的 API Key 填进去,然后点击右上角 部署。

代码:
export default {
async fetch(request, env, ctx) {
// 1. 处理跨域 (CORS)
if (request.method === 'OPTIONS') {
return new Response(null, {
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type',
},
});
}
try {
// 2. 获取图片数据
const formData = await request.formData();
const file = formData.get('file');
if (!file) {
return new Response(JSON.stringify({ error: 'No file uploaded' }), { status: 400 });
}
// 3. 构造发送给 ocr.space 的请求
// 注意:这里我们直接使用 'helloworld' 作为 API Key
const ocrFormData = new FormData();
ocrFormData.append('apikey', '填入OCR.space的API Key'); // <--- 就在这里填入 Key
ocrFormData.append('language', 'chs'); // 识别中文
ocrFormData.append('isOverlayRequired', 'false');
ocrFormData.append('file', file, file.name);
// 4. 发送请求到 ocr.space
const ocrResponse = await fetch('https://api.ocr.space/parse/image', {
method: 'POST',
body: ocrFormData,
});
const ocrData = await ocrResponse.json();
// 5. 处理 ocr.space 的返回结果
if (ocrData.IsErroredOnProcessing) {
return new Response(JSON.stringify({ error: ocrData.ErrorMessage }), { status: 500 });
}
// 6. 提取文字并返回给 Hermes
let fullText = '';
if (ocrData.ParsedResults && ocrData.ParsedResults.length > 0) {
fullText = ocrData.ParsedResults[0].ParsedText;
}
return new Response(JSON.stringify({ text: fullText }), {
headers: { 'Content-Type': 'application/json' },
});
} catch (err) {
return new Response(JSON.stringify({ error: err.message }), { status: 500 });
}
},
};
这样,这个流程就基本打通了。
第三步,绑自定义域名(必须)。
由于众所周知的原因,Cloudflare 默认分配的 xxx.workers.dev 域名在我大唐访问不了。如果没有条件,或者不想一直科学冲浪的话,我们必须绑一个自己的域名,才能正常用。
域名我们可以注册类似 12345678. xyz 的数字域名,非常便宜,一年才几块钱,除了用在这次的 OCR 服务,还可以用作反代、绑定动态公网地址等其他用途。注册域名网上有很多教程,这里就不再赘述。
这个域名必须先托管到 Cloudflare(可以选免费套餐)。
以从阿里云转入为例,简单说下转入流程:
1️⃣ 登录 Cloudflare,点「添加站点」,输入你的域名,选免费套餐。
2️⃣ Cloudflare 会扫描你现有的 DNS 记录,然后给你两个 nameserver 地址,类似 xxx.ns.cloudflare.com。
3️⃣ 登录阿里云控制台,「域名」→「域名列表」→ 找到你的域名 →「DNS管理」→「修改DNS服务器」。
4️⃣ 把阿里云默认的 nameservers 删掉,换成 Cloudflare 给你的那两个,保存。
5️⃣ 等生效就行了,通常几分钟到几小时,最多 48 小时。生效后,进入 Cloudflare 控制台,会看到域名已生效。
然后回到 Cloudflare Dashboard,在 Workers 和 Pages 设置找到刚才我们新建的 ocr →域,点击 添加域名。

在弹出的窗口中,我们在自己的域名下,添加专门为 OCR 服务设置的子域名,这个可以按自己喜欢的名字输入。比如我的就是 ocr. xxxxxx. xyz,设置完点击 添加域名。

我们可以看到,刚才输入的子域名已经生效。

绑完之后,任何工具、任何脚本,只要能发 HTTP 请求,就能调用你的 OCR 服务了。
以 Hermes 为例,我直接把 ocr. xxxxxxxx. xyz 这个地址发给他,告诉他我们在 Cloudflare Workers AI 配置了 OCR 服务,让他尝试接通。
不一会儿,他就会告诉你测试通过。

✿ 真正省心的地方
○ 零成本。
Cloudflare Workers 免费版每天 10 万次请求,OCR.space 免费版每月 25000 次调用。个人用根本用不完。
○ 不占资源。
不用 Docker,不用装依赖,NAS 内存 CPU 什么都不占。所有计算都在云端完成。
○ 中文识别不错。
我测了中文试卷、英文截图,印刷体基本没问题。复杂排版和手写体差一些。
○ 接入简单。
Hermes 配置里加个端点地址就行,一个 Python 脚本也能搞定。任何能发 HTTP 请求的工具都能调。
✿ 也有不完美的地方
○ 文件大小有限制。 OCR.space 免费版限制 1-5MB,太大的图片传不上去。解决方案是在调用前压缩图片,Hermes 的配置里可以设图片压缩。
○ 需要自己的域名且必须托管到 Cloudflare。 workers.dev 默认域名在国内用不了。域名本身不贵,但这是个前置步骤。
○ 数据会上传到 OCR.space。 图片毕竟过了一遍云端,如果你处理的是敏感文档,这条路可能不适合。那就走本地 PaddleOCR,数据完全不出局域网。
○ 中文不是 OCR.space 的强项。 印刷体和截图文字基本能识别,复杂排版或手写体就差一些。英文内容反而表现更好。
如果你对中文识别准确率有要求,我准备过几天再尝试一下 PaddleOCR 本地部署,敬请关注。
✿ 我的真实感受
Cloudflare Workers 这个东西,一开始我以为只是个简单的边缘计算工具。用了之后才发现,它能做的事情远比我想的多。OCR 代理只是其中一个应用场景,你可以用它做各种 API 中转、数据处理、甚至轻量级的后端服务。
对于 NAS 用户来说,OCR 是个挺实用的能力。发票识别、文档数字化、截图文字提取,场景很多。能用最低的成本搞定,何乐而不为?
如果你也在用 AI Agent,或者只是偶尔需要从图片里提取文字,真的可以试试。十分钟,三步,轻松搞定。
关注我,蹲后续。您的支持对我真的很重要O(∩_∩)O)。让我们共同打造互联网内容创作和知识分享的一股清流!ヾ(◍°∇°◍)ノ゙

亦非园
校验提示文案
亦非园
校验提示文案