使用Cloud Document AI API提取发票数据遇无效架构错误求助
解决Cloud Document AI API的"No valid schema provided"及Windows缓存权限错误
一、解决"No valid schema provided for processing"错误
修复语法错误:
代码中location变量未加引号,会被当作未定义变量,导致处理器路径无效。修改为:const location = 'us'; // 或 'eu',根据你的处理器区域同时确保
projectId和processorId替换为正确的字符串值:const projectId = '你的项目ID'; const processorId = '你的处理器ID';确认处理器类型:
确保在Cloud Console创建的是预训练发票处理器(Invoice Processor),而非通用文档处理器或自定义处理器。预训练发票处理器无需手动传入schema参数,自定义处理器才需要配置对应schema。验证请求参数:
确保rawDocument的mimeType与文件实际类型完全匹配:- PNG图片:
"image/png" - PDF文档:
"application/pdf" - JPG图片:
"image/jpeg"
- PNG图片:
二、解决Windows缓存权限错误
这个错误是谷歌认证库在Windows上创建缓存目录时权限不足导致的,可通过以下方法解决:
以管理员身份运行终端:打开命令提示符或PowerShell时选择"以管理员身份运行",再执行Node.js代码。
禁用认证缓存:
在代码开头添加环境变量设置,禁用谷歌认证库的缓存:process.env.GOOGLE_AUTH_DISABLE_CACHE = '1'; const { DocumentProcessorServiceClient } = require("@google-cloud/documentai").v1; // 后续代码...或者在运行代码前,在终端执行:
set GOOGLE_AUTH_DISABLE_CACHE=1指定自定义缓存路径:
手动设置一个你有读写权限的缓存目录,比如:const { DocumentProcessorServiceClient } = require("@google-cloud/documentai").v1; const client = new DocumentProcessorServiceClient({ auth: { cachePath: 'C:/Users/你的用户名/.cache/google-auth' } });
完整修正后的代码示例
process.env.GOOGLE_AUTH_DISABLE_CACHE = '1'; const projectId = '你的项目ID'; const location = 'us'; // 或 'eu' const processorId = '你的处理器ID'; const filePath = "./testImage.png"; const { DocumentProcessorServiceClient } = require("@google-cloud/documentai").v1; const client = new DocumentProcessorServiceClient(); async function quickstart() { try { const name = `projects/${projectId}/locations/${location}/processors/${processorId}`; const fs = require("fs").promises; const imageFile = await fs.readFile(filePath); const encodedImage = Buffer.from(imageFile).toString("base64"); const request = { name, rawDocument: { content: encodedImage, mimeType: "image/png", }, }; const [result] = await client.processDocument(request); const { document } = result; const { text } = document; console.log("提取的文本内容:", text); // 若使用发票处理器,可提取结构化实体(如发票号、金额等) // document.entities.forEach(entity => { // console.log(`${entity.type}: ${entity.mentionText}`); // }); } catch (e) { console.error("处理失败:", e); } } quickstart();
内容的提问来源于stack exchange,提问作者Maurizio Liguori
相关产品推荐
相关产品推荐

