效果
项目
VS2022+.net4.8+OpenCvSharp4+Sdcb.PaddleInference+Sdcb.PaddleOCR
测试图片
代码
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<TableCellBox> 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<string> 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下载