深度学习——使用Tesseract.js在浏览器离线识别图片中的文字

2023-05-16

Tesseract简介

Tesseract是惠普布里斯托实验室在1985到1995年间开发的一一个开源的OCR引擎,曾经在1995 UNLV精确度测试中名列前茅。但1996年后基本停止了开发。2005年,惠普将其对外开源,2006 由Google对Tesseract进行改进、消除Bug、优化工作。官网项目地址:https://github.com/tesseract-ocr/tesseract

Tesseract.js是基于Tesseract——OCR引擎的一个纯JavaScript接口。
图片测试地址:https://tesseract.projectnaptha.com/
官网地址:https://github.com/naptha/tesseract.js#tesseractjs

1.安装node.js

官网给出的示例基本都使用了node.js,安装这个主要是为了下一步利用npm工具下载安装Tesseract.js的相应文件,以实现离线的文字识别。
node.js的安装可以参考菜鸟教程:https://www.runoob.com/nodejs/nodejs-install-setup.html

2.从官网下载Tesseract.js的离线版本

在官网中可以找到链接,这里也给出:https://github.com/jeromewu/tesseract.js-offline
直接将其下载下来,当然你也可以选择使用git工具clone到本地
在这里插入图片描述
下载下来之后,将其解压。

3.命令行进入上一步解压的文件夹,使用npm install命令下载安装相关包。

截图示例:
在这里插入图片描述
在它下载安装完成后,你会发现在该目录文件夹下多了一个名为node_modules的文件夹,这个文件夹下的东西就是刚刚安装下载的东西,其中包含了所有文字识别需要的组件及库。

4.运行程序

这一步可以先试一试参照官方文档的示例,在上一步的命令行中输入

npm run start

截图如下:
在这里插入图片描述
这时服务器已经启动,在浏览器中输入http://localhost:3000/browser/访问,再按F12,查看浏览器控制信息,会发现程序正常运行,识别了该程序内置的图片,识别的结果在控制台中已经输出了,控制台截图如下:
在这里插入图片描述
其中最下面的文字时识别图片后的文本。

5.让其在本地idea的浏览器环境中直接运行

将该文件夹复制到你的idea项目中,然后找到F:\Projects\IdeaProjects\springboot01helloworld\src\main\resources\static\html\OCR\tesseract.js-offline-master\browser\index.html,即该目录下的browser文件夹下的index.html文件(前面的路径应该是你的具体本地),再选择使用浏览器打开,即可得到和第四步一样的结果。

6.在浏览器识别中文

这个tesseract.js的离线版本,只支持对英文的识别,不支持中文,如果你放一张中文的图片,会发现识别的结果是一堆乱码。
这里需要修改其中的代码,同时要去官网上下载对应的中文语言识别包。

1.下载中文识别包

tesseract.js的语言包下载地址为https://github.com/naptha/tessdata/tree/gh-pages/4.0.0
进入该网址,下载对应的中文语言包,具体名称为chi_sim.traineddata.gz,截图如下:
在这里插入图片描述
下载完成后,将该文件放到tesseract.js-offline-master\lang-data文件夹下,该文件夹存放了所有语言识别包文件。

2.修改相应的代码,实现识别中文

修改第五步中的index.html中的代码即可,程序逻辑很简单:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Tesseract.js Offline</title>
  <script src="../node_modules/tesseract.js/dist/tesseract.min.js"></script>
  <script>
    const { createWorker } = Tesseract;
    const worker = createWorker({
      workerPath: '../node_modules/tesseract.js/dist/worker.min.js',
      langPath: '../lang-data',
      corePath: '../node_modules/tesseract.js-core/tesseract-core.wasm.js',
      logger: m => console.log(m),
    });

    (async () => {
      await worker.load();
      await worker.loadLanguage('chi_sim');
      await worker.initialize('chi_sim');
      const { data: { text } } = await worker.recognize('../images/合同测试图片.png');
      //这里我使用了我自己的图片目录,
      //在实际使用时需要改成你自己的图片路径
      console.log(text);
      await worker.terminate();
    })();
  </script>
</head>
<body>
</body>
</html>

主要修改的是这三句

 	await worker.loadLanguage('chi_sim');
      await worker.initialize('chi_sim');
      const { data: { text } } = await worker.recognize('../images/合同测试图片.png');

修改后,再在idea中使用浏览器打开,会发现已经能够正常识别中文了。
贴一波结果:
识别时使用的图片:
在这里插入图片描述
识别的结果截图:
在这里插入图片描述

可以看出,识别的效果还是不错的。

题外话及过程记录

