亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C# OCR實現(xiàn)文字識別功能

 更新時間:2022年11月19日 16:41:38   作者:黑夜中的潛行者  
OCR,中文叫做光學(xué)字符識別。它是利用光學(xué)技術(shù)和計算機(jī)技術(shù)把印在或?qū)懺诩埳系奈淖肿x取出來,并轉(zhuǎn)換成一種計算機(jī)能夠接受、人又可以理解的格式。本文將利用OCR實現(xiàn)文字識別功能,感興趣的可以了解一下

簡介

OCR英文全稱是Optical Character Recognition,中文叫做光學(xué)字符識別。它是利用光學(xué)技術(shù)和計算機(jī)技術(shù)把印在或?qū)懺诩埳系奈淖肿x取出來,并轉(zhuǎn)換成一種計算機(jī)能夠接受、人又可以理解的格式。文字識別是計算機(jī)視覺研究領(lǐng)域的分支之一。

效果預(yù)覽

核心庫概述

NuGet包:PaddleOCRSharp

引用此包后會自動加載進(jìn)所需的第三方依賴包

OCR文字識別庫有很多,包括在線的,比較好的是百度的,為什么選用這個主要是,考慮的離線環(huán)境,PaddleOCR 的識別率還是不錯的。

問題

在使用的時候也遇到了一些問題,比如 內(nèi)存釋放不及時 等

底層的C++邏輯對內(nèi)存的管理有一些小瑕疵,會有內(nèi)存溢出的問題,通常不會出現(xiàn)

源碼

界面布局

<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="預(yù)覽" 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="識別結(jié)果" 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>
        /// 調(diào)用核心
        /// </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;
                    }));
                }
            });
        }
    }
}

到此這篇關(guān)于C# OCR實現(xiàn)文字識別功能的文章就介紹到這了,更多相關(guān)C# OCR文字識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于StreamRead和StreamWriter的使用(實例講解)

    基于StreamRead和StreamWriter的使用(實例講解)

    下面小編就為大家分享一篇基于StreamRead和StreamWriter的使用實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • C#面向?qū)ο缶幊袒A(chǔ)概念匯總

    C#面向?qū)ο缶幊袒A(chǔ)概念匯總

    今天小編就為大家分享一篇關(guān)于C#面向?qū)ο缶幊袒A(chǔ)概念匯總的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • C#處理XML文件的示例詳解

    C#處理XML文件的示例詳解

    XML是一種標(biāo)記語言,是從標(biāo)準(zhǔn)通用標(biāo)記語言(SGML)中簡化修改出來的,本文主要介紹了C#處理XML文件的相關(guān)知識,有需要的小伙伴可以了解一下
    2024-11-11
  • c#的params參數(shù)使用示例

    c#的params參數(shù)使用示例

    這篇文章主要介紹了c#的params參數(shù)使用示例,需要的朋友可以參考下
    2014-04-04
  • C#中委托的基本概念介紹

    C#中委托的基本概念介紹

    這篇文章主要介紹了C#中委托的基本概念介紹,本文講解了委托的使用、委托類型和委托實例、委托的合并和刪除、委托是不易變的、委托調(diào)用列表、GetInvocationList等內(nèi)容,需要的朋友可以參考下
    2015-02-02
  • Unity實現(xiàn)聊天室功能

    Unity實現(xiàn)聊天室功能

    這篇文章主要為大家詳細(xì)介紹了Unity實現(xiàn)聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • DevExpress獲取TreeList可視區(qū)域節(jié)點集合的實現(xiàn)方法

    DevExpress獲取TreeList可視區(qū)域節(jié)點集合的實現(xiàn)方法

    這篇文章主要介紹了DevExpress獲取TreeList可視區(qū)域節(jié)點集合的實現(xiàn)方法,有一定實用價值,需要的朋友可以參考下
    2014-08-08
  • 為IObservable實現(xiàn)自己的運算符(詳解)

    為IObservable實現(xiàn)自己的運算符(詳解)

    下面小編就為大家?guī)硪黄獮镮Observable實現(xiàn)自己的運算符(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • C#生成exe并用process運行的流程步驟

    C#生成exe并用process運行的流程步驟

    這篇文章主要介紹了C#生成exe并用process運行的流程步驟,文中通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-08-08
  • C# WinForm程序處理后臺繁忙導(dǎo)致前臺控件假死現(xiàn)象解決方法

    C# WinForm程序處理后臺繁忙導(dǎo)致前臺控件假死現(xiàn)象解決方法

    這篇文章主要介紹了C# WinForm程序處理后臺繁忙導(dǎo)致前臺控件假死現(xiàn)象解決方法,本文通過Application.DoEvents()解決這個問題,并講解了Application.DoEvents()的作用,需要的朋友可以參考下
    2015-06-06

最新評論