Sdcb.PaddleInference 2.5.0-preview.3

Prefix Reserved
This is a prerelease version of Sdcb.PaddleInference.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Sdcb.PaddleInference --version 2.5.0-preview.3                
NuGet\Install-Package Sdcb.PaddleInference -Version 2.5.0-preview.3                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Sdcb.PaddleInference" Version="2.5.0-preview.3" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Sdcb.PaddleInference --version 2.5.0-preview.3                
#r "nuget: Sdcb.PaddleInference, 2.5.0-preview.3"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Sdcb.PaddleInference as a Cake Addin
#addin nuget:?package=Sdcb.PaddleInference&version=2.5.0-preview.3&prerelease

// Install Sdcb.PaddleInference as a Cake Tool
#tool nuget:?package=Sdcb.PaddleInference&version=2.5.0-preview.3&prerelease                

PaddleSharp ๐ŸŒŸ main QQ

๐Ÿ’— .NET Wrapper for PaddleInference C API, include PaddleOCR ๐Ÿ“–, PaddleDetection ๐ŸŽฏ, Rotation Detector ๐Ÿ”„, support Windows(x64) ๐Ÿ’ป, NVIDIA Cuda 10.2+ based GPU ๐ŸŽฎ and Linux(Ubuntu-22.04 x64) ๐Ÿง, currently contained following main components:

  • PaddleOCR ๐Ÿ“– support 14 OCR languages model download on-demand, allow rotated text angle detection, 180 degree text detection, also support table recognition ๐Ÿ“Š.
  • PaddleDetection ๐ŸŽฏ support PPYolo detection model and PicoDet model ๐Ÿน.
  • RotationDetection ๐Ÿ”„ use Baidu's official text_image_orientation_infer model to detect text picture's rotation angle(0, 90, 180, 270).

NuGet Packages/Docker Images ๐Ÿ“ฆ

Release notes ๐Ÿ“

Please checkout this page ๐Ÿ“„.

Infrastructure packages ๐Ÿ—๏ธ

NuGet Package ๐Ÿ’ผ Version ๐Ÿ“Œ Description ๐Ÿ“š
Sdcb.PaddleInference NuGet Paddle Inference C API .NET binding โš™๏ธ

Native packages ๐Ÿ—๏ธ

Package ๐Ÿ’ผ Source ๐Ÿ”— Version ๐Ÿ“Œ Description ๐Ÿ“š
Sdcb.PaddleInference.runtime.win64.mkl Baidu NuGet win64+mkldnn
Sdcb.PaddleInference.runtime.win64.openblas Baidu NuGet win64+openblas
Sdcb.PaddleInference.runtime.win64.openblas-noavx Sdcb NuGet win64+openblas(no AVX, for old CPUs)
Sdcb.PaddleInference.runtime.win64.cuda102_cudnn76_tr72_sm61_75 Sdcb NuGet win64/CUDA 10.2/cuDNN 7.6/TensorRT 7.2/sm61+sm75
Sdcb.PaddleInference.runtime.win64.cuda118_cudnn86_tr85_sm86_89 Sdcb NuGet win64/CUDA 11.8/cuDNN 8.6/TensorRT 8.5/sm86+sm89
Sdcb.PaddleInference.runtime.win64.cuda117_cudnn84_tr84_sm86 Sdcb NuGet win64/CUDA 11.7/cuDNN 8.4/TensorRT 8.4/sm86
Sdcb.PaddleInference.runtime.win64.cuda102_cudnn76_sm61_75 Sdcb NuGet win64/CUDA 10.2/cuDNN 7.6/sm61+sm75
Sdcb.PaddleInference.runtime.win64.cuda116_cudnn84_sm86_onnx Sdcb NuGet win64/CUDA 11.6/cuDNN 8.4/sm86/onnx

Other packages that starts with Sdcb.PaddleInference.runtime might deprecated.

Baidu packages were downloaded from here: https://www.paddlepaddle.org.cn/inference/master/guides/install/download_lib.html#windows

My Sdcb packages were self compiled.

Baidu official GPU packages are too large(>1.5GB) to publish to nuget.org, there is a limitation of 250MB when upload to Github, there is some related issues to this:

But You're good to build your own GPU nuget package using 01-build-native.linq ๐Ÿ› ๏ธ.

Note: Linux does not need a native binding NuGet package like windows(Sdcb.PaddleInference.runtime.win64.mkl), instead, you can/should based from a Dockerfile๐Ÿณ to development:

