【node】借助百度智能云,识别并提取图片中的文字

news2024/11/26 9:57:40

效果图:

一、对接百度智能云

登录百度智能云:百度智能云-云智一体深入产业

新用户可以免费体验,按照下面来就行:

 创建应用之后就会有密钥啥的了

二、在node项目中安装依赖并使用 

所有依赖如下:

    "baidu-aip-sdk": "^4.16.12",
    "express": "^4.18.2",
    "multer": "^1.4.5-lts.1",
    "nodemon": "^2.0.22"

不知道安装命令可到此处查找:npm

index.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>图片上传</title>
</head>

<body>
    <form id="uploadForm">
        <input type="file" id="fileInput">
        <button type="submit">上传图片</button>
    </form>

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        $(document).ready(function () {
            $('#uploadForm').submit(function (event) {
                event.preventDefault(); // 阻止表单的默认提交行为

                const formData = new FormData();
                formData.append('image', $('#fileInput')[0].files[0]);

                $.ajax({
                    url: 'http://127.0.0.1:3000/upload',
                    type: 'POST',
                    data: formData,
                    processData: false,
                    contentType: false,
                    success: function (result) {
                        console.log(result);
                    },
                    error: function (error) {
                        console.error(error);
                    }
                });
            });
        });
    </script>
</body>

</html>

app.js,需要在app.js的同级目录下创建static存放图片

var AipOcrClient = require("baidu-aip-sdk").ocr;
const express = require('express')
const multer = require('multer')
const fs = require('fs');
const path = require('path')
const app = express()

// 设置APPID/AK/SK
var APP_ID = "xxxxxxx";
var API_KEY = "xxxxxxxxxxxxxxxxxxxx";
var SECRET_KEY = "xxxxxxxxxxxxxxxxxxxxx";
// 新建一个对象,建议只保存一个对象调用服务接口
var client = new AipOcrClient(APP_ID, API_KEY, SECRET_KEY);

// diskStorage创建上传存储器 
const storage = multer.diskStorage({
    // 设置上传文件存储目录
    destination: function (req, file, cb) {
        cb(null, './static/')
    },
    //保存在 uploads 中的文件名
    filename: function (req, file, cb) {
        const extname = path.extname(file.originalname) // 获取文件后缀名
        const filename = Date.now() + '' + extname     // 时间戳+后缀名 生成唯一文件名
        cb(null, filename)
    }
})

//创建一个名为upload的文件上传示例
const upload = multer({ storage: storage })

// 创建上传路由
// upload.single('image') 处理单个文件上传
app.post('/upload', upload.single('image'), (req, res) => {
    const file = req.file
    if (!file) {
        return res.status(400).send('请选择要上传的图片')
    }
    const filePath = req.file.path;
    // 读取文件
    fs.readFile(filePath, (err, data) => {
        if (err) {
            console.error(err);
            res.status(500).send('Failed to read the file.');
            return;
        }
        // 将文件数据转换为 Base64
        const base64Data = data.toString('base64');
        client.generalBasic(base64Data).then(function(result) {
            res.send(result)
            console.log(result);
        }).catch(function(err) {
            console.log(err);
        });
    });
})


const PORT = process.env.PORT || 3000;
// 启动服务器
app.listen(3000, () => {
    console.log(`Server running on http://localhost:${PORT}`)
})

注解:

百度智能云更详细的可看文档:接口说明 - 文字识别OCR

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

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

相关文章

Python中的*args和**kwargs:无限可能的函数参数详解

概要 在 Python 编程中&#xff0c;*args 和 **kwargs 是常用的两个特殊参数&#xff0c;用于处理不确定数量的函数参数。它们提供了一种灵活的方式来传递和接收参数&#xff0c;使函数的定义更加通用。本文将详细介绍 *args 和 **kwargs 的使用方法&#xff0c;并提供相关代码…

UnityVR--机械臂场景9-简单流水线应用1

目录 一. 整体介绍 二. 准备工作 三. 建立流水线 1. 流水线包含的功能&#xff1a; 2. 流水线的代码结构 3. 场景实现 4. 测试运行 一. 整体介绍 流水线是在空间和时间上合理安排和组织工艺线路的一种形式&#xff0c;它涉及到一种或多种生产设备、传感器、物料传输设备等&…

企业微信群机器人开发

准备工作 已经注册了有效的企业微信账号&#xff0c;并且在客户端上已经登录现有或者新建有效的包含多名企业微信成员的群聊 创建群聊机器人 右键群聊->管理聊天信息->添加群机器人 使用群机器人 在终端某个群组添加机器人之后&#xff0c;创建者可以在机器人详情页…

【Unity天空盒的制作及使用】使用HDR图或六面图制作天空盒及天空盒的几种使用方式

前言【Unity天空盒的制作及使用】使用HDR图或六面图制作天空盒及天空盒的几种使用方式一 、制作天空盒材质1.1 使用HDR文件1.2 使用六张图片二、天空盒的使用方式2.1 场景中设置天空盒2.2 相机中设置天空盒总结前言 Unity工程中每次打开工程映入眼帘的蓝灰过渡的画面就是Unity默…

随笔 --- 是否可以用左右子树结点数差来衡量二叉树是否平衡?

这道题目来自mooc上浙江大学由陈越 、何钦铭老师主讲的数据结构课程上。 题目如下&#xff1a; 由于评论区关闭&#xff0c;在这里写下我自己的思路&#xff1a; 根据要求使用结点数来衡量是否是平衡时&#xff0c;极端条件是NR 2NL 或者反之。 如果构建二叉树时恰好构建为斜…

xxl-job使用详解(包含部分踩坑信息)

