You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何优化Google Vision API(Node.js)越南语OCR识别效果?

解决Google Vision API越南语文本识别丢失声调的问题

针对你遇到的越南语文本识别时声调、元音标记丢失的问题,我整理了几个亲测有效的优化点,能显著提升识别质量:

核心优化措施

  • 换用文档专用API方法:把textDetection替换为documentTextDetection。后者专门针对印刷体文档做了优化,对带声调的多语言字符(比如越南语)识别精度更高,和谷歌在线演示的底层逻辑更匹配。
  • 精准设置语言提示:只保留"vi-VN"作为语言提示,不要混合en。混合语言会让模型识别时产生歧义,聚焦单一语言能让模型优先匹配越南语的声调字符规则。
  • 修复变量初始化问题:原始代码里let text;未初始化,会导致输出开头出现undefined前缀,改成let text = ''即可解决。
  • 启用精细化结果解析:通过fullTextAnnotation获取完整文本,同时逐块、逐词、逐符号解析,不仅能拿到更准确的字符,还能通过置信度判断识别结果的可靠性。

优化后的完整代码

// 先设置环境变量:$env:GOOGLE_APPLICATION_CREDENTIALS="[你的密钥文件路径]"
const fs = require("fs");
const path = require("path");
const vision = require("@google-cloud/vision");

async function quickstart() {
  let text = '';
  const fileName = "j056vt-_800w_800h_sb.jpg";
  const imageFile = fs.readFileSync(fileName);
  const image = Buffer.from(imageFile).toString("base64");
  
  const client = new vision.ImageAnnotatorClient();
  const request = {
    image: { content: image },
    imageContext: { languageHints: ["vi-VN"] } // 仅保留越南语语言提示
  };

  // 使用documentTextDetection替代textDetection
  const [result] = await client.documentTextDetection(request);

  // 方式A:快速输出所有识别文本
  for (const tmp of result.textAnnotations) {
    text += tmp.description + "\n";
  }
  console.log("快速输出结果:\n", text);
  const out = path.basename(fileName, path.extname(fileName)) + ".txt";
  fs.writeFileSync(out, text);

  // 方式B:精细化解析(含置信度)
  const fullTextAnnotation = result.fullTextAnnotation;
  console.log("\n完整文本:\n", fullTextAnnotation.text);
  
  fullTextAnnotation.pages.forEach(page => {
    page.blocks.forEach(block => {
      console.log(`\n块置信度: ${block.confidence}`);
      block.paragraphs.forEach(paragraph => {
        console.log(`段落置信度: ${paragraph.confidence}`);
        paragraph.words.forEach(word => {
          const wordText = word.symbols.map(s => s.text).join("");
          console.log(`单词: ${wordText} | 置信度: ${word.confidence}`);
          word.symbols.forEach(symbol => {
            console.log(`字符: ${symbol.text} | 置信度: ${symbol.confidence}`);
          });
        });
      });
    });
  });
}

quickstart();

额外建议

如果识别效果仍未达到预期,可以检查:

  1. 图片的清晰度与分辨率:确保文字无模糊、拉伸,尽量提供高分辨率原图;
  2. 文字与背景的对比度:若文字和背景颜色接近,可尝试预处理图片提升对比度,帮助模型更好识别字符。

内容的提问来源于stack exchange,提问作者Dabbel

火山引擎 最新活动