开发者

C# OCR实现文字识别功能

开发者 https://www.devze.com 2022-12-02 12:23 出处:网络 作者: 黑夜中的潜行者
目录简介效果预览核心库概述问题源码界面布局后台逻辑简介 OCR英文全称是Optical Character Recognition,中文叫做光学字符识别。它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能
目录
  • 简介
  • 效果预览
  • 核心库概述
  • 问题
  • 源码
    • 界面布局
    • 后台逻辑

简介

OCR英文全称是Optical Character Recognition,中文叫做光学字符识别。它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。文字识别是计算机视觉研究领域的分支之一。

效果预览

C# OCR实现文字识别功能

核心库概述

NuGet包:PaddleOCRSharp

引用此包后会自动加载进所需的第三方依赖包

OCR文字识别库有javascript很多,包括在线的,比较好的是百度的,为什么选用这个主要是,考虑的离线环境,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离线开发者_JAVA开发版" 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" Hehttp://www.devze.comader="识别结果" Margin="5,10,10,10">
            <TextBox x:Name=android"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.http://www.devze.comSource = 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文字识别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号