本页内容
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; American | English | English | 英文 |
Latn; Canadian | Français canadien | French | 法文 |
Hans/Hant | 中文简体 | Chinese (Simplified) | 简体中文 |
Hans/Hant | 中文繁体 | Chinese (Traditional) | 繁体中文 |
Jpan | 日本語 | Japanese | 日文 |
Kore | 한국어 | Korean | 韩文 |
Latn | Deutsch | German | 德文 |
Latn | Српски (латиница) | Serbian (latin) | 塞尔维亚语(拉丁字母) |
Latn | Occitan, lenga d'òc, provençal | Occitan | 奥克西坦语 |
Latn | Dansk | Danish | 丹麦文 |
Latn | Italiano | Italian | 意大利文 |
Latn; European | Español | Spanish | 西班牙文 |
Latn; European | Português (Portugal) | Portuguese | 葡萄牙文 |
Latn | Te reo Māori | Maori | 毛利文 |
Latn | Bahasa Melayu | Malay | 马来文 |
Latn | Malti | Maltese | 马耳他文 |
Latn | Nederlands | Dutch | 荷兰文 |
Latn; Bokmål | Norsk | Norwegian | 挪威文 |
Latn | Polski | Polish | 波兰文 |
Latn | Română | Romanian | 罗马尼亚文 |
Latn | Slovenčina | Slovak | 斯洛伐克文 |
Latn | Slovenščina | Slovenian | 斯洛文尼亚文 |
Latn | shqip | Albanian | 阿尔巴尼亚文 |
Latn | Svenska | Swedish | 瑞典文 |
Latn | Swahili | Swahili | 斯瓦希里文 |
Latn | Wikang Tagalog | Tagalog | 塔加洛文 |
Latn | Türkçe | Turkish | 土耳其文 |
Latn | oʻzbekcha | Uzbek | 乌兹别克文 |
Latn | Tiếng Việt | Vietnamese | 越南文 |
Latn | Afrikaans | Afrikaans | 南非荷兰文 |
Latn | Azərbaycan | Azerbaijani | 阿塞拜疆文 |
Latn | Bosanski | Bosnian | 波斯尼亚文 |
Latn | Čeština | Czech | 捷克文 |
Latn | Cymraeg | Welsh | 威尔士文 |
Latn | Eesti keel | Estonian | 爱沙尼亚文 |
Latn | Gaeilge | Irish | 爱尔兰文 |
Latn | Hrvatski | Croatian | 克罗地亚文 |
Latn | Magyar | Hungarian | 匈牙利文 |
Latn | Bahasa Indonesia | Indonesian | 印度尼西亚文 |
Latn | Íslenska | Icelandic | 冰岛文 |
Latn | Kurdî | Kurdish | 库尔德文 |
Latn | Lietuvių | Lithuanian | 立陶宛文 |
Latn | Latviešu | Latvian | 拉脱维亚文 |
是否包含 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 库
- 添加 "lib" 中的 "DocumentAI_Windows_NetFramework.dll" 到项目中并引用。
- 将 "x64" 文件夹中的文件 "DocumentAI.dll" , "onnxruntime.dll" 和 "paddle2onnx.dll" 包含到项目中,并将Copy to Output Directory属性设置为Copy if newer。
- 设置选项参数
options.IsAllowOCR
为 true。 - 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);