FastDeploy  latest
Fast & Easy to Deploy!
types_internal.h
Go to the documentation of this file.
1 // Copyright (c) 2023 PaddlePaddle Authors. All Rights Reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #pragma once
16 
18 #include <memory>
19 
20 #include "fastdeploy/vision/classification/ppcls/model.h"
21 #include "fastdeploy/vision/common/result.h"
22 #include "fastdeploy/vision/detection/ppdet/model.h"
23 #include "fastdeploy/vision/detection/contrib/yolov5/yolov5.h"
24 #include "fastdeploy/vision/detection/contrib/yolov7/yolov7.h"
25 #include "fastdeploy/vision/detection/contrib/yolov8/yolov8.h"
26 #include "fastdeploy/vision/detection/contrib/yolor.h"
27 #include "fastdeploy/vision/detection/contrib/yolox.h"
28 #include "fastdeploy/vision/detection/contrib/yolov6.h"
29 #include "fastdeploy/vision/ocr/ppocr/classifier.h"
30 #include "fastdeploy/vision/ocr/ppocr/dbdetector.h"
31 #include "fastdeploy/vision/ocr/ppocr/recognizer.h"
32 #include "fastdeploy/vision/ocr/ppocr/ppocr_v2.h"
33 #include "fastdeploy/vision/ocr/ppocr/ppocr_v3.h"
34 #include "fastdeploy/vision/segmentation/ppseg/model.h"
35 
36 #define DEFINE_RESULT_WRAPPER_STRUCT(typename, varname) typedef struct FD_C_##typename##Wrapper { \
37  std::unique_ptr<fastdeploy::vision::typename> varname; \
38 } FD_C_##typename##Wrapper
39 
40 #define DEFINE_CLASSIFICATION_MODEL_WRAPPER_STRUCT(typename, varname) typedef struct FD_C_##typename##Wrapper { \
41  std::unique_ptr<fastdeploy::vision::classification::typename> \
42  varname; \
43 } FD_C_##typename##Wrapper
44 
45 #define DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(typename, varname) typedef struct FD_C_##typename##Wrapper { \
46  std::unique_ptr<fastdeploy::vision::detection::typename> varname; \
47 } FD_C_##typename##Wrapper
48 
49 #define DEFINE_OCR_MODEL_WRAPPER_STRUCT(typename, varname) typedef struct FD_C_##typename##Wrapper { \
50  std::unique_ptr<fastdeploy::vision::ocr::typename> varname; \
51 } FD_C_##typename##Wrapper
52 
53 #define DEFINE_PIPELINE_MODEL_WRAPPER_STRUCT(typename, varname) typedef struct FD_C_##typename##Wrapper { \
54  std::unique_ptr<fastdeploy::pipeline::typename> varname; \
55 } FD_C_##typename##Wrapper
56 
57 #define DEFINE_SEGMENTATION_MODEL_WRAPPER_STRUCT(typename, varname) typedef struct FD_C_##typename##Wrapper { \
58  std::unique_ptr<fastdeploy::vision::segmentation::typename> varname; \
59 } FD_C_##typename##Wrapper
60 
61 // ------------- belows are wrapper struct define --------------------- //
62 
63 // Results:
64 
65 // ClassifyResult
66 DEFINE_RESULT_WRAPPER_STRUCT(ClassifyResult, classify_result);
67 
68 // DetectionResult
69 DEFINE_RESULT_WRAPPER_STRUCT(DetectionResult, detection_result);
70 
71 
72 // OCRResult
74 
75 // Segmentation Result
76 DEFINE_RESULT_WRAPPER_STRUCT(SegmentationResult, segmentation_result);
77 
78 // Models:
79 
80 // Classification
81 
82 // PaddleClasModel
83 
84 DEFINE_CLASSIFICATION_MODEL_WRAPPER_STRUCT(PaddleClasModel, paddleclas_model);
85 
86 // Detection
87 
88 // PPYOLOE
89 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(PPYOLOE, ppyoloe_model);
90 
91 
92 // PicoDet
93 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(PicoDet, picodet_model);
94 
95 // PPYOLO
96 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(PPYOLO, ppyolo_model);
97 
98 // YOLOv3
99 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(YOLOv3, yolov3_model);
100 
101 // PaddleYOLOX
102 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(PaddleYOLOX, paddleyolox_model);
103 
104 // FasterRCNN
105 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(FasterRCNN, fasterrcnn_model);
106 
107 // MaskRCNN
108 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(MaskRCNN, maskrcnn_model);
109 
110 // SSD
112 
113 // PaddleYOLOv5
114 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(PaddleYOLOv5, paddleyolov5_model);
115 
116 // PaddleYOLOv6
117 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(PaddleYOLOv6, paddleyolov6_model);
118 
119 // PaddleYOLOv7
120 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(PaddleYOLOv7, paddleyolov7_model);
121 
122 // PaddleYOLOv8
123 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(PaddleYOLOv8, paddleyolov8_model);
124 
125 // RTMDet
126 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(RTMDet, rtmdet_model);
127 
128 // CascadeRCNN
129 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(CascadeRCNN, cascadercnn_model);
130 
131 // PSSDet
132 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(PSSDet, pssdet_model);
133 
134 // RetinaNet
135 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(RetinaNet, retinanet_model);
136 
137 
138 // FCOS
139 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(FCOS, fcos_model);
140 
141 // TTFNet
142 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(TTFNet, ttfnet_model);
143 
144 // TOOD
145 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(TOOD, tood_model);
146 
147 // GFL
149 
150 // YOLOv5
151 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(YOLOv5, yolov5_model);
152 
153 // YOLOv7
154 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(YOLOv7, yolov7_model);
155 
156 // YOLOv8
157 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(YOLOv8, yolov8_model);
158 
159 // YOLOv6
160 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(YOLOv6, yolov6_model);
161 
162 // YOLOR
163 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(YOLOR, yolor_model);
164 
165 // YOLOX
166 DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(YOLOX, yolox_model);
167 
168 // OCR models
169 
170 // Recognizer
171 DEFINE_OCR_MODEL_WRAPPER_STRUCT(Recognizer, recognizer_model);
172 
173 // DBDetector
174 DEFINE_OCR_MODEL_WRAPPER_STRUCT(DBDetector, dbdetector_model);
175 
176 // Classifier
177 DEFINE_OCR_MODEL_WRAPPER_STRUCT(Classifier, classifier_model);
178 
179 // PPOCRv2
180 DEFINE_PIPELINE_MODEL_WRAPPER_STRUCT(PPOCRv2, ppocrv2_model);
181 
182 // PPOCRv3
183 DEFINE_PIPELINE_MODEL_WRAPPER_STRUCT(PPOCRv3, ppocrv3_model);
184 
185 // Segmentation models
186 
187 // PaddleSegModel
188 DEFINE_SEGMENTATION_MODEL_WRAPPER_STRUCT(PaddleSegModel, segmentation_model);
189 
190 // ------------- belows are function declaration for get ptr from wrapper --------------------- //
191 
192 #define DECLARE_RESULT_FUNC_FOR_GET_PTR_FROM_WRAPPER(typename, varname) std::unique_ptr<fastdeploy::vision::typename>& \
193 FD_C_CheckAndConvert##typename##Wrapper( \
194  FD_C_##typename##Wrapper* varname)
195 
196 #define DECLARE_CLASSIFICATION_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(typename, varname) std::unique_ptr<fastdeploy::vision::classification::typename>& \
197 FD_C_CheckAndConvert##typename##Wrapper( \
198  FD_C_##typename##Wrapper* varname)
199 
200 #define DECLARE_DETECTION_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(typename, varname) std::unique_ptr<fastdeploy::vision::detection::typename>& \
201 FD_C_CheckAndConvert##typename##Wrapper( \
202  FD_C_##typename##Wrapper* varname)
203 
204 
205 #define DECLARE_OCR_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(typename, varname) std::unique_ptr<fastdeploy::vision::ocr::typename>& \
206 FD_C_CheckAndConvert##typename##Wrapper( \
207  FD_C_##typename##Wrapper* varname)
208 
209 #define DECLARE_PIPELINE_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(typename, varname) std::unique_ptr<fastdeploy::pipeline::typename>& \
210 FD_C_CheckAndConvert##typename##Wrapper( \
211  FD_C_##typename##Wrapper* varname)
212 
213 #define DECLARE_SEGMENTATION_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(typename, varname) std::unique_ptr<fastdeploy::vision::segmentation::typename>& \
214 FD_C_CheckAndConvert##typename##Wrapper( \
215  FD_C_##typename##Wrapper* varname)
216 
217 
218 namespace fastdeploy {
219 
220 // results:
221 
222 // ClassifyResult
224  fd_classify_result_wrapper);
225 // DetectionResult
227  fd_detection_result_wrapper);
228 
229 
230 // OCRResult
232  fd_ocr_result_wrapper);
233 
234 // SegementationResult
236  fd_segmentation_result_wrapper);
237 
238 
239 // Models:
240 
241 // Classification
242 
243 // PaddleClasModel
244 
246  PaddleClasModel, fd_paddleclas_model_wrapper);
247 
248 
249 // detection models:
250 
251 // PPYOLOE
252 
254  fd_ppyoloe_wrapper);
255 
256 // PicoDet
257 
259  fd_picodet_wrapper);
260 
261 // PPYOLO
262 
264  fd_ppyolo_wrapper);
265 
266 // YOLOv3
267 
269  fd_yolov3_wrapper);
270 
271 // PaddleYOLOX
272 
274  fd_paddleyolox_wrapper);
275 
276 // FasterRCNN
277 
279  fd_fasterrcnn_wrapper);
280 
281 // MaskRCNN
282 
284  fd_maskrcnn_wrapper);
285 
286 // SSD
287 
289  fd_ssd_wrapper);
290 
291 // PaddleYOLOv5
292 
294  fd_paddleyolov5_wrapper);
295 
296 // PaddleYOLOv6
297 
299  fd_paddleyolov6_wrapper);
300 
301 // PaddleYOLOv7
302 
304  fd_paddleyolov7_wrapper);
305 
306 // PaddleYOLOv8
307 
309  fd_paddleyolov8_wrapper);
310 
311 // RTMDet
312 
314  fd_rtmdet_wrapper);
315 
316 // CascadeRCNN
317 
319  fd_cascadercnn_wrapper);
320 
321 // PSSDet
322 
324  fd_pssdet_wrapper);
325 
326 // RetinaNet
327 
329  fd_retinanet_wrapper);
330 
331 // FCOS
332 
334  fd_fcos_wrapper);
335 
336 // TTFNet
337 
339  fd_ttfnet_wrapper);
340 
341 // TOOD
342 
344  fd_tood_wrapper);
345 
346 // GFL
347 
349  fd_gfl_wrapper);
350 
351 // YOLOv5
353 
354 // YOLOv7
356  fd_yolov7_wrapper);
357 
358 // YOLOv8
360  fd_yolov8_wrapper);
361 
362 // YOLOv6
364  fd_yolov6_wrapper);
365 
366 // YOLOR
368  fd_yolor_wrapper);
369 
370 // YOLOX
372  fd_yolox_wrapper);
373 
374 
375 // OCR models
376 
377 // Recognizer
378 DECLARE_OCR_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(Recognizer, fd_recognizer_wrapper);
379 
380 // DBDetector
381 DECLARE_OCR_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(DBDetector, fd_dbdetector_wrapper);
382 
383 // Classifier
384 DECLARE_OCR_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(Classifier, fd_classifier_wrapper);
385 
386 // PPOCRv2
387 DECLARE_PIPELINE_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(PPOCRv2, fd_ppocrv2_wrapper);
388 
389 // PPOCRv3
390 DECLARE_PIPELINE_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(PPOCRv3, fd_ppocrv3_wrapper);
391 
392 // Segmentation models
393 
394 // PaddleSegModel
396  PaddleSegModel, fd_paddleseg_model_wrapper);
397 
398 } // namespace fastdeploy
399 
400 
401 #define DECL_AND_IMPLEMENT_RESULT_FUNC_FOR_GET_PTR_FROM_WRAPPER(typename, var_wrapper_name, var_ptr_name) std::unique_ptr<fastdeploy::vision::typename>& \
402 FD_C_CheckAndConvert##typename##Wrapper( \
403  FD_C_##typename##Wrapper* var_wrapper_name) { \
404  FDASSERT(var_wrapper_name != nullptr, \
405  "The pointer of " #var_wrapper_name " shouldn't be nullptr."); \
406  return var_wrapper_name->var_ptr_name; \
407 }
408 
409 #define DECL_AND_IMPLEMENT_CLASSIFICATION_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(typename, var_wrapper_name, var_ptr_name) std::unique_ptr<fastdeploy::vision::classification::typename>& \
410 FD_C_CheckAndConvert##typename##Wrapper( \
411  FD_C_##typename##Wrapper* var_wrapper_name) { \
412  FDASSERT(var_wrapper_name != nullptr, \
413  "The pointer of " #var_wrapper_name " shouldn't be nullptr."); \
414  return var_wrapper_name->var_ptr_name; \
415 }
416 
417 #define DECL_AND_IMPLEMENT_DETECTION_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(typename, var_wrapper_name, var_ptr_name) std::unique_ptr<fastdeploy::vision::detection::typename>& \
418 FD_C_CheckAndConvert##typename##Wrapper( \
419  FD_C_##typename##Wrapper* var_wrapper_name) { \
420  FDASSERT(var_wrapper_name != nullptr, \
421  "The pointer of " #var_wrapper_name " shouldn't be nullptr."); \
422  return var_wrapper_name->var_ptr_name; \
423 }
424 
425 
426 #define DECL_AND_IMPLEMENT_OCR_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(typename, var_wrapper_name, var_ptr_name) std::unique_ptr<fastdeploy::vision::ocr::typename>& \
427 FD_C_CheckAndConvert##typename##Wrapper( \
428  FD_C_##typename##Wrapper* var_wrapper_name) { \
429  FDASSERT(var_wrapper_name != nullptr, \
430  "The pointer of " #var_wrapper_name " shouldn't be nullptr."); \
431  return var_wrapper_name->var_ptr_name; \
432 }
433 
434 #define DECL_AND_IMPLEMENT_PIPELINE_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(typename, var_wrapper_name, var_ptr_name) std::unique_ptr<fastdeploy::pipeline::typename>& \
435 FD_C_CheckAndConvert##typename##Wrapper( \
436  FD_C_##typename##Wrapper* var_wrapper_name) { \
437  FDASSERT(var_wrapper_name != nullptr, \
438  "The pointer of " #var_wrapper_name " shouldn't be nullptr."); \
439  return var_wrapper_name->var_ptr_name; \
440 }
441 
442 #define DECL_AND_IMPLEMENT_SEGMENTATION_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(typename, var_wrapper_name, var_ptr_name) std::unique_ptr<fastdeploy::vision::segmentation::typename>& \
443 FD_C_CheckAndConvert##typename##Wrapper( \
444  FD_C_##typename##Wrapper* var_wrapper_name) { \
445  FDASSERT(var_wrapper_name != nullptr, \
446  "The pointer of " #var_wrapper_name " shouldn't be nullptr."); \
447  return var_wrapper_name->var_ptr_name; \
448 }
#define DEFINE_CLASSIFICATION_MODEL_WRAPPER_STRUCT(typename, varname)
Definition: types_internal.h:40
#define DEFINE_RESULT_WRAPPER_STRUCT(typename, varname)
Definition: types_internal.h:36
DECLARE_SEGMENTATION_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(PaddleSegModel, fd_paddleseg_model_wrapper)
DECLARE_RESULT_FUNC_FOR_GET_PTR_FROM_WRAPPER(ClassifyResult, fd_classify_result_wrapper)
DECLARE_DETECTION_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(PPYOLOE, fd_ppyoloe_wrapper)
#define DEFINE_OCR_MODEL_WRAPPER_STRUCT(typename, varname)
Definition: types_internal.h:49
#define DEFINE_DETECTION_MODEL_WRAPPER_STRUCT(typename, varname)
Definition: types_internal.h:45
#define DEFINE_SEGMENTATION_MODEL_WRAPPER_STRUCT(typename, varname)
Definition: types_internal.h:57
auto & ocr_result
Definition: model.cc:351
DECLARE_CLASSIFICATION_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(PaddleClasModel, fd_paddleclas_model_wrapper)
#define DEFINE_PIPELINE_MODEL_WRAPPER_STRUCT(typename, varname)
Definition: types_internal.h:53
DECLARE_PIPELINE_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(PPOCRv2, fd_ppocrv2_wrapper)
Definition: types_internal.cc:17
DECLARE_OCR_MODEL_FUNC_FOR_GET_PTR_FROM_WRAPPER(Recognizer, fd_recognizer_wrapper)