mirror of
https://github.com/open-mmlab/mmdeploy.git
synced 2025-01-14 08:09:43 +08:00
fix build error after cherry-picks
This commit is contained in:
parent
57f7712267
commit
5b96f20a9b
@ -2,24 +2,21 @@
|
|||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
#include "mmdeploy/archive/json_archive.h"
|
|
||||||
#include "mmdeploy/archive/value_archive.h"
|
#include "mmdeploy/archive/value_archive.h"
|
||||||
#include "mmdeploy/core/registry.h"
|
#include "mmdeploy/core/registry.h"
|
||||||
#include "mmdeploy/core/tensor.h"
|
#include "mmdeploy/core/tensor.h"
|
||||||
#include "mmdeploy/core/utils/device_utils.h"
|
|
||||||
#include "mmdeploy/core/utils/formatter.h"
|
#include "mmdeploy/core/utils/formatter.h"
|
||||||
#include "mmdeploy/preprocess/transform/resize.h"
|
#include "mmdeploy/operation/managed.h"
|
||||||
|
#include "mmdeploy/operation/vision.h"
|
||||||
#include "mmdeploy/preprocess/transform/transform.h"
|
#include "mmdeploy/preprocess/transform/transform.h"
|
||||||
#include "opencv2/imgproc.hpp"
|
|
||||||
#include "opencv_utils.h"
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
namespace mmdeploy {
|
namespace mmdeploy::mmocr {
|
||||||
|
|
||||||
class RescaleToHeightImpl : public Module {
|
class RescaleToHeight : public transform::Transform {
|
||||||
public:
|
public:
|
||||||
explicit RescaleToHeightImpl(const Value& args) noexcept {
|
explicit RescaleToHeight(const Value& args) noexcept {
|
||||||
height_ = args.value("height", height_);
|
height_ = args.value("height", height_);
|
||||||
min_width_ = args.contains("min_width") && args["min_width"].is_number_integer()
|
min_width_ = args.contains("min_width") && args["min_width"].is_number_integer()
|
||||||
? args["min_width"].get<int>()
|
? args["min_width"].get<int>()
|
||||||
@ -30,34 +27,28 @@ class RescaleToHeightImpl : public Module {
|
|||||||
width_divisor_ = args.contains("width_divisor") && args["width_divisor"].is_number_integer()
|
width_divisor_ = args.contains("width_divisor") && args["width_divisor"].is_number_integer()
|
||||||
? args["width_divisor"].get<int>()
|
? args["width_divisor"].get<int>()
|
||||||
: width_divisor_;
|
: width_divisor_;
|
||||||
resize_type_ = args.contains("resize_type") && args["resize_type"].is_string()
|
resize_ = operation::Managed<operation::Resize>::Create("bilinear");
|
||||||
? args["resize_type"].get<string>()
|
|
||||||
: resize_type_;
|
|
||||||
stream_ = args["context"]["stream"].get<Stream>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
~RescaleToHeightImpl() override = default;
|
~RescaleToHeight() override = default;
|
||||||
|
|
||||||
Result<Value> Process(const Value& input) override {
|
Result<void> Apply(Value& data) override {
|
||||||
MMDEPLOY_DEBUG("input: {}", input);
|
MMDEPLOY_DEBUG("input: {}", data);
|
||||||
auto dst_height = height_;
|
auto dst_height = height_;
|
||||||
auto dst_min_width = min_width_;
|
auto dst_min_width = min_width_;
|
||||||
auto dst_max_width = max_width_;
|
auto dst_max_width = max_width_;
|
||||||
|
|
||||||
std::vector<int> img_shape; // NHWC
|
std::vector<int> img_shape; // NHWC
|
||||||
from_value(input["img_shape"], img_shape);
|
from_value(data["img_shape"], img_shape);
|
||||||
|
|
||||||
std::vector<int> ori_shape; // NHWC
|
std::vector<int> ori_shape; // NHWC
|
||||||
from_value(input["ori_shape"], ori_shape);
|
from_value(data["ori_shape"], ori_shape);
|
||||||
|
|
||||||
auto ori_height = ori_shape[1];
|
auto ori_height = ori_shape[1];
|
||||||
auto ori_width = ori_shape[2];
|
auto ori_width = ori_shape[2];
|
||||||
auto valid_ratio = 1.f;
|
auto valid_ratio = 1.f;
|
||||||
|
|
||||||
Device host{"cpu"};
|
auto img = data["img"].get<Tensor>();
|
||||||
auto _img = input["img"].get<Tensor>();
|
|
||||||
OUTCOME_TRY(auto img, MakeAvailableOnDevice(_img, host, stream_));
|
|
||||||
stream_.Wait().value();
|
|
||||||
Tensor img_resize;
|
Tensor img_resize;
|
||||||
auto new_width = static_cast<int>(std::ceil(1.f * dst_height / ori_height * ori_width));
|
auto new_width = static_cast<int>(std::ceil(1.f * dst_height / ori_height * ori_width));
|
||||||
auto width_divisor = width_divisor_;
|
auto width_divisor = width_divisor_;
|
||||||
@ -65,78 +56,30 @@ class RescaleToHeightImpl : public Module {
|
|||||||
new_width = std::max(dst_min_width, new_width);
|
new_width = std::max(dst_min_width, new_width);
|
||||||
}
|
}
|
||||||
if (dst_max_width > 0) {
|
if (dst_max_width > 0) {
|
||||||
auto resize_width = std::min(dst_max_width, new_width);
|
new_width = std::min(dst_max_width, new_width);
|
||||||
}
|
}
|
||||||
if (new_width % width_divisor != 0) {
|
if (new_width % width_divisor != 0) {
|
||||||
new_width = std::round(1.f * new_width / width_divisor) * width_divisor;
|
new_width = std::round(1.f * new_width / width_divisor) * width_divisor;
|
||||||
}
|
}
|
||||||
img_resize = ResizeImage(img, dst_height, new_width);
|
OUTCOME_TRY(resize_.Apply(img, img_resize, dst_height, new_width));
|
||||||
Value output = input;
|
data["img"] = img_resize;
|
||||||
output["img"] = img_resize;
|
data["resize_shape"] = to_value(img_resize.desc().shape);
|
||||||
output["resize_shape"] = to_value(img_resize.desc().shape);
|
data["pad_shape"] = data["resize_shape"];
|
||||||
output["pad_shape"] = output["resize_shape"];
|
data["ori_shape"] = data["ori_shape"];
|
||||||
output["ori_shape"] = input["ori_shape"];
|
data["scale"] = to_value(std::vector<int>({new_width, dst_height}));
|
||||||
output["scale"] = to_value(std::vector<int>({new_width, dst_height}));
|
data["valid_ratio"] = valid_ratio;
|
||||||
output["valid_ratio"] = valid_ratio;
|
MMDEPLOY_DEBUG("output: {}", data);
|
||||||
MMDEPLOY_DEBUG("output: {}", to_json(output).dump(2));
|
return success();
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
Tensor ResizeImage(const Tensor& img, int dst_h, int dst_w) {
|
|
||||||
TensorDesc desc = img.desc();
|
|
||||||
assert(desc.shape.size() == 4);
|
|
||||||
assert(desc.data_type == DataType::kINT8);
|
|
||||||
int h = desc.shape[1];
|
|
||||||
int w = desc.shape[2];
|
|
||||||
int c = desc.shape[3];
|
|
||||||
assert(c == 3 || c == 1);
|
|
||||||
cv::Mat src_mat, dst_mat;
|
|
||||||
if (3 == c) { // rgb
|
|
||||||
src_mat = cv::Mat(h, w, CV_8UC3, const_cast<uint8_t*>(img.data<uint8_t>()));
|
|
||||||
} else { // gray
|
|
||||||
src_mat = cv::Mat(h, w, CV_8UC1, const_cast<uint8_t*>(img.data<uint8_t>()));
|
|
||||||
}
|
|
||||||
cv::Size size{dst_w, dst_h};
|
|
||||||
cv::resize(src_mat, dst_mat, size, cv::INTER_LINEAR);
|
|
||||||
return Tensor({desc.device, desc.data_type, {1, dst_h, dst_w, c}, ""},
|
|
||||||
{dst_mat.data, [mat = dst_mat](void* ptr) {}});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
operation::Managed<operation::Resize> resize_;
|
||||||
int height_{-1};
|
int height_{-1};
|
||||||
int min_width_{-1};
|
int min_width_{-1};
|
||||||
int max_width_{-1};
|
int max_width_{-1};
|
||||||
bool keep_aspect_ratio_{true};
|
bool keep_aspect_ratio_{true};
|
||||||
int width_divisor_{1};
|
int width_divisor_{1};
|
||||||
std::string resize_type_{"Resize"};
|
|
||||||
Stream stream_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MMDEPLOY_CREATOR_SIGNATURE(RescaleToHeightImpl,
|
MMDEPLOY_REGISTER_TRANSFORM(RescaleToHeight);
|
||||||
std::unique_ptr<RescaleToHeightImpl>(const Value& config));
|
} // namespace mmdeploy::mmocr
|
||||||
|
|
||||||
MMDEPLOY_DEFINE_REGISTRY(RescaleToHeightImpl);
|
|
||||||
|
|
||||||
MMDEPLOY_REGISTER_FACTORY_FUNC(RescaleToHeightImpl, (cpu, 0), [](const Value& config) {
|
|
||||||
return std::make_unique<RescaleToHeightImpl>(config);
|
|
||||||
});
|
|
||||||
|
|
||||||
class RescaleToHeight : public Transform {
|
|
||||||
public:
|
|
||||||
explicit RescaleToHeight(const Value& args) : Transform(args) {
|
|
||||||
impl_ = Instantiate<RescaleToHeightImpl>("RescaleToHeight", args);
|
|
||||||
}
|
|
||||||
~RescaleToHeight() override = default;
|
|
||||||
|
|
||||||
Result<Value> Process(const Value& input) override { return impl_->Process(input); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::unique_ptr<RescaleToHeightImpl> impl_;
|
|
||||||
static const std::string name_;
|
|
||||||
};
|
|
||||||
|
|
||||||
MMDEPLOY_REGISTER_FACTORY_FUNC(Transform, (ResizeOCR, 0), [](const Value& config) {
|
|
||||||
return std::make_unique<RescaleToHeight>(config);
|
|
||||||
});
|
|
||||||
|
|
||||||
} // namespace mmdeploy
|
|
||||||
|
@ -2,24 +2,21 @@
|
|||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
#include "mmdeploy/archive/json_archive.h"
|
|
||||||
#include "mmdeploy/archive/value_archive.h"
|
#include "mmdeploy/archive/value_archive.h"
|
||||||
#include "mmdeploy/core/registry.h"
|
#include "mmdeploy/core/registry.h"
|
||||||
#include "mmdeploy/core/tensor.h"
|
#include "mmdeploy/core/tensor.h"
|
||||||
#include "mmdeploy/core/utils/device_utils.h"
|
|
||||||
#include "mmdeploy/core/utils/formatter.h"
|
#include "mmdeploy/core/utils/formatter.h"
|
||||||
#include "mmdeploy/preprocess/transform/resize.h"
|
#include "mmdeploy/operation/managed.h"
|
||||||
|
#include "mmdeploy/operation/vision.h"
|
||||||
#include "mmdeploy/preprocess/transform/transform.h"
|
#include "mmdeploy/preprocess/transform/transform.h"
|
||||||
#include "opencv2/imgproc.hpp"
|
|
||||||
#include "opencv_utils.h"
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
namespace mmdeploy {
|
namespace mmdeploy::mmocr {
|
||||||
|
|
||||||
class ShortScaleAspectJitterImpl : public Module {
|
class ShortScaleAspectJitter : public transform::Transform {
|
||||||
public:
|
public:
|
||||||
explicit ShortScaleAspectJitterImpl(const Value& args) noexcept {
|
explicit ShortScaleAspectJitter(const Value& args) noexcept {
|
||||||
short_size_ = args.contains("short_size") && args["short_size"].is_number_integer()
|
short_size_ = args.contains("short_size") && args["short_size"].is_number_integer()
|
||||||
? args["short_size"].get<int>()
|
? args["short_size"].get<int>()
|
||||||
: short_size_;
|
: short_size_;
|
||||||
@ -41,16 +38,13 @@ class ShortScaleAspectJitterImpl : public Module {
|
|||||||
scale_divisor_ = args.contains("scale_divisor") && args["scale_divisor"].is_number_integer()
|
scale_divisor_ = args.contains("scale_divisor") && args["scale_divisor"].is_number_integer()
|
||||||
? args["scale_divisor"].get<int>()
|
? args["scale_divisor"].get<int>()
|
||||||
: scale_divisor_;
|
: scale_divisor_;
|
||||||
resize_type_ = args.contains("resize_type") && args["resize_type"].is_string()
|
resize_ = operation::Managed<operation::Resize>::Create("bilinear");
|
||||||
? args["resize_type"].get<string>()
|
|
||||||
: resize_type_;
|
|
||||||
stream_ = args["context"]["stream"].get<Stream>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
~ShortScaleAspectJitterImpl() override = default;
|
~ShortScaleAspectJitter() override = default;
|
||||||
|
|
||||||
Result<Value> Process(const Value& input) override {
|
Result<void> Apply(Value& data) override {
|
||||||
MMDEPLOY_DEBUG("input: {}", input);
|
MMDEPLOY_DEBUG("input: {}", data);
|
||||||
auto short_size = short_size_;
|
auto short_size = short_size_;
|
||||||
auto ratio_range = ratio_range_;
|
auto ratio_range = ratio_range_;
|
||||||
auto aspect_ratio_range = aspect_ratio_range_;
|
auto aspect_ratio_range = aspect_ratio_range_;
|
||||||
@ -62,18 +56,15 @@ class ShortScaleAspectJitterImpl : public Module {
|
|||||||
return Status(eNotSupported);
|
return Status(eNotSupported);
|
||||||
}
|
}
|
||||||
std::vector<int> img_shape; // NHWC
|
std::vector<int> img_shape; // NHWC
|
||||||
from_value(input["img_shape"], img_shape);
|
from_value(data["img_shape"], img_shape);
|
||||||
|
|
||||||
std::vector<int> ori_shape; // NHWC
|
std::vector<int> ori_shape; // NHWC
|
||||||
from_value(input["ori_shape"], ori_shape);
|
from_value(data["ori_shape"], ori_shape);
|
||||||
|
|
||||||
auto ori_height = ori_shape[1];
|
auto ori_height = ori_shape[1];
|
||||||
auto ori_width = ori_shape[2];
|
auto ori_width = ori_shape[2];
|
||||||
|
|
||||||
Device host{"cpu"};
|
auto img = data["img"].get<Tensor>();
|
||||||
auto _img = input["img"].get<Tensor>();
|
|
||||||
OUTCOME_TRY(auto img, MakeAvailableOnDevice(_img, host, stream_));
|
|
||||||
stream_.Wait().value();
|
|
||||||
Tensor img_resize;
|
Tensor img_resize;
|
||||||
auto scale = static_cast<float>(1.0 * short_size / std::min(img_shape[1], img_shape[2]));
|
auto scale = static_cast<float>(1.0 * short_size / std::min(img_shape[1], img_shape[2]));
|
||||||
auto dst_height = static_cast<int>(std::round(scale * img_shape[1]));
|
auto dst_height = static_cast<int>(std::round(scale * img_shape[1]));
|
||||||
@ -83,69 +74,23 @@ class ShortScaleAspectJitterImpl : public Module {
|
|||||||
std::vector<float> scale_factor = {(float)1.0 * dst_width / img_shape[2],
|
std::vector<float> scale_factor = {(float)1.0 * dst_width / img_shape[2],
|
||||||
(float)1.0 * dst_height / img_shape[1]};
|
(float)1.0 * dst_height / img_shape[1]};
|
||||||
|
|
||||||
img_resize = ResizeImage(img, dst_height, dst_width);
|
OUTCOME_TRY(resize_.Apply(img, img_resize, dst_height, dst_width));
|
||||||
Value output = input;
|
data["img"] = img_resize;
|
||||||
output["img"] = img_resize;
|
data["resize_shape"] = to_value(img_resize.desc().shape);
|
||||||
output["resize_shape"] = to_value(img_resize.desc().shape);
|
data["scale"] = to_value(std::vector<int>({dst_width, dst_height}));
|
||||||
output["scale"] = to_value(std::vector<int>({dst_width, dst_height}));
|
data["scale_factor"] = to_value(scale_factor);
|
||||||
output["scale_factor"] = to_value(scale_factor);
|
MMDEPLOY_DEBUG("output: {}", data);
|
||||||
MMDEPLOY_DEBUG("output: {}", to_json(output).dump(2));
|
return success();
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
Tensor ResizeImage(const Tensor& img, int dst_h, int dst_w) {
|
|
||||||
TensorDesc desc = img.desc();
|
|
||||||
assert(desc.shape.size() == 4);
|
|
||||||
assert(desc.data_type == DataType::kINT8);
|
|
||||||
int h = desc.shape[1];
|
|
||||||
int w = desc.shape[2];
|
|
||||||
int c = desc.shape[3];
|
|
||||||
assert(c == 3 || c == 1);
|
|
||||||
cv::Mat src_mat, dst_mat;
|
|
||||||
if (3 == c) { // rgb
|
|
||||||
src_mat = cv::Mat(h, w, CV_8UC3, const_cast<uint8_t*>(img.data<uint8_t>()));
|
|
||||||
} else { // gray
|
|
||||||
src_mat = cv::Mat(h, w, CV_8UC1, const_cast<uint8_t*>(img.data<uint8_t>()));
|
|
||||||
}
|
|
||||||
cv::Size size{dst_w, dst_h};
|
|
||||||
cv::resize(src_mat, dst_mat, size, cv::INTER_LINEAR);
|
|
||||||
return Tensor({desc.device, desc.data_type, {1, dst_h, dst_w, c}, ""},
|
|
||||||
{dst_mat.data, [mat = dst_mat](void* ptr) {}});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
operation::Managed<operation::Resize> resize_;
|
||||||
int short_size_{736};
|
int short_size_{736};
|
||||||
std::vector<float> ratio_range_{0.7, 1.3};
|
std::vector<float> ratio_range_{0.7, 1.3};
|
||||||
std::vector<float> aspect_ratio_range_{0.9, 1.1};
|
std::vector<float> aspect_ratio_range_{0.9, 1.1};
|
||||||
int scale_divisor_{1};
|
int scale_divisor_{1};
|
||||||
std::string resize_type_{"Resize"};
|
|
||||||
Stream stream_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MMDEPLOY_CREATOR_SIGNATURE(ShortScaleAspectJitterImpl,
|
MMDEPLOY_REGISTER_TRANSFORM(ShortScaleAspectJitter);
|
||||||
std::unique_ptr<ShortScaleAspectJitterImpl>(const Value& config));
|
|
||||||
MMDEPLOY_DEFINE_REGISTRY(ShortScaleAspectJitterImpl);
|
|
||||||
|
|
||||||
MMDEPLOY_REGISTER_FACTORY_FUNC(ShortScaleAspectJitterImpl, (cpu, 0), [](const Value& config) {
|
} // namespace mmdeploy::mmocr
|
||||||
return std::make_unique<ShortScaleAspectJitterImpl>(config);
|
|
||||||
});
|
|
||||||
|
|
||||||
class ShortScaleAspectJitter : public Transform {
|
|
||||||
public:
|
|
||||||
explicit ShortScaleAspectJitter(const Value& args) : Transform(args) {
|
|
||||||
impl_ = Instantiate<ShortScaleAspectJitterImpl>("ShortScaleAspectJitter", args);
|
|
||||||
}
|
|
||||||
~ShortScaleAspectJitter() override = default;
|
|
||||||
|
|
||||||
Result<Value> Process(const Value& input) override { return impl_->Process(input); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::unique_ptr<ShortScaleAspectJitterImpl> impl_;
|
|
||||||
static const std::string name_;
|
|
||||||
};
|
|
||||||
|
|
||||||
MMDEPLOY_REGISTER_FACTORY_FUNC(Transform, (ShortScaleAspectJitter, 0), [](const Value& config) {
|
|
||||||
return std::make_unique<ShortScaleAspectJitter>(config);
|
|
||||||
});
|
|
||||||
|
|
||||||
} // namespace mmdeploy
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user