跳至頁尾內容
USING IRONOCR
如何在Blazor中使用C#從圖像中讀取文字

如何在 Blazor 中從影像中讀取文字

Blazor 框架由 ASP.NET 團隊建造,用於使用 HTML 和 C# 而非 JavaScript 開發互動式 UI 網頁應用程式。 Blazor 使用 WebAssembly 直接在網頁瀏覽器中執行 C# 程式碼。 這使得建構和開發具有邏輯的元件並重複使用變得容易。 在開發者中,這是個用於用 C# 建構 UI 的流行框架。

在這篇文章中,我們將使用 IronOCR 在 Blazor Server 應用程式中讀取影像文件上的文字。

如何在 Blazor 中使用光學字元識別讀取影像中的文字?

先決條件

  1. 準備最新版的 Visual Studio。 您可以從這個連結下載。
  2. ASP.NET 和 Web 開發工作負載。 安裝 Visual Studio 時,選擇安裝 ASP.NET 和 Web 開發工作負載,這是專案所需的。
  3. IronOCR C# Library. 我們將使用 IronOCR 將影像資料轉換為機器可讀文字。 您可以從 Iron 網站直接下載 IronOCR 套件 .DLL 文件或從 NuGet 網站下載。 從 NuGet 套件管理器中下載和安裝 IronOCR 是更便捷的方法。

建立 Blazor Server 應用程式

開啟 Visual Studio,並按照以下步驟创建 Blazor Server 應用程式:

  1. 按下"建立一個新專案",然後從列出的專案模板中選擇"Blazor Server App"。

    如何在 Blazor 中讀取影像中的文字,圖一:在 Visual Studio 中建立一個新的 Blazor Server 應用程式 在 Visual Studio 中建立一個新的 Blazor Server 應用程式

  2. 接下來,適當地命名您的專案。 在這裡,我們命名它為 BlazorReadText

    如何在 Blazor 中讀取影像中的文字,圖二:配置 Blazor 專案 配置 Blazor 專案

3.最後,設置附加資訊並按下"建立"。

如何在 Blazor 中讀取影像中的文字,圖三:選擇長期支援 .NET Framework和專案的其他資訊 選擇長期支援 .NET Framework和專案的其他資訊

現在 Blazor Server 應用程式已建立。 現在我們需要在使用 IronOCR 提取影像資料之前安裝必要的套件。

新增必要的套件

BlazorInputFile

第一步是安裝 BlazorInputFile 套件。 它是為 Blazor 應用程式提供的一個元件,用於將單個或多個文件上傳到伺服器。 此元件將用於在 Blazor 應用程式的 Razor 頁面中上傳影像文件。 打開 為解決方案管理 NuGet 套件並搜尋 BlazorInputFile

如何在 Blazor 中讀取影像中的文字,圖四:安裝 BlazorInputFile 套件 安裝 BlazorInputFile 套件

選擇專案的複選框並按下"安裝"。

現在,打開在 Pages 資料夾中的 _Host.cshtml 文件,並新增以下 JavaScript 文件:

<script src="_content/BlazorInputFile/inputfile.js"></script>
<script src="_content/BlazorInputFile/inputfile.js"></script>
HTML

如何在 Blazor 中讀取影像中的文字,圖五:從解決方案資源管理器導航到 _Host.cshtml 文件 從解決方案資源管理器導航到 _Host.cshtml 文件

最後,在 _Imports.razor 文件中新增以下程式碼。

@using BlazorInputFile
@using BlazorInputFile
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'@using BlazorInputFile
$vbLabelText   $csharpLabel

IronOCR

IronOCR 是一個 C# 程式庫,用於掃描和閱讀不同格式的影像。 它提供了在超過 125 多種全球語言中處理影像的功能。

要安裝 IronOCR,請打開 NuGet 套件管理器並搜尋 IronOCR。 選擇專案並按下 安裝 按鈕。

如何在 Blazor 中讀取影像中的文字,圖六:在 NuGet 套件管理器中安裝 IronOCR 套件 在 NuGet 套件管理器中安裝 IronOCR 套件

_Imports.razor 文件中新增 IronOCR 命名空間:

@using IronOCR
@using IronOCR
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'@using IronOCR
$vbLabelText   $csharpLabel

建立 Blazor UI 元件

一個元件代表著具有業務邏輯的使用者介面,以表現動態行為。 Blazor 使用 Razor 元件來構建應用程式。這些元件可以巢狀、重複使用,並在專案之間共享。 預設情況下,應用程式中已提供 CounterFetchData 頁面; 移除它們以簡化。

