C# 使用 PaddleOCRSharp 实现离线文字识别
本文介绍如何在 C# WPF 应用中利用 PaddleOCRSharp 库实现本地离线 OCR 文字识别功能。通过 NuGet 安装依赖,配置 PaddleOCREngine 引擎,调用 DetectText 方法处理 Bitmap 图像,即可将图片中的文字转换为文本结果,适用于对数据隐私有要求的离线环境。
简介
光学字符识别(OCR)技术能够将印刷或手写的文字转换为计算机可处理的格式。在需要数据本地化处理、避免网络传输风险的场景下,选择支持离线运行的开源 OCR 方案尤为重要。本文将演示如何使用百度飞桨(PaddleOCR)的 C# 封装库 PaddleOCRSharp 实现这一功能。
效果预览
核心库概述
项目核心依赖于 NuGet 包 PaddleOCRSharp。引入该包后,会自动加载所需的底层第三方依赖。相较于在线 API,选用此库的主要原因是其支持完全离线运行,且在多数常见场景下具备较高的识别准确率。
开发准备
在使用前需注意,由于底层涉及 C++ 逻辑,内存管理可能存在细微瑕疵,极端情况下可能出现内存溢出。建议在实际生产中关注内存释放情况,并及时更新库版本以获取修复。
第 1 步:设计界面布局
目的:创建一个包含图片预览区域和文本结果显示区域的 WPF 窗口。
- 使用
Grid将界面分为左右两列。 - 左侧
GroupBox放置按钮和Image控件用于展示选中的图片。 - 右侧
GroupBox放置只读TextBox用于显示识别后的文本。
<Window x:Class="PaddleOCRWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="OCR离线版" Height="450" Width="900" WindowStartupLocation="CenterScreen">
第 2 步:编写后台识别逻辑
目的:实现图片选择、异步识别及结果回显。
- 入口:
BtnOCR_Click事件触发。 - 动作:使用
OpenFileDialog获取图片路径,读取字节流转为Bitmap。 - 关键参数:
PaddleOCREngine负责引擎实例化,DetectText执行识别。 - 完成状态:识别文本赋值给
TxtPreview.Text,UI 线程安全通过Dispatcher.BeginInvoke更新。
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
{
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 = "";
}
private void StartDistinguish()
{
OpenFileDialog openFile = new()
{
Filter = "图片(*.bmp;*.jpg;*.jpeg;*.png)|*.bmp;*.jpg;*.jpeg;*.png"
};
if (!(bool)openFile.ShowDialog()) return;
// 更新UI显示预览图
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 确保引擎资源释放
using (PaddleOCREngine engine = new(config, oCRParameter))
{
ocrResult = engine.DetectText(bitmap);
}
if (ocrResult != null)
{
Dispatcher.BeginInvoke(new Action(() =>
{
TxtPreview.Text = ocrResult.Text;
}));
}
});
}
}
}
简要总结
通过上述步骤,即可在 C# 应用中集成高性能的离线 OCR 能力。请注意合理使用 using 语句释放引擎资源,以规避潜在的内存问题。以上就是使用 C# 和 PaddleOCRSharp 实现离线文字识别的详细内容,更多关于 C# OCR 应用开发的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









