paddleOCRC#部署之Sdcb.PaddleOCR

简介

本篇介绍Sdcb.PaddleOCR的使用,原文介绍请转至 https://github.com/sdcb/PaddleSharp 查看

#下面先贴源码

//系统引用
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//Sdcb引用
using Sdcb.PaddleOCR;
using Sdcb.PaddleInference;
using Sdcb.PaddleOCR.Models;
using OpenCvSharp;

namespace winForm_OCR
{
    public partial class Form1 : Form
    {
        PaddleOcrAll all;
        //以下是模型和字典路径
        string det = @"C:\Users\SpesTech\Desktop\飞桨SDBC开发测试\1test\model\ch_PP-OCRv4_det_infer";
            string rec = @"C:\Users\SpesTech\Desktop\飞桨SDBC开发测试\1test\model\ch_PP-OCRv4_rec_infer";
            string cls = @"C:\Users\SpesTech\Desktop\飞桨SDBC开发测试\1test\model\ch_ppocr_mobile_v2.0_cls_infer";
            string key = @"C:\Users\SpesTech\Desktop\飞桨SDBC开发测试\1test\model\ppocr_keys_v1.txt";
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //模型初始化
            FullOcrModel model = FullOcrModel.FromDirectory(det, cls, rec, key, ModelVersion.V4);
			//加载模型,同时设置用什么推理,我这里用的GPU,后面的说明里介绍如何使用GPU或CPU
            all = new PaddleOcrAll(model, PaddleDevice.Gpu())
            {
                AllowRotateDetection = true,
                Enable180Classification = false
            };
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            
            //使用OpenCV读取图像并检测
            Mat srcImg = Cv2.ImRead("1.bmp");
            DateTime star = DateTime.Now;
            //获取结果,result 结果包含置信度,文本框坐标,文本内容
            PaddleOcrResult result = all.Run(srcImg);
            DateTime end = DateTime.Now;
            label1.Text = (end - star).ToString();
            textBox1.Text = result.Text;
            pictureBox1.BackgroundImage = new Bitmap(srcImg.ToMemoryStream())as Image;
        }
    }
}

说明

使用CPU推理

cpu推理较为简单,在vs的NuGet里安装下面几个包
在这里插入图片描述
代码里需要改的地方就是模型加载那块把

all = new PaddleOcrAll(model, PaddleDevice.Gpu())
	                                        ∨
all = new PaddleOcrAll(model, PaddleDevice.Mkldnn())

在这里插入图片描述
PaddleDevice还有好多选项,大概意思是用什么进行加速推理,Mkldnn和Openblas是cpu加速推理的C++库吧,我记得是这样。

选用什么要根据你用的什么模型,什么设备进行同时也要看你下载的那个包使用,我用cpu推理的时候用的
Sdcb.PaddleInference.runtime.win64.mkl
所以我的代码里就是 PaddleDevice.Mkldnn()

使用GPU推理

在vs的NuGet里安装下图所示的几个包
在这里插入图片描述
注意:使用GPU需要将支持CPU的包卸载掉,二者只能存其一
Sdcb.PaddleInference.runtime.win64.mkl

同时还要下载cuda、cudnn、TensorRT
我的显卡是NVIDIA GeForce RTX3060Ti
最高支持Cuda11.8
在这里插入图片描述
安装显卡驱动之后在cmd中 输入 nvidia-smi 进行查看
这几个工具我安装的版本是
Cuda 11.2.0
cudnn 8.9.7
TensorRT 7.2.3

cuda安装最好比显卡支持的最高版本低一点,我一开始装的11.8没运行起来。当然爱折腾的可以试试

官方也有支持其他版本cuda的NuGet里也可以看到,不过这几个工具的大版本一定按照其标的下载

关于Cuda 和cudnn的下载安装

Cuda的安装比较简单,网上也有很多教程大家随便搜一下就会有一大堆出来,这里我稍微提一下 cudnn和TensorRT的安装,他们的安装其实并不叫安装,相当于添加了一些文件到Cuda的安装路径下,同时也要添加一些系统变量。网上也有很多教程,东西下载下来照猫画虎的操作下来也就OK了。还有就是这两需要注册账号才能下载

其他

引用这块直接看图
三个包
主要就是这些,如果你在NuGet中下载的那么在debug文件夹中还会生成一个dll文件夹

在这里插入图片描述
里面是一些必要的dll,我想应该是Sdcb其他的依赖,也有可能是对飞桨官方C++的一些封装。

OK!文章到这基本也就结束了,如有问题可以留言,看到一定会回复,即使不知道也会回复:不知道!!(理直气壮)(手动狗头)

sdcb.rotationdetector 是一个用于检测设备旋转的功能。在移动设备中,我们可以通过检测设备的旋转来实现一些相应的界面布局或功能调整。 sdcb.rotationdetector 提供了一些函数和方法,可以帮助我们获取设备的旋转角度或方向。通过调用这些函数,我们可以根据设备的旋转状态来调整界面的布局和显示。 例如,在一个横屏和竖屏切换的应用程序中,我们可以使用 sdcb.rotationdetector 来检测设备的旋转状态。当设备从竖屏转为横屏时,我们可以重新布局界面,以适应更宽的显示区域。反之,当设备从横屏转为竖屏时,我们可以根据界面的需要进行相应的调整。 sdcb.rotationdetector 还可以用于游戏开发中。在一些需要依赖设备旋转的游戏中,我们可以使用该功能来监测用户旋转设备的动作,然后根据不同的旋转方向进行相应的游戏操作。 除了以上的用例,sdcb.rotationdetector 还可以用于其他领域,如AR(增强现实)应用。当用户在使用AR应用时,sdcb.rotationdetector 可以帮助我们检测设备旋转的角度和方向,从而提供更加准确和逼真的AR体验。 总之,sdcb.rotationdetector 是一个非常有用的功能,可以帮助我们根据设备的旋转状态来调整界面布局和实现一些功能。通过使用 sdcb.rotationdetector,我们可以提升用户体验,并为开发者提供更多的可能性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值