BlazorReadText 應用程式下的 pages 資料夾上按下右鍵,然後選擇 新增 > Razor 元件。 如果找不到 Razor 元件,請單擊 新項目,然後從 C# 元件中選擇 "Razor 元件"。 將元件命名為 "OCR.razor" 並按下"新增"。

如何在 Blazor 中讀取影像中的文字,圖七:新增新的 Razor 元件 新增新的 Razor 元件

同樣的最佳做法是將此 Razor 頁面的程式碼分離到另一個類中。 再次在 pages 資料夾上按下右鍵,並選擇 新增 > 。 將類命名為與頁面名稱相同,然後按下"新增"。 Blazor 是一個智能框架,會將此類標記為與同名頁面共享的類。

如何在 Blazor 中讀取影像中的文字,圖八:為 OCR.razor Razor 元件建立 OCR.razor.cs 程式碼文件 OCR.razor.cs 建立程式碼文件,用於 OCR.razor Razor 元件

現在,讓我們進行實際的程式碼實現,將使用 IronOCR 讀取影像資料。

Blazor OCR.razor UI 元件的程式碼源來讀取影像資料

要識別影像中的文字,上傳影像,將其轉換為二進制資料,然後應用 IronOCR 方法提取文字。

打開 OCR.razor.cs 類,並撰寫以下範例程式碼:

using BlazorInputFile;
using Microsoft.AspNetCore.Components;
using IronOcr;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace BlazorReadText.Pages
{
    public class OCRModel : ComponentBase
    {
        // Holds the extracted text from the image
        protected string imageText;

        // Holds the base64 string preview of the image
        protected string imagePreview;

        // Byte array to store uploaded image data
        private byte[] imageFileBytes;

        // Default status message for file upload
        const string DefaultStatus = "Maximum size allowed for the image is 4 MB";
        protected string status = DefaultStatus;

        // Maximum file size allowed (4MB)
        const int MaxFileSize = 4 * 1024 * 1024;

        // Method to handle image preview and size/type validation
        protected async Task ViewImage(IFileListEntry[] files)
        {
            var file = files.FirstOrDefault();
            if (file == null)
            {
                return;
            }

            if (file.Size > MaxFileSize)
            {
                status = $"The file size is {file.Size} bytes, which exceeds the allowed limit of {MaxFileSize} bytes.";
                return;
            }

            if (!file.Type.Contains("image"))
            {
                status = "Please upload a valid image file.";
                return;
            }

            using (var memoryStream = new MemoryStream())
            {
                await file.Data.CopyToAsync(memoryStream);
                imageFileBytes = memoryStream.ToArray();
                string base64String = Convert.ToBase64String(imageFileBytes, 0, imageFileBytes.Length);
                imagePreview = $"data:image/png;base64,{base64String}";
                status = DefaultStatus;
            }
        }

        // Method to extract text from the uploaded image using IronOCR
        protected private async Task GetText()
        {
            if (imageFileBytes != null)
            {
                using (var ocr = new IronTesseract())
                using (var input = new OcrInput(imageFileBytes))
                {
                    OcrResult result = ocr.Read(input);
                    imageText = result.Text;
                }
            }
        }
    }
}
using BlazorInputFile;
using Microsoft.AspNetCore.Components;
using IronOcr;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace BlazorReadText.Pages
{
    public class OCRModel : ComponentBase
    {
        // Holds the extracted text from the image
        protected string imageText;

        // Holds the base64 string preview of the image
        protected string imagePreview;

        // Byte array to store uploaded image data
        private byte[] imageFileBytes;

        // Default status message for file upload
        const string DefaultStatus = "Maximum size allowed for the image is 4 MB";
        protected string status = DefaultStatus;

        // Maximum file size allowed (4MB)
        const int MaxFileSize = 4 * 1024 * 1024;

        // Method to handle image preview and size/type validation
        protected async Task ViewImage(IFileListEntry[] files)
        {
            var file = files.FirstOrDefault();
            if (file == null)
            {
                return;
            }

            if (file.Size > MaxFileSize)
            {
                status = $"The file size is {file.Size} bytes, which exceeds the allowed limit of {MaxFileSize} bytes.";
                return;
            }

            if (!file.Type.Contains("image"))
            {
                status = "Please upload a valid image file.";
                return;
            }

            using (var memoryStream = new MemoryStream())
            {
                await file.Data.CopyToAsync(memoryStream);
                imageFileBytes = memoryStream.ToArray();
                string base64String = Convert.ToBase64String(imageFileBytes, 0, imageFileBytes.Length);
                imagePreview = $"data:image/png;base64,{base64String}";
                status = DefaultStatus;
            }
        }

        // Method to extract text from the uploaded image using IronOCR
        protected private async Task GetText()
        {
            if (imageFileBytes != null)
            {
                using (var ocr = new IronTesseract())
                using (var input = new OcrInput(imageFileBytes))
                {
                    OcrResult result = ocr.Read(input);
                    imageText = result.Text;
                }
            }
        }
    }
}
Imports BlazorInputFile
Imports Microsoft.AspNetCore.Components
Imports IronOcr
Imports System.IO
Imports System.Linq
Imports System.Threading.Tasks

