当前位置: 首页 > news >正文

纯前端实现图文识别 OCR

Tesseract.js

Tesseract.js 是一个基于 Google Tesseract OCR 引擎的 JavaScript 库,利用 WebAssembly 技术将的 OCR 引擎带到了浏览器中。它完全运行在客户端,无需依赖服务器,适合处理中小型图片的文字识别。

基本使用

以下示例展示了如何使用 Tesseract.js 从图片中提取文字:
在这里插入图片描述

demo

HTML单文件:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>OCR 图文识别</title><!-- <script src="https://unpkg.com/tesseract.js@2.1.1/dist/tesseract.min.js"></script> --><script src="https://unpkg.com/tesseract.js@v2.1.0/dist/tesseract.min.js"></script></head><body><h1>OCR 图文识别</h1><input type="file" id="imageFile" accept="image/*" /><br /><button onclick="recognizeImg()">识别图像</button><br /><h2>识别结果:</h2><div id="result">???</div><script>const worker = Tesseract.createWorker({logger: function (m) {console.log(m);},});async function recognizeImg() {const fileInput = document.getElementById("imageFile");const selectedFile = fileInput.files[0];console.log(selectedFile);await worker.load();await worker.loadLanguage(["eng", "chi_sim"]);await worker.initialize(["eng", "chi_sim"]);const ret = await worker.recognize(selectedFile||'https://tesseract.projectnaptha.com/img/eng_bw.png');console.log(ret.data.text);handleOCRResponse(ret.data);// 或者使用 FileReader方式// handleFileFn(selectedFile);}function handleFileFn(file) {// 使用 FileReader 读取图像文件内容const reader = new FileReader();reader.onload = function (e) {const imageDataURL = e.target.result;// 上传图像文件至 OCR APIuploadImageToOCR(imageDataURL);};reader.readAsDataURL(file);}async function uploadImageToOCR(imageDataURL) {await worker.load();await worker.loadLanguage(["eng", "chi_sim"]);await worker.initialize(["eng", "chi_sim"]);const ret = await worker.recognize(imageDataURL);console.log(ret.data.text);if (ret.data) {handleOCRResponse(ret.data);}}function handleOCRResponse(data) {const resultDiv = document.getElementById("result");if (data && data.text) {resultDiv.textContent = data.text;} else {resultDiv.textContent = "未能识别文本。";}}</script></body>
</html>

demo in react:github-demo

相关文章:

  • 异步委托执行管理器:更新
  • 嵌入式培训之数据结构学习(六)树(二叉树)、哈希表、内核链表
  • 理解 Swift 逃逸闭包与 implicit `self`
  • virtual下Ubuntu24.04版本上配置网络与外网和宿主机之间互通
  • ros2-类继承,lambda,共享指针,多线程
  • 【C++】C++的IO流
  • 数据结构学习笔记—初识数据结构
  • 【机器学习】线性回归和损失函数
  • 特征值与特征向量的计算——PCA的数学基础
  • Java SpringBoot 集成 SpringSecurity
  • BC27 计算球体的体积
  • VS2017编译openssl3.0.8
  • 【成品设计】STM32和UCOS-II的项目
  • 命令行登录 MySQL 报 Segmentation fault 故障解决
  • 博客系统功能测试
  • 如何轻松删除电脑上的文件(无法恢复文件)
  • 成功案例丨GEZE与Altair合作推动智能建筑系统开发
  • Nginx端口telnet不通排查指南
  • 解决 Linux Bash 脚本因换行符问题导致的 “bash^M: No such file or directory“ 错误
  • es快速上手(从MySQL角度)
  • 中疾控专家:新冠感染的临床严重性未发生显著变化
  • 长沙至赣州高铁初步设计获批,可填补湘赣两省斜向交通空白
  • 世卫大会再次拒绝涉台提案,国台办:民进党当局再遭挫败理所当然
  • 《中华人民共和国经济史(1949—1978年)》教材出版发行
  • 戛纳参赛片《爱丁顿》评论两极,导演:在这个世道不奇怪
  • 美国考虑让移民上真人秀竞逐公民权,制片人称非现实版《饥饿游戏》