mirror of
https://github.com/PaddlePaddle/FastDeploy.git
synced 2025-10-07 01:22:59 +08:00
[Model] Refactor PaddleClas module (#505)
* Refactor the PaddleClas module * fix bug * remove debug code * clean unused code * support pybind * Update fd_tensor.h * Update fd_tensor.cc * temporary revert python api * fix ci error * fix code style problem
This commit is contained in:
@@ -15,16 +15,62 @@
|
||||
|
||||
namespace fastdeploy {
|
||||
void BindPaddleClas(pybind11::module& m) {
|
||||
pybind11::class_<vision::classification::PaddleClasPreprocessor>(
|
||||
m, "PaddleClasPreprocessor")
|
||||
.def(pybind11::init<std::string>())
|
||||
.def("run", [](vision::classification::PaddleClasPreprocessor& self, std::vector<pybind11::array>& im_list) {
|
||||
std::vector<vision::FDMat> images;
|
||||
for (size_t i = 0; i < im_list.size(); ++i) {
|
||||
images.push_back(vision::WrapMat(PyArrayToCvMat(im_list[i])));
|
||||
}
|
||||
std::vector<FDTensor> outputs;
|
||||
if (!self.Run(&images, &outputs)) {
|
||||
pybind11::eval("raise Exception('Failed to preprocess the input data in PaddleClasPreprocessor.')");
|
||||
}
|
||||
return outputs;
|
||||
});
|
||||
|
||||
pybind11::class_<vision::classification::PaddleClasPostprocessor>(
|
||||
m, "PaddleClasPostprocessor")
|
||||
.def(pybind11::init<int>())
|
||||
.def("run", [](vision::classification::PaddleClasPostprocessor& self, std::vector<FDTensor>& inputs) {
|
||||
std::vector<vision::ClassifyResult> results;
|
||||
if (!self.Run(inputs, &results)) {
|
||||
pybind11::eval("raise Exception('Failed to postprocess the runtime result in PaddleClasPostprocessor.')");
|
||||
}
|
||||
return results;
|
||||
})
|
||||
.def("run", [](vision::classification::PaddleClasPostprocessor& self, std::vector<pybind11::array>& input_array) {
|
||||
std::vector<vision::ClassifyResult> results;
|
||||
std::vector<FDTensor> inputs;
|
||||
PyArrayToTensorList(input_array, &inputs, /*share_buffer=*/true);
|
||||
if (!self.Run(inputs, &results)) {
|
||||
pybind11::eval("raise Exception('Failed to postprocess the runtime result in PaddleClasPostprocessor.')");
|
||||
}
|
||||
return results;
|
||||
})
|
||||
.def_property("topk", &vision::classification::PaddleClasPostprocessor::GetTopk, &vision::classification::PaddleClasPostprocessor::SetTopk);
|
||||
|
||||
pybind11::class_<vision::classification::PaddleClasModel, FastDeployModel>(
|
||||
m, "PaddleClasModel")
|
||||
.def(pybind11::init<std::string, std::string, std::string, RuntimeOption,
|
||||
ModelFormat>())
|
||||
.def("predict", [](vision::classification::PaddleClasModel& self,
|
||||
pybind11::array& data, int topk = 1) {
|
||||
auto mat = PyArrayToCvMat(data);
|
||||
vision::ClassifyResult res;
|
||||
self.Predict(&mat, &res, topk);
|
||||
return res;
|
||||
});
|
||||
.def("predict", [](vision::classification::PaddleClasModel& self, pybind11::array& data) {
|
||||
cv::Mat im = PyArrayToCvMat(data);
|
||||
vision::ClassifyResult result;
|
||||
self.Predict(im, &result);
|
||||
return result;
|
||||
})
|
||||
.def("batch_predict", [](vision::classification::PaddleClasModel& self, std::vector<pybind11::array>& data) {
|
||||
std::vector<cv::Mat> images;
|
||||
for (size_t i = 0; i < data.size(); ++i) {
|
||||
images.push_back(PyArrayToCvMat(data[i]));
|
||||
}
|
||||
std::vector<vision::ClassifyResult> results;
|
||||
self.BatchPredict(images, &results);
|
||||
return results;
|
||||
})
|
||||
.def_property_readonly("preprocessor", &vision::classification::PaddleClasModel::GetPreprocessor)
|
||||
.def_property_readonly("postprocessor", &vision::classification::PaddleClasModel::GetPostprocessor);
|
||||
}
|
||||
} // namespace fastdeploy
|
||||
|
Reference in New Issue
Block a user