C# OCR實現文字識別功能
簡介
OCR英文全稱是Optical Character Recognition,中文叫做光學字符識別。它是利用光學技術和計算機技術把印在或寫在紙上的文字讀取出來,並轉換成一種計算機能夠接受、人又可以理解的格式。文字識別是計算機視覺研究領域的分支之一。
效果預覽
核心庫概述
NuGet包:PaddleOCRSharp
引用此包後會自動加載進所需的第三方依賴包
OCR文字識別庫有很多,包括在線的,比較好的是百度的,為什麼選用這個主要是,考慮的離線環境,PaddleOCR 的識別率還是不錯的。
問題
在使用的時候也遇到瞭一些問題,比如 內存釋放不及時 等
底層的C++邏輯對內存的管理有一些小瑕疵,會有內存溢出的問題,通常不會出現
源碼
界面佈局
<Window x:Class="PaddleOCRWPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Title="OCR離線版" Height="450" Width="900" WindowStartupLocation="CenterScreen"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="0.5*"/> <ColumnDefinition/> </Grid.ColumnDefinitions> <GroupBox Grid.Column="0" Header="預覽" Margin="10,10,5,10"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="1*"/> </Grid.RowDefinitions> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,5"> <Button x:Name="BtnOCR" Content="打開圖片" Height="30" Width="120" Margin="0,0,10,0" Click="BtnOCR_Click"/> <Button x:Name="BtnClose" Content="清除" Height="30" Width="120" Click="BtnClose_Click"/> </StackPanel> <Image Name="ImgPreview" Grid.Row="1" Margin="5"/> </Grid> </GroupBox> <GroupBox Grid.Column="1" Header="識別結果" Margin="5,10,10,10"> <TextBox x:Name="TxtPreview" TextWrapping="Wrap" BorderThickness="0" IsReadOnly="True"/> </GroupBox> </Grid> </Window>
後臺邏輯
using Microsoft.Win32; using PaddleOCRSharp; using System; using System.Drawing; using System.IO; using System.Threading.Tasks; using System.Windows; using System.Windows.Media.Imaging; namespace PaddleOCRWPF { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void BtnOCR_Click(object sender, RoutedEventArgs e) { StartDistinguish(); } private void BtnClose_Click(object sender, RoutedEventArgs e) { ImgPreview.Source = null; TxtPreview.Text = ""; } /// <summary> /// 調用核心 /// </summary> private void StartDistinguish() { OpenFileDialog openFile = new() { Filter = "圖片(*.bmp;*.jpg;*.jpeg;*.png)|*.bmp;*.jpg;*.jpeg;*.png" }; if (!(bool)openFile.ShowDialog()) return; Dispatcher.BeginInvoke(new Action(() => { ImgPreview.Source = new BitmapImage(new Uri(openFile.FileName, UriKind.RelativeOrAbsolute)); })); Task.Run(() => { var imagebyte = File.ReadAllBytes(openFile.FileName); Bitmap bitmap = new(new MemoryStream(imagebyte)); OCRModelConfig? config = null; OCRParameter oCRParameter = new(); OCRResult ocrResult = new(); using (PaddleOCREngine engine = new(config, oCRParameter)) { ocrResult = engine.DetectText(bitmap); } if (ocrResult != null) { Dispatcher.BeginInvoke(new Action(() => { TxtPreview.Text = ocrResult.Text; })); } }); } } }
到此這篇關於C# OCR實現文字識別功能的文章就介紹到這瞭,更多相關C# OCR文字識別內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!