概念 XXL-JOB 是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。 分布式下&#xff0c;每个服务都可以搭建为集群&#xff0c;这样的好处是可以将任务切片分给每一个服务从而实现并行执行&#xff0c;提高任务调度的处理效率。 在…

你真的会CSS?来看看这几个效果怎么做!

最近阿锋在超市排队买菜&#xff08;辣条&#xff09; 一个大叔一边给孩子买吃的一边说&#xff1a; 这些都是增加记忆力的&#xff0c;对孩子好&#xff01; 蓝莓&#xff0c;深海鱼&#xff0c;全麦面包&#xff0c;坚果儿&#xff0c;十六个核桃 不禁感叹现在的孩子们还真是…

6个美化代码片段转换截图图片在线工具推荐

有些截图的代码片段不是太美观&#xff0c;我们可以用统一的代码片段美化截图工具&#xff1a; 文章目录&#xff1a; 1、Codeimg 2.、Carbon 3、Ray.so 4、CodeKeep 5、Chalk.ist 6、Codepng Codeimg 支持设置设备系统&#xff0c;比如可选 MacOs、Windows系统样式。以及设置…

QT error: C2039: “jifen_lineEdit”: 不是“Ui::UIMainFrame”的成员

问题&#xff1a;新增控件不在ui_.h文件中 前提&#xff1a; 在ui界面新增了一个edit控件&#xff0c;在对应cpp中使用ui->jifen_lineEdit时就报错 error: C2039: “jifen_lineEdit”: 不是“Ui::UIMainFrame”的成员 或者error: no member named jifen_lineEdit in Ui::U…

java项目之二手手机回收平台系统(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的二手手机回收平台系统。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框…

论文怎么导入endnotes

我不怎么用pdf直接导入&#xff0c;感觉基本信息还要重新填比较麻烦&#xff0c;期刊基本都支持直接导入了&#xff0c; 1、知网&#xff1a; 随机选择一篇论文&#xff1a; 说实话搜索之前我以为没有结果的&#xff08;x 注意先点击前面的选中&#xff0c;然后点击导出分…

【七天入门数据库】第三天 MySQL的库表操作

系列文章传送门&#xff1a; 【七天入门数据库】第一天 MySQL的安装部署 【七天入门数据库】第二天 数据库理论基础 【七天入门数据库】第三天 MySQL的库表操作 文章目录 一、SQL语句书写规范 二、数据库的操作 三、表的基本操作 四、表的约束 五、存储引擎 六、MySQ…

密码学入门——消息认证码

文章目录 参考书目一、简介二、消息认证码的使用步骤三、消息认证码的应用实例四、消息认证码的实现方法五、认证加密六、HMAC 参考书目 图解密码技术&#xff0c;第三版 一、简介 使用消息认证码可以确认自己收到的消息是否就是发送者的本意&#xff0c;也就是说&#xff0…

python实现压缩与解压(zlib)

本文将使用python的zlib与base64进行压缩与解压 其中base64模块用于对字节流与字符串的转换&#xff0c;zlib用于数据的压缩与解压 同时在后面附上在JS中遇到需要压缩解压的案例 解压代码&#xff1a; import base64 import zlibinput_string eJwlzT1OAzEQBeC7pJjSf1rHu0h…

yum方式安装mysql 8.0.33失败,缺少依赖包

配置网络源 [rootlocalhost yum.repos.d]# ping www.163.com PING z163picipv6.v.bsgslb.cn (61.184.215.68) 56(84) bytes of data. 64 bytes from 61.184.215.68 (61.184.215.68): icmp_seq1 ttl128 time13.2 ms 64 bytes from 61.184.215.68 (61.184.215.68): icmp_seq2 tt…

造船码头行车限位器与驾驶室控制柜无线通讯

随着我国海洋交通的快速发展&#xff0c;船舶信息化管理的建设&#xff0c;无线通信资源的配置&#xff0c;将先进的无线通信技术引入水上交通安全的监管业务中已是大势所趋。码头安装(设备和系统的安装) 船舶下水后常停靠于厂内舾装码头, 以安装船体设备, 机电设备&#xff0c…

第6集丨JavaScript 使用原型(prototype)实现继承——最佳实战3

目录 一、原型继承与属性拷贝1.1 功能说明1.2 功能测试 二、多重继承2.1 功能实现2.2 功能测试 三、寄生式继承四、构造器借用4.1 简单实现4.2 进化版4.2.1 功能实现4.2.2 案例测试 五、借用构造器和原型复制六 综合案例6.1 需求说明6.2 代码实现 一、原型继承与属性拷贝 1.1 功…

免费的音频转文字软件这么多,音频转文字软件推荐有哪些?

在一次音频转文字工作者的聚会上&#xff0c;艾米和迈克正在探讨如何提高他们的工作效率。他们都深知手动转录音频文件的困难和耗时&#xff0c;因此开始讨论是否有一种音频转文字软件可以推荐。 迈克&#xff1a;嘿&#xff0c;艾米&#xff01;我们都知道&#xff0c;音频转…

Scratch 星际飞船

Scratch 星际飞船 本程序主要增加了背景切换功能&#xff0c;飞船跟随鼠标移动&#xff0c;接触到右边的方块时切换到下一张背景&#xff0c;切换后飞船移动到左边&#xff0c;左边的椭圆则相反。随机生成另外两种飞船角色为背景&#xff0c;接触到边缘后移除。 图形化程序如下…

【算法与数据结构】150、LeetCode逆波兰表达式求值

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;我们常看见的表达式是中缀表达式&#xff08;关于中缀表达式的定义可以参考前缀、中缀、后缀表达式&am…