C# 使用 PaddleOCRSharp 实现离线文字识别

Noah
Noah
发布时间:2026-10-15| 7人浏览过
原创

本文介绍如何在 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 应用开发的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。