C# PaddleInference OCR 表格识别

效果

C# PaddleInference OCR 表格识别_第1张图片

项目

VS2022+.net4.8+OpenCvSharp4+Sdcb.PaddleInference+Sdcb.PaddleOCR

C# PaddleInference OCR 表格识别_第2张图片

 测试图片

C# PaddleInference OCR 表格识别_第3张图片

 代码

using OpenCvSharp.Extensions;
using OpenCvSharp;
using Sdcb.PaddleInference;
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models;
using Sdcb.PaddleOCR.Models.Details;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;


namespace PaddleInference_OCR_表格识别
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        Bitmap bmp;
        string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
        string img = "";
        string startupPath = "";


        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = fileFilter;
            if (ofd.ShowDialog() != DialogResult.OK) return;

            pictureBox1.Image = null;

            img = ofd.FileName;
            bmp = new Bitmap(img);
            pictureBox1.Image = new Bitmap(img);
        }

        TableRecognitionModel tableModel;
        PaddleOcrTableRecognizer tableRec;

        FullOcrModel model;
        PaddleOcrAll paddleOcr;

        private void Form1_Load(object sender, EventArgs e)
        {
            startupPath = System.Windows.Forms.Application.StartupPath;
            string table_directoryPath = startupPath + "\\ch_ppstructure_mobile_v2.0_SLANet";
            string table_labelFilePath = startupPath + "\\table_structure_dict_ch.txt";

            tableModel = new FileTableRecognizationModel(table_directoryPath, table_labelFilePath);
            tableRec = new PaddleOcrTableRecognizer(tableModel);

            string detectionModelDir = startupPath + "\\ch_PP-OCRv3_det";
            string classificationModelDir = startupPath + "\\ch_ppocr_mobile_v2.0_cls";
            string recognitionModelDir = startupPath + "\\ch_PP-OCRv3_rec";
            string labelFilePath = startupPath + "\\ppocr_keys_v1.txt";

            model = FullOcrModel.FromDirectory(detectionModelDir, classificationModelDir, recognitionModelDir, labelFilePath, ModelVersion.V3);

            paddleOcr = new PaddleOcrAll(model, PaddleDevice.Mkldnn());
            paddleOcr.AllowRotateDetection = true; /* 允许识别有角度的文字 */
            paddleOcr.Enable180Classification = false; /* 允许识别旋转角度大于90度的文字 */
        }

        TableDetectionResult tableResult;
        private void button2_Click(object sender, EventArgs e)
        {

            if (pictureBox1.Image == null)
            {
                return;
            }

            Mat src = Cv2.ImRead(img);
            tableResult = tableRec.Run(src);

            List ltCellBox = tableResult.StructureBoxes;

            foreach (TableCellBox item in ltCellBox)
            {
                Scalar scalar = Scalar.RandomColor();
                Cv2.Rectangle(src, item.Rect, scalar);
            }
            //Cv2.ImShow("src", src);
            //Cv2.ImWrite("src.jpg", src);
            pictureBox1.Image = BitmapConverter.ToBitmap(src);

            //List ltTags = tableResult.HtmlTags;
            //float score = tableResult.Score;

            paddleOcr.Detector.UnclipRatio = 1.2f;
            PaddleOcrResult result = paddleOcr.Run(src);

            src.Dispose();

            string html = tableResult.RebuildTable(result);
            textBox1.Text = html;
            System.IO.File.WriteAllText("table.html", html);

            webBrowser1.DocumentText = html;
        }
    }
}

Demo下载 

你可能感兴趣的:(AI,OpenCV,C#,ocr,C#,OCR,表格识别)