與其他組件的比較 IronOCR 和 Dynamsoft OCR 之間的比較 Kannapat Udonpant 更新日期:8月 20, 2025 Download IronOCR NuGet 下載 DLL 下載 Windows 安裝程式 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 光學字符識別(OCR)是一種數據輸入過程,涉及識別和數字化書寫和印刷的文本。 它是一種計算機技術,利用圖像分析將印刷文本的數字照片轉換為字母和數字,可以被其他程序如文字處理器使用。 文本被轉換為字符碼,以便可以在計算機上進行搜索和更改。 過去所有的文件都是實體的,未來可能是所有文件都是數字的社會,而現在則處於變化之中。 在這種過渡狀態,實體和數字文件共存,因此像OCR這樣的技術對於來回轉換至關重要。 文件恢復、數據輸入和無障礙設計只是OCR應用的一些例子。 大多數OCR應用來自於掃描的文件,儘管偶爾也使用照片。 OCR是個有價值的省時工具,因為重新輸入材料通常是唯一的其他選擇。 以下是一些OCR的使用示例: 可編輯的文本文件可以從掃描的文件中恢復,包括傳真。 使用圖書掃描創建可搜索和可編輯的電子書。 使用截圖照片搜索和更改文本。 文本轉語音技術用於閱讀書籍給視力受損的人。 雖然這些只是OCR應用的一部分,但它們展示了該技術在各行業中的靈活性。 幾乎所有公司員工每天都會大量依賴文件,因此商業用途是OCR系統開發的一個關鍵考量因素。 在本文中,我們將比較兩個最強大的OCR讀取器: IronPDF Dynamsoft OCR IronOCR和Dynamsoft OCR是兩個.NET OCR庫,支持掃描圖像的轉換和PDF文件的OCR處理。 您可以只需幾行代碼將圖像轉換為可搜索的文本。 您還可以檢索單詞、字母和段落。 IronOCR——卓越的特性 IronOCR提供了獨特的能力來檢測、閱讀和解釋沒有精確掃描的圖片和PDF文件中的文本。 IronOCR提供了從文檔和照片中提取文本的最簡單途徑,即使它不總是最快的,因為它會自動銳化和校正低質量的掃描,減少歪斜、失真、背景噪音和透視問題,同時還提高分辨率和對比度。 IronOCR允許開發人員傳遞單頁或多頁掃描的圖像,並將返回所有的文本、條碼和QR信息。 OCR庫中的一組類為基於Web的桌面或控制台應用添加了OCR功能。 Tesseract OCR C#,以及我們的程序JPG、PNG、TIFF、PDF、GIF和BMP,都是可用作輸入的格式。 IronOCR的光學字符識別(OCR)引擎能夠識別使用多種常見字體、斜體、字重和下劃線的文本。 裁剪類使得OCR可以快速且精確地工作。 當處理多頁文件時,IronOCR的多執行緒引擎加速了OCR。 IronOCR的功能 為了管理Tesseract,我們使用IronOCR,因為它有以下獨特之處: 在純.NET中開箱即用 無需將Tesseract安裝到本地機器上 運行最新的引擎:Tesseract 5(同時也支持Tesseract 4和3) 可用於任何.NET項目:.NET Framework 4.5+,.NET Standard 2+ 和.NET Core 2, 3 及 .NET 5 比傳統Tesseract有更高的準確性和速度 支持Xamarin、Mono、Azure和Docker 使用NuGet包管理複雜的Tesseract字典系統 無需配置即可支持PDFS、多幀TIFF以及所有主要圖像格式 可以校正低質量和歪斜的掃描以獲得Tesseract的最佳結果。 Dynamsoft OCR——功能特徵 Dynamsoft.NET OCR庫是一個.NET組件,提供快速和可靠的光學字符識別。 它用於在C#或VB.NET中創建.NET桌面應用程序。 使用基本的OCR API,您可以輕鬆創建代碼以將PDF或照片中無用的文本轉換為數字文本進行編輯、搜索、存檔等更多操作。 可以通過以下方式獲得來自掃描儀及其他TWAIN兼容設備的圖像: 支持本機、緩衝內存和磁盤文件圖像傳輸機制。 通過自動文件進紙器,可以進行批量掃描(ADF)。 可以使用TWAIN屬性修改常見設備功能。 可以更改IfAutoFeed、IfAutoScan、分辨率、比特深度、亮度、對比度、單位、雙面和其他功能。 支持檢測空白頁。 可以更改和保存掃描儀配置文件。 捕獲符合UVC和WIA標準的網絡攝像頭圖像: 在捕捉來自所選網絡攝像頭的照片時顯示實時視頻。 自定義攝像頭的設置:亮度、對比度、色調、飽和度、清晰度、伽馬、白平衡、背光補償、增益、色彩啟用、變焦、對焦、曝光、光圈、平移、傾斜、滾動。 穩健的圖像加載/查看 可以加載BMP、JPEG、PNG、TIFF和多頁TIFF格式的圖像。 支持對圖像的放大和縮小。 可以從本地驅動器、FTP服務器、HTTP服務器或數據庫中檢索圖像。 使用最全面的.NET成像組件之一進行BMP、JPEG、PNG和TIFF的圖像解碼 保存與上傳/下載 允許通過文件流讀寫圖片。 支持以BMP、JPEG、PNG、TIFF或多頁TIFF保存捕獲的照片到本地驅動器、Web服務器或數據庫中。 支持RLE、G3/G4、LZW、PackBits和TIFF壓縮。 支持HTTPS的上傳和下載。 可供選擇的其中一套最齊全的.NET成像組件支持BMP、JPEG、PNG和TIFF的圖像編碼。 允許將新獲得的照片附加至現有的TIFF文件。 從掃描的PDF或其他影像中讀取文本於ASP.NET(光學字符識別) 在當今快節奏的世界中,客戶希望工作能夠迅速完成。 有緊急項目的客戶經常與我們聯繫。 如果項目涉及掃描含有影像的紙張文件,我們的技術可以簡單地識別影像的內容並將其轉換為文本。 光學字符識別(OCR)可以為您的公司節省時間和金錢,同時減少數據輸入錯誤。 使用IronOCR IronOCR使用IronOcr.IronTesseract類來執行其OCR轉換。 在這個基本示例中,我們使用IronOcr.IronTesseract類從圖片中讀取文本並自動返回其結果作為字符串。 // PM> Install-Package IronOcr using IronOcr; class Program { static void Main(string[] args) { // Create a new instance of the IronTesseract class var ironOcr = new IronTesseract(); // Read the text from the image var result = ironOcr.Read(@"img\Screenshot.png"); // Output the text to the console Console.WriteLine(result.Text); } } // PM> Install-Package IronOcr using IronOcr; class Program { static void Main(string[] args) { // Create a new instance of the IronTesseract class var ironOcr = new IronTesseract(); // Read the text from the image var result = ironOcr.Read(@"img\Screenshot.png"); // Output the text to the console Console.WriteLine(result.Text); } } ' PM> Install-Package IronOcr Imports IronOcr Friend Class Program Shared Sub Main(ByVal args() As String) ' Create a new instance of the IronTesseract class Dim ironOcr = New IronTesseract() ' Read the text from the image Dim result = ironOcr.Read("img\Screenshot.png") ' Output the text to the console Console.WriteLine(result.Text) End Sub End Class $vbLabelText $csharpLabel 因此,以下段落的準確率是100%。 IronOCR簡單示例 在這個簡單的示例中,我們將測試我們的C# OCR庫從PNG圖像中讀取文本的準確性。 這是一個非常基礎的測試,但隨著教程的深入,事情將變得更加複雜。 快速的棕色狐狸跳過了懶惰的狗 雖然表面上這看起來很簡單,但在背面有複雜的行為在進行:掃描圖像的對齊、質量和分辨率,查看其屬性,優化OCR引擎,並最終像人類一樣讀取文本。 OCR是一項對機器來說很困難的工作,讀取速度可能與人類速度相當。 換句話說,OCR不是一個快速的過程。 但在這個例子中,它是完全正確的。 class="content-img-align-center"> class="center-image-wrapper">  在大多數現實場景中,開發人員希望他們的項目盡可能快地運行。 在這種情境下,我們建議您使用IronOCR附加組的OcrInput和IronTesseract類。 您可以使用OcrInput設置OCR任務的精確特性,例如: JPEG、TIFF、GIF、BMP和PNG只是一部分可以使用的圖像格式 對PDF文件整體或部分的導入 增強圖像的對比度,分辨率和大小 旋轉、掃描噪音、數字噪音、歪斜和反相影像校正 從數百種預先打包的語言和方言中進行選擇 從數百種預先打包的語言和方言中進行選擇 立即使用Tesseract 5、4或3的OCR引擎 如果我們要查看的是截圖、片段或整個文檔,指定文檔類型 識別條形碼 可搜索的PDF、Hocr HTML、DOM和字符串都是OCR結果的選項 即使在中等質量的掃描中,我們也可以使用這個方法達到100%的準確率。 using IronOcr; class Program { static void Main(string[] args) { // Create an instance of IronTesseract var ocr = new IronTesseract(); // Use the OcrInput class to read from an image file using (var input = new OcrInput(@"img\Potter.tiff")) { // Perform the OCR operation var result = ocr.Read(input); // Output the recognized text to the console Console.WriteLine(result.Text); } } } using IronOcr; class Program { static void Main(string[] args) { // Create an instance of IronTesseract var ocr = new IronTesseract(); // Use the OcrInput class to read from an image file using (var input = new OcrInput(@"img\Potter.tiff")) { // Perform the OCR operation var result = ocr.Read(input); // Output the recognized text to the console Console.WriteLine(result.Text); } } } Imports IronOcr Friend Class Program Shared Sub Main(ByVal args() As String) ' Create an instance of IronTesseract Dim ocr = New IronTesseract() ' Use the OcrInput class to read from an image file Using input = New OcrInput("img\Potter.tiff") ' Perform the OCR operation Dim result = ocr.Read(input) ' Output the recognized text to the console Console.WriteLine(result.Text) End Using End Sub End Class $vbLabelText $csharpLabel class="content-img-align-center"> class="center-image-wrapper">  如您所見,從掃描圖像(如TIFF)中讀取文本和(如果需要的話)條形碼非常容易。 此OCR任務的準確率為100%。 接下來,我們將嘗試相同頁面的低得多質量的掃描,DPI低並且有大量的失真和數字噪音,以及對原始文檔的損害。 class="content-img-align-center"> class="center-image-wrapper">  這就是IronOCR在與其他OCR庫(例如Tesseract)比較時真正大放異彩的地方,我們會發現其他OCR項目避免討論在實際掃描的圖像上使用OCR,而不是為了達到100% OCR準確率而虛构的'完美'數字化測試案例。 如果不添加Input.Deskew()來拉直圖像,我們得到的是52.5%的準確率。 using IronOcr; class Program { static void Main(string[] args) { // Create an instance of IronTesseract var ocr = new IronTesseract(); // Use the OcrInput class to read from a low-quality image file using (var input = new OcrInput(@"img\Potter.LowQuality.tiff")) { // Deskew the image to improve accuracy input.Deskew(); // Perform the OCR operation var result = ocr.Read(input); // Output the recognized text to the console Console.WriteLine(result.Text); } } } using IronOcr; class Program { static void Main(string[] args) { // Create an instance of IronTesseract var ocr = new IronTesseract(); // Use the OcrInput class to read from a low-quality image file using (var input = new OcrInput(@"img\Potter.LowQuality.tiff")) { // Deskew the image to improve accuracy input.Deskew(); // Perform the OCR operation var result = ocr.Read(input); // Output the recognized text to the console Console.WriteLine(result.Text); } } } Imports IronOcr Friend Class Program Shared Sub Main(ByVal args() As String) ' Create an instance of IronTesseract Dim ocr = New IronTesseract() ' Use the OcrInput class to read from a low-quality image file Using input = New OcrInput("img\Potter.LowQuality.tiff") ' Deskew the image to improve accuracy input.Deskew() ' Perform the OCR operation Dim result = ocr.Read(input) ' Output the recognized text to the console Console.WriteLine(result.Text) End Using End Sub End Class $vbLabelText $csharpLabel 這是不夠好的。 添加Input.Deskew()使我們達到99.8%的準確率,幾乎與高質量掃描的OCR相當。 使用Dynamsoft OCR 我們將展示一些代碼片段,使用Dynamic Web TWAIN來進行TWAIN掃描和客戶端OCR的JavaScript代碼。 掃描影像 您可以使用Dynamic Web TWAIN的簡單API更改掃描設置並從TWAIN掃描儀中獲取照片。 下載OCR專業模塊 function acquireImage() { // Select an available TWAIN scanner DWObject.SelectSourceByIndex(document.getElementById("source").selectedIndex); // Set scanning settings like pixel type, resolution, ADF, etc. DWObject.IfShowUI = false; // Do not show the user interface of the scanner DWObject.PixelType = 1; // Scan in grayscale DWObject.Resolution = 300; DWObject.IfFeederEnabled = true; // Scan from auto feeder DWObject.IfDuplexEnabled = false; DWObject.IfDisableSourceAfterAcquire = true; // Acquire images from scanners DWObject.AcquireImage(); } function acquireImage() { // Select an available TWAIN scanner DWObject.SelectSourceByIndex(document.getElementById("source").selectedIndex); // Set scanning settings like pixel type, resolution, ADF, etc. DWObject.IfShowUI = false; // Do not show the user interface of the scanner DWObject.PixelType = 1; // Scan in grayscale DWObject.Resolution = 300; DWObject.IfFeederEnabled = true; // Scan from auto feeder DWObject.IfDuplexEnabled = false; DWObject.IfDisableSourceAfterAcquire = true; // Acquire images from scanners DWObject.AcquireImage(); } JAVASCRIPT 要使用客戶端OCR的OCR專業模塊,您需要在head中包含ocrpro.js,同時還下載OCR Pro DLL。 對.js文件進行編輯: <script type="text/javascript" src="Resources/addon/dynamsoft.webtwain.addon.ocrpro.js"></script> <script type="text/javascript" src="Resources/addon/dynamsoft.webtwain.addon.ocrpro.js"></script> HTML 使用OCR識別文本 // Define base path var CurrentPathName = unescape(location.pathname); var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1); // Download the OCR Pro add-on DWObject.Addon.OCRPro.Download(CurrentPath + "Resources/addon/OCRPro.zip", OnSuccess, OnFailure); // Define base path var CurrentPathName = unescape(location.pathname); var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1); // Download the OCR Pro add-on DWObject.Addon.OCRPro.Download(CurrentPath + "Resources/addon/OCRPro.zip", OnSuccess, OnFailure); JAVASCRIPT 使用JS OCR識別API從掃描影像中提取文本僅需插入以下代碼。 閱讀影像的裁切區域 // Recognize text from the image at index 0 DWObject.Addon.OCRPro.Recognize(0, GetOCRProInfo, GetErrorInfo); // 0 is the index of the image // Recognize text from the image at index 0 DWObject.Addon.OCRPro.Recognize(0, GetOCRProInfo, GetErrorInfo); // 0 is the index of the image JAVASCRIPT 這兩個軟件組合都提供了裁切圖像以進行OCR的解決方案。 使用IronOCR閱讀裁剪區域 Iron的Tesseract OCR分支擅長閱讀圖像的特定區域,如以下代碼示例所示。 我們使用System.Drawing.Rectangle來描述像素中的圖像準確區域。 在處理標準化填寫的表單時,僅有部分內容隨不同案例變化,這會非常方便。 掃描頁面的一部分:我們使用System.Drawing.Rectangle來指定要從文檔中讀取的區域,提高速度和準確性。 class="content-img-align-center"> class="center-image-wrapper">  class="content-img-align-center"> class="center-image-wrapper"> 這導致速度提升了41%,同時也讓我們的特異性更強。 using IronOcr; using System.Drawing; class Program { static void Main(string[] args) { // Create an instance of IronTesseract var ocr = new IronTesseract(); using (var input = new OcrInput()) { // Define content area of interest var contentArea = new Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 }; // Add the specific region to the input input.AddImage("img/ComSci.png", contentArea); // Perform OCR operation var result = ocr.Read(input); // Output recognized text to console Console.WriteLine(result.Text); } } } using IronOcr; using System.Drawing; class Program { static void Main(string[] args) { // Create an instance of IronTesseract var ocr = new IronTesseract(); using (var input = new OcrInput()) { // Define content area of interest var contentArea = new Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 }; // Add the specific region to the input input.AddImage("img/ComSci.png", contentArea); // Perform OCR operation var result = ocr.Read(input); // Output recognized text to console Console.WriteLine(result.Text); } } } Imports IronOcr Imports System.Drawing Friend Class Program Shared Sub Main(ByVal args() As String) ' Create an instance of IronTesseract Dim ocr = New IronTesseract() Using input = New OcrInput() ' Define content area of interest Dim contentArea = New Rectangle() With { .X = 215, .Y = 1250, .Height = 280, .Width = 1335 } ' Add the specific region to the input input.AddImage("img/ComSci.png", contentArea) ' Perform OCR operation Dim result = ocr.Read(input) ' Output recognized text to console Console.WriteLine(result.Text) End Using End Sub End Class $vbLabelText $csharpLabel 這對於涉及相似和一致文檔的.NET OCR應用程序非常有價值,包括發票、收據、支票、表單、費用報銷單等。 在閱讀PDF時,也支持ContentAreas(OCR裁切)。 使用Dynamsoft OCR來閱讀裁切區域 首先,啟動Visual Studio並建立一個新的C#Windows Forms Application,或者打開現有的。 我們將需要添加DynamicDotNetTWAIN.dll、DynamicOCR.dll以及適當的語言包。 1. 導航到工具->選擇工具箱項,然後轉至.NET Framework 組件選項卡,點擊瀏覽按鈕並找到DynamicDotNetTWAIN.dll。 在方案瀏覽器中,右擊項目文件,選擇添加->現有項目... 然後從OCR資源目錄中添加所需的項目。 這是LoadImage按鈕的代碼: 這是應用程序的外觀: private void button1_Click(object sender, EventArgs e) { OpenFileDialog filedlg = new OpenFileDialog(); if (filedlg.ShowDialog() == DialogResult.OK) { dynamicDotNetTwain1.LoadImage(filedlg.FileName); // Choose an image from your local disk and load it into Dynamic .NET TWAIN } } private void dynamicDotNetTwain1_OnImageAreaSelected(short sImageIndex, int left, int top, int right, int bottom) { dynamicDotNetTwain1.OCRTessDataPath = "../../"; dynamicDotNetTwain1.OCRLanguage = "eng"; OcrResultFormat ocrResultFormat = Dynamsoft.DotNet.TWAIN.OCR.ResultFormat.Text; byte [] sbytes = dynamicDotNetTwain1.OCR(dynamicDotNetTwain1.CurrentImageIndexInBuffer, left, top, right, bottom); // OCR the selected area of the image if (sbytes != null) { SaveFileDialog filedlg = new SaveFileDialog(); filedlg.Filter = "Text File(*.txt)| *.txt"; if (filedlg.ShowDialog() == DialogResult.OK) { FileStream fs = File.OpenWrite(filedlg.FileName); fs.Write(sbytes, 0, sbytes.Length); // Save the OCR result as a text file fs.Close(); } MessageBox.Show("OCR successful"); } else { MessageBox.Show(dynamicDotNetTwain1.ErrorString); } } private void button1_Click(object sender, EventArgs e) { OpenFileDialog filedlg = new OpenFileDialog(); if (filedlg.ShowDialog() == DialogResult.OK) { dynamicDotNetTwain1.LoadImage(filedlg.FileName); // Choose an image from your local disk and load it into Dynamic .NET TWAIN } } private void dynamicDotNetTwain1_OnImageAreaSelected(short sImageIndex, int left, int top, int right, int bottom) { dynamicDotNetTwain1.OCRTessDataPath = "../../"; dynamicDotNetTwain1.OCRLanguage = "eng"; OcrResultFormat ocrResultFormat = Dynamsoft.DotNet.TWAIN.OCR.ResultFormat.Text; byte [] sbytes = dynamicDotNetTwain1.OCR(dynamicDotNetTwain1.CurrentImageIndexInBuffer, left, top, right, bottom); // OCR the selected area of the image if (sbytes != null) { SaveFileDialog filedlg = new SaveFileDialog(); filedlg.Filter = "Text File(*.txt)| *.txt"; if (filedlg.ShowDialog() == DialogResult.OK) { FileStream fs = File.OpenWrite(filedlg.FileName); fs.Write(sbytes, 0, sbytes.Length); // Save the OCR result as a text file fs.Close(); } MessageBox.Show("OCR successful"); } else { MessageBox.Show(dynamicDotNetTwain1.ErrorString); } } Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Dim filedlg As New OpenFileDialog() If filedlg.ShowDialog() = DialogResult.OK Then dynamicDotNetTwain1.LoadImage(filedlg.FileName) ' Choose an image from your local disk and load it into Dynamic .NET TWAIN End If End Sub Private Sub dynamicDotNetTwain1_OnImageAreaSelected(ByVal sImageIndex As Short, ByVal left As Integer, ByVal top As Integer, ByVal right As Integer, ByVal bottom As Integer) dynamicDotNetTwain1.OCRTessDataPath = "../../" dynamicDotNetTwain1.OCRLanguage = "eng" Dim ocrResultFormat As OcrResultFormat = Dynamsoft.DotNet.TWAIN.OCR.ResultFormat.Text Dim sbytes() As Byte = dynamicDotNetTwain1.OCR(dynamicDotNetTwain1.CurrentImageIndexInBuffer, left, top, right, bottom) ' OCR the selected area of the image If sbytes IsNot Nothing Then Dim filedlg As New SaveFileDialog() filedlg.Filter = "Text File(*.txt)| *.txt" If filedlg.ShowDialog() = DialogResult.OK Then Dim fs As FileStream = File.OpenWrite(filedlg.FileName) fs.Write(sbytes, 0, sbytes.Length) ' Save the OCR result as a text file fs.Close() End If MessageBox.Show("OCR successful") Else MessageBox.Show(dynamicDotNetTwain1.ErrorString) End If End Sub $vbLabelText $csharpLabel class="content-img-align-center"> class="center-image-wrapper">  圖像性能調優 輸入圖像的質量是OCR任務速度的最關鍵決定因素。 背景噪音越低,DPI越高,目標值大約200 DPI,OCR輸出越快且越準確。 #### Dynamsoft OCR的圖像處理技術 我們需要在多種情境下使用OCR,如使用手機掃描信用卡號碼或從紙質文件中提取文本。 Dynamsoft標籤識別(DLR)和Dynamic Web TWAIN(DWT)中包含了OCR能力。 雖然它們總體上可以做得非常好,但我們可以通過使用各種圖像處理技術來改善結果。 減輕/消除影子 光照不足可能會影響OCR結果。 為了提高效果,我們可以美白照片或從影像中消除影子。 反轉 因為OCR引擎通常是針對黑色文字進行訓練的,淺色文字可能更難於發現和識別。 class="content-img-align-center"> class="center-image-wrapper">  如果我們反轉其顏色更易於識別 class="content-img-align-center"> class="center-image-wrapper">  為了執行反轉,我們可以在DLR中使用GrayscaleTransformationModes參數。 以下是JSON設置: DLR .net的讀取結果: "GrayscaleTransformationModes": [ { "Mode": "DLR_GTM_INVERTED" } ] class="content-img-align-center"> class="center-image-wrapper">  重調 如果字母的高度太低,OCR引擎可能不會產生好的結果。 一般來說,圖像的DPI應至少達到300。 DLR 1.1中有ScaleUpModes參數,允許您放大字母。 當然,我們也可以自己縮放圖像。 直接閱讀圖像得到的結果是不正確的: class="content-img-align-center"> class="center-image-wrapper">  將圖像放大2倍後,結果是正確的: class="content-img-align-center"> class="center-image-wrapper">  去斜 如果文本稍微失真也沒關係。 但是,如果歪斜過度,則會嚴重影響結果。 為了提高結果,我們需要裁剪圖像。 為了實現這一點,我們可以在OpenCV和Python中使用Hough Line Transform。 這是上面圖像的去斜代碼: 檢測到的線條: import cv2 import numpy as np import math from PIL import Image def deskew(): src = cv2.imread("neg.jpg", cv2.IMREAD_COLOR) gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) kernel = np.ones((5,5), np.uint8) erode_img = cv2.erode(gray, kernel) eroDil = cv2.dilate(erode_img, kernel) show_and_wait_key("eroDil", eroDil) canny = cv2.Canny(eroDil, 50, 150) show_and_wait_key("canny", canny) lines = cv2.HoughLinesP(canny, 0.8, np.pi / 180, 90, minLineLength=100, maxLineGap=10) drawing = np.zeros(src.shape[:], dtype=np.uint8) maxY = 0 degree_of_bottomline = 0 index = 0 for line in lines: x1, y1, x2, y2 = line[0] cv2.line(drawing, (x1, y1), (x2, y2), (0, 255, 0), 1, lineType=cv2.LINE_AA) k = float(y1-y2)/(x1-x2) degree = np.degrees(math.atan(k)) if index == 0: maxY = y1 degree_of_bottomline = degree else: if y1 > maxY: maxY = y1 degree_of_bottomline = degree index += 1 show_and_wait_key("houghP", drawing) img = 這是一個非常基礎的測試,但隨著教程的深入,事情將變得更加複雜。fromarray(src) rotate_img = img.rotate(degree_of_bottomline) rotate_img_cv = np.array(rotate_img) cv2.imshow("rotateImg", rotate_img_cv) cv2.imwrite("deskewed.jpg", rotate_img_cv) cv2.waitKey() def show_and_wait_key(win_name, img): cv2.imshow(win_name, img) cv2.waitKey() if __name__ == "__main__": deskew() import cv2 import numpy as np import math from PIL import Image def deskew(): src = cv2.imread("neg.jpg", cv2.IMREAD_COLOR) gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) kernel = np.ones((5,5), np.uint8) erode_img = cv2.erode(gray, kernel) eroDil = cv2.dilate(erode_img, kernel) show_and_wait_key("eroDil", eroDil) canny = cv2.Canny(eroDil, 50, 150) show_and_wait_key("canny", canny) lines = cv2.HoughLinesP(canny, 0.8, np.pi / 180, 90, minLineLength=100, maxLineGap=10) drawing = np.zeros(src.shape[:], dtype=np.uint8) maxY = 0 degree_of_bottomline = 0 index = 0 for line in lines: x1, y1, x2, y2 = line[0] cv2.line(drawing, (x1, y1), (x2, y2), (0, 255, 0), 1, lineType=cv2.LINE_AA) k = float(y1-y2)/(x1-x2) degree = np.degrees(math.atan(k)) if index == 0: maxY = y1 degree_of_bottomline = degree else: if y1 > maxY: maxY = y1 degree_of_bottomline = degree index += 1 show_and_wait_key("houghP", drawing) img = 這是一個非常基礎的測試,但隨著教程的深入,事情將變得更加複雜。fromarray(src) rotate_img = img.rotate(degree_of_bottomline) rotate_img_cv = np.array(rotate_img) cv2.imshow("rotateImg", rotate_img_cv) cv2.imwrite("deskewed.jpg", rotate_img_cv) cv2.waitKey() def show_and_wait_key(win_name, img): cv2.imshow(win_name, img) cv2.waitKey() if __name__ == "__main__": deskew() PYTHON class="content-img-align-center"> class="center-image-wrapper">  去斜後: class="content-img-align-center"> class="center-image-wrapper">  IronOCR的圖像處理技術 這裡輸入圖像的質量不重要,因為IronOCR在修復有缺陷的文檔方面表現出色(儘管這是耗時的,會導致您的OCR作業使用更多的CPU週期)。 選擇數字噪音較少的輸入圖像格式,如TIFF或PNG,會比有損圖像格式(如JPEG)導致更快的結果。 以下列出的圖像過濾器可以顯著提升性能: OcrInput.Rotate(double degrees)— 順時針旋轉圖像指定的度數。 負整數用於逆時針旋轉。 OcrInput.Binarize()— 該圖像過濾器將每個像素變為黑或白,無任何灰色。 在文本與背景對比度非常低的情況下可能會提高OCR性能。 OcrInput.ToGrayScale()— 該圖像過濾器將每個像素轉換為灰度陰影。 不太可能提高OCR準確度,但可能會提高速度。 * OcrInput.Contrast()— 自動提高對比度。在低對比度掃描中,這個過濾器通常會提高OCR的速度和準確性。 OcrInput.DeNoise()— 僅在預期有噪音時使用該過濾器。 OcrInput.Invert()— 複製所有顏色。 例如,白變黑:黑變白。 OcrInput.Dilate()— 高級形態學。 膨脹是在圖像中向對象的邊緣添加像素的過程。 (侵蝕的逆行) OcrInput.Erode()— 高級形態學功能。 侵蝕是從對象邊緣移除像素的過程。 (擴張的逆行) * OcrInput.Deskew()— 旋轉圖像,使其正交和朝正確方向。由於Tesseract對於歪斜掃描的容忍度可能低至5度,這對於OCR非常有用。 DeepCleanBackgroundNoise()— 去除大量背景噪音。僅在您知道文檔有大量背景噪音時才使用這個過濾器,因為它可能會降低清晰文檔的OCR準確度,並且對CPU相當耗用。 OcrInput.EnhanceResolution— 提高低分辨率照片的分辨率。 由於OcrInput的存在,這個過濾器很少使用。 OcrInput將自動檢測和解決低分辨率。 我們可能想用IronTesseract來加速高質量掃描的OCR。 如果我們追求速度,可以從這裡開始,然後逐漸打開功能,直到達到適當的平衡。 比較基線100%的準確度,這個結果有99.8%的準確度—但快35%。 using IronOcr; class Program { static void Main(string[] args) { var ocr = new IronTesseract(); // Configuration for speed tuning ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\"; ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto; ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5; ocr.Configuration.EngineMode = TesseractEngineMode.LstmOnly; ocr.Language = OcrLanguage.EnglishFast; using (var input = new OcrInput(@"img\Potter.tiff")) { var result = ocr.Read(input); Console.WriteLine(result.Text); } } } using IronOcr; class Program { static void Main(string[] args) { var ocr = new IronTesseract(); // Configuration for speed tuning ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\"; ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto; ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5; ocr.Configuration.EngineMode = TesseractEngineMode.LstmOnly; ocr.Language = OcrLanguage.EnglishFast; using (var input = new OcrInput(@"img\Potter.tiff")) { var result = ocr.Read(input); Console.WriteLine(result.Text); } } } Imports IronOcr Friend Class Program Shared Sub Main(ByVal args() As String) Dim ocr = New IronTesseract() ' Configuration for speed tuning ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\" ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5 ocr.Configuration.EngineMode = TesseractEngineMode.LstmOnly ocr.Language = OcrLanguage.EnglishFast Using input = New OcrInput("img\Potter.tiff") Dim result = ocr.Read(input) Console.WriteLine(result.Text) End Using End Sub End Class $vbLabelText $csharpLabel Dynamsoft的許可和定價 許可證和定價 每年授權。 所有價格均包括一年的維護,其中包括免費軟件升級和高級支持。 Dynamsoft提供兩種類型的許可: 按客戶端設備授權 “一客戶端設備授權”允許訪問同源應用,從單一客戶端設備使用軟件的功能(同一協議、主機和端口)。一個非活躍的客戶端設備是指連續90天未訪問任何軟件功能。 一個非活躍客戶端設備的授權席位將立即被釋放,並可以供其他任何活躍的客戶端設備使用。當您達到最大許可席位數量時,Dynamsoft會為您提供額外10%的客戶端設備限額供緊急使用。 一旦額外的客戶端設備限額用完,沒有新的客戶端設備能夠訪問和使用軟件,直到再次有可用的許可席位。 請注意,超過客戶端設備限額不會影響任何已被授權的客戶端設備。 每台服務器授權 將應用程序部署到單台服務器需要“一台服務器授權”。 服務器指的是物理和虛擬服務器,包括但不限於生產服務器、故障轉移服務器、同樣用於測試的開發服務器、質量檢驗服務器、測試服務器和暫存服務器,所有這些都需要授權。 連續集成服務器(構建服務器)或本地主開發服務器不需要額外的許可。 按服務器的許可僅適用於本地服務器安裝,不適用於雲部署。 Dynamsoft OCR的定價從USD 1,249/年起。 IronOCR的許可和定價 作為開發人員,我們都希望以最少的成本和資源完成項目——預算編製非常重要。 檢查圖表以確定哪種信息最符合您的需求和預算。 IronOCR提供了許可證,允許您可以根據自己的需求和預算來定制開發人員、項目和位置的數量。 使用IronOCR許可密鑰可以發布您的產品而不帶水印。 許可證從$799起價,包括一年支援和升級。 您也可以使用試用許可密鑰免費嘗試IronOCR。 IronOCR for C#提供適用於Mac、Windows、Linux、Azure OCR和Docker的Tesseract OCR。 結論 .NET Framework 4.0或更高版必須具備, .NET Standard 2.0+ 、 .NET Core 2.0+ 、.NET 5、macOS和Linux的Mono, 以及macOS 的Xamarin都是跨平台開發的例子。 該庫可以在幾分鐘內為您的桌面、控制台或Web應用程序添加OCR功能!OCR還可以讀取PDF和多頁TIFF,並可在任何OCR掃描中保存為可搜索的PDF文件或XHTML。 其數據輸出選項包括普通文本、條形碼數據以及包羅段落、行、單詞和字符的OCR結果類。 可提供125種語言,包括阿拉伯語、中文、英語、芬蘭語、法語、德語、希伯來語、意大利語、日語、韓語、葡萄牙語、俄語和西班牙語,但請記住也可以生成自定義語言包。 Dynamic .NET TWAIN OCR附加組件是一個快速可靠的.NET組件,用於光學字符識別,可以在C#或VB.NET編寫的WinForms和WPF應用程序中使用。 您可以使用Dynamic .NET TWAIN的圖像捕獲模塊來掃描文檔或捕獲來自網絡攝像頭的照片,然後在圖像上執行OCR以將影像中的文字轉換為文本、可搜索PDF文件或字符串。 多種亞洲語言以及阿拉伯語,除了英語還有提供。 IronOCR提供更好的許可證比Dynamsoft OCR; IronOcr從$799開始附帶一年免費,而Dynamsoft從1249美元起附帶免費試用。 IronOCR還提供多用戶許可證,而Dynamsoft則每位用戶僅能獲得一張許可證。 雖然這兩套軟件的目標都是提供在條碼OCR讀取、影像轉文字和影像轉文本方面的最佳性能,但IronOCR因其在處理狀況較差的影像時表現卓越而脫穎而出。 它自動應用其復雜的調優方法以獲得最佳OCR結果。 IronOCR還使用Tesseract來給您提供最佳的結果,幾乎沒有或沒有錯誤。 Iron Software還為其客戶和用戶提供選擇,只需兩次點擊即可獲得其整套軟件。 這意味著只需支付這兩個組件的價格,您就可以立即獲得Iron Software套件的所有五個組件以及不間斷的支持。 [{i:(Dynamsoft OCR是其各自所有者的註冊商標。 本網站與Dynamsoft OCR無關聯、未得到它的認可,也未得到它的贊助。 [{i:(Dynamsoft OCR is a registered trademark of its respective owner. This site is not affiliated with, endorsed by, or sponsored by Dynamsoft OCR. 所有產品名稱、徽標和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的信息。 常見問題解答 如何使用 C# 將文本圖像轉換為數字格式? 您可以在 C# 中使用 IronOCR 將文本圖像轉換為數字格式。IronOCR 提供自動銳化和校正低質量掃描的方法,使其成為將各種圖像格式轉換為文本的理想工具。 IronOCR 在處理低質量掃描方面提供了哪些優勢? IronOCR 通過減少傾斜、畸變和背景噪音,同時提高分辨率和對比度,自動增強低質量掃描效果,以確保文本識別的更高準確性。 哪個 OCR 庫更適合跨平台應用? IronOCR 適用於跨平台應用程序,因為它支持 Xamarin 和 Azure 等環境,為在多樣化平台上工作的開發人員提供靈活性。 IronOCR 支持哪些圖像格式? IronOCR 支持多種圖像格式,使其適用於不同的 OCR 應用程序。它可以處理圖像和 PDF 文檔,提供處理各種輸入源的靈活性。 OCR 技術可以幫助企業進行文件管理嗎? 是的,OCR 技術可以通過將紙質文件數字化,使其可搜索和可編輯,顯著幫助文件管理。這降低了手動數據輸入,減少了錯誤並提高了可訪問性。 Dynamsoft OCR 如何處理設備的圖像採集? Dynamsoft OCR 支援從 TWAIN 兼容設備和網絡攝像頭獲取圖像,允許批量掃描和修改掃描儀屬性以有效進行圖像處理。 IronOCR 與其他庫相比的定價選擇是什麼? IronOCR 提供可定制的許可證,可以根據開發人員數量、項目和位置進行調整,與其他一些庫相比提供更靈活和更具成本效益的選擇。 使用 OCR 技術時遇到的一些常見問題是什麼? OCR 技術的常見問題包括處理低分辨率圖像、畸變和不同的文本字體。然而,像 IronOCR 這樣的庫具有內置功能來解決這些問題,提高 OCR 的準確性。 Kannapat Udonpant 立即與工程團隊聊天 軟體工程師 在成為软件工程師之前,Kannapat 從日本北海道大學完成了環境資源博士學位。在追逐學位期间,Kannapat 還成為了生產工程系一部份——汽車机器人实验室的成員。2022 年,他利用他的 C# 技能加入 Iron Software 的工程團隊, 專注於 IronPDF。Kannapat 珍惜他的工作,因为他直接向编写大部分 IronPDF 使用的代码的开发者学习。除了同行学习,Kannapat 还喜欢在 Iron Software 工作的社交十环。当他不编写代码或文档时,Kannapat 通常在他的 PS5 上打游戏或重看《The Last of Us》。 相關文章 更新日期 9月 25, 2025 如何在 C# 中選擇最佳 OCR 函式庫 確定專案的最佳光學字符識別(OCR)庫可能具有挑戰性。一些庫專注於企業級OCR功能和高OCR準確度 閱讀更多 更新日期 8月 24, 2025 為什麼 IronOCR 相對於短期記憶模組在光學字符識別中更好:.NET 開發者的實踐指南 光學字符識別(OCR)是從圖像和文檔中提取文本和信息的重要技術。雖然像 GPT-4 和 Gemini 的大型語言模型(LLMs)在自然語言處理方面帶來了革新。 閱讀更多 更新日期 7月 28, 2025 AWS OCR與Azure OCR(OCR功能比較) 這些包括像亞馬遜Web服務(AWS)、微軟Azure和谷歌雲平台上的Google Cloud Vision API等雲提供商 閱讀更多 IronOCR 和 Tesseract.NET 之間的比較IronOCR 和 Abbyy Finereader 之間...
更新日期 8月 24, 2025 為什麼 IronOCR 相對於短期記憶模組在光學字符識別中更好:.NET 開發者的實踐指南 光學字符識別(OCR)是從圖像和文檔中提取文本和信息的重要技術。雖然像 GPT-4 和 Gemini 的大型語言模型(LLMs)在自然語言處理方面帶來了革新。 閱讀更多
更新日期 7月 28, 2025 AWS OCR與Azure OCR(OCR功能比較) 這些包括像亞馬遜Web服務(AWS)、微軟Azure和谷歌雲平台上的Google Cloud Vision API等雲提供商 閱讀更多