nodejs将pdf转换成图片并提取图片内容

pdf2pic 安装方法

安装文档地址:https://github.com/yakovmeister/pdf2image/blob/HEAD/docs/gm-installation.md

Windows下载下面两个文件,安装时没有自动设置环境变量,要分别设置到环境变量

  • Download Ghostscript Windows: https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/tag/gs952
  • Download GraphicsMagick for Windows: https://sourceforge.net/projects/graphicsmagick/files/graphicsmagick-binaries/

示例代码

实现RAG将pdf文档内容添加到向量数据库进行向量检索时,表格等数据无法识别,可以先用多模态模型对数据进行提取,然后再添加到向量数据中。这样做查询时用文本向量模型就够了。

 对pdf中所有页面进行截图,手动指定了一张图片,对这个图片中数据进行了提取。

import { fromPath } from 'pdf2pic';
import * as pdfjsLib from 'pdfjs-dist';
import OpenAI from 'openai';
import fs from 'fs';
import process from "node:process";
import 'dotenv/config';const filename = 't';
const filePath = `./${filename}.pdf`;const options = {density: 100,saveFilename: filename,savePath: "./images",format: "png",width: 600,height: 600
};const convert = fromPath(filePath, options);// 加载 PDF 文件
const loadingTask = pdfjsLib.getDocument(filePath);
const pdfDocument = await loadingTask.promise;// 获取总页数
const totalPages = pdfDocument.numPages;await Promise.all(new Array(totalPages).fill(0).map(async (_, index) => {await convert(index + 1, { responseType: "image" });console.log(`Page ${index + 1} is now converted as image`);})
);try {// 1. 读取本地图片并转换为 Base64const imagePath = "./images/t.6.png";const imageFile = fs.readFileSync(imagePath);const base64Image = imageFile.toString("base64");const openai = new OpenAI({// apiKey: process.env.DASHSCOPE_API_KEY,apiKey: process.env.OPENAI_API_KEY,baseURL: process.env.OPENAI_BASE_URL});// 2. 构建请求参数const response = await openai.chat.completions.create({// model:'deepseek-r1',model: process.env.OPENAI_MODEL_Multi_Mode,messages: [{role: "user",content: [{type: "text",text: `提取图片中所有信息,根据下面不同情况分别提取对应信息:1、全部使用markdown格式2、使用图片上的原本语言,不能修改图片中文字内容,不能自动翻译成或使用其他语言3、段落文字正常提取,不做处理4、图片中表格使用markdown格式提取5、图片中统计图等其他图片,使用文字描述,描述开始和结束标明是在描述图片`},{type: "image_url",image_url: {url: `data:image/png;base64,${base64Image}`,detail: "high",},},],},],temperature: 0,max_tokens: 2048,});// 3. 输出结果console.log(response.choices[0].message.content);
} catch (error) {console.error("Error:", error);
}

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

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

相关文章

机器学习--(随机森林,线性回归)

一、集成学习方法之随机森林 集成学习的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器。集成算法可以说从一方面验证了中国的一句老话:三个臭皮匠,赛过诸葛亮。集成算法大致可以分为:Bagging,B…

RabbitMQ 的工作模式

