最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

簡(jiǎn)介

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

效果預(yù)覽

核心庫(kù)概述

NuGet包:PaddleOCRSharp

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

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

問(wèn)題

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

底層的C++邏輯對(duì)內(nèi)存的管理有一些小瑕疵,會(huì)有內(nèi)存溢出的問(wèn)題,通常不會(huì)出現(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="識(shí)別結(jié)果" Margin="5,10,10,10">
            <TextBox x:Name="TxtPreview" TextWrapping="Wrap" BorderThickness="0" IsReadOnly="True"/>
        </GroupBox>
    </Grid>
</Window>

后臺(tái)邏輯

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實(shí)現(xiàn)文字識(shí)別功能的文章就介紹到這了,更多相關(guān)C# OCR文字識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

辛集市| 河南省| 华宁县| 五台县| 德格县| 阿瓦提县| 赤城县| 阿合奇县| 安泽县| 锡林浩特市| 开原市| 怀柔区| 冀州市| 维西| 临漳县| 曲阳县| 礼泉县| 道孚县| 楚雄市| 郁南县| 济阳县| 龙陵县| 岢岚县| 监利县| 鄂伦春自治旗| 磐石市| 禹州市| 晋中市| 建阳市| 夏邑县| 张北县| 丹东市| 黄山市| 昌宁县| 红桥区| 翼城县| 长子县| 安泽县| 印江| 巫溪县| 积石山|