Namespace BlazorReadText.Pages
	Public Class OCRModel
		Inherits ComponentBase

		' Holds the extracted text from the image
		Protected imageText As String

		' Holds the base64 string preview of the image
		Protected imagePreview As String

		' Byte array to store uploaded image data
		Private imageFileBytes() As Byte

		' Default status message for file upload
		Private Const DefaultStatus As String = "Maximum size allowed for the image is 4 MB"
		Protected status As String = DefaultStatus

		' Maximum file size allowed (4MB)
		Private Const MaxFileSize As Integer = 4 * 1024 * 1024

		' Method to handle image preview and size/type validation
		Protected Async Function ViewImage(ByVal files() As IFileListEntry) As Task
			Dim file = files.FirstOrDefault()
			If file Is Nothing Then
				Return
			End If

			If file.Size > MaxFileSize Then
				status = $"The file size is {file.Size} bytes, which exceeds the allowed limit of {MaxFileSize} bytes."
				Return
			End If

			If Not file.Type.Contains("image") Then
				status = "Please upload a valid image file."
				Return
			End If

			Using memoryStream As New MemoryStream()
				Await file.Data.CopyToAsync(memoryStream)
				imageFileBytes = memoryStream.ToArray()
				Dim base64String As String = Convert.ToBase64String(imageFileBytes, 0, imageFileBytes.Length)
				imagePreview = $"data:image/png;base64,{base64String}"
				status = DefaultStatus
			End Using
		End Function

		' Method to extract text from the uploaded image using IronOCR
		Private Protected Async Function GetText() As Task
			If imageFileBytes IsNot Nothing Then
				Using ocr = New IronTesseract()
				Using input = New OcrInput(imageFileBytes)
					Dim result As OcrResult = ocr.Read(input)
					imageText = result.Text
				End Using
				End Using
			End If
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

在上面的程式碼中:

  • ViewImage 方法用於處理上傳的影像文件。它驗證文件是否為影像並檢查大小是否符合指定限制。 如果在文件大小或文件型別出現錯誤,則使用 if-else 塊處理。 然後將影像復製到 MemoryStream 並轉換為位元組陣列,因為 IronOcr.OcrInput 可以接受以二進制格式的影像。
  • GetText 方法利用 IronOCR 從輸入影像中提取文字。 IronOCR 使用 Tesseract 5 引擎並支持超過 125 種語言。

提取的文字儲存在 imageText 變數中以便顯示。 該程式庫支持英文文字圖片,無需額外配置。 您可以在這個 程式碼範例頁面上學習更多關於使用不同語言的知識。

Blazor 前端 UI 元件程式碼源

接下來,為應用程式建立 UI。 打開 OCR.razor 文件並撰寫以下程式碼:

@page "/IronOCR"
@inherits OCRModel

<h2>Optical Character Recognition (OCR) Using Blazor and IronOCR Software</h2>

<div class="row">
    <div class="col-md-5">
        <textarea disabled class="form-control" rows="10" cols="15">@imageText</textarea>
    </div>
    <div class="col-md-5">
        <div class="image-container">
            <img class="preview-image" width="800" height="500" src=@imagePreview>
        </div>
        <BlazorInputFile.InputFile OnChange="@ViewImage" />
        <p>@status</p>
        <hr />
        <button class="btn btn-primary btn-lg" @onclick="GetText">
            Extract Text
        </button>
    </div>
</div>

在上面的程式碼中,UI 包含:

  • 一個輸入文件標籤來選擇影像文件。
  • 一個影像標籤來顯示影像。
  • 一個按鈕,觸發 GetText 方法。
  • 一個文字區域,顯示從影像資料中提取的文字。

在導航選單中新增連結

