更新 2025年二月16日
分享:

如何使用IronOCR读取照片

This article was translated from English: Does it need improvement?
Translated
View the article in English

作者:Curtis Chau

在处理大量文档时,尤其是像TIFF文件这样的扫描图像,手动提取文本可能既耗时,又容易出现人为错误。 这就是光学字符识别(光学字符识别)提供了一种自动化的方法,可以准确地将图像中的文本转换为数字数据。 OCR 技术可以处理图像的复杂性,例如扫描文档或照片,并将其转换为可搜索、可编辑的文本。 这不仅加快了文档处理速度,还确保了与人工转录相比更准确的数据提取。

使用OCR处理TIFF等格式,由于其大小、色深或压缩,可能难以读取,使企业和开发人员能够快速数字化和管理大量数据。 借助像IronOCR的ReadPhoto功能这样的OCR解决方案,开发人员可以从图像中提取文本,甚至执行高级操作,如搜索关键字或将扫描的数据转换为可搜索的PDF。 这项技术对于处理法律文件、档案或收据等行业尤其有用,因为高效的数据检索至关重要。

在本教程中,我们将简要提供一个输入以及一个示例,说明如何使用ReadPhoto以及如何操作结果对象。 以及开发人员发现他们在使用 ReadPhoto 替代 IronOCR 的标准 Read 的场景。

立即在您的项目中开始使用IronOCR,并享受免费试用。

第一步:
green arrow pointer

要使用此功能,您还必须安装IronOcr.Extension.AdvancedScan包装

读取照片示例

使用IronOCR读取高质量的照片格式(如tiffgif)相对简单。 首先,我们创建一个新变量并将其指定为OcrInput,然后使用LoadImageFrame加载图像。 最后,我们使用 ReadPhoto 方法并获取结果。

请注意

  • 由于Tiff在单个图像中包含多个帧,因此需要使用frameNumber参数。 此外,索引从0开始,而不是从1开始。
  • 该方法目前仅适用于英语、中文、日语、韩语和拉丁字母。
  • 使用高级扫描在 .NET Framework 上需要项目运行在 x64 架构上。

输入

由于大多数浏览器本身不支持TIFF格式,您可以下载TIFF输入这里. 要显示TIFF文件,我将把它转换为WEBP。

输入

代码

:path=/static-assets/ocr/content-code-examples/how-to/read-photo-read-photo.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

// Instantiate OCR engine
var ocr = new IronTesseract();

using var inputPhoto = new OcrInput();
inputPhoto.LoadImageFrame("ocr.tiff", 0);

// Read photo
OcrPhotoResult result = ocr.ReadPhoto(inputPhoto);

// Index number refer to region order in the page
int number = result.TextRegions[0].FrameNumber;

// Extract the text in the first region
string textinregion = result.TextRegions[0].TextInRegion;

//Extract the co_ordinates of the first text region
Rectangle region = result.TextRegions[0].Region;

var output = $"Text in First Region: {textinregion}\n"
             + $"Text Region:\n"
             + $"Starting X: {region.X}\n"
             + $"Starting Y: {region.Y}\n"
             + $"Region Width: {region.Width}\n"
             + $"Region Height: {region.Height}\n"
             + $"Result Confidence: {result.Confidence}\n\n"
             + $"Full Scnned Photo Text: {result.Text}";

Console.WriteLine(output);
Imports Microsoft.VisualBasic
Imports IronOcr
Imports IronSoftware.Drawing
Imports System

' Instantiate OCR engine
Private ocr = New IronTesseract()

Private inputPhoto = New OcrInput()
inputPhoto.LoadImageFrame("ocr.tiff", 0)

' Read photo
Dim result As OcrPhotoResult = ocr.ReadPhoto(inputPhoto)

' Index number refer to region order in the page
Dim number As Integer = result.TextRegions(0).FrameNumber

' Extract the text in the first region
Dim textinregion As String = result.TextRegions(0).TextInRegion

'Extract the co_ordinates of the first text region
Dim region As Rectangle = result.TextRegions(0).Region

Dim output = $"Text in First Region: {textinregion}" & vbLf & $"Text Region:" & vbLf & $"Starting X: {region.X}" & vbLf & $"Starting Y: {region.Y}" & vbLf & $"Region Width: {region.Width}" & vbLf & $"Region Height: {region.Height}" & vbLf & $"Result Confidence: {result.Confidence}" & vbLf & vbLf & $"Full Scnned Photo Text: {result.Text}"

Console.WriteLine(output)
$vbLabelText   $csharpLabel

输出

产量

从OCR输入中提取的文本。

Confidence:一个“双精度”属性,指示每个字符平均统计准确性的置信度,其中1为最高,0为最低。

TextRegions:一个名为“TextRegions”的属性列表,指示OCR文本及其在输入中的位置。 在上面的示例中,我们打印了帧号以及包含文本的矩形。


ReadPhotoRead 的区别

readPhoto 方法与标准 read 方法的主要区别在于其结果对象和所接受的文件格式。 LoadImageFrame 专门仅接受 tiffgif,而不接受 Jpeg 等格式,这是有几个原因的。

Tiff和Jpg图像的比较

Tiff 作为一种文件格式是无损的,通常用于将多页和多帧压缩为单一格式。 它通常用于高质量、多图像存储(例如法律文件、医学图像). 它比标准的 jpg 格式复杂得多,因此需要不同的方法来完整提取其中的文本。

此外,Tiff 图像仅使用不同的压缩方式,因此 IronOCR 需要使用专门的方法来解码文本。

以下是 TIFF 和 JPG 的比较的进一步细分。

特点TIFF(标签图像文件格式)JPG/JPEG(联合图像专家组)
压缩无损或未压缩(保留质量)有损压缩(为更小的文件大小而降低质量)
文件大小大(由于高质量和可选的不压缩)更小,优化用于网络使用和快速加载
图像质量高(适合专业使用,保留所有细节)较低(由于有损压缩,某些质量被牺牲)
颜色深度支持高色深(每通道高达16位或32位)24位色(1670万种颜色)
使用案例专业摄影、出版、扫描、存档网页图像,社交媒体,日常照片
透明度支持透明度和 Alpha 通道是否支持透明度
编辑适合多次编辑(重新保存不会导致质量损失)随着多次编辑和保存,质量会降低
兼容性广泛支持专业软件在所有平台和设备上普遍支持
动画不支持动画不支持动画
元数据存储广泛的元数据(EXIF,图层等)存储EXIF元数据,但功能较为有限

不同场景

开发人员需要在生产中考虑每个用例,以进一步优化并使他们的应用程序高效运行。 虽然readPhoto适用于复杂图像,例如上面的Tiff,但处理结果会较慢。 另一方面,jpg 的质量可能较低,但操作通常会更快。 然而,图像质量(如存在噪点)会导致OCR的置信度较低。

OcrPhotoResults 或任何使用接口 IOcrResult 的类中使用 confidence 属性,可以让您了解结果的准确性,从而允许开发人员根据需要进行测试、反复迭代和优化。

开发人员应在效率和准确性之间找到一个微妙的平衡,以确保图像达到一定的阈值以保持一致性。