Apollo 10.0
自动驾驶开放平台
apollo::perception::camera::DataProvider类 参考

#include <data_provider.h>

apollo::perception::camera::DataProvider 的协作图:

struct  ImageOptions
 
struct  InitOptions
 

Public 成员函数

 DataProvider ()=default
 
 ~DataProvider ()=default
 
 DataProvider (const DataProvider &)=delete
 
DataProvideroperator= (const DataProvider &)=delete
 
bool Init (const InitOptions &options=InitOptions())
 
bool FillImageData (int rows, int cols, const uint8_t *data, const std::string &encoding)
 
bool GetImageBlob (const ImageOptions &options, base::Blob< uint8_t > *blob)
 
bool GetImage (const ImageOptions &options, base::Image8U *image)
 
int src_height () const
 
int src_width () const
 
const std::string & sensor_name () const
 
bool to_gray_image ()
 
bool to_rgb_image ()
 
bool to_bgr_image ()
 

Protected 属性

std::string sensor_name_
 
int src_height_ = 0
 
int src_width_ = 0
 
int device_id_ = -1
 
std::shared_ptr< base::Image8Uori_gray_
 
std::shared_ptr< base::Image8Uori_rgb_
 
std::shared_ptr< base::Image8Uori_bgr_
 
std::shared_ptr< base::Image8Ugray_
 
std::shared_ptr< base::Image8Urgb_
 
std::shared_ptr< base::Image8Ubgr_
 
bool gray_ready_ = false
 
bool rgb_ready_ = false
 
bool bgr_ready_ = false
 
base::Blob< float > temp_float_
 
base::Blob< uint8_t > temp_uint8_
 
std::shared_ptr< UndistortionHandlerhandler_ = nullptr
 

详细描述

在文件 data_provider.h30 行定义.

构造及析构函数说明

◆ DataProvider() [1/2]

apollo::perception::camera::DataProvider::DataProvider ( )
default

◆ ~DataProvider()

apollo::perception::camera::DataProvider::~DataProvider ( )
default

◆ DataProvider() [2/2]

apollo::perception::camera::DataProvider::DataProvider ( const DataProvider )
delete

成员函数说明

◆ FillImageData()

bool apollo::perception::camera::DataProvider::FillImageData ( int  rows,
int  cols,
const uint8_t *  data,
const std::string &  encoding 
)

在文件 data_provider.cc113 行定义.

