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

【vue + JS】OCR图片识别、文字识别

一、需求说明

将上传图片中的文字内容识别出来
 

二、需求分析

利用“百度文字识别”功能,将上传的图片转成base64格式,调取对应的识别接口获取图片上的文字。


  1. 上传图片
  2. 将图片转换成base64格式
  3. 获取图片识别所需的token
  4. 执行OCR图片识别

三、解决方法

1、html:上传图片按钮

<a-uploadaccept=".png,.jpg":beforeUpload="beforeUploadFile"@reject="message.warning('上传文件格式不正确')":showUploadList="false"
><a-button class="btn-bg"><svg-icon icon-class="upload" class="btn-icon"></svg-icon>上传照片识别</a-button>
</a-upload>

2、js:实现功能方法

// 环境变量配置
const API_KEY = "xxx";
const SECRET_KEY = "xxx";const loading = ref(false);
const imageData = ref<string | ArrayBuffer | null>(null);
const result = ref(null);/*** @description: 将上传的图片转换成base64格式* @param {object} file 文件* @return {*}*/
const handleFileChange = (file: any) => {resultData.isLeft = false;let fr = new FileReader();fr.readAsDataURL(file); // 读取文件并返回DataURLfr.onload = function () {imageData.value = fr.result; // 获取Base64编码};setTimeout(() => {recognizeImage(); //识别图片}, 500);
};/*** @description: 利用百度OCR识别api文档,进行图片识别* @return {*}*/
const recognizeImage = async () => {if (!imageData.value) return;loading.value = true;try {const accessToken = await getAccessToken();const params = new URLSearchParams();params.append("image", imageData.value as string);params.append("detect_direction", "true"); // 自动旋转检测‌:ml-citation{ref="4" data="citationList"}const response = await axios.post("/baiduApi/rest/2.0/ocr/v1/accurate_basic", params, {params: { access_token: accessToken },headers: { "Content-Type": "application/x-www-form-urlencoded" }});// response.data.words_result 识别出的文字result.value = response.data.words_result as any;} catch (error) {handleError(error);// 错误处理} finally {loading.value = false;}
};/*** @description: 错误处理* @return {*}*/
const handleError = (error: any) => {if (error.response?.data?.error_code) {const errorCode = error.response.data.error_code;switch (errorCode) {case 18:alert("API调用频率超限");break;case 216202:alert("未检测到图片有效内容");break;default:alert(`识别失败,错误码:${errorCode}`);}}
};/*** @description: 获取图片识别所需的token* @return {*}*/
const getAccessToken = async () => {try {const response = await axios.post("/baiduApi/oauth/2.0/token", null, {params: {grant_type: "client_credentials",client_id: API_KEY,client_secret: SECRET_KEY}});return response.data.access_token;} catch (error) {console.error("获取Token失败:", error);throw error;}
};

 PS:注意跨域问题

vite.config.ts 文件中设置代理

server: {host: "0.0.0.0",port: 4000, // 设置服务启动端口号open: false, // 设置服务启动时是否自动打开浏览器cors: true, // 允许跨域hmr: true,// 设置代理,根据我们项目实际情况配置proxy: {"/baiduApi": {target: "https://aip.baidubce.com",changeOrigin: true,secure: false, // 关闭SSL证书验证‌:ml-citation{ref="3,4" data="citationList"}rejectUnauthorized: false, // 允许自签名证书‌:ml-citation{ref="3,4" data="citationList"}rewrite: path => path.replace(/^\/baiduApi/, "")}}
}


四、参考链接

百度文档:文字识别OCR


http://www.mrgr.cn/news/94325.html

相关文章:

  • 《基于大数据的营养果蔬推荐系统的设计与实现》开题报告
  • 在 Windows 上快速部署 OpenManus:从安装到运行
  • 计算机网络——DHCP实验
  • python -面试题--算法
  • RGV调度算法(三)--遗传算法
  • LeetCode 解题思路 15(Hot 100)
  • 独立开发记录:使用Trae和Cloudflare快速搭建了自己的个人博客
  • ES6回顾:闭包->(优点:实现工厂函数、记忆化和异步实现)、(应用场景:Promise的then与catch的回调、async/await、柯里化函数)
  • 【C#学习笔记04】C语言格式化输出
  • 深度剖析 Doris 数据倾斜,优化方案一网打尽
  • 【二分查找 寻找首端】P3718 [AHOI2017初中组] alter|普及+
  • uniapp实现 uview1 u-button的水波纹效果
  • 使用memmove优化插入排序
  • 新闻网页信息抽取
  • JVM 垃圾回收器的选择
  • 广播机制(Broadcasting)
  • 项目组织管理类型-职能式组织和矩阵式组织的区别
  • HOT100——二叉树篇Leetcode236. 二叉树的最近公共祖先
  • windows 下用docker 部署nginx
  • 项目组织管理类型-矩阵式组织和组合式组织的区别