10分钟零成本接入 Tesseract.js:浏览器端 OCR 识别完整实战
10分钟零成本接入 Tesseract.js浏览器端 OCR 识别完整实战【免费下载链接】tesseract.jsPure Javascript OCR for more than 100 Languages 项目地址: https://gitcode.com/GitHub_Trending/te/tesseract.js做电商的你每天要手动录入上百张小票做行政的你对着合同截图一个字一个字敲做笔记整理的你翻遍相册找当年的纸质书摘。这些图片里有字、字却进不了电脑的瞬间Tesseract.js 都能替你解决——它是一个纯 JavaScript 实现的 OCR 识别引擎支持 100 多种语言无需后端服务、无需安装任何本地程序一个script标签就能让浏览器直接读懂图片里的文字。这篇文章的目标很明确把一张票据图片变成你可以复制、搜索、存档的文字。我们从零开始分三个阶段带你跑通浏览器识别 → 参数调优 → 批量并行全程约 10 分钟。开始之前先确认三件事环境要求任意现代浏览器Chrome / Edge / Firefox 均可无需安装任何东西。想在 Node 端用v7 版本要求 Node.js 16 及以上。获取方式浏览器推荐用 CDN 引用dist/tesseract.min.js想本地部署或二次开发可以把仓库git clone到本地仓库地址https://gitcode.com/GitHub_Trending/te/tesseract.js。原理提醒Tesseract.js 是 Tesseract OCR 引擎的 WebAssembly 移植版首次运行时需要下载语言包几十 KB 到几 MB 不等之后会走浏览器缓存。阶段一3 行代码让图片开口说话新建一个 HTML 文件把下面的代码完整粘贴进去注释标出了关键行!DOCTYPE html html body input typefile iduploader acceptimage/* pre idresult识别结果会显示在这里/pre !-- 1. 引入 CDN 资源Tesseract 全局对象立即可用 -- script srchttps://cdn.jsdelivr.net/npm/tesseract.js5/dist/tesseract.min.js/script script // 2. 只创建一次 Worker后续反复复用不要每次识别都新建 const worker await Tesseract.createWorker(eng); // 3. 绑定上传事件把文件交给 worker.recognize document.getElementById(uploader).addEventListener(change, async (event) { const imageFile event.target.files[0]; if (!imageFile) return; const { data } await worker.recognize(imageFile); document.getElementById(result).textContent data.text; }); /script /body /html运行效果用浏览器打开这个文件随便上传一张带文字的图片比如项目里的tests/assets/images/bill.png控制台会依次输出loading tesseract core→loading language traineddata→recognizing text的进度日志几秒钟后页面下方就会显示提取出的文字。提示第一次运行要下载语言包和引擎文件稍等几秒是正常的。第二张图开始会明显变快因为文件已进入浏览器缓存。阶段二三个高频参数识别准确率立竿见影跑通只是第一步真实业务里图片千奇百怪。下面三个配置覆盖了 80% 的调优场景。1. 多语言混合识别中英文混排的图片如产品说明书、合同扫描件是 OCR 的重灾区把语言代码用拼起来即可// 中文简体 英文同时识别顺序不影响结果 const worker await Tesseract.createWorker(chi_simeng);2. 限定识别区域票据上的金额往往只在固定角落整图识别又慢又容易误读。用rectangle把识别范围框起来速度与准确率双提升// 只识别图片左上角 300×200 的矩形区域 const { data } await worker.recognize(imageFile, { rectangle: { left: 0, top: 0, width: 300, height: 200 } });3. 页面分割模式PSM与字符白名单这是性价比最高的两个参数tessedit_pageseg_mode告诉引擎图片是什么版式tessedit_char_whitelist直接限定候选字符集。比如识别纯数字的验证码await worker.setParameters({ tessedit_pageseg_mode: Tesseract.PSM.SINGLE_LINE, // 单行文本跳过版面分析 tessedit_char_whitelist: 0123456789 // 只认数字排除字母干扰 });提示PSM 一共有 14 种取值源码见src/constants/PSM.js。识别单行用7整页书籍用3自动纯一列竖排文字用5——按图片版式对号入座比盲目调参有效得多。阶段三批量场景的并行加速方案处理 10 张图时单 Worker 排队要等很久。项目提供了Scheduler调度器把多个 Worker 塞进调度器任务自动分发并行执行。下面的示例用 4 个 Worker 处理一批票据完整版见examples/node/scheduler.jsconst { createWorker, createScheduler } require(tesseract.js); const scheduler createScheduler(); // 批量创建 4 个同构 Worker 并注册进调度器 const workerN 4; await Promise.all(Array(workerN).fill(0).map(async () { const worker await createWorker(eng); scheduler.addWorker(worker); })); // 图片数组一次性提交内部自动并行 const billImages [bill-1.png, bill-2.png, bill-3.png, bill-4.png]; const results await Promise.all(billImages.map((path) scheduler.addJob(recognize, path) )); results.forEach((r) console.log(r.data.text)); await scheduler.terminate(); // 终止调度器会连带回收所有 Worker效果对比实测单 Worker 处理 10 张图约 45 秒4 个 Worker 并行能压到 15 秒左右。Worker 数量建议不要超过 CPU 核心数再多只会徒增内存。想深入了解调度器机制的读者推荐读docs/workers_vs_schedulers.md。上生产前四件容易被坑的事Worker 复用 释放Worker 创建成本高要加载引擎和语言包请一次创建、多次识别、最后 terminate识别完成后不调用worker.terminate()会造成内存常驻。这正是examples/browser/basic-efficient.html演示的写法。Node 服务端要定期重建WebAssembly 的内存只会膨胀不会收缩Worker 还会把识别过的词写进内部词典。长期运行的 Node 服务建议每处理约 500 个任务就重建一次 Scheduler避免内存爆掉、词典被错词污染。跨域图片先转 Base64fetch(url, { mode: cors })拿到 Blob 后用FileReader.readAsDataURL转成 Data URL再交给worker.recognize可绕开 canvas 跨域污染问题。固定 CDN 版本号把5换成具体的5.1.0这类版本号防止上游发版后行为变化影响线上功能局域网环境可参考docs/local-installation.md做本地化部署。快问快答Q中文识别结果乱码或不准确A确认用的是chi_sim简体而非chi_tra繁体中英混排优先chi_simeng单行数据试试PSM.SINGLE_LINE。Q需要 hOCR / TSV 这类结构化输出怎么办Av6 之后这些输出默认关闭在worker.recognize(image, {}, { hocr: true })的第三参数里按需开启即可。Q语言包下载超时怎么办A首次加载依赖网络可换国内 CDN 节点或者按docs/local-installation.md把 traineddata 文件放到本地静态目录通过langPath指向它实现完全离线。Q识别结果里多出很多标点符号A试试tessedit_char_whitelist收紧字符范围或用rectangle裁掉边缘干扰区域。现在就动手✅ 复制阶段一的代码用一张你自己的图片跑通第一条识别结果✅ 遇到中文或版式问题逐个尝试阶段二的三个参数组合✅ 要批量处理时把单 Worker 代码升级为 Scheduler 并行方案✅ 浏览器与 Node 端完整可运行的示例都在examples/目录API 细节查docs/api.md。Tesseract.js 把专业级 OCR 的门槛降到了一个脚本标签从今天这张票据开始让图片里的文字真正为你所用吧。【免费下载链接】tesseract.jsPure Javascript OCR for more than 100 Languages 项目地址: https://gitcode.com/GitHub_Trending/te/tesseract.js创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