114 {
115 if (cudaSetDevice(device_id_) != cudaSuccess) {
116 AERROR << "Failed to set device to: " << device_id_;
117 return false;
118 }
119
120 gray_ready_ = false;
121 rgb_ready_ = false;
122 bgr_ready_ = false;
123
124 bool success = false;
125
126#if USE_GPU == 0 // copy to host memory
127 AINFO << "Fill in CPU mode ...";
128 if (handler_ != nullptr) {
129 AERROR << "Undistortion DO NOT support CPU mode!";
130 return false;
131 }
132 if (encoding == "rgb8") {
133 memcpy(rgb_->mutable_cpu_data(), data, rgb_->count() * sizeof(data[0]));
134 rgb_ready_ = true;
135 success = true;
136 } else if (encoding == "bgr8") {
137 memcpy(bgr_->mutable_cpu_data(), data, bgr_->count() * sizeof(data[0]));
138 bgr_ready_ = true;
139 success = true;
140 } else if (encoding == "gray" || encoding == "y") {
141 memcpy(gray_->mutable_cpu_data(), data, gray_->count() * sizeof(data[0]));
142 gray_ready_ = true;
143 success = true;
144 } else {
145 AERROR << "Unrecognized image encoding: " << encoding;
146 }
147#else // copy to device memory directly
148 AINFO << "Fill in GPU mode ...";
149 if (encoding == "rgb8") {
150 if (handler_ != nullptr) {
151 cudaMemcpy(ori_rgb_->mutable_gpu_data(), data,
152 ori_rgb_->rows() * ori_rgb_->width_step(), cudaMemcpyDefault);
153 success = handler_->Handle(*ori_rgb_, rgb_.get());
154 } else {
155 cudaMemcpy(rgb_->mutable_gpu_data(), data,
156 rgb_->rows() * rgb_->width_step(), cudaMemcpyDefault);
157 success = true;
158 }
159 rgb_ready_ = true;
160 } else if (encoding == "bgr8") {
161 if (handler_ != nullptr) {
162 cudaMemcpy(ori_bgr_->mutable_gpu_data(), data,
163 ori_bgr_->rows() * ori_bgr_->width_step(), cudaMemcpyDefault);
164 success = handler_->Handle(*ori_bgr_, bgr_.get());
165 } else {
166 cudaMemcpy(bgr_->mutable_gpu_data(), data,
167 bgr_->rows() * bgr_->width_step(), cudaMemcpyDefault);
168 success = true;
169 }
170 bgr_ready_ = true;
171 } else if (encoding == "gray" || encoding == "y") {
172 if (handler_ != nullptr) {
173 cudaMemcpy(ori_gray_->mutable_gpu_data(), data,
174 ori_gray_->rows() * ori_gray_->width_step(),
175 cudaMemcpyDefault);
176 success = handler_->Handle(*ori_gray_, gray_.get());
177 } else {
178 cudaMemcpy(gray_->mutable_gpu_data(), data,
179 gray_->rows() * gray_->width_step(), cudaMemcpyDefault);
180 success = true;
181 }
182 gray_ready_ = true;
183 } else {
184 AERROR << "Unrecognized image encoding: " << encoding;
185 }
186#endif
187
188 AINFO << "Done! (" << success << ")";
189 return success;
190}
std::shared_ptr< base::Image8U > ori_gray_
std::shared_ptr< base::Image8U > gray_
std::shared_ptr< base::Image8U > ori_bgr_
std::shared_ptr< base::Image8U > bgr_
std::shared_ptr< base::Image8U > ori_rgb_
std::shared_ptr< UndistortionHandler > handler_
std::shared_ptr< base::Image8U > rgb_
#define AERROR
Definition log.h:44
#define AINFO
Definition log.h:42

◆ GetImage()

bool apollo::perception::camera::DataProvider::GetImage ( const ImageOptions options,
base::Image8U image 
)

在文件 data_provider.cc231 行定义.

232 {
233 AINFO << "GetImage ...";
234 if (image == nullptr) {
235 return false;
236 }
237 bool success = false;
238 switch (options.target_color) {
239 case base::Color::RGB:
240 success = to_rgb_image();
241 *image = (*rgb_);
242 break;
243 case base::Color::BGR:
244 success = to_bgr_image();
245 *image = (*bgr_);
246 break;
248 success = to_gray_image();
249 *image = (*gray_);
250 break;
251 default:
252 AERROR << "Unsupported Color: "
253 << static_cast<uint8_t>(options.target_color);
254 }
255 if (!success) {
256 return false;
257 }
258
259 if (options.do_crop) {
260 AINFO << "\tcropping ...";
261 *image = (*image)(options.crop_roi);
262 }
263 AINFO << "Done!";
264 return true;
265}

◆ GetImageBlob()

bool apollo::perception::camera::DataProvider::GetImageBlob ( const ImageOptions options,
base::Blob< uint8_t > *  blob 
)

在文件 data_provider.cc221 行定义.

222 {
223 base::Image8U image;
224 if (!GetImage(options, &image)) {
225 return false;
226 }
227 imageToBlob(image, blob);
228 return true;
229}
bool GetImage(const ImageOptions &options, base::Image8U *image)
bool imageToBlob(const base::Image8U &image, base::Blob< uint8_t > *blob)

◆ Init()

bool apollo::perception::camera::DataProvider::Init ( const InitOptions options = InitOptions())

在文件 data_provider.cc25 行定义.