Docker Images ๐Ÿณ Version ๐Ÿ“Œ Description ๐Ÿ“š
sdflysha/dotnet6-paddle Docker PaddleInference 2.5.0, OpenCV 4.7.0, based on official Ubuntu 22.04 .NET 6 Runtime ๐ŸŒ
sdflysha/dotnet6sdk-paddle Docker PaddleInference 2.5.0, OpenCV 4.7.0, based on official Ubuntu 22.04 .NET 6 SDK ๐ŸŒ

PaddleOCR packages ๐Ÿ“–

NuGet Package ๐Ÿ’ผ Version ๐Ÿ“Œ Description ๐Ÿ“š
Sdcb.PaddleOCR NuGet PaddleOCR library(based on Sdcb.PaddleInference) โš™๏ธ
Sdcb.PaddleOCR.Models.Online NuGet Online PaddleOCR models, will download when first using ๐ŸŒ
Sdcb.PaddleOCR.Models.LocalV3 NuGet Full local v3 models, include multiple language(~130MB) ๐Ÿ—บ๏ธ

Rotation Detection packages (part of PaddleCls) ๐Ÿ”„

NuGet Package ๐Ÿ’ผ Version ๐Ÿ“Œ Description ๐Ÿ“š
Sdcb.RotationDetector NuGet RotationDetector library(based on Sdcb.PaddleInference) โš™๏ธ

PaddleDetection packages ๐ŸŽฏ

NuGet Package ๐Ÿ’ผ Version ๐Ÿ“Œ Description ๐Ÿ“š
Sdcb.PaddleDetection NuGet PaddleDetection library(based on Sdcb.PaddleInference) โš™๏ธ

Usage ๐Ÿ“š

FAQ โ“

Why my code runs good in my windows machine, but DllNotFoundException in other machine: ๐Ÿ’ป

  1. Please ensure the latest Visual C++ Redistributable was installed in Windows (typically it should automatically installed if you have Visual Studio installed) ๐Ÿ› ๏ธ Otherwise, it will fail with the following error (Windows only):

    DllNotFoundException: Unable to load DLL 'paddle_inference_c' or one of its dependencies (0x8007007E)
    

    If it's Unable to load DLL OpenCvSharpExtern.dll or one of its dependencies, then most likely the Media Foundation is not installed in the Windows Server 2012 R2 machine: <img width="830" alt="image" src="https://user-images.githubusercontent.com/1317141/193706883-6a71ea83-65d9-448b-afee-2d25660430a1.png">

  2. Many old CPUs do not support AVX instructions, please ensure your CPU supports AVX, or download the x64-noavx-openblas DLLs and disable Mkldnn: PaddleDevice.Openblas() ๐Ÿš€

  3. If you're using Win7-x64, and your CPU does support AVX2, then you might also need to extract the following 3 DLLs into C:\Windows\System32 folder to make it run: ๐Ÿ’พ

    • api-ms-win-core-libraryloader-l1-2-0.dll
    • api-ms-win-core-processtopology-obsolete-l1-1-0.dll
    • API-MS-Win-Eventing-Provider-L1-1-0.dll

    You can download these 3 DLLs here: win7-x64-onnxruntime-missing-dlls.zip โฌ‡๏ธ

How to enable GPU? ๐ŸŽฎ

Enable GPU support can significantly improve the throughput and lower the CPU usage. ๐Ÿš€

Steps to use GPU in Windows:

  1. (for Windows) Install the package: Sdcb.PaddleInference.runtime.win64.cuda* instead of Sdcb.PaddleInference.runtime.win64.mkl, do not install both. ๐Ÿ“ฆ
  2. Install CUDA from NVIDIA, and configure environment variables to PATH or LD_LIBRARY_PATH (Linux) ๐Ÿ”ง
  3. Install cuDNN from NVIDIA, and configure environment variables to PATH or LD_LIBRARY_PATH (Linux) ๐Ÿ› ๏ธ
  4. Install TensorRT from NVIDIA, and configure environment variables to PATH or LD_LIBRARY_PATH (Linux) โš™๏ธ

You can refer to this blog page for GPU in Windows: ๅ…ณไบŽPaddleSharp GPUไฝฟ็”จ ๅธธ่ง้—ฎ้ข˜่ฎฐๅฝ• ๐Ÿ“

If you're using Linux, you need to compile your own OpenCvSharp4 environment following the docker build scripts and the CUDA/cuDNN/TensorRT configuration tasks. ๐Ÿง

After these steps are completed, you can try specifying PaddleDevice.Gpu() in the paddle device configuration parameter, then enjoy the performance boost! ๐ŸŽ‰

TensorRT ๐Ÿš„