一开始是有一个在浏览器端实现离线文字识别的需求,查找资料后找到了 Tesseract.js这个开源库,但网上特别关于Tesseract.js这个js版本的学习文章介绍特别少,我参考了几篇文章,在实际使用的时候都会报错,始终无法识别。
迫于无奈,只能自己看官网的文档资料,发现官网的例子基本上是都用到了node.js以及npm,给出的例子都是,先用npm安装相应的包,然后启动node.js服务器,最后通过浏览器访问相应的服务器地址,实现了识别。这让我一度以为,这个框架不能离线识别,必须连接服务器。
在去补了下node.js以及npm的入门知识后,经过一番操作,终于是实现了不开启服务器,只打开浏览器即可实现文字识别的功能。
在这个过程中,踩了一些坑,同时也学会了要看官方文档,官方文档是最权威的,也是最详细的,英语看不惯,别急,可以一步步慢慢来,这样有时候比起网上无厘头找教程反而要快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习——使用Tesseract.js在浏览器离线识别图片中的文字 的相关文章

  • C语言循环链表创建,遍历,插入,删除,查找

    在开始程序之前说一个困扰的几天的东西 xff0c 在链表做形参的时候什么时候用 xff08 p xff09 什么时候用 xff08 p xff09 答案 xff1a 只要是要修改head指针必须传递head的地址 xff08 用 p xff
  • C语言顺序表的插入删除

    首先声明一个顺序表的结构 数组的第一个元素是0 xff0c 但是顺序表的第一个一般 从1 人为设定 开始 include lt stdio h gt include lt stdlib h gt define MAXSIZE 10 defi
  • 蓝牙HC05模块探究-设置AT指令

    蓝牙HC05是主从一体的蓝牙串口模块 xff0c 简单的说 xff0c 当蓝牙设备与蓝牙设备配对连接成功后 xff0c 我们可以忽视蓝牙内部的通信协议 xff0c 直接将将蓝牙当做串口用 当建立连接 xff0c 两设备共同使用一通道也就是同
  • WPF、C# iconfont图标字体只显示框框

    在我们写C 或者WPF 程序的时候 xff0c 引入字体图标的时候 xff0c 新手会出现下面这个问题 xff1b 下面说下常见的两个原因吧 xff1a 1 是文件路径定义的不对 xff1a lt TextBlock Text 61 34
  • Linux执行curl报错:Protocol htttp not supported or disabled in libcurl

    因为公司最近要用到docker xff0c 在学习过程中 构建了一个简单web镜像 xff0c 用于测试 通过curl访问地址时 xff0c 报错 随便百度下 xff0c 也没看懂 仔细一看 xff0c 原来是http写成htttp了 所以
  • Android 获取应用信息—PackageManager

    Android 的应用管理主要是通过PackageManagerService来完成的 PackageManagerService服务负责各种APK包的安装 卸载 优化和查询 PackageManagerService在启动时会扫描所有的A
  • eclipse自动补全不生效解决方法

    eclipse有时候设置了自动补全 xff0c 但明明设置了自动补全却没生效的解决办法 xff0c 按照图片上标注序号一步步进入Advanced页面后 xff0c 勾选第四步的三项选项即可 xff0c 重新生效 xff0c 如下
  • 史上最全的C++面试宝典(合集)

    参考 xff1a https www runoob com cplusplus cpp tutorial html 本教程旨在提取最精炼 实用的C 43 43 面试知识点 xff0c 供读者快速学习及本人查阅复习所用 目录 第一章 C 43
  • 电脑主板,显卡,CPU天梯图

    17年6月主板天梯图 18年2月显卡天梯图 18年3月CPU天梯图
  • sqlserver 批量删除存储过程

    sqlserver 2005一次只能删除一个存储过程 xff0c 如果多了 xff0c 需要很长时间才能删完 xff0c 所以写了一段语句 xff0c 直接就把当然数据库下所有用户自定义的存储过程给drop了 不过使用都请留心 xff0c
  • win7开启wifi共享(热点)

    1 首先在电脑左下方搜索cmd xff0c 以管理员身份运行 输入命令 xff1a netsh wlan set hostednetwork mode 61 allow ssid 61 4Gtest key 61 12345678 ssid
  • Spring官方提供【CSRF攻击】解决方案

    步入正文 Cookie cookie是我们常见用来保存用户态信息 xff0c cookie跟随我们的请求自动携带 在同一域名下的请求 xff0c cookie总是自动携带 用户态 当前登入者的用户信息 以上的特性会导致一个潜在漏洞 CSRF
  • RocketMQ 一个topic 多个消费者只有一个消费的问题

    前言 很多时候 xff0c 我们会在多个地方同时订阅一个 topic xff0c 但是发现消费者只能执行一个后注册消费者会顶替之前注册的消费者 原因 在 subscribeTable 和 subscriptionInner 方法中 xff0
  • 如何快速学习一门新计算机语言

    本来想总结老师的方法的 xff0c 可在网上找到一篇一模一样的 xff0c 为了保证原创性 xff0c 所以只好直接引用啦 点击打开链接 如何快速学习一门新计算机语言
  • 福利抽奖 | 开源企业级监控Zabbix6.0都有哪些亮点

    Zabbix是企业级开源监控解决方案 xff0c 支持实时监控数万台服务器 虚拟机和网络设备 xff0c 采集百万级监控指标 xff0c 提供跨平台支持 Zabbix完全开源免费 xff0c 社区十分活跃 xff0c 生态建设良好 xff0
  • Git的一些常用概念

    git思维导图 Git工作区域 为了说明我们日常开发中执行的一系列Git命令的作用是什么 xff0c 我们需要了解Git的工作区域的概念 xff0c 几乎每一个常见的Git命令操作都可以通过工作区域来解释 Git本地有四个工作区域 xff1
  • 有没有完全自主的国产化数据库技术

    前段时间的俄乌冲突 xff0c Oracle 宣布 暂停在俄罗斯的所有业务 xff0c 相信大家的心情绝不是隔岸观火 xff0c 而是细思恐极 数据库号称 IT 领域三大核心之一 xff08 其他两个是 CPU 和操作系统 xff09 xf
  • 多个线程之间如何协同

    1 CountDownLatch 计数器 在多线程协作完成任务的时候 xff0c 有时候需要等待其他线程完成任务后 xff0c 主线程才能继续执行 xff0c 我们可以使用 Thread 类的 join 方法 xff0c 让主线程等待被 j
  • 利用Sharding-JDBC 实现Mysql读写分离

    为什么要读写分离 xff1f 读写分离则是将事务性的增 改 删操作在主库执行 xff0c 查询操作在从库执行 一般业务的写操作都是比较耗时 xff0c 为了避免写操作影响查询的效率 xff0c 可以使用读写分离 当然读写分离并不是万能的 x
  • 并发编程的核心问题

    并发编程并不是一项孤立存在的技术 xff0c 也不是脱离现实生活场景而提出的一项技术 相反 xff0c 并发编程是一项综合性的技术 xff0c 同时 xff0c 它与现实生活中 的场景有着紧密的联系 并发编程有三大核心问题 xff1a 分工

随机推荐

  • windows xp管理工具不见了怎么办

    管理工具其实是一个文件夹C ProgramData Microsoft Windows Start Menu Programs Administrative Tools 管理工具里的内容就是这个文件夹里的内容 xff0c 你的内容不见了 x
  • 分享搭建脚手架的一些经验

    印象中有些日子没有写文章了 xff0c 最近一直在放飞自我 xff0c 今天和大家分享的一些在搭建脚手架和编程中的一些实践原则 所有目标都是 清晰架构分层 使用统一的依赖管理 这种方式是基于我多年来的实践 最开始我也将项目类库及其版本随意的
  • POJO、Java Bean是如何定义的

    之前介绍过DTO PO VO的转换 xff0c 在日常开发中还有一些类经常被人叫做POJO xff0c 还有的人叫它们Java Bean 这些概念都是在特定场景下引入 xff0c 用来表明它们的特性的 那这些称呼都是啥意思 xff0c 有啥
  • Maven依赖的作用域你到底用对了没有

    Maven是目前Java开发主要使用的依赖管理构建工具之一 xff0c 但是很多人在引用依赖的时候直接引用坐标 xff0c 而没有考虑依赖的作用范围 xff0c 结果导致出现这样和那样的问题 今天胖哥就来说明一下Maven引用依赖的一个要点
  • 胖哥亲自带你玩转Spring Security OAuth2

    参与Spring Security与OAuth2专栏限定免费学习群 xff0c 请从活动主页扫描第三个专栏学习群二维码入群 xff01 关于21天学习挑战赛活动细节 xff0c 请从点击活动主页了解 作者介绍 码农小胖哥 xff0c Spr
  • 21天,胖哥亲自带你玩转OAuth2

    参与Spring Security与OAuth2专栏限定免费学习群 xff0c 请从阅读原文扫描第三个专栏学习群二维码入群 xff01 关于21天学习挑战赛活动细节 xff0c 请点击 阅读原文了解 作者介绍 码农小胖哥 xff0c Spr
  • StoneDB 为何敢称业界唯一开源的 MySQL 原生 HTAP 数据库?

    近些年 xff0c HTAP 正在受到人们越来越多的关注 xff0c Gartner 在 2014 年提出了 HTAP 这个术语和它的定义 xff1a Hybrid transaction analytical processing HTA
  • 聊聊数据库建表的15个小技巧

    前言 对于后端开发同学来说 xff0c 访问数据库 xff0c 是代码中必不可少的一个环节 系统中收集到用户的核心数据 xff0c 为了安全性 xff0c 我们一般会存储到数据库 xff0c 比如 xff1a mysql xff0c ora
  • 【收藏备用】15大超全应用场景总结,进阶主机安全

    随着业务数字化转型 xff0c 企业的业务变得越来越开放和灵活 xff0c 面临的安全挑战也日益增加 在这种多变 开放的场景下 xff0c 无论安全边界怎么做 xff0c 都无法阻挡黑客打破边界进入企业内部来窃取核心资产 当下安全对抗以及安
  • Java 19 正式发布,改善多线程、并发编程难度

    Java 19 在数分钟前正式发布 xff0c 这是一个非 LTS xff08 长期支持 xff09 版本 该版本的七项功能包括结构化并发 记录模式 外部函数和内存 API 的预览 xff0c 以及对开源 Linux RISC V 指令集架
  • 文末下载方式 | Jetbrains的下一代IDE工具Fleet公测

    之前胖哥介绍了Jetbrains的下一代IDE工具Fleet xff0c 激起了很多同学的兴趣 如果你还不知道Fleet是什么就去看下这一篇文章 Fleet是Jetbrains新出品的一款分布式多语言编辑器和 IDE 它是 IntelliJ
  • Chrome浏览器官方离线安装包下载地址

    1 下列地址任选其一 http viewver coolpage biz chrome php http viewversion coolpage biz chrome php http user336598776 hstn me chro
  • idea如何设置背景图

    写在前面 作为一个Java开发者 xff0c 我想大家肯定都知道IDEA这个编译器吧 xff0c 但是idea默认的背景并不是很美观 xff08 应该说很丑 xff0c 个人感觉哈 xff09 那么如何更换背景呢 xff08 此方法同样适用
  • Spring 6.0已发布,AOT和Native Image成为新亮点

    最新的6 0文档已经更新 Spring Framework 6 0 上周末已经正式发布 接下来Spring的一系列项目都会以6 0为基准发布新版本 xff0c 至此Spring家族正式进入6 0时代 Spring 6 0的基准线为Java
  • 一周发布30多个版本,Spring 6.0开始爆发

    从Spring Framework 6 0正式发布开始 xff0c Spring团队开启了 爆兵模式 xff0c 近一周发布了30多个版本 近期Spring发布计划 基本上每个组件都多版本同时发布 xff0c 18日Spring Data系
  • Spring Boot 3.0 正式发布,这份升级指南必须收藏

    Spring Boot 3 0 现已正式发布 xff0c 它包含了 12 个月以来 151 个开发者的 5700 多次代码提交 这是自 4 5 年前发布 2 0 以来 xff0c Spring Boot 的第一次重大修订 它也是第一个支持
  • 青藤CEO张福:要实现云安全,先要“业安融合”

    在青藤近日举行的 云时代 xff0c 安全变了 云安全高峰论坛上 xff0c 青藤CEO张福在开场致辞中就抛出了这两个所有企业都密切关注的安全问题 xff1a 云时代 xff0c 安全究竟发生了哪些变化 xff1f 安全到底应该怎么做 xf
  • Android Studio 配置使用 Kotlin

    前言 xff1a 在今天 xff08 2017 05 18 xff09 谷歌发布了 xff0c 将Kotlin语言作为安卓开发的一级编程语言 Kotlin由JetBrains公司开发 这个Kotlin xff0c Kotlin 是一个基于
  • layui数据表格分页无法正常显示

    应该先利用layui table中的parseData方法手动将数据切片分页 xff0c 代码如下 要点是parseData function res 中的方法 xff0c 对从url中get到的数据进行手动分页处理 layui use 3
  • 深度学习——使用Tesseract.js在浏览器离线识别图片中的文字

    Tesseract简介 Tesseract是惠普布里斯托实验室在1985到1995年间开发的一一个开源的OCR引擎 xff0c 曾经在1995 UNLV精确度测试中名列前茅 但1996年后基本停止了开发 2005年 xff0c 惠普将其对外