25 {
26 src_height_ = options.image_height;
27 src_width_ = options.image_width;
28 sensor_name_ = options.sensor_name;
29 device_id_ = options.device_id;
30
31 if (cudaSetDevice(device_id_) != cudaSuccess) {
32 AERROR << "Failed to set device to: " << device_id_;
33 return false;
34 }
35
36 // Initialize uint8 blobs
37 gray_.reset(new base::Image8U(src_height_, src_width_, base::Color::GRAY));
38 rgb_.reset(new base::Image8U(src_height_, src_width_, base::Color::RGB));
39 bgr_.reset(new base::Image8U(src_height_, src_width_, base::Color::BGR));
40
41 // Allocate CPU memory for uint8 blobs
42 gray_->cpu_data();
43 rgb_->cpu_data();
44 bgr_->cpu_data();
45
46 // Allocate GPU memory for uint8 blobs
47 gray_->gpu_data();
48 rgb_->gpu_data();
49 bgr_->gpu_data();
50
51 if (options.do_undistortion) {
52 handler_.reset(new UndistortionHandler());
53 if (!handler_->Init(options.sensor_name, device_id_)) {
54 return false;
55 }
56 // Initialize uint8 blobs
57 ori_gray_.reset(
58 new base::Image8U(src_height_, src_width_, base::Color::GRAY));
59 ori_rgb_.reset(
60 new base::Image8U(src_height_, src_width_, base::Color::RGB));
61 ori_bgr_.reset(
62 new base::Image8U(src_height_, src_width_, base::Color::BGR));
63
64 // Allocate CPU memory for uint8 blobs
65 ori_gray_->cpu_data();
66 ori_rgb_->cpu_data();
67 ori_bgr_->cpu_data();
68
69 // Allocate GPU memory for uint8 blobs
70 ori_gray_->gpu_data();
71 ori_rgb_->gpu_data();
72 ori_bgr_->gpu_data();
73 }
74
75 // Warm up nppi functions
76 {
77 bgr_ready_ = false;
78 rgb_ready_ = true;
79 gray_ready_ = false;
81 bgr_ready_ = false;
82 rgb_ready_ = false;
83 gray_ready_ = true;
85 }
86 {
87 bgr_ready_ = false;
88 rgb_ready_ = false;
89 gray_ready_ = true;
91 bgr_ready_ = true;
92 rgb_ready_ = false;
93 gray_ready_ = false;
95 }
96 {
97 bgr_ready_ = false;
98 rgb_ready_ = true;
99 gray_ready_ = false;
101 bgr_ready_ = true;
102 rgb_ready_ = false;
103 gray_ready_ = false;
105 }
106 bgr_ready_ = false;
107 rgb_ready_ = false;
108 gray_ready_ = false;
109
110 return true;
111}

◆ operator=()

DataProvider & apollo::perception::camera::DataProvider::operator= ( const DataProvider )
delete

◆ sensor_name()

const std::string & apollo::perception::camera::DataProvider::sensor_name ( ) const
inline

在文件 data_provider.h111 行定义.

111{ return sensor_name_; }

◆ src_height()

int apollo::perception::camera::DataProvider::src_height ( ) const
inline

在文件 data_provider.h109 行定义.

109{ return src_height_; }

◆ src_width()

int apollo::perception::camera::DataProvider::src_width ( ) const
inline

在文件 data_provider.h110 行定义.

110{ return src_width_; }

◆ to_bgr_image()

bool apollo::perception::camera::DataProvider::to_bgr_image ( )

在文件 data_provider.cc303 行定义.

303 {
304 if (!bgr_ready_) {
305 if (rgb_ready_) {
306 const int order[] = {2, 1, 0};
308 bgr_ready_ = true;
309 } else if (gray_ready_) {
311 bgr_ready_ = true;
312 } else {
313 AWARN << "No image data filled yet, return uninitialized blob!";
314 return false;
315 }
316 }
317 return true;
318}
#define AWARN
Definition log.h:43
bool swapImageChannels(const base::Image8UPtr &src, const base::Image8UPtr &dst, const int src_width, const int src_height, const int order[3])
bool dupImageChannels(const base::Image8UPtr &src, const base::Image8UPtr &dst, const int src_width, const int src_height)