To use TensorRT, just specify PaddleDevice.Gpu().And(PaddleDevice.TensorRt("shape-info.txt")) instead of PaddleDevice.Gpu() to make it work. ๐Ÿ’ก

Please be aware, this shape info text file **.txt is bound to your model. Different models have different shape info, so if you're using a complex model like Sdcb.PaddleOCR, you should use different shapes for different models like this:

using PaddleOcrAll all = new(model,
   PaddleDevice.Gpu().And(PaddleDevice.TensorRt("det.txt")),
   PaddleDevice.Gpu().And(PaddleDevice.TensorRt("cls.txt")),
   PaddleDevice.Gpu().And(PaddleDevice.TensorRt("rec.txt")))
{
   Enable180Classification = true,
   AllowRotateDetection = true,
};

In this case:

  • DetectionModel will use det.txt ๐Ÿ”
  • 180DegreeClassificationModel will use cls.txt ๐Ÿ”ƒ
  • RecognitionModel will use rec.txt ๐Ÿ”ก

NOTE ๐Ÿ“:

The first round of TensorRT running will generate a shape info **.txt file in this folder: %AppData%\Sdcb.PaddleInference\TensorRtCache. It will take around 100 seconds to finish TensorRT cache generation. After that, it should be faster than the general GPU. ๐Ÿš€

In this case, if something strange happens (for example, you mistakenly create the same shape-info.txt file for different models), you can delete this folder to generate TensorRT cache again: %AppData%\Sdcb.PaddleInference\TensorRtCache. ๐Ÿ—‘๏ธ

Thanks & Sponsors ๐Ÿ™

  • ๆทฑๅœณ-้’ฑๆ–‡ๆพ
  • iNeuOSๅทฅไธšไบ’่”็ฝ‘ๆ“ไฝœ็ณป็ปŸ๏ผšhttp://www.ineuos.net

Contact ๐Ÿ“ž

QQ group of C#/.NET computer vision technical communication (C#/.NET่ฎก็ฎ—ๆœบ่ง†่ง‰ๆŠ€ๆœฏไบคๆต็พค): 579060605 alternate text is missing from this package README image

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net45 is compatible.  net451 was computed.  net452 was computed.  net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (10)

Showing the top 5 NuGet packages that depend on Sdcb.PaddleInference:

Package Downloads
Sdcb.PaddleOCR

Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition)

Wlkr.SafePaddleOCR

ๅŸบไบŽPaddleSharp.PaddleOCR่ฎพ่ฎก็š„็บฟ็จ‹ๅฎ‰ๅ…จๆจกๆฟ๏ผŒ็คบไพ‹๏ผš SafePaddleOCR safePaddleOCR = new SafePaddleOCR(); string imgPath = @"DimTechStudio-Logo.png"; var res = safePaddleOCR.Run(imgPath); Console.WriteLine($"res: {res.data.Text}");

HHO.LV.OCR

Library packed for OCR

Sdcb.PaddleDetection

Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.

BotSharp.Plugin.PaddleSharp

Package Description

GitHub repositories (3)

Showing the top 3 popular GitHub repositories that depend on Sdcb.PaddleInference:

Repository Stars
babalae/better-genshin-impact
📦BetterGI · ๆ›ดๅฅฝ็š„ๅŽŸ็ฅž - ่‡ชๅŠจๆ‹พๅ– | ่‡ชๅŠจๅ‰งๆƒ… | ๅ…จ่‡ชๅŠจ้’“้ฑผ(AI) | ๅ…จ่‡ชๅŠจไธƒๅœฃๅฌๅ”ค | ่‡ชๅŠจไผๆœจ | ่‡ชๅŠจๅˆทๆœฌ | ่‡ชๅŠจ้‡‡้›† - UI Automation Testing Tools For Genshin Impact
SciSharp/BotSharp
AI Multi-Agent Framework in .NET
sdcb/PaddleSharp
.NET/C# binding for Baidu paddle inference library and PaddleOCR
Version Downloads Last updated
2.5.0.1 18,130 8/5/2023
2.5.0 804 8/4/2023
2.5.0-preview.3 216 7/10/2023
2.5.0-preview.1 136 7/6/2023
2.4.1.4 1,984 6/30/2023
2.4.1.3 3,926 6/17/2023
2.4.1.3-preview.3 90 6/16/2023
2.4.1.2 1,241 5/3/2023
2.4.1.1 820 3/31/2023
2.4.0 3,403 12/8/2022
2.4.0-rc.2 104 12/7/2022
2.3.2 3,106 9/10/2022
2.3.1 3,939 8/1/2022
2.3.0 1,539 6/27/2022
2.2.2 2,687 2/18/2022