此基本类用于检测来自图像 (cv::Mat) 的人员和特征。
输入为图像 (cv::Mat)。
输出为放大的图像。
代码样本:
注释: 输入图像大小为 640x480
auto image_file = string(argv[2]);
Mat input_img = imread(image_file);
if (input_img.empty()) {
cerr << "can't load image! " << argv[2] << endl;
return -1;
}
auto det = vitis::ai::FairMot::create(argv[1]);
auto result = det->run(input_img);
auto feats = result.feats;
auto bboxes = result.bboxes;
auto img = input_img.clone();
for (auto i = 0u; i < bboxes.size(); ++i) {
auto box = bboxes[i];
float x = box.x * (img.cols);
float y = box.y * (img.rows);
int xmin = x;
int ymin = y;
int xmax = x + (box.width) * (img.cols);
int ymax = y + (box.height) * (img.rows);
float score = box.score;
xmin = std::min(std::max(xmin, 0), img.cols);
xmax = std::min(std::max(xmax, 0), img.cols);
ymin = std::min(std::max(ymin, 0), img.rows);
ymax = std::min(std::max(ymax, 0), img.rows);
LOG(INFO) << "RESULT " << box.label << " :\t" << xmin << "\t" << ymin
<< "\t" << xmax << "\t" << ymax << "\t" << score << "\n";
LOG(INFO) << "feat size: " << feats[i].size()
<< " First 5 digits: " << feats[i].data[0] + 0.0f << " "
<< feats[i].data[1] + 0.0f << " " << feats[i].data[2] + 0.0f
<< " " << feats[i].data[3] + 0.0f << " "
<< feats[i].data[4] + 0.0f << endl;
cv::rectangle(img, cv::Point(xmin, ymin), cv::Point(xmax, ymax),
cv::Scalar(0, 255, 0), 1, 1, 0);
}
auto out = image_file.substr(0, image_file.size() - 4) + "_out.jpg";
LOG(INFO) << "write result to " << out;
cv::imwrite(out, img);
显示模型结果:
图 1. 结果图像
表示包含对象坐标和置信度的结构体。
声明
typedef struct
{
float x;
float y;
float width;
float height;
int label;
float score;
} vitis::ai::BoundingBox;
成员 | 描述 |
---|---|
x |
x 坐标。x 相对于输入图像列加以归一化。范围为 0 到 1。 |
y |
y 坐标。y 相对于输入图像行加以归一化。范围为 0 到 1。 |
width |
主体宽度。宽度相对于输入图像列加以归一化。范围为 0 到 1。 |
height |
主体高度。高度相对于输入图像行加以归一化。范围为 0 到 1。 |
label | 主体检测标签。值范围为 0 到 21。 |
score | 主体检测置信度。值范围为 0 到 1。 |