目录 工作模式 Simple(简单模式) Work Queue(工作队列) Publish/Subscribe(发布/订阅) Exchange(交换机)? Routing(路由模式) Topics(通配…

24.[前端开发-JavaScript基础]Day01-插件配置-变量-数据

一、邂逅JavaScript 1 认识编程语言 前端的三大核心 计算机语言 编程语言 常见的编程语言 2 编程语言发展历史 编程语言的发展历史 – 机器语言 编程语言的发展历史 – 汇编语言 编程语言的发展历史 – 高级语言 机器语言和高级语言 3 JavaScript的历史 认识JavaScript J…

uni-app集成sqlite

Sqlite SQLite 是一种轻量级的关系型数据库管理系统(RDBMS),广泛应用于各种应用程序中,特别是那些需要嵌入式数据库解决方案的场景。它不需要单独的服务器进程或系统配置,所有数据都存储在一个单一的普通磁盘文件中&am…

為什麼使用不限量動態住宅IP採集數據?

在瞭解“不限量動態住宅IP數據採集”之前,我們需要先搞清楚什麼是“動態住宅IP”。簡單來說,動態IP是一種會定期變化的IP地址,通常由互聯網服務提供商(ISP)分配給家庭用戶。與固定IP(靜態IP)不同…

多模态人物视频驱动技术回顾与业务应用

一种新的商品表现形态,内容几乎存在于手淘用户动线全流程,例如信息流种草内容、搜索消费决策内容、详情页种草内容等。通过低成本、高时效的AIGC内容生成能力,能够从供给端缓解内容生产成本高的问题,通过源源不断的低成本供给倒推…

navicat161_premium_cs_x64 安装与使用

navicat161_premium_cs_x64 安装与使用https://mp.weixin.qq.com/s/eE90x59hDVdk-shXSvICbA

自学c++之类、对象、封装

class 类名{int a;//属性 public://权限操作; } 1、权限 public(公共权限)类内可以访问,类外可以访问protected(保护权限)类内可以访问,类外不可以访问(儿子可以访问父亲中的保护内容&#xf…

mmdetection框架下使用yolov3训练Seaships数据集

之前复现的yolov3算法采用的是传统的coco数据集,这里我需要在新的数据集上跑,也就是船舶检测方向的SeaShips数据集,这里给出教程。 Seaships论文链接:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber8438999 一、…

基于 Python 的网络监控系统开发全解

基于 Python 的网络监控系统开发全解 本文详细阐述如何使用 Python 开发一个网络监控系统。通过介绍系统的功能需求,如网络设备状态监测、流量统计、故障告警等,展示利用 Python 丰富的库实现这些功能的过程,包括scapy进行网络数据包捕获、p…

【多模态处理篇三】【DeepSeek语音合成:TTS音色克隆技术揭秘】

最近帮某明星工作室做AI语音助手时遇到魔幻需求——要求用5秒的咳嗽声克隆出完整音色!传统TTS系统直接翻车,生成的语音像得了重感冒的电音怪物。直到祭出DeepSeek的TTS音色克隆黑科技,才让AI语音从"机器朗读"进化到"声临其境"。今天我们就来扒开这个声音…

基于YOLO11深度学习的苹果叶片病害检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

一篇docker从入门到精通

Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙盒机制,相互之间不会有任何接口(类似 iP…

w803|联盛德|WM IoT SDK2.X测试|window11|TOML 文件|外设|TFT_LCD|测试任务|(5):TFT_LCD_LVGL示例

TFT_LCD_LVGL 功能概述 此应用程序是使用 WM IoT SDK 进行 LVGL 功能的示例。它演示了如何初始化 TFT LCD 设备,并创建 LVGL DEMO Task 进行 LVGL 模块的初始化,并展示 LVGL 原生的不同 Demo 场景, 例如: Widgets, Music Player, Benchmark…

openlayers结合turf geojson面获取面积和中心点

在 OpenLayers 中绘制 GeoJSON 面要素并计算面积和中心点,可以结合 OpenLayers 的 ol/format/GeoJSON 模块将 GeoJSON 数据转换为 OpenLayers 的 Feature,然后使用 Turf.js 进行计算。示例代码如下 import Map from ol/Map; import View from ol/View; …

nginx 搭建 IPv6 -> IPv4 反向代理服务器

背景 在实际生产过程中,由于各种原因,我们的在线服务搭建在火山云服务器上,使用火山云包括 ECS、CLB、PLB 等组件进行网络通信,并且通过专线接受来自某公司内部流量。但是在大概 22~23 年,某公司要把所有网络流量变为…

FTP出现“打开 FTP 服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。”如何处理?

关闭“使用被动FTP”功能:在控制面板的“Internet选项”中,点击“高级”标签卡,找到“使用被动FTP(为防火墙和DSL调制解调器兼容性)”,并取消勾选124。 检查FTP服务器设置:确保FTP服务器没有开…

wordpress使用CorePress主题设置项总结

宝塔面板设置 软件商店中安装的软件有:(宝塔网站加速3.1)(Nginx 1.18.0)(MySql 5.6.50)(PHP-5.6)(phpMyAdmin 4.4)(Python项目管理器 …

Oracle Redo日志损坏挽救详细攻略

一 介绍 1.1 介绍 Oracle Redo损坏分四种情况:unused状态日志损坏 inactive状态日志损坏 active状态日志损坏 current状态日志损坏。针对不同状态的日志损坏,处理方式有所不同,下面将逐一介绍。 二 恢复 2.1 unused与inactive状态日志损坏 如果这个…

003 SpringBoot集成Kafka操作

4.SpringBoot集成Kafka 文章目录 4.SpringBoot集成Kafka1.入门示例2.yml完整配置3.关键配置注释说明1. 生产者优化参数2. 消费者可靠性配置3. 监听器高级特性4. 安全认证配置 4.配置验证方法5.不同场景配置模板场景1:高吞吐日志收集场景2:金融级事务消息…