Skip to content

Commit df3e37e

Browse files
committed
Refactor PaddleOCR online model loading for ONNX V6
- Merge V6 ONNX detection/classification models into existing online model types - Add unified online recognition model abstraction with internal V6 ONNX implementation - Remove obsolete OnlineOnnx* model types and IOnlineModels interfaces - Default ONNX classification shape for PP-LCNet textline orientation models - Update V6 full model composition and tests to use consolidated APIs
1 parent 799efaf commit df3e37e

13 files changed

Lines changed: 139 additions & 238 deletions

projects/PaddleOCR/Sdcb.OpenVINO.PaddleOCR.Models.Online/IOnlineModels.cs

Lines changed: 0 additions & 49 deletions
This file was deleted.

projects/PaddleOCR/Sdcb.OpenVINO.PaddleOCR.Models.Online/LocalDictOnlineRecognizationModel.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,14 @@ namespace Sdcb.OpenVINO.PaddleOCR.Models.Online;
1313
/// <remarks>
1414
/// Used for downloading and extracting a model from a url, and creating a new StreamDictFileRecognizationModel with the downloaded contents.
1515
/// </remarks>
16-
public record LocalDictOnlineRecognizationModel(string Name, string DictName, Uri Uri, ModelVersion Version) : IOnlineRecognizationModel
16+
public record LocalDictOnlineRecognizationModel(string Name, string DictName, Uri Uri, ModelVersion Version) : OnlineRecognizationModel(Name, Uri, Version)
1717
{
18-
/// <summary>
19-
/// Gets or sets the root directory for the downloaded models.
20-
/// </summary>
21-
public string RootDirectory => Path.Combine(Settings.GlobalModelDirectory, Name);
22-
2318
/// <summary>
2419
/// Downloads and extracts a RecognizationModel asynchronously.
2520
/// </summary>
2621
/// <param name="cancellationToken">Cancellation token.</param>
2722
/// <returns>The downloaded and extracted RecognizationModel.</returns>
28-
public async Task<RecognizationModel> DownloadAsync(CancellationToken cancellationToken = default)
23+
public override async Task<RecognizationModel> DownloadAsync(CancellationToken cancellationToken = default)
2924
{
3025
await Utils.DownloadAndExtractAsync(Name, Uri, RootDirectory, cancellationToken);
3126
return new StreamDictFileRecognizationModel(RootDirectory, SharedUtils.LoadDicts(DictName), Version);

projects/PaddleOCR/Sdcb.OpenVINO.PaddleOCR.Models.Online/OnlineClassificationModel.cs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace Sdcb.OpenVINO.PaddleOCR.Models.Online;
1010
/// <summary>
1111
/// Represents an online classification model that can be downloaded and used for text angle classification.
1212
/// </summary>
13-
public record OnlineClassificationModel(string Name, Uri Uri, ModelVersion Version) : IOnlineClassificationModel
13+
public record OnlineClassificationModel(string Name, Uri Uri, ModelVersion Version)
1414
{
1515
/// <summary>
1616
/// Gets the root directory of the model.
@@ -21,17 +21,28 @@ public record OnlineClassificationModel(string Name, Uri Uri, ModelVersion Versi
2121
/// Downloads and extracts the model asynchronously.
2222
/// </summary>
2323
/// <param name="cancellationToken">The cancellation token.</param>
24-
/// <returns>A <see cref="FileClassificationModel"/> that represent the downloaded model.</returns>
25-
public async Task<FileClassificationModel> DownloadAsync(CancellationToken cancellationToken = default)
24+
/// <returns>A <see cref="ClassificationModel"/> that represent the downloaded model.</returns>
25+
public async Task<ClassificationModel> DownloadAsync(CancellationToken cancellationToken = default)
2626
{
27+
if (Version == ModelVersion.V6)
28+
{
29+
await Utils.DownloadAndExtractAsync(Name, Uri, RootDirectory, cancellationToken, "inference.onnx", "inference.yml");
30+
return new FileOnnxClassificationModel(RootDirectory, Version);
31+
}
32+
2733
await Utils.DownloadAndExtractAsync(Name, Uri, RootDirectory, cancellationToken);
2834
return new FileClassificationModel(RootDirectory, Version);
2935
}
3036

31-
async Task<ClassificationModel> IOnlineClassificationModel.DownloadAsync(CancellationToken cancellationToken)
32-
{
33-
return await DownloadAsync(cancellationToken);
34-
}
37+
/// <summary>
38+
/// PP-LCNet x0.25 ONNX text line orientation model.
39+
/// </summary>
40+
public static OnlineClassificationModel TextLineOrientationX025 => new("PP-LCNet_x0_25_textline_ori_onnx_infer", new Uri("https://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_model/paddle3.0.0/PP-LCNet_x0_25_textline_ori_onnx_infer.tar"), ModelVersion.V6);
41+
42+
/// <summary>
43+
/// PP-LCNet x1.0 ONNX text line orientation model.
44+
/// </summary>
45+
public static OnlineClassificationModel TextLineOrientationX10 => new("PP-LCNet_x1_0_textline_ori_onnx_infer", new Uri("https://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_model/paddle3.0.0/PP-LCNet_x1_0_textline_ori_onnx_infer.tar"), ModelVersion.V6);
3546

3647
/// <summary>
3748
/// Gets an online classification model for slim quantized text angle classification (Size: 2.1M).
@@ -48,6 +59,8 @@ async Task<ClassificationModel> IOnlineClassificationModel.DownloadAsync(Cancell
4859
/// </summary>
4960
public static OnlineClassificationModel[] All => new[]
5061
{
62+
TextLineOrientationX025,
63+
TextLineOrientationX10,
5164
ChineseMobileSlimV2,
5265
ChineseMobileV2,
5366
};

projects/PaddleOCR/Sdcb.OpenVINO.PaddleOCR.Models.Online/OnlineDetectionModel.cs

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace Sdcb.OpenVINO.PaddleOCR.Models.Online;
1010
/// <summary>
1111
/// Represents a model for online object detection.
1212
/// </summary>
13-
public record OnlineDetectionModel(string Name, Uri Uri, ModelVersion Version) : IOnlineDetectionModel
13+
public record OnlineDetectionModel(string Name, Uri Uri, ModelVersion Version)
1414
{
1515
/// <summary>
1616
/// Gets the root directory of the model.
@@ -21,18 +21,33 @@ public record OnlineDetectionModel(string Name, Uri Uri, ModelVersion Version) :
2121
/// Downloads and extracts the model files to the root directory asynchronously.
2222
/// </summary>
2323
/// <param name="cancellationToken">Cancellation token.</param>
24-
/// <returns>A <see cref="FileDetectionModel"/> representing the downloaded and extracted file model.</returns>
25-
public async Task<FileDetectionModel> DownloadAsync(CancellationToken cancellationToken = default)
24+
/// <returns>A <see cref="DetectionModel"/> representing the downloaded and extracted file model.</returns>
25+
public async Task<DetectionModel> DownloadAsync(CancellationToken cancellationToken = default)
2626
{
27-
await Utils.DownloadAndExtractAsync(Name, Uri, RootDirectory, cancellationToken);
27+
if (Version == ModelVersion.V6)
28+
{
29+
await Utils.DownloadAndExtractAsync(Name, Uri, RootDirectory, cancellationToken, "inference.onnx");
30+
return new FileOnnxDetectionModel(RootDirectory, Version);
31+
}
2832

33+
await Utils.DownloadAndExtractAsync(Name, Uri, RootDirectory, cancellationToken);
2934
return new FileDetectionModel(RootDirectory, Version);
3035
}
3136

32-
async Task<DetectionModel> IOnlineDetectionModel.DownloadAsync(CancellationToken cancellationToken)
33-
{
34-
return await DownloadAsync(cancellationToken);
35-
}
37+
/// <summary>
38+
/// PP-OCRv6 medium ONNX detection model.
39+
/// </summary>
40+
public static OnlineDetectionModel ChineseV6Medium => new("PP-OCRv6_medium_det_onnx_infer", new Uri("https://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_model/paddle3.0.0/PP-OCRv6_medium_det_onnx_infer.tar"), ModelVersion.V6);
41+
42+
/// <summary>
43+
/// PP-OCRv6 small ONNX detection model.
44+
/// </summary>
45+
public static OnlineDetectionModel ChineseV6Small => new("PP-OCRv6_small_det_onnx_infer", new Uri("https://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_model/paddle3.0.0/PP-OCRv6_small_det_onnx_infer.tar"), ModelVersion.V6);
46+
47+
/// <summary>
48+
/// PP-OCRv6 tiny ONNX detection model.
49+
/// </summary>
50+
public static OnlineDetectionModel ChineseV6Tiny => new("PP-OCRv6_tiny_det_onnx_infer", new Uri("https://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_model/paddle3.0.0/PP-OCRv6_tiny_det_onnx_infer.tar"), ModelVersion.V6);
3651

3752
/// <summary>
3853
/// [New] v4 model, supporting Chinese, English, multilingual text detection
@@ -117,6 +132,9 @@ async Task<DetectionModel> IOnlineDetectionModel.DownloadAsync(CancellationToken
117132
/// </summary>
118133
public static OnlineDetectionModel[] All => new[]
119134
{
135+
ChineseV6Medium,
136+
ChineseV6Small,
137+
ChineseV6Tiny,
120138
ChineseV4,
121139
ChineseServerV4,
122140
ChineseV3Slim,

projects/PaddleOCR/Sdcb.OpenVINO.PaddleOCR.Models.Online/OnlineDocumentOrientationClassificationModel.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace Sdcb.OpenVINO.PaddleOCR.Models.Online;
1111
/// <summary>
1212
/// Represents an online ONNX document orientation classification model.
1313
/// </summary>
14-
public record OnlineDocumentOrientationClassificationModel(string Name, Uri Uri) : IOnlineDocumentOrientationClassificationModel
14+
public record OnlineDocumentOrientationClassificationModel(string Name, Uri Uri)
1515
{
1616
/// <summary>
1717
/// Gets the root directory of the model.
@@ -27,11 +27,6 @@ public async Task<FileDocumentOrientationClassificationModel> DownloadAsync(Canc
2727
return new FileDocumentOrientationClassificationModel(RootDirectory);
2828
}
2929

30-
async Task<DocumentOrientationClassificationModel> IOnlineDocumentOrientationClassificationModel.DownloadAsync(CancellationToken cancellationToken)
31-
{
32-
return await DownloadAsync(cancellationToken);
33-
}
34-
3530
/// <summary>
3631
/// PP-LCNet x1.0 document orientation model.
3732
/// </summary>

projects/PaddleOCR/Sdcb.OpenVINO.PaddleOCR.Models.Online/OnlineFullModels.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ namespace Sdcb.OpenVINO.PaddleOCR.Models.Online;
1111
/// Contains static instances for commonly used models and a method for downloading a full OCR model.
1212
/// </remarks>
1313
public record class OnlineFullModels(
14-
IOnlineDetectionModel DetModel,
15-
IOnlineClassificationModel? ClsModel,
16-
IOnlineRecognizationModel RecModel,
17-
IOnlineDocumentOrientationClassificationModel? DocOrientationModel = null)
14+
OnlineDetectionModel DetModel,
15+
OnlineClassificationModel? ClsModel,
16+
OnlineRecognizationModel RecModel,
17+
OnlineDocumentOrientationClassificationModel? DocOrientationModel = null)
1818
{
1919
/// <summary>
2020
/// Downloads a full OCR model asynchronously.
@@ -34,27 +34,27 @@ public async Task<FullOcrModel> DownloadAsync(CancellationToken cancellationToke
3434
/// The Chinese PP-OCRv6 medium ONNX version.
3535
/// </summary>
3636
public readonly static OnlineFullModels ChineseV6Medium = new(
37-
OnlineOnnxDetectionModel.ChineseV6Medium,
38-
OnlineOnnxClassificationModel.TextLineOrientationX10,
39-
OnlineOnnxRecognizationModel.ChineseV6Medium,
37+
OnlineDetectionModel.ChineseV6Medium,
38+
OnlineClassificationModel.TextLineOrientationX10,
39+
OnlineRecognizationModel.ChineseV6Medium,
4040
OnlineDocumentOrientationClassificationModel.PPDocOrientationX10);
4141

4242
/// <summary>
4343
/// The Chinese PP-OCRv6 small ONNX version.
4444
/// </summary>
4545
public readonly static OnlineFullModels ChineseV6Small = new(
46-
OnlineOnnxDetectionModel.ChineseV6Small,
47-
OnlineOnnxClassificationModel.TextLineOrientationX025,
48-
OnlineOnnxRecognizationModel.ChineseV6Small,
46+
OnlineDetectionModel.ChineseV6Small,
47+
OnlineClassificationModel.TextLineOrientationX025,
48+
OnlineRecognizationModel.ChineseV6Small,
4949
OnlineDocumentOrientationClassificationModel.PPDocOrientationX10);
5050

5151
/// <summary>
5252
/// The Chinese PP-OCRv6 tiny ONNX version.
5353
/// </summary>
5454
public readonly static OnlineFullModels ChineseV6Tiny = new(
55-
OnlineOnnxDetectionModel.ChineseV6Tiny,
56-
OnlineOnnxClassificationModel.TextLineOrientationX025,
57-
OnlineOnnxRecognizationModel.ChineseV6Tiny,
55+
OnlineDetectionModel.ChineseV6Tiny,
56+
OnlineClassificationModel.TextLineOrientationX025,
57+
OnlineRecognizationModel.ChineseV6Tiny,
5858
OnlineDocumentOrientationClassificationModel.PPDocOrientationX10);
5959

6060
/// <summary>

projects/PaddleOCR/Sdcb.OpenVINO.PaddleOCR.Models.Online/OnlineOnnxClassificationModel.cs

Lines changed: 0 additions & 44 deletions
This file was deleted.

projects/PaddleOCR/Sdcb.OpenVINO.PaddleOCR.Models.Online/OnlineOnnxDetectionModel.cs

Lines changed: 0 additions & 49 deletions
This file was deleted.

0 commit comments

Comments
 (0)