196 {
197 if (frame == nullptr) {
198 return false;
199 }
200
201 if (cudaSetDevice(gpu_id_) != cudaSuccess) {
202 AERROR <<
"Failed to set device to " << gpu_id_;
203 return false;
204 }
205
206 auto model_inputs = model_param_.
info().inputs();
207 auto input_blob =
net_->get_blob(model_inputs[0].name());
208
209 DataProvider::ImageOptions image_options;
213 image_options.do_crop = true;
214 base::Image8U image;
215 frame->data_provider->GetImage(image_options, &image);
216
221
224 light_vis_conf_threshold_, light_swt_conf_threshold_,
225 overlapped_.get(), idx_sm_.get(), &frame->detected_objects);
227
229
231 frame->data_provider->src_height() - offset_y_, offset_y_,
232 &frame->detected_objects);
233
234
235 frame->feature_blob = yolo_blobs_.feat_blob;
236
237
238 int left_boundary =
239 static_cast<int>(border_ratio_ * static_cast<float>(image.cols()));
240 int right_boundary = static_cast<
int>((1.0
f - border_ratio_) *
241 static_cast<float>(image.cols()));
242 for (auto &obj : frame->detected_objects) {
243
244 obj->camera_supplement.alpha /= ori_cycle_;
245
246 if (model_param_.num_areas() == 0) {
247 obj->camera_supplement.area_id =
248 get_area_id(obj->camera_supplement.visible_ratios);
249 }
250
251 auto &box = obj->camera_supplement.box;
252 if (box.xmin >= left_boundary) {
253 obj->camera_supplement.cut_off_ratios[2] = 0;
254 }
255 if (box.xmax <= right_boundary) {
256 obj->camera_supplement.cut_off_ratios[3] = 0;
257 }
258 }
259
260 return true;
261}
std::shared_ptr< inference::Inference > net_
void recover_bbox(int roi_w, int roi_h, int offset_y, std::vector< base::ObjectPtr > *objects)
recover detect bbox result to raw image
int get_area_id(float visible_ratios[4])
calculate the area id based on the visible ratios
void get_objects_cpu(const YoloBlobs &yolo_blobs, const cudaStream_t &stream, const std::vector< base::ObjectSubType > &types, const NMSParam &nms, const yolo::ModelParam &model_param, float light_vis_conf_threshold, float light_swt_conf_threshold, base::Blob< bool > *overlapped, base::Blob< int > *idx_sm, std::vector< base::ObjectPtr > *objects)
Get the objects cpu object
void filter_bbox(const MinDims &min_dims, std::vector< base::ObjectPtr > *objects)
filter out the objects in the object array based on the given minimum dimension conditions and retain...
bool ResizeGPU(const base::Image8U &src, std::shared_ptr< apollo::perception::base::Blob< float > > dst, int stepwidth, int start_axis)
optional common::ModelInfo info