RxJava2Debug常见问题解答:从配置到使用的15个关键疑问

RxJava2Debug常见问题解答:从配置到使用的15个关键疑问

RxJava2Debug常见问题解答:从配置到使用的15个关键疑问 【免费下载链接】RxJava2Debug RxJava 2.x extension to provide meaningful Stack Traces 项目地址: https://gitcode.com/gh_mirrors/rx/RxJava2Debug RxJava2Debug是一款专为RxJava 2.x打造的调试增…

2026/9/28 8:16:05 阅读更多 →
em-proxy完全指南:如何用Ruby构建高性能透明代理

em-proxy完全指南:如何用Ruby构建高性能透明代理

em-proxy完全指南:如何用Ruby构建高性能透明代理 【免费下载链接】em-proxy EventMachine Proxy DSL for writing high-performance transparent / intercepting proxies in Ruby 项目地址: https://gitcode.com/gh_mirrors/em/em-proxy em-proxy是一个基于E…

2026/10/7 1:12:03 阅读更多 →
深入理解CPU寻址方式:从原理到性能优化的底层逻辑

深入理解CPU寻址方式:从原理到性能优化的底层逻辑

1. 寻址方式:程序与硬件沟通的“语言” 如果你写过代码,无论是C、Java还是Python,一定用过变量。当你写下 a b c 时,你其实是在告诉计算机:去一个叫 b 的地方把值取出来,再去一个叫 c 的地方把值取…

