27 std::vector<base::ObjectPtr> *objects) {
28 std::size_t valid_index = 0, cur_index = 0;
29 while (cur_index < objects->size()) {
30 const auto& obj = objects->at(cur_index);
32 obj->camera_supplement.box.ymax - obj->camera_supplement.box.ymin;
37 if (valid_index != cur_index)
38 objects->at(valid_index) = objects->at(cur_index);
44 objects->resize(valid_index);
45 AINFO << valid_index <<
" of " << cur_index <<
" obstacles kept";
49 std::vector<base::ObjectPtr> *objects) {
50 for (
auto &obj : *objects) {
51 float xmin = obj->camera_supplement.box.xmin;
52 float ymin = obj->camera_supplement.box.ymin;
53 float xmax = obj->camera_supplement.box.xmax;
54 float ymax = obj->camera_supplement.box.ymax;
56 float x = xmin * roi_w;
57 float w = (xmax - xmin) * roi_w;
58 float y = ymin * roi_h + offset_y;
59 float h = (ymax - ymin) * roi_h;
61 base::RectF rect_img(0, 0, roi_w, roi_h + offset_y);
62 obj->camera_supplement.box = rect_det & rect_img;
64 constexpr double eps = 1e-2;
66 if ((ymin < eps) || (ymax >= (1.0 - eps))) {
67 obj->camera_supplement.truncated_vertical = 0.5;
69 obj->camera_supplement.truncated_vertical = 0.0;
72 if ((xmin < eps) || (xmax >= (1.0 - eps))) {
73 obj->camera_supplement.truncated_horizontal = 0.5;
75 obj->camera_supplement.truncated_horizontal = 0.0;
81 obj->camera_supplement.box.xmin = bbox[2] / width;
82 obj->camera_supplement.box.ymin = bbox[3] / height;
83 obj->camera_supplement.box.xmax = bbox[4] / width;
84 obj->camera_supplement.box.ymax = bbox[5] / height;
88 obj->camera_supplement.alpha = bbox[1];
90 obj->size[2] = bbox[6];
91 obj->size[1] = bbox[7];
92 obj->size[0] = bbox[8];
94 obj->camera_supplement.local_center[0] = bbox[9];
95 obj->camera_supplement.local_center[1] = bbox[10];
96 obj->camera_supplement.local_center[2] = bbox[11];
100 int cls,
const std::vector<base::ObjectSubType> &types) {
101 if (cls < 0 || cls >=
static_cast<int>(types.size())) {
109 const std::vector<base::ObjectSubType> &types,
111 std::vector<base::ObjectPtr> *objects,
112 int width,
int height) {
113 const float* detect_result = output_blob->cpu_data();
115 auto shape = output_blob->shape();
117 int len_pred = shape[1];
118 int total = shape[0] * shape[1];
120 while (step < total) {
121 const float* bbox = detect_result + step;
123 float score = bbox[13];
129 int label =
static_cast<int>(bbox[0]);
132 obj->type_probs.assign(
134 obj->sub_type_probs.assign(
136 obj->type_probs[
static_cast<int>(obj->type)] = score;
137 obj->sub_type_probs[
static_cast<int>(obj->sub_type)] = score;
138 obj->confidence = score;
142 objects->push_back(obj);
A wrapper around SyncedMemory holders serving as the basic computational unit for images,...
const std::map< ObjectSubType, ObjectType > kSubType2TypeMap
ObjectSubType mapping
std::shared_ptr< Object > ObjectPtr
void FillBBox3d(const float *bbox, base::ObjectPtr obj)
Fill the 3d bbox to object
void GetObjectsCpu(const std::shared_ptr< base::Blob< float > > &output_blob, const std::vector< base::ObjectSubType > &types, const smoke::ModelParam &model_param, std::vector< base::ObjectPtr > *objects, int width, int height)
void FilterByMinDims(const smoke::MinDims &min_dims, std::vector< base::ObjectPtr > *objects)
base::ObjectSubType GetSubtype(int cls, const std::vector< base::ObjectSubType > &types)
Get the Subtype
void FillBBox(base::ObjectPtr obj, const float *bbox, int width, int height)
void RecoverBBox(int roi_w, int roi_h, int offset_y, std::vector< base::ObjectPtr > *objects)
optional float min_3d_width
optional float min_3d_length
optional float min_2d_height
optional float min_3d_height
optional float confidence_threshold