如何在 Blazor 中從影像中讀取文字
Blazor 框架由 ASP.NET 團隊構建,用於使用 HTML 和 C# 而不是 JavaScript 開發互動式 UI Web 應用程式。 Blazor 使用 WebAssembly 直接在 Web 瀏覽器中執行 C# 程式碼。 這樣就可以輕鬆地建構和開發具有邏輯的元件,並重複使用它們。 它是開發者在 C# 中建立使用者介面時常用的框架。
在本文中,我們將建立一個 Blazor Server 應用程式,用於使用 IronOCR 和光學字元辨識 (OCR) 從影像檔案中讀取文字。
如何在 Blazor 中使用光學字元辨識技術從影像中讀取文字?
先決條件
- 擁有最新版本的 Visual Studio。 你可以透過這個連結下載。
- ASP.NET 和 Web 開發工作量。 安裝 Visual Studio 時,請選擇 ASP.NET 和 Web 開發工作負載進行安裝,因為本專案需要這些元件。
- IronOCR C# 庫。 我們將使用 IronOCR 將圖像資料轉換為機器可讀文字。 您可以直接從Iron 網站下載 IronOCR 套件 .DLL 文件,也可以從NuGet 網站下載。 更方便的下載和安裝 IronOCR 的方式是透過 Visual Studio 中的 NuGet 套件管理器。
建立 Blazor 伺服器應用程式
開啟 Visual Studio,請依照下列步驟建立 Blazor 伺服器應用程式:
-
點選建立新項目,然後從列出的項目範本中選擇" Blazor Server App "。
如何在 Blazor 中從圖像中讀取文字,圖 1:在 Visual Studio 中建立一個新的 Blazor 伺服器應用程式 在 Visual Studio 中建立一個新的 Blazor Server 應用程式
-
接下來,為你的專案取個合適的名字。 這裡,我們將其命名為BlazorReadText 。
如何在 Blazor 中從圖像中讀取文字,圖 2:配置 Blazor 項目 配置 Blazor 項目
-
最後,設定附加資訊並點選"建立"。
如何在 Blazor 中從圖像中讀取文字,圖 3:選擇長期支援 .NET Framework 以及專案的其他信息 選擇長期支援的 .NET Framework 以及專案的其他信息
Blazor 伺服器應用程式已建立完成。 現在我們需要安裝必要的軟體包,然後才能使用 IronOCR 提取影像資料。
加入必要的軟體包
BlazorInputFile
第一步是安裝 BlazorInputFile 軟體包。 它是 Blazor 應用程式的一個元件,用於將單一或多個檔案上傳到伺服器。 該元件將用於在 Blazor 應用程式的 Razor 頁面上上傳圖像檔案。 開啟"管理解決方案的 NuGet 套件" ,然後瀏覽 BlazorInputFile。
如何在 Blazor 中從圖像中讀取文字,圖 4:安裝 BlazorInputFile 包
安裝 BlazorInputFile 軟體包
選取項目複選框,然後按一下"安裝"。
現在,打開 Pages 資料夾中的 _Host.cshtml 文件,並新增以下 JavaScript 文件:
<script src="_content/BlazorInputFile/inputfile.js"></script>
<script src="_content/BlazorInputFile/inputfile.js"></script>
如何在 Blazor 中從圖像讀取文字,圖 5:從解決方案資源管理器導航到 _Host.cshtml 文件
從解決方案資源管理器導航至 _Host.cshtml 文件
最後,在 _Imports.razor 檔案中加入以下程式碼。
@using BlazorInputFile
@using BlazorInputFile
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'@using BlazorInputFile
IronOCR。
IronOCR 是一個 C# 函式庫,用於掃描和讀取不同格式的影像。 它提供處理超過 125 種全球語言圖像的功能。
若要安裝 IronOCR,請開啟 NuGet 套件管理器並瀏覽 IronOCR。 選擇項目,然後按一下"安裝"按鈕。
如何在 Blazor 中從映像中讀取文字,圖 6:在 NuGet 套件管理器中安裝 IronOcr 套件 在 NuGet 套件管理器中安裝 IronOcr 套件
在 _Imports.razor 檔案中新增 IronOCR 命名空間:
@using IronOCR
@using IronOCR
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'@using IronOCR
建立 Blazor UI 元件
元件代表使用者介面,並包含用於展現動態行為的業務邏輯。 Blazor 使用 Razor 元件來建立應用程式。這些元件可以嵌套、重複使用,並在項目之間共用。 預設情況下,應用程式中提供了 Counter 和 FetchData 頁面; 為了簡化起見,省略了這些內容。
右鍵點選 BlazorReadText 應用程式下的pages資料夾,然後選擇"新增" > "Razor 元件" 。 如果找不到 Razor 元件,請按一下"新建項目",然後從 C# 元件中選擇"Razor 元件"。 將元件命名為"OCR.razor",然後按一下"新增"。
如何在 Blazor 中從圖像中讀取文字,圖 7:新增新的 Razor 元件 新增新的 Razor 元件
最佳實踐是將此 Razor 頁面的程式碼分離出來,放在另一個類別中。 再次右鍵點選"頁面"資料夾,然後選擇"新增" > "類別" 。 將類別名稱與頁面名稱相同,然後按一下"新增"。 Blazor 是一個智慧框架,它會將這個類別與同名頁面關聯起來。
如何在 Blazor 中從圖像中讀取文字,圖 8:為 OCR.razor Razor 元件建立 OCR.razor.cs 程式碼文件
為 OCR.razor Razor 元件建立 OCR.razor.cs 程式碼文件
現在,讓我們來看看實際的程式碼實現,它將使用 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
在上述程式碼中
ViewImage方法用於處理上傳的映像檔。它會驗證檔案是否為影像,並檢查檔案大小是否符合指定的限制。 如果檔案大小或檔案類型出現任何錯誤,則使用if-else區塊進行處理。 然後,將影像複製到MemoryStream並轉換為位元組數組,因為IronOcr.OcrInput可以接受二進位格式的映像。GetText方法利用 IronOCR 從輸入影像中擷取文字。 IronOCR採用Tesseract 5引擎,支援125多種語言。
擷取的文字儲存在 imageText 變數中以供顯示。 該庫無需額外配置即可支援英文文字圖像。 您可以在此程式碼範例頁面上了解更多關於使用不同語言的資訊。
Blazor前端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>
上面的程式碼中包含以下使用者介面:
- 用於選擇影像檔案的輸入檔標籤。
- 用於顯示影像的影像標籤。
- 一個按鈕,用於觸發
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>
刪除指向 Counter 和 FetchData 的鏈接,因為它們不需要。
所有工作均已完成,可投入使用。 按F5運行應用程式。
前端介面應如下圖所示:
如何在 Blazor 中從圖像中讀取文字,圖 9:Blazor 伺服器應用程式的使用者介面 Blazor 伺服器應用程式的使用者介面
讓我們上傳一張圖片,提取其中的文字,並將結果視覺化。
如何在 Blazor 中從圖像中讀取文字,圖 10:上傳的圖像和提取的文字 上傳的圖片和提取的文字
輸出文字清晰,可以從文字區域複製。
摘要
本文示範如何在 Blazor 伺服器應用程式中建立具有背景程式碼的 Blazor UI 元件,以從圖像中讀取文字。 IronOCR 是一個功能強大的庫,可用於在任何基於 C# 的應用程式中提取文字。 它支援最新的 .NET Framework,並且可以很好地與 Razor 應用程式一起使用。 IronOCR 是一個跨平台庫,支援 Windows、Linux、macOS、 Docker 、Azure、AWS 和MAUI 。 此外,IronOCR 利用 Tesseract 的最佳結果提供高精度,無需任何額外設定。 它支援多頁框架 TIFF 、 PDF 文件以及所有流行的圖像格式。 也可以從影像中讀取條碼值。
常見問題解答
如何在 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 功能的關鍵組件是什麼?
一個用于 OCR 功能的 Blazor UI 包括一個圖像選擇的文件標籤、一個圖像預覽的圖像標籤、一個觸發 OCR 過程的按鈕以及用於顯示提取文本的文本區域。
如何在 Blazor 應用中導航到 OCR 頁面?
要在 Blazor 應用中導航到 OCR 頁面,請在位於 Shared 資料夾下的 NavMenu.razor 文件中添加導航項目。包含指向 OCR 頁面的 NavLink。