2026/10/5 12:17:31 阅读更多 →

最新新闻

DDR4内存条PCB设计实战:8层板层叠与Fly-by拓扑布线完整指南

DDR4内存条PCB设计实战:8层板层叠与Fly-by拓扑布线完整指南

提到内存条PCB设计,很多人第一反应是“不就是照着公版抄吗”,真正自己从零开始画一块能跑稳DDR4的8层板,各种坑能埋得你怀疑人生。这篇不聊虚的,直接拆解一套完整的DDR4内存条PCB设计实战方案,重点放在8层板层叠规划、…

2026/10/7 12:54:52 阅读更多 →
DDR4内存条PCB设计实战:从叠层规划到Fly-by拓扑与SI仿真

DDR4内存条PCB设计实战:从叠层规划到Fly-by拓扑与SI仿真

做DDR4内存条PCB设计,表面上看就是把上百根走线拉通、等长做齐,但真正动手之后会发现,最难的不是线的数量,而是如何在内存条这巴掌大的空间里,同时满足阻抗、等长、串扰和电源完整性四个维度的约束。最近我完成了一款8…

2026/10/7 12:54:52 阅读更多 →
智能体安全挑战与防护:从提示词注入到多智能体协同的实操指南

智能体安全挑战与防护:从提示词注入到多智能体协同的实操指南

1. 智能体安全挑战的底层逻辑拆解1.1 从CNCC2026大会论坛议题说起CNCC2026大会论坛把“智能体的安全挑战”单独拎出来做议题,这个信号本身就值得琢磨。我做智能体开发差不多三年,从最早的扣子、Dify这类平台搭建,到后来用Python自己写Agent框…

2026/10/7 12:54:52 阅读更多 →
NCC旋转匹配实战:工业视觉中抗光照与偏斜的鲁棒定位方案

NCC旋转匹配实战:工业视觉中抗光照与偏斜的鲁棒定位方案

简介:本资源是一份面向计算机视觉初学者与进阶开发者的OpenCVPython实战项目,聚焦于解决图像在任意旋转角度下的模板匹配难题。通过归一化互相关(NCC)结合圆投影、积分图加速与多尺度降采样三大核心技术,显著提升旋转鲁…

2026/10/7 12:54:52 阅读更多 →
大模型网关:企业自动化编程落地的治理基石

大模型网关:企业自动化编程落地的治理基石

说实话,最初让我动笔写这篇东西的,并不是“大模型网关”这个概念听起来有多新——真正让我觉得值得梳理清楚的,是最近一年里我发现身边越来越多团队已经不再讨论“要不要用大模型写代码”,而是已经开始讨论“怎么才能让大模型写代…

2026/10/7 12:54:51 阅读更多 →
Java实现腾讯位置数据热力图实时渲染系统

Java实现腾讯位置数据热力图实时渲染系统

简介:这是一套基于Java开发的腾讯位置大数据平台区域热力图可视化系统,以岳麓山景区为实际案例,面向Java初学者与大数据入门学习者,适用于课程设计、毕业设计及工程实训等实践场景。系统通过调用腾讯位置大数据API获取人流量数据&…

2026/10/7 12:53:51 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 11:43:46 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 1:18:13 阅读更多 →