◆ to_gray_image()

bool apollo::perception::camera::DataProvider::to_gray_image ( )

在文件 data_provider.cc267 行定义.

267 {
268 if (!gray_ready_) {
269 if (bgr_ready_) {
270 float coeffs[] = {0.114f, 0.587f, 0.299f};
272 gray_ready_ = true;
273 } else if (rgb_ready_) {
274 float coeffs[] = {0.299f, 0.587f, 0.114f};
276 gray_ready_ = true;
277 } else {
278 AWARN << "No image data filled yet, return uninitialized blob!";
279 return false;
280 }
281 }
282 return true;
283}
bool imageToGray(const base::Image8UPtr &src, const base::Image8UPtr &dst, const int src_width, const int src_height, const float coeffs[3])

◆ to_rgb_image()

bool apollo::perception::camera::DataProvider::to_rgb_image ( )

在文件 data_provider.cc285 行定义.

285 {
286 if (!rgb_ready_) {
287 if (bgr_ready_) {
288 // BGR2RGB takes less than 0.010ms on K2200
289 const int order[] = {2, 1, 0};
291 rgb_ready_ = true;
292 } else if (gray_ready_) {
294 rgb_ready_ = true;
295 } else {
296 AWARN << "No image data filled yet, return uninitialized blob!";
297 return false;
298 }
299 }
300 return true;
301}

类成员变量说明

◆ bgr_

std::shared_ptr<base::Image8U> apollo::perception::camera::DataProvider::bgr_
protected

在文件 data_provider.h128 行定义.

◆ bgr_ready_

bool apollo::perception::camera::DataProvider::bgr_ready_ = false
protected

在文件 data_provider.h131 行定义.

◆ device_id_

int apollo::perception::camera::DataProvider::device_id_ = -1
protected

在文件 data_provider.h121 行定义.

◆ gray_

std::shared_ptr<base::Image8U> apollo::perception::camera::DataProvider::gray_
protected

在文件 data_provider.h126 行定义.

◆ gray_ready_

bool apollo::perception::camera::DataProvider::gray_ready_ = false
protected

在文件 data_provider.h129 行定义.

◆ handler_

std::shared_ptr<UndistortionHandler> apollo::perception::camera::DataProvider::handler_ = nullptr
protected

在文件 data_provider.h135 行定义.

◆ ori_bgr_

std::shared_ptr<base::Image8U> apollo::perception::camera::DataProvider::ori_bgr_
protected

在文件 data_provider.h125 行定义.

◆ ori_gray_

std::shared_ptr<base::Image8U> apollo::perception::camera::DataProvider::ori_gray_
protected

在文件 data_provider.h123 行定义.

◆ ori_rgb_

std::shared_ptr<base::Image8U> apollo::perception::camera::DataProvider::ori_rgb_
protected

在文件 data_provider.h124 行定义.

◆ rgb_

std::shared_ptr<base::Image8U> apollo::perception::camera::DataProvider::rgb_
protected

在文件 data_provider.h127 行定义.

◆ rgb_ready_

bool apollo::perception::camera::DataProvider::rgb_ready_ = false
protected

在文件 data_provider.h130 行定义.

◆ sensor_name_

std::string apollo::perception::camera::DataProvider::sensor_name_
protected

在文件 data_provider.h118 行定义.

◆ src_height_

int apollo::perception::camera::DataProvider::src_height_ = 0
protected

在文件 data_provider.h119 行定义.

◆ src_width_

int apollo::perception::camera::DataProvider::src_width_ = 0
protected

在文件 data_provider.h120 行定义.

◆ temp_float_

base::Blob<float> apollo::perception::camera::DataProvider::temp_float_
protected

在文件 data_provider.h133 行定义.

◆ temp_uint8_

base::Blob<uint8_t> apollo::perception::camera::DataProvider::temp_uint8_
protected

在文件 data_provider.h134 行定义.


该类的文档由以下文件生成: