react+Tesseract.js实现前端拍照获取/选择文件等文字识别OCR

需求背景

在开发过程中可能会存在用户上传一张图片后下方需要自己识别出来文字数字等信息,有的时候会通过后端来识别后返回,但是也会存在纯前端去识别的情况,这个时候就需要使用到Tesseract.js这个库了   附Tesseract.js官方(https://github.com/naptha/tesseract.js)

实现过程

 主要的实现代码部分和这部分的简易效果图

import {createWorker} from 'tesseract.js';const worker = await createWorker();
await worker.loadLanguage('chi_sim');
await worker.initialize('chi_sim');
const { data: { text } } = await worker.recognize(myImage);
console.log(text);
await worker.terminate();

下方是一个简单的完整实现案例 ⬇ 

npm install tesseract.js

1. createWorker创建worker实例。

2. 调用worker.loadLanguage('chi_sim')。

3. 调用worker.initialize('chi_sim')。

4. 然后调用recognize方法进行识别。

import React, { useState, useEffect } from 'react';
import { createWorker } from 'tesseract.js';const OCRComponent = () => {const [image, setImage] = useState(null);const [text, setText] = useState('');const [progress, setProgress] = useState(0);const [error, setError] = useState('');const [worker, setWorker] = useState(null);// 初始化 WorkeruseEffect(() => {const initializeWorker = async () => {const newWorker = await createWorker();setWorker(newWorker);};initializeWorker();return () => {if (worker) {worker.terminate();}};}, []);// 处理图片上传const handleImageUpload = (e) => {const file = e.target.files[0];if (file) {const reader = new FileReader();reader.onloadend = () => {setImage(reader.result);};reader.readAsDataURL(file);setText('');setError('');}};// 执行 OCR 识别const recognizeText = async () => {if (!worker || !image) return;try {//chi_sim代表的是简体中文包  eng是英文  需要识别其他语言的话可以官网去看下对应的名称await worker.loadLanguage('chi_sim');await worker.initialize('chi_sim');const { data: { text } } = await worker.recognize(image, {logger: (m) => {if (m.status === 'recognizing text') {setProgress(Math.round(m.progress * 100));}}});setText(text);} catch (err) {setError('识别失败,请重试或更换图片。');console.error(err);} finally {await worker.terminate();}};return (<div><h1>中文 OCR 文字识别</h1>{/* 文件上传 */}<input type="file" accept="image/*" onChange={handleImageUpload} />{/* 图片预览 */}{image && (<div><h3>图片预览</h3><img src={image} alt="预览" style={{ maxWidth: '100%', height: 'auto' }} /></div>)}{/* 识别按钮及进度 */}{image && (<div><button onClick={recognizeText} disabled={progress > 0}>{progress > 0 ? `识别中... ${progress}%` : '开始识别'}</button></div>)}{/* 显示结果 */}{text && (<div><h3>识别结果</h3><pre style={{ whiteSpace: 'pre-wrap' }}>{text}</pre></div>)}{/* 错误提示 */}{error && <p style={{ color: 'red' }}>{error}</p>}</div>);
};export default OCRComponent;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯考前复盘

明天就是考试了&#xff0c;适当的停下刷题的步伐。 静静回望、思考、总结一下&#xff0c;我走过的步伐。 考试不是结束&#xff0c;他只是检测这一段时间学习成果的工具。 该继续走的路&#xff0c;还是要继续走的。 只是最近&#xff0c;我偶尔会感到迷惘&#xff0c;看…

前端-Vue3

1. Vue3简介 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;n 经历了&#xff1a;4800次提交、40个RFC、600次PR、300贡献者 官方发版地址&#xff1a;Release v3.0.0 One Piece vuejs/core 截止2023年10月&#xff0c;最…

[ctfshow web入门] web39

信息收集 题目发生了微妙的变化&#xff0c;只过滤flag&#xff0c;include后固定跟上了.php。且没有了echo $flag;&#xff0c;虽说本来就没什么用 if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){include($c.".php");} }else{…

【动手学深度学习】LeNet:卷积神经网络的开山之作

【动手学深度学习】LeNet&#xff1a;卷积神经网络的开山之作 1&#xff0c;LeNet卷积神经网络简介2&#xff0c;Fashion-MNIST图像分类数据集3&#xff0c;LeNet总体架构4&#xff0c;LeNet代码实现4.1&#xff0c;定义LeNet模型4.2&#xff0c;定义模型评估函数4.3&#xff0…

代码随想录第15天:(二叉树)

一、二叉搜索树的最小绝对差&#xff08;Leetcode 530&#xff09; 思路1 &#xff1a;中序遍历将二叉树转化为有序数组&#xff0c;然后暴力求解。 class Solution:def __init__(self):# 初始化一个空的列表&#xff0c;用于保存树的节点值self.vec []def traversal(self, r…

计算机操作系统-【死锁】

文章目录 一、什么是死锁&#xff1f;死锁产生的原因&#xff1f;死锁产生的必要条件&#xff1f;互斥条件请求并保持不可剥夺环路等待 二、处理死锁的基本方法死锁的预防摒弃请求和保持条件摒弃不可剥夺条件摒弃环路等待条件 死锁的避免银行家算法案例 提示&#xff1a;以下是…

vue拓扑图组件

vue拓扑图组件 介绍技术栈功能特性快速开始安装依赖开发调试构建部署 使用示例演示截图组件源码 介绍 一个基于 Vue3 的拓扑图组件&#xff0c;具有以下特点&#xff1a; 1.基于 vue-flow 实现&#xff0c;提供流畅的拓扑图展示体验 2.支持传入 JSON 对象自动生成拓扑结构 3.自…

go 通过汇编分析函数传参与返回值机制

文章目录 概要一、前置知识二、汇编分析2.1、示例2.2、汇编2.2.1、 寄存器传值的汇编2.2.2、 栈内存传值的汇编 三、拓展3.1 了解go中的Duff’s Device3.2 go tool compile3.2 call 0x46dc70 & call 0x46dfda 概要 在上一篇文章中&#xff0c;我们研究了go函数调用时的栈布…

python-1. 找单独的数

问题描述 在一个班级中&#xff0c;每位同学都拿到了一张卡片&#xff0c;上面有一个整数。有趣的是&#xff0c;除了一个数字之外&#xff0c;所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上的数字是什么。 要求&#xff1a; 设…

算法学习C++需注意的基本知识

文章目录 01_算法中C需注意的基本知识cmath头文件一些计算符ASCII码表数据类型长度运算符cout固定输出格式浮点数的比较max排序自定义类型字符的大小写转换与判断判断字符是数字还是字母 02_数据结构需要注意的内容1.stringgetline函数的使用string::findsubstr截取字符串strin…

从零开始写android 的智能指针

Android中定义了两种智能指针类型&#xff0c;一种是强指针sp&#xff08;strong pointer&#xff09;&#xff0c;源码中的位置在system/core/include/utils/StrongPointer.h。另外一种是弱指针&#xff08;weak pointer&#xff09;。其实称之为强引用和弱引用更合适一些。强…

【leetcode hot 100 152】乘积最大子数组

错误解法&#xff1a;db[i]表示以i结尾的最大的非空连续&#xff0c;动态规划&#xff1a;dp[i] Math.max(nums[i], nums[i] * dp[i - 1]); class Solution {public int maxProduct(int[] nums) {int n nums.length;int[] dp new int[n]; // db[i]表示以i结尾的最大的非空连…

图论整理复习

回溯&#xff1a; 模板&#xff1a; void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本层集合中元素&#xff08;树中节点孩子的数量就是集合的大小&#xff09;) {处理节点;backtracking(路径&#xff0c;选择列表); // 递归回溯&#xff…

uniapp离线打包提示未添加videoplayer模块

uniapp中使用到video标签&#xff0c;但是离线打包放到安卓工程中&#xff0c;运行到真机中时提示如下&#xff1a; 解决方案&#xff1a; 1、把media-release.aar、weex_videoplayer-release.aar放到工程的libs目录下; 文档&#xff1a;https://nativesupport.dcloud.net.cn/…

打包构建替换App名称

方案适用背景 一套代码出多个安装包&#xff0c;且安装包的应用名称、图标都不一样考虑三语名称问题 通过 Gradle 脚本实现 gradle.properties 里面定义标识来区分应用&#xff0c;如下文里的 APP_TYPEAAA 、APP_TYPEBBB// 定义 groovy 替换方法 def replaceAppName(String …

DrissionPage移动端自动化:从H5到原生App的跨界测试

一、移动端自动化测试的挑战与机遇 移动端测试面临多维度挑战&#xff1a; 设备碎片化&#xff1a;Android/iOS版本、屏幕分辨率差异 混合应用架构&#xff1a;H5页面与原生组件的深度耦合 交互复杂性&#xff1a;多点触控、手势操作、传感器模拟 性能监控&#xff1a;内存…

达梦数据库用函数实现身份证合法校验

达梦数据库用函数实现身份证合法校验 拿走不谢~ CREATE OR REPLACE FUNCTION CHECK_IDCARD(A_SFZ IN VARCHAR2) RETURN VARCHAR2 IS TYPE WEIGHT_TAB IS VARRAY(17) OF NUMBER; TYPE CHECK_TAB IS VARRAY(11) OF CHAR; WEIGHT_FACTOR WEIGHT_TAB : WEIGHT_TAB(7,9,10,5,8,4,…

3dmax的python通过普通的摄像头动捕表情

1、安装python 进入cdm&#xff0c;打python要能显示版本号 >>>&#xff08;进入python提示符模式&#xff09; import sys sys.path显示python的安装路径&#xff0c; 进入到python.exe的路径 在python目录中安装(ctrlz退出python交互模式) 2、pip install mediapipe…

国产Linux统信安装mysql8教程步骤

系统环境 uname -a Linux FlencherHU-PC 6.12.9-amd64-desktop-rolling #23.01.01.18 SMP PREEMPT_DYNAMIC Fri Jan 10 18:29:31 CST 2025 x86_64 GNU/Linux下载离线安装包 浏览器下载https://downloads.mysql.com/archives/get/p/23/file/mysql-test-8.0.33-linux-glibc2.28…

Vite 权限绕过导致任意文件读取(CVE-2025-32395)(附脚本)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 前言…