Paddle OCR V4 测试Demo

 效果

项目

VS2022+.net4.8+OCRV4

代码

using OpenCvSharp;
using Sdcb.PaddleInference;
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace PaddleInference.OCRServiceV4
{public partial class frmTest : Form{public frmTest(){InitializeComponent();}String startupPath;public PaddleOcrAll paddleOcr;private string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";Bitmap bmp;PaddleOcrResult ocrResult;DateTime dt1 = DateTime.Now;DateTime dt2 = DateTime.Now;String imgPath;Mat mat;Pen pen = new Pen(Brushes.Red, 2);private void frmTest_Load(object sender, EventArgs e){comboBox1.SelectedIndex = 0;startupPath = Application.StartupPath;rbOnnx.Checked = true;}private void btnLoadModel_Click(object sender, EventArgs e){LoadModel();MessageBox.Show("加载完成");}void LoadModel(){string detectionModelDir;string classificationModelDir;string recognitionModelDir;string labelFilePath;if (comboBox1.SelectedIndex == 0){detectionModelDir = startupPath + "\\inference\\ch_PP-OCRv4_det_infer";classificationModelDir = startupPath + "\\inference\\ch_ppocr_mobile_v2.0_cls_infer";recognitionModelDir = startupPath + "\\inference\\ch_PP-OCRv4_rec_infer";labelFilePath = startupPath + "\\inference\\ppocr_keys.txt";}else{detectionModelDir = startupPath + "\\inference_server\\detv4_teacher_inference";classificationModelDir = startupPath + "\\inference_server\\ch_ppocr_mobile_v2.0_cls_infer";recognitionModelDir = startupPath + "\\inference_server\\ch_PP-OCRv4_rec_server_infer";labelFilePath = startupPath + "\\inference_server\\ppocr_keys.txt";}FullOcrModel model = FullOcrModel.FromDirectory(detectionModelDir, classificationModelDir, recognitionModelDir, labelFilePath, ModelVersion.V4);if (rbOnnx.Enabled == true){paddleOcr = new PaddleOcrAll(model, PaddleDevice.Onnx());}else if (rbOpenblas.Enabled == true){paddleOcr = new PaddleOcrAll(model, PaddleDevice.Openblas());}else if (rbMkldnn.Enabled == true){paddleOcr = new PaddleOcrAll(model, PaddleDevice.Mkldnn());}else{paddleOcr = new PaddleOcrAll(model);}paddleOcr.AllowRotateDetection = true;    /* 允许识别有角度的文字 */paddleOcr.Enable180Classification = false; /* 允许识别旋转角度大于90度的文字 */}private void btnSelect_Click(object sender, EventArgs e){if (paddleOcr == null){MessageBox.Show("请先加载模型");return;}OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = fileFilter;if (ofd.ShowDialog() != DialogResult.OK) return;imgPath = ofd.FileName;bmp = new Bitmap(imgPath, true);RotateImage(bmp);pictureBox1.Image = bmp;richTextBox1.Clear();mat = new Mat(ofd.FileName);//pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);dt1 = DateTime.Now;ocrResult = paddleOcr.Run(mat);dt2 = DateTime.Now;ShowOCRResult(ocrResult);}/// <summary>/// 显示结果/// </summary>private void ShowOCRResult(PaddleOcrResult ocrResult){richTextBox1.Clear();Bitmap bitmap = (Bitmap)this.pictureBox1.Image;richTextBox1.AppendText("耗时:" + (dt2 - dt1).TotalMilliseconds + "ms\n");richTextBox1.AppendText("-----------------------------------\n");richTextBox1.AppendText(ocrResult.Text + "\n");using (Graphics g = Graphics.FromImage(bitmap)){foreach (var item in ocrResult.Regions){g.DrawRectangle(pen, item.Rect.BoundingRect().Left, item.Rect.BoundingRect().Top, item.Rect.BoundingRect().Width, item.Rect.BoundingRect().Height);}}pictureBox1.Image = null;pictureBox1.Image = bitmap;}private void button1_Click(object sender, EventArgs e){if (paddleOcr == null){MessageBox.Show("请先加载模型");return;}if (pictureBox1.Image == null){return;}richTextBox1.Clear();Application.DoEvents();dt1 = DateTime.Now;ocrResult = paddleOcr.Run(mat);dt2 = DateTime.Now;ShowOCRResult(ocrResult);}/// <summary>/// 根据图片exif调整方向/// </summary>/// <param name="img"></param>public void RotateImage(Bitmap img){var exif = img.PropertyItems;byte orien = 0;var item = exif.Where(m => m.Id == 274).ToArray();if (item.Length > 0)orien = item[0].Value[0];switch (orien){case 2:img.RotateFlip(RotateFlipType.RotateNoneFlipX);//horizontal flipbreak;case 3:img.RotateFlip(RotateFlipType.Rotate180FlipNone);//right-topbreak;case 4:img.RotateFlip(RotateFlipType.RotateNoneFlipY);//vertical flipbreak;case 5:img.RotateFlip(RotateFlipType.Rotate90FlipX);break;case 6:img.RotateFlip(RotateFlipType.Rotate90FlipNone);//right-topbreak;case 7:img.RotateFlip(RotateFlipType.Rotate270FlipX);break;case 8:img.RotateFlip(RotateFlipType.Rotate270FlipNone);//left-bottombreak;default:break;}}}
}

Demo下载

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/32848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot开发常用注解

文章目录 1.RestController2.Data3.RequestMapping4.Builder 1.RestController RestController注解其实就是将 return 中的内容以 JSON字符串的形式返回客户端 controller的详解 2.Data Data详解 3.RequestMapping RequestMapping 4.Builder Builder

【Wamp】安装 | 局域网内设备访问

安装教程&#xff1a; https://wampserver.site/article/1.html 下载 https://www.wampserver.com/en/ 安装路径上不能有中文 安装好之后图标呈绿色 放入网页文件 将网页文件放置于wamp文件夹的www子文件夹 例如&#xff1a;\Wamp\program\www 修改http端口 WAMP服务器…

编写简单的.gitlab-ci.yml打包部署项目

服务器说明&#xff1a; 192.168.192.120&#xff1a;项目服务器 192.168.192.121&#xff1a;GitLab 为了可以使用gitlab的cicd功能&#xff0c;我们需要先安装GitLab Runner 安装GitLab Runner参考&#xff1a; GitLab实现CICD自动化部署_gitlab cidi_程序员xiaoQ的博客-CS…

【MFC】05.MFC六大机制:程序启动机制-笔记

MFC程序开发所谓是非常简单&#xff0c;但是对于我们逆向人员来说&#xff0c;如果想要逆向MFC程序&#xff0c;那么我们就必须了解它背后的机制&#xff0c;这样我们才能够清晰地逆向出MFC程序&#xff0c;今天这篇文章就来带领大家了解MFC的第一大机制&#xff1a;程序启动机…

AI:02-基于深度学习的动物图像检索算法的研究

文章目录 一、算法原理二、代码实现三、实验结果四、总结深度学习在计算机视觉领域中的应用越来越广泛,其中动物图像检索算法是一个重要的应用场景。本文将介绍一种基于深度学习的动物图像检索算法,并提供相应的代码实现。 一、算法原理 本算法采用卷积神经网络(Convolutio…

数据安全加固:深入解析滴滴ES安全认证技术方案

前文分别介绍了滴滴自研的ES强一致性多活是如何实现的、以及如何提升ES的性能潜力。由于ES具有强大的搜索和分析功能&#xff0c;同时也因其开源和易于使用而成为黑客攻击的目标。近些年&#xff0c;业界ES数据泄露事件频发, 以下是一些比较严重的数据泄露案件&#xff1a; 202…

Golang函数以及函数和方法的区别

在接触到go之前&#xff0c;我认为函数和方法只是同一个东西的两个名字而已&#xff08;在我熟悉的c/c&#xff0c;python&#xff0c;java中没有明显的区别&#xff09;&#xff0c;但是在golang中者完全是两个不同的东西。官方的解释是&#xff0c;方法是包含了接收者的函数。…

基于Dlib库+SVM+Tensorflow+PyQT5智能面相分析-机器学习算法应用(含全部工程源码)+训练及测试数据集

目录 前言总体设计系统整体结构图系统流程图模型流程 运行环境Python 环境TensorFlow环境界面编程环境 模块实现1. 数据预处理2. 模型构建1&#xff09;定义模型结构2&#xff09;交叉验证模型优化 3. 模型训练及保存4. 模型测试1&#xff09;摄像头调用2&#xff09;模型导入及…

springboot工程集成前端编译包,用于uni-app webView工程,解决其需独立部署带来的麻烦,场景如页面->画布->图片->pdf

前端工程 访问方式 http://127.0.0.1:8080/context/frontEnd/index放行 public class SecurityConfig extends WebSecurityConfigurerAdapter { "/frontEnd/**",SysFrontEndController import lombok.extern.slf4j.Slf4j; import nl.basjes.shaded.org.springfram…

分类预测 | MATLAB实现SMA-CNN-BiLSTM-Attention多输入分类预测

分类预测 | MATLAB实现SMA-CNN-BiLSTM-Attention多输入分类预测 目录 分类预测 | MATLAB实现SMA-CNN-BiLSTM-Attention多输入分类预测分类效果基本介绍模型描述程序设计参考资料 分类效果 基本介绍 1.MATLAB实现SMA-CNN-BiLSTM-Attention多输入分类预测&#xff0c;CNN-BiLSTM结…

解决android studio妙明奇妙出现的模拟器

1&#xff0c;查看设备 adb devices 2&#xff0c; adb命令断开指定的设备 要断开ADB与特定设备的连接&#xff0c;可以使用以下命令&#xff1a; adb disconnect <设备ID> 将 <设备ID> 替换为您要断开连接的设备的实际ID。设备ID可以在运行 adb devices 命令…

redis学习笔记(一)

文章目录 一、引言二、redis介绍2.1、定义2.2、Redis的数据类型及主要特性2.3、Redis的应用场景有哪些&#xff1f; 三、redis环境安装3.1、下载和安装 一、引言 在Web应用发展的初期&#xff0c;那时关系型数据库受到了较为广泛的关注和应用&#xff0c;原因是因为那时候Web站…

Python爬虫:抓取表情包的下载链接

Python爬虫:抓取表情包的下载链接 1. 前言2. 具体实现3. 实现代码 1. 前言 最近发现了一个提供表情包的网址&#xff0c;觉得上面的内容不错&#xff0c;于是就考虑用Python爬虫获取上面表情包的下载链接。整体而言&#xff0c;实现这个挺简单的&#xff0c;就是找到提供表情包…

Python ImportError报错:No module named ‘numpy.core_multiarray_umath‘

文章目录 背景Import 报错是版本问题吗&#xff1f;删除pandas在Visual Studio中设置Python 环境为什么要在Visual Studio IDE下继续安装Python package在Visual Studio安装numpy和pandasPYTHONPATHDebug模式下继续报错配置Release 工程优化不便之处 1不便之处 2后续 参考 背景…

前端渲染数据

在前端对接受后端数据处理后返回的接收值的时候&#xff0c;为了解决数据过于庞大&#xff0c;而对数据进行简化处理例如性别&#xff0c;经常会使用1&#xff0c; 0这俩个来代替文字的男&#xff0c;女。以下就是前端渲染的具体实现。 以下是部分代码 <el-table-columnpr…

Linux 共享内存mmap,进程通信

文章目录 前言一、存储映射 I/O二、mmap&#xff0c; munmap三、父子进程间 mmap 通信四、非血缘关系进程间 mmap 提通信五、mmap 匿名映射区总结 前言 进程间通信是操作系统中重要的概念之一&#xff0c;使得不同的进程可以相互交换数据和进行协作。其中&#xff0c;共享内存…

非关系型数据库---Redis安装与基本使用

一、数据库类型 关系数据库管理系统&#xff08;RDBMS&#xff09;非关系数据库管理系统&#xff08;NoSQL&#xff09; 按照预先设置的组织机构&#xff0c;将数据存储在物理介质上(即&#xff1a;硬盘上) 数据之间可以做无关联操作 (例如: 多表查询&#xff0c;嵌套查询&am…

详细记录Pycharm配置已安装好的Conda虚拟环境

当安装好conda环境之后&#xff0c;想要在Pycharm中使用&#xff0c;那么就要在Pycharm中导入&#xff0c;我这里使用的pycharm-professional-2023.2这个版本&#xff0c;下面是详细步骤&#xff1a; 1.打开File->Settings&#xff1a; 2.找到Project——>Python Inter…

【每日一题】1572. 矩阵对角线元素的和

【每日一题】1572. 矩阵对角线元素的和 1572. 矩阵对角线元素的和题目描述解题思路 1572. 矩阵对角线元素的和 题目描述 给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1&a…

基于Gradio的GPT聊天程序

网上很多别人写的&#xff0c;要用账号也不放心。就自己写了一个基于gradio的聊天界面&#xff0c;部署后可以本地运行。 特点&#xff1a; 可以用openai的&#xff0c;也可以用api2d&#xff0c;其他api可以自己测试一下。使用了langchain的库 可以更改模型&#xff0c;会的…