IronOCR 操作指南 流 如何從 C# 中的串流讀取以進行 OCR。 Curtis Chau 更新:2026年1月10日 下載 IronOCR NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 This article was translated from English: Does it need improvement? Translated View the article in English IronOCR 在 C# 中透過將流傳給 OcrInput 或 OcrImageInput 建構器來直接從流讀取影像資料,因此可以在不將檔案儲存到磁碟的情況下進行有效率的 OCR 處理。 流是可讀取或寫入的二進位資訊的連續流。 在程式設計中,串流能有效率地處理對記憶體而言過大的資料,並將其分成可管理的小塊。 IronOCR 的匯入方法直接接受影像資料流。 將串流資料傳入匯入方法,該方法會自動處理所有必要的步驟。 對於進階的情境,請探索 OcrInput 類別,它提供了準備各種輸入格式的廣泛選項。 快速入門:幾秒鐘內使用串流進行 OCR 輸入 本範例透過將一個 System.IO.Stream 輸入 IronOCR 來示範即時 OCR,跳過檔案路徑,以最少的程式碼擷取已識別的文字。 立即開始使用 NuGet 建立 PDF 檔案: 使用 NuGet 套件管理器安裝 IronOCR PM > Install-Package IronOcr 複製並運行這段程式碼。 using var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input); 部署到您的生產環境進行測試 立即開始在您的專案中使用 IronOCR,免費試用! 免費試用30天 ### 最小工作流程(5 個步驟) 下載一個用於從流中讀取資料的 C# 庫。 获取并准备图像流数据 將影像串流傳送至 OcrImageInput 建構器以匯入影像 使用Read方法執行 OCR 通过指定裁剪区域定义读取区域 如何使用 IronOCR 讀取資料流? <! -- --> <!--說明:顯示逐步過程的截圖 --> 首先,實體化 IronTesseract 類別以執行 OCR。 使用 AnyBitmap 的 FromFile 方法匯入影像檔案。這個 AnyBitmap 物件會將影像資料轉換成流。 接下來,使用 using 語句,透過 GetStream 方法傳遞影像串流,以建立 OcrImageInput 物件。 最後,使用Read方法執行 OCR。 :path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-streams.cs using IronOcr; using IronSoftware.Drawing; // Instantiate IronTesseract IronTesseract ocrTesseract = new IronTesseract(); // Read image file to AnyBitmap AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff"); // Import image stream using var imageInput = new OcrImageInput(anyBitmap.GetStream()); // Perform OCR OcrResult ocrResult = ocrTesseract.Read(imageInput); Imports IronOcr Imports IronSoftware.Drawing ' Instantiate IronTesseract Private ocrTesseract As New IronTesseract() ' Read image file to AnyBitmap Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff") ' Import image stream Private imageInput = New OcrImageInput(anyBitmap.GetStream()) ' Perform OCR Private ocrResult As OcrResult = ocrTesseract.Read(imageInput) $vbLabelText $csharpLabel 以流為基礎的 OCR 對於接收影像上傳、處理來自資料庫的影像或處理不應寫入磁碟的暫存資料的網路應用程式大有助益。 流式方法可與 System.Drawing 物件 及其他影像處理函式庫無縫整合。 Why Use Streams for OCR? 對 .NET 開發人員而言,使用串流工作有幾項優點: 1.記憶體效率:分塊處理資料,而非將整個檔案載入記憶體 2.安全性:處理敏感性文件而不會在磁碟上建立暫存檔案 3.效能:消除檔案系統作業的 I/O 開銷 4.彈性:可處理網頁上傳、資料庫 BLOB 和記憶體內轉換 對於處理多頁文件或處理 PDF 串流,IronOCR 維持相同的簡單 API,同時提供強大的效能。 在處理掃描文件時,您也可以利用 IronOCR 的功能,透過串流處理來 有效率地讀取掃描文件。 如何為 Stream OCR 指定掃描區域? <! -- --> <!--說明:顯示逐步過程的截圖 --> 若要改善大型影像的效能,並從特定區域取得特定讀數,請利用 CropRectangle 類。 OcrImageInput 建構器會接受一個 CropRectangle 物件作為第二個參數,讓您可以指定應該讀取影像文件的哪個區域。 下面的程式碼範例指定只閱讀章節編號和標題區域。 :path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-specific-region.cs using IronOcr; using IronSoftware.Drawing; using System; // Instantiate IronTesseract IronTesseract ocrTesseract = new IronTesseract(); // Read image file to AnyBitmap AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff"); // Specify crop region Rectangle scanRegion = new Rectangle(800, 200, 900, 400); // Add image using var imageInput = new OcrImageInput(anyBitmap.GetStream(), ContentArea: scanRegion); // Perform OCR OcrResult ocrResult = ocrTesseract.Read(imageInput); // Output the result to console Console.WriteLine(ocrResult.Text); Imports IronOcr Imports IronSoftware.Drawing Imports System ' Instantiate IronTesseract Private ocrTesseract As New IronTesseract() ' Read image file to AnyBitmap Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff") ' Specify crop region Private scanRegion As New Rectangle(800, 200, 900, 400) ' Add image Private imageInput = New OcrImageInput(anyBitmap.GetStream(), ContentArea:= scanRegion) ' Perform OCR Private ocrResult As OcrResult = ocrTesseract.Read(imageInput) ' Output the result to console Console.WriteLine(ocrResult.Text) $vbLabelText $csharpLabel 當您需要 OCR 圖像的特定區域,或處理文字出現在可預測位置的結構化文件時,此技術特別有用。 對於涉及表格或結構化資料的更複雜情況,請探索如何讀取文件中的表格。 掃描區域在輸出中是什麼樣子? 我可以使用哪些先進的串流處理技術? 在處理串流時,利用 IronOCR 的其他功能來提高辨識準確度。 影像最佳化篩選器可在 OCR 處理前直接套用至串流資料: using IronOcr; using IronSoftware.Drawing; using System.IO; // Process stream with filters public string ProcessStreamWithFilters(Stream imageStream) { IronTesseract ocrTesseract = new IronTesseract(); // Configure for better accuracy ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\"; ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd; using var input = new OcrImageInput(imageStream); // Apply preprocessing filters input.Deskew(); input.DeNoise(); input.Sharpen(); var result = ocrTesseract.Read(input); return result.Text; } using IronOcr; using IronSoftware.Drawing; using System.IO; // Process stream with filters public string ProcessStreamWithFilters(Stream imageStream) { IronTesseract ocrTesseract = new IronTesseract(); // Configure for better accuracy ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\"; ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd; using var input = new OcrImageInput(imageStream); // Apply preprocessing filters input.Deskew(); input.DeNoise(); input.Sharpen(); var result = ocrTesseract.Read(input); return result.Text; } Imports IronOcr Imports IronSoftware.Drawing Imports System.IO ' Process stream with filters Public Function ProcessStreamWithFilters(imageStream As Stream) As String Dim ocrTesseract As New IronTesseract() ' Configure for better accuracy ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\" ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd Using input As New OcrImageInput(imageStream) ' Apply preprocessing filters input.Deskew() input.DeNoise() input.Sharpen() Dim result = ocrTesseract.Read(input) Return result.Text End Using End Function $vbLabelText $csharpLabel 若要加強影像處理,可考慮使用 Filter Wizard 自動決定特定文件類型的最佳預處理步驟。此外,當您處理串流中旋轉或傾斜的影像時,修正影像方向功能可大幅提升 OCR 準確度。 如何與不同的串流來源合作? IronOCR 可無縫處理各種串流來源。 無論是處理網頁表單中的上傳、擷取資料庫中的影像,或是格式間的轉換,API 都必須保持一致: // From MemoryStream byte[] imageBytes = GetImageBytesFromDatabase(); using var memoryStream = new MemoryStream(imageBytes); using var input = new OcrImageInput(memoryStream); // From FileStream using var fileStream = new FileStream("document.png", FileMode.Open); using var input2 = new OcrImageInput(fileStream); // From network stream using var webClient = new WebClient(); using var networkStream = webClient.OpenRead("https://example.com/image.jpg"); using var input3 = new OcrImageInput(networkStream); // From MemoryStream byte[] imageBytes = GetImageBytesFromDatabase(); using var memoryStream = new MemoryStream(imageBytes); using var input = new OcrImageInput(memoryStream); // From FileStream using var fileStream = new FileStream("document.png", FileMode.Open); using var input2 = new OcrImageInput(fileStream); // From network stream using var webClient = new WebClient(); using var networkStream = webClient.OpenRead("https://example.com/image.jpg"); using var input3 = new OcrImageInput(networkStream); Imports System.IO Imports System.Net ' From MemoryStream Dim imageBytes As Byte() = GetImageBytesFromDatabase() Using memoryStream As New MemoryStream(imageBytes) Using input As New OcrImageInput(memoryStream) ' Process input End Using End Using ' From FileStream Using fileStream As New FileStream("document.png", FileMode.Open) Using input2 As New OcrImageInput(fileStream) ' Process input2 End Using End Using ' From network stream Using webClient As New WebClient() Using networkStream As Stream = webClient.OpenRead("https://example.com/image.jpg") Using input3 As New OcrImageInput(networkStream) ' Process input3 End Using End Using End Using $vbLabelText $csharpLabel 為了達到最佳效果,在處理低解析度的串流時,請考慮調整 DPI 設定。 IronOCR 會自動處理 DPI 檢測,但針對特定使用個案,手動設定可以提高精確度。 在處理多頁文件時,探索透過串流處理來處理 多頁 TIFF 和 GIF 檔案。 如何處理來自串流的 OCR 結果? 在處理您的資料流之後,IronOCR 會提供豐富的結果物件,超越簡單的文字擷取。 OcrResult class 包含辨識文字的詳細資訊,包括置信分數、定位和結構: // Process stream and analyze results using var input = new OcrImageInput(stream); var result = new IronTesseract().Read(input); // Access detailed results foreach (var page in result.Pages) { Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%"); foreach (var paragraph in page.Paragraphs) { Console.WriteLine($"Paragraph: {paragraph.Text}"); Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}"); } } // Export results string text = result.Text; string searchablePdf = result.SaveAsSearchablePdf("output.pdf"); string hocrHtml = result.SaveAsHocrHtml("output.html"); // Process stream and analyze results using var input = new OcrImageInput(stream); var result = new IronTesseract().Read(input); // Access detailed results foreach (var page in result.Pages) { Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%"); foreach (var paragraph in page.Paragraphs) { Console.WriteLine($"Paragraph: {paragraph.Text}"); Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}"); } } // Export results string text = result.Text; string searchablePdf = result.SaveAsSearchablePdf("output.pdf"); string hocrHtml = result.SaveAsHocrHtml("output.html"); Imports IronOcr ' Process stream and analyze results Using input As New OcrImageInput(stream) Dim result = New IronTesseract().Read(input) ' Access detailed results For Each page In result.Pages Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%") For Each paragraph In page.Paragraphs Console.WriteLine($"Paragraph: {paragraph.Text}") Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}") Next Next ' Export results Dim text As String = result.Text Dim searchablePdf As String = result.SaveAsSearchablePdf("output.pdf") Dim hocrHtml As String = result.SaveAsHocrHtml("output.html") End Using $vbLabelText $csharpLabel 結果物件也提供 匯出為可搜尋的 PDF 或 hOCR HTML 格式的方法,讓您可以輕鬆地從您的串流輸入建立可搜尋的文件歸檔。 為了調試的目的,您可以使用 highlight texts 功能 來直觀顯示 IronOCR 在您的圖像中偵測到的內容。 我應該知道哪些效能考量? 在處理多個串流或執行高通量 OCR 解決方案時,請考慮這些最佳化策略: 1.重複使用 IronTesseract 實例:建立單一實體,並在多個作業中重複使用 2.實施進度追蹤:對於大型串流,使用 進度追蹤 來監控處理狀態 3.平行處理:IronOCR 支援多個串流的並行處理 4.最佳化影像品質:預先處理串流以確保最佳解析度與清晰度 為了獲得最佳效能,請探索 快速 OCR 配置選項,並考慮實施 多執行緒處理以進行批次作業。 當您使用時間敏感的應用程式時,瞭解 超時 可協助您有效管理長時間執行的 OCR 作業。 如何排除常見的串流問題? 當您使用串流工作時,可能會遇到特定的挑戰。 以下是常見情況的解決方案: 串流位置:在傳送至 IronOCR 之前,永遠將串流位置重設為 0 處置:使用 using 語句來確保適當的資源清理 格式支援:IronOCR 支援 各種圖片格式,包括 JPEG、PNG、TIFF 和 BMP,並透過串流傳送 記憶體管理:對於大型串流,請考慮分塊處理或串流方式 對於複雜的文件,或是當標準 OCR 無法提供令人滿意的結果時,電腦視覺功能可協助更精準地定位和擷取文字。 此外,在處理低品質流時,請參閱 修正低品質掃描的指南,以瞭解可大幅提高辨識率的預處理技巧。 如需使用流和其他輸入方法的詳細資訊,請參閱我們全面的操作指南和程式碼範例。 常見問題解答 如何在不先將影像資料儲存到磁碟的情況下對其執行 OCR? IronOCR 允許您直接處理影像串流,只要將影像串流傳送至 OcrInput 或 OcrImageInput 構建程式即可。這可讓您在不建立臨時檔案的情況下進行有效率的 OCR 處理,非常適合處理網頁上傳、資料庫 BLOB 或不應碰觸磁碟的敏感文件。 哪些類型的串流可作為 OCR 處理的輸入? IronOCR 接受任何包含影像資料的 System.IO.Stream。這包括來自 Web 上傳的記憶體串流、來自資料庫 BLOB 欄位的串流,或來自影像處理函式庫所建立的串流。當您將串流傳送到 OcrInput 或 OcrImageInput 時,程式庫會自動處理所有必要的轉換步驟。 在 C# 中對資料流執行 OCR 的最簡單方法是什麼? 最快速的方法是使用您的串流建立一個 OcrInput 物件,並呼叫 Read 方法:'using var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input);'.這個最小的程式碼會執行 OCR 並立即傳回辨識的文字。 為何 OCR 應使用串流而非檔案路徑? IronOCR 基於串流的 OCR 具備多項優勢:以塊狀處理資料可提高記憶體效率、避免磁碟上的臨時檔案可增強安全性、消除檔案 I/O 開銷可改善效能,以及在處理網頁上傳或資料庫 BLOB 時具有更大的靈活性。 我可以指定要讀取影像串流的特定區域嗎? 是的,IronOCR 允許您在處理資料流時,透過指定裁切區域來定義讀取區域。此功能可讓您在不處理整個文件的情況下,將 OCR 的重點放在影像的特定部分,從而提高速度和精確度。 流處理如何與其他影像處理函式庫整合? IronOCR 的流方法可與 System.Drawing 物件和其他 .NET 圖像處理函式庫無縫整合。您可以使用 AnyBitmap 類別,利用 GetStream 方法將影像轉換成流,讓 OCR 與其他影像處理工作流程輕鬆結合。 Curtis Chau 立即與工程團隊聊天 技術撰稿人 Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。 審核人 Jeffrey T. Fritz 首席計畫經理 - .NET 社群團隊 Jeff 也是 .NET 和 Visual Studio 團隊的首席計畫經理。他是 .NET Conf 虛擬會議系列的執行製作人,並主持「Fritz and Friends」開發人直播串流,每週播出兩次,與觀眾一起討論技術和編寫程式碼。Jeff 為 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit 等大型 Microsoft 開發人員活動撰寫工作坊、簡報和規劃內容。 準備好開始了嗎? Nuget 下載 5,384,824 | 版本: 2026.2 剛剛發布 免費 NuGet 下載 總下載量:5,384,824 查看許可證