最後,在 Shared 資料夾下的 NavMenu.razor 文件中新增到 OCR.razor 頁面的連結:

<div class="nav-item px-3">
    <NavLink class="nav-link" href="IronOCR">
        <span class="oi oi-plus" aria-hidden="true"></span> Read Image Text
    </NavLink>
</div>
<div class="nav-item px-3">
    <NavLink class="nav-link" href="IronOCR">
        <span class="oi oi-plus" aria-hidden="true"></span> Read Image Text
    </NavLink>
</div>
HTML

移除到 CounterFetchData 的連結,因為它們不需要。

一切現在已完成並可以使用。 按下 F5 鍵運行應用程式。

前端應顯示如下:

如何在 Blazor 中讀取影像中的文字,圖九:Blazor Server 應用程式的 UI Blazor Server 應用程式的 UI

讓我們上傳一張影像,並提取文字以可視化輸出效果。

如何在 Blazor 中讀取影像中的文字,圖十:上傳的影像和提取的文字 上傳的影像和提取的文字

輸出文字乾淨,可以從文字區域中複製。

總結

本文演示了如何在 Blazor Server 應用程式中建立一個具有後端程式碼的 Blazor UI 元件以讀取影像中的文字。 IronOCR 是一個多功能程式庫,可在任何基於 C# 的應用程式中提取文字。 它支持最新版的 .NET Framework,且能很好地與 Razor 應用程式搭配使用。 IronOCR 是一個跨平台的程式庫,支持 Windows、Linux、macOS、Docker、Azure、AWS 和 MAUI。 此外,IronOCR 使用 Tesseract 提供最佳效果,無需額外設置,達到高準確率。 它支持多頁框架TIFFPDF文件和所有流行的圖像格式。 也可以從影像中讀取條碼值

您還可以免費有時間限制試用 IronOCR。 從這裡下載該程式庫。

常見問題

如何在Blazor伺服器應用中從圖像中讀取文字?

您可以使用IronOCR在Blazor伺服器應用中從圖像中讀取文字。首先,使用BlazorInputFile包上傳圖片,然後在IronOCR中使用GetText方法從圖片中提取文字。

設置Blazor伺服器應用以使用OCR需要哪些步驟?

要設置Blazor伺服器應用以使用OCR,請確保您擁有包含ASP.NET和Web開發工作負載的Visual Studio。然後,建立一個新的Blazor伺服器應用並通過NuGet包管理器安裝IronOCR。

如何在Blazor應用中處理文件上傳?

在Blazor應用中,文件上傳可以使用BlazorInputFile包進行管理。該包允許上傳單個或多個文件,這對於處理OCR圖片是必需的。

IronOCR可以支持多種語言的文字提取嗎?

是的,IronOCR支持多種語言的文字提取。它使用Tesseract 5引擎,能夠高精度地從各種語言的圖片中識別文字。

在跨平台應用中使用IronOCR有什麼優勢?

IronOCR為跨平台應用提供多項優勢,包括與Windows、Linux、macOS、Docker、Azure、AWS和MAUI的相容性。這使得它在多種環境下的OCR應用中成為一個靈活的選擇。

如何在Blazor組件中使用IronOCR從圖像中提取文字?

在Blazor組件中,您可以先上傳圖片文件,然後使用OCR.razor.cs類調用IronOCR的GetText方法來處理圖片並提取文字。

Blazor UI用於OCR功能的關鍵組件有哪些?

Blazor UI用於OCR功能包括一個用於選擇圖片的文件輸入標籤,一個用於預覽的圖片標籤,一個用於觸發OCR過程的按鈕,以及一個用於顯示提取文字的文字區域。

如何在Blazor應用中導航到OCR頁面?

要在Blazor應用中導航到OCR頁面,請在位於Shared文件夾下的NavMenu.razor文件中新增一個導航項目。包含一個指向OCR頁面的NavLink

Kannaopat Udonpant
軟體工程師
在成為軟體工程師之前,Kannapat在日本北海道大學完成了環境資源博士學位。在攻讀學位期間,Kannapat還成為車輛機器人實驗室的一員,該實驗室隸屬於生產工程系。在2022年,他憑藉C#技能加入了Iron Software的工程團隊,專注於IronPDF。Kannapat珍視他的工作,因為他能直接向撰寫大部分IronPDF程式碼的開發者學習。除了同儕學習,Kannapat還喜歡在Iron Software工作的社交方面。不寫程式碼或文件時,Kannapat通常在他的PS5上玩遊戲或重看The Last of Us。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話