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

纯前端实现图文识别 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

http://www.xdnf.cn/news/7188.html

相关文章:

  • paddle ocr本地化部署进行文字识别
  • 从编程助手到AI工程师:Trae插件Builder模式实战Excel合并工具开发
  • 解决 MySQL 错误 1356 (HY000)
  • WPF技巧-BindingProxy
  • 基于局部显著位置感知的异常掩码合成方法在CT图像肺部疾病异常检测与病变定位中的应用|文献速递-深度学习医疗AI最新文献
  • iOS:重新定义移动交互,引领智能生活新潮流
  • 《算法导论(第4版)》阅读笔记:p86-p90
  • LabVIEW数据库使用说明
  • std::ranges::iota
  • ArcGIS Pro 3.4 二次开发 - 内容
  • DDoS与CC攻击:谁才是服务器的终极威胁?
  • 免费开放试乘体验!苏州金龙自动驾驶巴士即将上线阳澄数谷
  • 1.1 结构体与类对象在List中使用区别
  • C++23 std::mdspan:多维数组处理新利器
  • 如何用Python批量解压ZIP文件?快速解决方案
  • NC105NC106美光固态颗粒NC108NC109
  • Python学习笔记--使用Django操作mysql
  • C++开源库argh使用教程
  • 20250519使用TF卡将NanoPi NEO core开发板刷机为Ubuntu core22.04.3系统完成之后执行poweroff自动关机
  • CSS之网页元素的显示与隐藏(旧土豆网遮罩案例)
  • Unity开发:预制体、接口与枚举
  • 光子神经网络加速器编程范式研究:光子矩阵乘法的误差传播模型构建
  • 从单体到分布式:深入解析Data Mesh架构及其应用场景与价值
  • 【VMware】虚拟机运行 Linux Ubuntu、MAC 安装和配置
  • 整合安全能力:观测云进一步强化数据价值
  • 如何利用DeepSeek提升工作效率
  • 估分啦~全国青少年信息素养大赛部分赛项已考完~图形化/算法创意实践
  • PWM讲解+STM32任意频率、占空比、脉宽生成函数介绍
  • 2023年河南CCPC(ABCEFHK)
  • 算法第21天 | 第77题. 组合、216. 组合总和 III、17. 电话号码的字母组合