Skip to content

OCR

概述

OCR (光学字符识别) 是将扫描文档、文档照片、场景照片(例如风景照片中标志和广告牌上的文本)以及叠加在图像上的字幕等文本,转换为机器编码文本的过程。

OCR 常用于对以下文档的文字识别和提取:

  • 不可编辑的扫描档 PDF 文件
  • 文档照片
  • 广告排、标牌等场景照片
  • 身份证、护照、车牌等牌照
  • 发票、账单、收据等票据

以下是支持 OCR 的功能:

  • PDF 转 Word
  • PDF 转 Excel
  • PDF 转 PPT
  • PDF 转 HTML
  • PDF 转 RTF
  • PDF 转 TXT
  • PDF 转 CSV
  • PDF 文本提取
  • PDF 表格提取

OCR 目前支持的语言包括:

Script / Notes语言语言 (英文名称)语言(中文名称)
Latn; AmericanEnglishEnglish英文
Latn; CanadianFrançais canadienFrench法文
Hans/Hant中文简体Chinese (Simplified)简体中文
Hans/Hant中文繁体Chinese (Traditional)繁体中文
Jpan日本語Japanese日文
Kore한국어Korean韩文
LatnDeutschGerman德文
LatnСрпски (латиница)Serbian (latin)塞尔维亚语(拉丁字母)
LatnOccitan, lenga d'òc, provençalOccitan奥克西坦语
LatnDanskDanish丹麦文
LatnItalianoItalian意大利文
Latn; EuropeanEspañolSpanish西班牙文
Latn; EuropeanPortuguês (Portugal)Portuguese葡萄牙文
LatnTe reo MāoriMaori毛利文
LatnBahasa MelayuMalay马来文
LatnMaltiMaltese马耳他文
LatnNederlandsDutch荷兰文
Latn; BokmålNorskNorwegian挪威文
LatnPolskiPolish波兰文
LatnRomânăRomanian罗马尼亚文
LatnSlovenčinaSlovak斯洛伐克文
LatnSlovenščinaSlovenian斯洛文尼亚文
LatnshqipAlbanian阿尔巴尼亚文
LatnSvenskaSwedish瑞典文
LatnSwahiliSwahili斯瓦希里文
LatnWikang TagalogTagalog塔加洛文
LatnTürkçeTurkish土耳其文
LatnoʻzbekchaUzbek乌兹别克文
LatnTiếng ViệtVietnamese越南文
LatnAfrikaansAfrikaans南非荷兰文
LatnAzərbaycanAzerbaijani阿塞拜疆文
LatnBosanskiBosnian波斯尼亚文
LatnČeštinaCzech捷克文
LatnCymraegWelsh威尔士文
LatnEesti keelEstonian爱沙尼亚文
LatnGaeilgeIrish爱尔兰文
LatnHrvatskiCroatian克罗地亚文
LatnMagyarHungarian匈牙利文
LatnBahasa IndonesiaIndonesian印度尼西亚文
LatnÍslenskaIcelandic冰岛文
LatnKurdîKurdish库尔德文
LatnLietuviųLithuanian立陶宛文
LatnLatviešuLatvian拉脱维亚文

是否包含 OCR 背景图

当开启 OCR 功能并且目标转换格式为 Word、PPT、RTF 或者 HTML 时需要留意是否设置IsContainOCRBgImage选项。如果选择了IsContainOCRBgImage选项,则会在目标文档里面写入一张大的背景图作为底图,文本与表格图层将会展示在这张底图上。如果没有选择IsContainOCRBgImage选项,则会基于版面分析提取 PDF 页面上的图片并将其写入目标文档中。

将图片转换为其他文档格式

OCR 功能还支持将输入的图片转换为Word、Excel、PPT、HTML、CSV、RTF、TXT、Json等格式,此示例展示了如何使用 ComPDFKit OCR 功能将图片文档转换为 docx 文档。

c#
// 支持jpg,jpeg,png,bmp格式
string inputFilePath = "***.jpg";
string outputFolderPath = "***";
string outputFileName = "***";

CPDFConverterWord converter = CPDFConvertFactroy.CreateConverter(CPDFConvertType.CPDFConvertTypeWord, inputFilePath) as CPDFConverterWord;
CPDFConvertWordOptions wordOptions = new CPDFConvertWordOptions();
wordOptions.IsAllowOCR = true;
wordOptions.OCRLanguage = ComDocumentAIOCR.Language.ENGLISH;
wordOptions.LayoutOpts = LayoutOptions.RetainPageLayout;

int pageCount = converter.GetPagesCount();
int[] pageArray = new int[pageCount];
for (int i = 0; i < pageArray.Length; i++)
{
    pageArray[i] = i + 1;
}

ConvertError error = ConvertError.ERR_UNKNOWN;
converter.Convert(outputFolderPath, ref outputFileName, wordOptions, pageArray, ref error, getPorgress);

注意事项

  • OCR 结果的质量与输入的图像质量有关,如果输入的图像分辨率较低那么 OCR 的结果质量也会受影响,一个好的经验法则是,字形中的像素越多越好,如果字形边界框小于 20x20 像素,OCR 质量就会开始呈指数级下降,理想的图像是分辨率在 300 DPI 附近的灰度图像。
  • 进行 OCR 识别时需要留意设置 OCR 语言,确保选择的 OCR 语言与 PDF 文档中的语言保持一致,以获取最佳的 OCR 转换质量。
  • 当开启 OCR 选项时,IsContainImages选项将不再起作用,此时 PDF 中的图片将通过IsContainOCRBgImage选项来控制。

集成 OCR 库

  1. 添加 "lib" 中的 "DocumentAI_Windows_NetFramework.dll" 到项目中并引用。 image-16998397801080
  2. "x64" 文件夹中的文件 "DocumentAI.dll" , "onnxruntime.dll""paddle2onnx.dll" 包含到项目中,并将Copy to Output Directory属性设置为Copy if newerimage-20231113100508873
  3. 设置选项参数options.IsAllowOCRtrue
  4. OCR功能目前不支持低于Windows10的操作系统。

示例

此示例演示了如何在扫描文档上使用 ComPDFKit Conversion SDK 的 OCR 功能,将 PDF 文档转换为 Word 文档。

c#
string inputFilePath = "***";
string outputFolderPath = "***";
string outputFileName = "***";

CPDFConverterWord converter = CPDFConvertFactroy.CreateConverter(CPDFConvertType.CPDFConvertTypeWord, inputFilePath) as CPDFConverterWord;
CPDFConvertWordOptions wordOptions = new CPDFConvertWordOptions();
wordOptions.IsAllowOCR = true;
wordOptions.OCRLanguage = ComDocumentAIOCR.Language.ENGLISH;
wordOptions.IsContainAnnotations = true;
wordOptions.IsContainImages = true;
wordOptions.LayoutOpts = LayoutOptions.RetainPageLayout;

int pageCount = converter.GetPagesCount();
int[] pageArray = new int[pageCount];
for (int i = 0; i < pageArray.Length; i++)
{
    pageArray[i] = i + 1;
}

ConvertError error = ConvertError.ERR_UNKNOWN;
converter.Convert(outputFolderPath, ref outputFileName, wordOptions, pageArray, ref error, getPorgress);