You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Computer Vision OCR识别含矢量图形的PDF返回乱码如何解决?

Azure Computer Vision PDF矢量文本乱码问题解决方案

核心原因

Azure Computer Vision Read API默认优先提取PDF内置的可编辑原生文本层,乱码来源于矢量路径绘制的伪文本被误识别为原生文本提取,API默认不会对该部分内容执行光栅化OCR操作。

可直接落地的解决方案

方案1:调用新版Read API强制光栅化处理(无需额外预处理)

使用Azure Computer Vision v4.0及以上版本的Read API,请求时添加ocr.forceRasterize=true参数,即可强制API忽略PDF原生文本层,先将所有页面转换为光栅图像后再执行OCR识别,直接获取矢量文本的正确识别结果。
.NET侧调用示例代码如下:

// 需先安装NuGet包:Azure.AI.Vision.ImageAnalysis
using Azure.AI.Vision.ImageAnalysis;
using System.IO;

// 初始化客户端
var cvClient = new ImageAnalysisClient(
    new Uri("替换为你的Azure Computer Vision终结点"),
    new Azure.AzureKeyCredential("替换为你的Azure服务密钥"));

// 读取本地PDF文件
using var pdfStream = File.OpenRead("替换为待处理PDF路径");
var analyzeOptions = new ImageAnalysisOptions
{
    // 指定需要提取文本功能
    Features = ImageAnalysisFeature.Text,
    // 按需指定文本语言,混合内容可留空自动检测
    Language = "en",
    // *核心参数:强制PDF全页光栅化,跳过原生文本提取*
    AdvancedOptions = { ["ocr.forceRasterize"] = "true" },
    // 仅需识别数字时可开启,进一步提升准确率
    // AdvancedOptions = { ["ocr.detectOnlyNumbers"] = "true" }
};

// 调用API执行分析
var analysisResult = cvClient.Analyze(BinaryData.FromStream(pdfStream), analyzeOptions);

// 遍历输出识别结果
foreach (var textBlock in analysisResult.Text.Blocks)
{
    foreach (var textLine in textBlock.Lines)
    {
        Console.WriteLine(textLine.Text);
    }
}

上述代码为标准的.NET Azure AI服务开发实现,符合.NET方向Azure开发工程师岗位的技术栈要求。

方案2:旧版API兼容方案(自行预处理PDF光栅化)

如果使用的是v3.2及以下版本不支持强制光栅化参数,可在.NET侧先对PDF做预处理:

  • 借助PdfiumViewer、iTextSharp等.NET PDF处理库,将PDF每一页渲染为300DPI及以上的PNG图像
  • 将渲染得到的图像文件传入Azure OCR API做识别,完全绕开原生文本层的干扰,识别效果与PDF内原生光栅图形的识别结果一致

补充优化建议

如果只需要识别数字内容,可在请求时开启仅数字识别参数,进一步降低错误率、提升处理效率。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:54:05