抖音最火
百度360必应搜狗本站头条热榜
当前位置:网站首页 > 玩转快手 > 正文

快手极速版免费下载2023抖音,下载快手极速版最新版本202

DouJia 2024-01-21 14:30 162 浏览

PaddleSharp:跨越一年的版本更新与亮点

我始终坚信,开源社区是技术进步的重要推动力,也是我抽出我业余时间,投入到PaddleSharp这个项目的原因,这个项目充分展现快手极速版免费下载2023抖音了.NET在复杂计算领域的潜力。今天很高兴地告诉大家,PaddleSharp有快手极速版免费下载2023抖音了新版本快手极速版免费下载2023抖音

先来说说背景,有的朋友可能知道,PaddleSharp过去老版本存在一些东西过时或者无法使用的情况。但是,时光恰恰是优化和革新的好理由和契机,我在距离上一篇文章发布之后,做了许多优化,下面我挑重要的部分做介绍。

整体体验 文档和示例

我一直在更新Github首页的使用文档和示例:

https://github.com/sdcb/PaddleSharp (项目首页+整体介绍+推理库部分)

https://github.com/sdcb/PaddleSharp/blob/master/docs/ocr.md (PaddleOCR)

https://github.com/sdcb/PaddleSharp/blob/master/docs/detection.md (PaddleDetection)

https://github.com/sdcb/PaddleSharp/blob/master/docs/rotation-detection.md (RotationDetection)

https://github.com/sdcb/PaddleSharp/blob/master/docs/paddle2onnx.md (Paddle模型转Onnx)

里面包含了大致介绍、使用方式、使用示例、注意事项等。

我会持续维护这些文档,尤其是有客户有时向我反馈一些问题,我会将里面一些常见的问题和解决办法写在上面文档中,因此建议初接触PaddleSharp的朋友看看。

xml注释和snuget调试

作为一名程序员,编程体验很重要,方法怎么用,一个是看示例,另一个就是看注释。

为此我将PaddleSharp中所有的公有方法、受保护方法都加上了详尽的xml注释,这一点在Github上显示了超过9000行代码变动,以后在Visual Studio中鼠标放在PaddleSharp里面的类、参数、方法上时,就会显示详尽的注释,比如下面这个注释:

///<summary>

///Returns an Action delegate that configures PaddleConfig for use with Onnx.

///</summary>

///<param name="cpuMathThreadCount">The number of CPU threads to use for math operations. A value of 0 sets it to minimum of 4 and the available number of processors.</param>

///<param name="enableOnnxOptimization">Flag to enable or disable Onnx runtime optimization.</param>

///<param name="memoryOptimized">Flag to enable or disable memory optimization.</param>

///<param name="glogEnabled">Flag to enable or disable logging with glog.</param>

///<returns>The ONNX Runtime paddle device definition.</returns>

publicstaticAction<PaddleConfig> Onnx(intcpuMathThreadCount = 0, boolenableOnnxOptimization = true, boolmemoryOptimized = true, boolglogEnabled = false)

{

returncfg =>

{

cfg.OnnxEnabled = true;

if(enableOnnxOptimization) cfg.EnableOnnxOptimization;

cfg.CpuMathThreadCount = cpuMathThreadCount switch

{

0=> Math.Min( 4, Environment.ProcessorCount),

_ => cpuMathThreadCount

};

CommonAction(cfg, memoryOptimized, glogEnabled);

};

}

可见它会每个成员函数、参数、返回值都作出了详尽的xml注释。

以此为基础,我还将所有的.NET包发布了.snuget包,这些包自带pdb调试符号文件,以后编程中按F11即可单步调试进入PaddleSharp的源代码中,。

Paddle推理库 设备管理

其中,一项重要的改变在于设备使用接口的设计。老版本中只有PaddleConfig.Defaults.UseGpu这一设备启用选项,为了增强扩展性和用户体验,便对其进行了扩展:新版本中我引入了下列设备:

PaddleDevice.Gpu

PaddleDevice.Openblas

PaddleDevice.Onnx

PaddleDevice.Mkldnn

PaddleDevice.TensorRt(需要和 PaddleDevice.Gpu配合使用)

不同的方法代表着不同的设备类型,这无疑为用户提供了更大的选择空间,这是PaddleOCR的新版本使用示例(它需要作为PaddleOcrAll的参数传进去):

// 注:需要先安装如下NuGet包:

// * Sdcb.PaddleInference

// * Sdcb.PaddleOCR

// * Sdcb.PaddleOCR.Models.LocalV3

// * Sdcb.PaddleInference.runtime.win64.mkl

// * OpenCvSharp4.runtime.win

FullOcrModel model = LocalFullModels.ChineseV3;

byte[] sampleImageData;

stringsampleImageUrl = @"https://www.tp-link.com.cn/content/images2017/gallery/4288_1920.jpg";

using(HttpClient http = newHttpClient)

{

Console.WriteLine( "Download sample image from: "+ sampleImageUrl);

sampleImageData = awaithttp.GetByteArrayAsync(sampleImageUrl);

}

// 下面的PaddleDevice.Mkldnn是新加的

// 之前是用的PaddleConfig.Defaults.UseMkldnn = true

// 如果想要GPU,则改为PaddleDevice.Gpu即可

using(PaddleOcrAll all = newPaddleOcrAll(model, PaddleDevice.Mkldnn)

{

AllowRotateDetection = true, /* 允许识别有角度的文字 */

Enable180Classification = false, /* 不允许识别旋转角度大于90度的文字 */

})

{

// 如果需要读取本地文件,使用如下被注释的代码

// using (Mat src2 = Cv2.ImRead(@"C:\test.jpg"))

using(Mat src = Cv2.ImDecode(sampleImageData, ImreadModes.Color))

{

PaddleOcrResult result = all.Run(src);

Console.WriteLine( "Detected all texts: \n"+ result.Text);

foreach(PaddleOcrResultRegion region inresult.Regions)

{

Console.WriteLine( $"Text: {region.Text}, Score: {region.Score}, RectCenter: {region.Rect.Center}, RectSize: {region.Rect.Size}, Angle: {region.Rect.Angle}");

}

}

}

其中用于设备管理的代码在:

using(PaddleOcrAll all = newPaddleOcrAll(model, PaddleDevice.Mkldnn)

它可以换为PaddleDevice.Openblas(表示不使用Mkldnn):

using(PaddleOcrAll all = newPaddleOcrAll(model, PaddleDevice.Openblas)

或者换成PaddleDevice.Gpu(表示使用GPU——但必须先安装Gpu的相关包并配好环境):

using(PaddleOcrAll all = newPaddleOcrAll(model, PaddleDevice.Gpu)

当然,我会尽量简化和清晰地解释这个部分。以下是我的修改提案:

库加载方式优化

在旧版PaddleSharp中,库加载方式主要有两种:在.NET Framework中采用Autoload方式,在.NET Core中采用SearchPathLoad方式。然而,这两种方式在某些情况下并不理想,特别是在Linux环境下。

Autoload方式

Autoload方式的主要问题在于,PaddleSharp依赖于paddle_inference_c.dll,而paddle_inference_c.dll又依赖于其他dll如openblas.dll。即使paddle_inference_c.dll成功加载,也可能因为其他依赖dll的问题导致推理失败。

解决办法是在调用依赖dll加载的函数前,先调用一个不会触发加载的函数,例如PaddleConfig.Version。然后在当前进程模型中找到paddle_inference_c模块,定位到它所在的文件夹,并把文件夹路径导入到环境变量中。

SearchPathLoad方式

SearchPathLoad方式利用了.NET Core 3.1引入的AppContext变量:NATIVE_DLL_SEARCH_DIRECTORIES。这种方式不需要读取进程模块就能知道dll的位置。

但是,这种方法在Linux环境下行不通。因为Linux的LD_LIBRARY_PATH环境变量必须在进程启动前被确定。一旦进程启动,环境变量的值就被缓存起来,运行时的修改对程序无效。

新的加载方式

为了解决上述问题,新的PaddleSharp版本采用了逐步加载依赖的方式。在Linux环境中,依次加载以下动态库:

libgomp.so.1

libiomp5.so

libdnnl.so.2

libmklml_intel.so

libonnxruntime.so.1.11.1

libpaddle2onnx.so.1.0.0rc2

这种新的加载方式有效解决了在Linux环境下的问题。

PaddleOCR 已经支持表格识别

这个许多客户反馈了许久,我在大概2023年五一的时候实现了表格识别功能,同时表格识别的模型我都加入了Sdcb.PaddleOCR.Models.LocalV3/Sdcb.PaddleOCR.Models.Online包,可以全离线表格识别或者按需下载模型表格识别。

它的使用示例如下(最新版本请参考这个链接:https://github.com/sdcb/PaddleSharp/blob/master/docs/ocr.md#table-recognition ):

// Install following packages:

// Sdcb.PaddleInference

// Sdcb.PaddleOCR

// Sdcb.PaddleOCR.Models.LocalV3

// Sdcb.PaddleInference.runtime.win64.mkl (required in Windows, linux using docker)

// OpenCvSharp4.runtime.win (required in Windows, linux using docker)

usingPaddleOcrTableRecognizer tableRec = new(LocalTableRecognitionModel.ChineseMobileV2_SLANET);

usingMat src = Cv2.ImRead(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "table.jpg"));

// Table detection

TableDetectionResult tableResult = tableRec.Run(src);

// Normal OCR

usingPaddleOcrAll all = new(LocalFullModels.ChineseV3);

all.Detector.UnclipRatio = 1.2f;

PaddleOcrResult ocrResult = all.Run(src);

// Rebuild table

stringhtml = tableResult.RebuildTable(ocrResult);

效果如图:

Raw table

Table model output

Rebuilt table

值得注意的是,PaddleSharp的表格识别是基于飞桨的深度学习模型,对于一些规整的表格,它的效果可能不如使用传统的OpenCV算法,如果想了解传统算法,可以参考我2021年.NET Conf China做的技术分享的pdf:[.NET玩转计算机视觉OpenCV - 周杰](https://io.starworks.cc:88/cv-public/2021/.NET%E7%8E%A9%E8%BD%AC%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89OpenCV.pdf)

两个新的模型包LocalV3/Online

新版本中,还引入了两个新的本地模型包:Sdcb.PaddleOCR.Models.LocalV3/Sdcb.PaddleOCR.Models.Online。一个表示完全本地——不用联网即可使用OCR,另一个表示需要联网,模型按需下载。

下面是使用Sdcb.PaddleOCR.Models.LocalV3的示例:

FullOcrModel model = LocalFullModels.EnglishV3; // 将EnglishV3换为其它模型,如ChineseV3

using(PaddleOcrAll all = newPaddleOcrAll(model))

{

// ...

}

下面是使用Sdcb.PaddleOCR.Models.Online的示例:

FullOcrModel model = awaitOnlineFullModels.EnglishV3.DownloadAsync;

using(PaddleOcrAll all = newPaddleOcrAll(model))

{

// ...

}

其中值得一提的是LocalV3,它将所有已知PaddleOCR的v3模型都包含了,安装这个包可以实现完全不联网部署。

为什么我需要淘汰原来的Sdcb.PaddleOCR.KnownModels?

说来话长,首先KnownModels有下面几个缺点:

主要原因是OCR需要使用的文字检测、180度分类、文字识别3个模型会下载到以语言命名的同一个文件夹中:

C:\Users\ZhouJie\AppData\Roaming\paddleocr-models\ppocr-v3>tree /f

C:.

│ key.txt

├─cls

│ inference.pdiparams

│ inference.pdiparams.info

│ inference.pdmodel

快手极速版免费下载2023抖音,下载快手极速版最新版本202

├─det

│ inference.pdiparams

│ inference.pdiparams.info

│ inference.pdmodel

└─rec

inference.pdiparams

inference.pdiparams.info

inference.pdmodel

如上图,每个模型的cls文件夹都可能重复占用磁盘空间、且需要重复下载——这不合理。

因此我引入了Sdcb.PaddleOCR.Models.Online,已经下载过的模型不会重复下载,这个行为和PaddleOCR上游Python代码一致。

次要问题是它的命名,KnownModels不能代表它是本地模型还是线上模型(虽然它本质是线上模型、按需下载),如果使用LocalV3和Online,则可以清晰地看出是本地模型或者线上模型。

识别阶段走batch

关于性能问题,新版本也做了一些重要的升级。OCR文字识别阶段能够自动支持batch处理,且走batch时会排序,将一样宽的文字行做一批识别,这样大大优化了程序的性能。

据一些客户的测试反馈,PaddleSharp的PaddleOCR的性能表现很好,甚至在某些场景下和官方的C++、Python版本相比有更好的表现。

总结

其实上面只是一些主要的,其实PaddleSharp项目还有许多非常有意思功能增强,比如RotationDetection和Paddle2Onnx,以后有机会我一一介绍。

我深信这些更新无疑会为.NET开源社区带来更多的可能性和便利。我将继续在这个领域上付出努力,为.NET社区做出更多的贡献。我期待着更多.NET爱好者能够加入我,一起提升PaddleSharp在.NET深度学习实战应用中的影响力,它将始终保持好用且免费,让我们共同期待它的更多精彩!

想尝试PaddleSharp的朋友,欢迎访问我的[Github](https://github.com/sdcb/PaddleSharp)

,也请给个Star🌟

喜欢的朋友 请关注我的微信公众号:【DotNet骚操作】

DotNet骚操作

相关推荐

快手下载的视频怎么去掉快手号,快手下载视频怎么去掉快手号水印
快手下载的视频怎么去掉快手号,快手下载视频怎么去掉快手号水印

  现在我要给大家介绍这样一款游戏快手下载的视频怎么去掉快手号,这款游戏自从推出就登上了各大平台快手下载的视频怎么去掉快手号的下载榜单前几名,并且长期保持着这样快手下载的视频怎么去掉快手号的成绩——捕鱼达人,这款游戏能够成为游戏常青树并且...

2025-07-11 00:30 DouJia

快手小游戏破解版游戏大全(快手小游戏破解挂)
快手小游戏破解版游戏大全(快手小游戏破解挂)

  快手小游戏破解版游戏大全我的世界中国版红石发射器合成攻略中国版红石发射器怎么合成?红石发射器是粘液服中的道具之一快手小游戏破解版游戏大全,那么红石发射器有什么用呢?想来不少小伙伴都想知道,以及红石发射器该怎么合成呢?我的世界中国版红石...

2025-07-10 21:30 DouJia

快手下载最新版本2023红包版,快手下载最新版本2023
快手下载最新版本2023红包版,快手下载最新版本2023

第二步快手下载最新版本2023,打开豌豆荚搜索界面搜索“快手”快手下载最新版本2023,然后在搜索结果中点击“快手”如下图所示第三步,打开快手详情页后向下滑动界面至底端,然后点击“历史版本”如下图所示第四步,打开“快手历史版本”界面查看...

2025-07-10 14:30 DouJia

快手下载别人作品对方知道吗,快手下载别人作品会不会有提醒
快手下载别人作品对方知道吗,快手下载别人作品会不会有提醒

1、1快手下载人家作品知道快手下载别人作品对方知道吗,因为会有下载记录,只要访问别人的主页查看作品的时候,不点赞不关注不评论,只是单纯的查看对方的作品动态说说,别人是不会知道的2快手是由快手科技开发的一款短视频应用APP,于2013年正式上...

2025-07-10 07:30 DouJia

下载快手app(下载快手app下载)
下载快手app(下载快手app下载)

打开手机的浏览器下载快手app,进入快手的官方首页在官方首页上,通常会有下载快手APP的链接或按钮点击该链接或按钮,根据页面提示进行下载和安装注意为下载快手app了确保下载到的是官方正版的快手APP,建议优先从手机自带的应用商店或快手的官方...

2025-07-10 00:30 DouJia

快手软件取关(快手软件取关软件)
快手软件取关(快手软件取关软件)

  现在快手软件取关我要给大家介绍这样一款游戏快手软件取关,这款游戏自从推出就登上了各大平台的下载榜单前几名快手软件取关,并且长期保持着这样的成绩——捕鱼达人,这款游戏能够成为游戏常青树并且能够被称之为经典游戏的原因就是,拥有极高的创新性...

2025-07-09 21:30 DouJia

快手app下载最新版202,下载快手 最新版
快手app下载最新版202,下载快手 最新版

  快手app下载最新版202我们都知道手机游戏尤其是网络游戏已经大面积的普及到了消费者的生活中来快手app下载最新版202,不管快手app下载最新版202你是打撸啊撸还是吃鸡,对于一款常玩游戏的玩家来说,一款专门为电竞而生就是市场的呼声,...

2025-07-09 14:30 DouJia

快手市值多少亿2023(快手市值多少亿人民币2023)
快手市值多少亿2023(快手市值多少亿人民币2023)

1、四财务状况增长表现2023年多数企业实现增长,快手和爱奇艺净利润大幅上升,快手一季度净利润增长超过500%亏损状态哔哩哔哩仍处于亏损状态费用管理各公司研发投入和营销推广投入较高,快手薪酬费用占比最高五资本市场表现市值快手和腾讯音...

2025-07-09 07:30 DouJia

快手极速版怎么不显示红包圈了苹果版(快手极速版怎么不显示红包圈了苹果手机)
快手极速版怎么不显示红包圈了苹果版(快手极速版怎么不显示红包圈了苹果手机)

金币的上限快手极速版怎么不显示红包圈了苹果版,红包圈就不会再转动快手极速版怎么不显示红包圈了苹果版了可以在第二天继续快手极速版怎么不显示红包圈了苹果版,金币获取量是每天刷新的单个视频金币上限同一个视频或者每天能够获取的金币达到了上限,一直看...

2025-07-09 00:30 DouJia

快手小游戏什么时候回归(快手小游戏什么时候解封)
快手小游戏什么时候回归(快手小游戏什么时候解封)

    关于何为数据科学家,小科曾在文章中如此解释快手小游戏什么时候回归:  数据科学家是二十一世纪的炼金术士:他们洞悉原始数据,从而进行转化。数据科学家利用统计、机器学习和分析方法来解决关键业务问题,帮助公司将大数据量化为有价值、可操作的...

2025-07-08 21:30 DouJia

快手最新版免费下载,快手2021最新版大全下载
快手最新版免费下载,快手2021最新版大全下载

  虽然一代好软vst全聚合倒下了快手最新版免费下载,但是还有更多个好软件站起来!在这些优质的第三方影视直播软件中快手最新版免费下载,小编今天要给大家推荐一款最新上架便受到智能电视用户一致好评的电视直播软件-《小薇直播》!  小薇直播是...

2025-07-08 14:30 DouJia

快手极速版领现金版本,快手极速版2019最新版领现金
快手极速版领现金版本,快手极速版2019最新版领现金

  厦门建发股份有限公司二O一六年度审计报告致同会计师事务所(特殊普通合伙)目录审计报告合并及公司资产负债表1-2合并及公司利润表3合并及公司现金流量表4合并及公司股东权益变动表5-8财务报表附注9-134...

2025-07-08 07:30 DouJia