175 lines
5.3 KiB
C++
175 lines
5.3 KiB
C++
// Copyright (C) 2011 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
#ifndef DLIB_IMAGE_DAtASET_METADATA_Hh_
|
|
#define DLIB_IMAGE_DAtASET_METADATA_Hh_
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
#include "../geometry.h"
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
namespace dlib
|
|
{
|
|
namespace image_dataset_metadata
|
|
{
|
|
|
|
// ------------------------------------------------------------------------------------
|
|
|
|
enum gender_t
|
|
{
|
|
UNKNOWN,
|
|
MALE,
|
|
FEMALE
|
|
};
|
|
|
|
// ------------------------------------------------------------------------------------
|
|
|
|
struct box
|
|
{
|
|
/*!
|
|
WHAT THIS OBJECT REPRESENTS
|
|
This object represents an annotated rectangular area of an image.
|
|
It is typically used to mark the location of an object such as a
|
|
person, car, etc.
|
|
|
|
The main variable of interest is rect. It gives the location of
|
|
the box. All the other variables are optional.
|
|
!*/
|
|
|
|
box(
|
|
) :
|
|
difficult(false),
|
|
truncated(false),
|
|
occluded(false),
|
|
ignore(false),
|
|
pose(0),
|
|
detection_score(0),
|
|
angle(0),
|
|
gender(UNKNOWN),
|
|
age(0)
|
|
{}
|
|
|
|
box (
|
|
const rectangle& rect_
|
|
) :
|
|
rect(rect_),
|
|
difficult(false),
|
|
truncated(false),
|
|
occluded(false),
|
|
ignore(false),
|
|
pose(0),
|
|
detection_score(0),
|
|
angle(0),
|
|
gender(UNKNOWN),
|
|
age(0)
|
|
{}
|
|
|
|
rectangle rect;
|
|
|
|
std::map<std::string,point> parts;
|
|
|
|
// optional fields
|
|
std::string label;
|
|
bool difficult;
|
|
bool truncated;
|
|
bool occluded;
|
|
bool ignore;
|
|
double pose;
|
|
double detection_score;
|
|
|
|
// The angle of the object in radians. Positive values indicate that the
|
|
// object at the center of the box is rotated clockwise by angle radians. A
|
|
// value of 0 would indicate that the object is in its "standard" upright pose.
|
|
// Therefore, to make the object appear upright we would have to rotate the
|
|
// image counter-clockwise by angle radians.
|
|
double angle;
|
|
|
|
gender_t gender;
|
|
double age;
|
|
|
|
bool has_label() const { return label.size() != 0; }
|
|
/*!
|
|
ensures
|
|
- returns true if label metadata is present and false otherwise.
|
|
!*/
|
|
};
|
|
|
|
// ------------------------------------------------------------------------------------
|
|
|
|
struct image
|
|
{
|
|
/*!
|
|
WHAT THIS OBJECT REPRESENTS
|
|
This object represents an annotated image.
|
|
!*/
|
|
|
|
image() {}
|
|
image(const std::string& f) : filename(f) {}
|
|
|
|
std::string filename;
|
|
std::vector<box> boxes;
|
|
};
|
|
|
|
// ------------------------------------------------------------------------------------
|
|
|
|
struct dataset
|
|
{
|
|
/*!
|
|
WHAT THIS OBJECT REPRESENTS
|
|
This object represents a labeled set of images. In particular, it
|
|
contains the filename for each image as well as annotated boxes.
|
|
!*/
|
|
|
|
std::vector<image> images;
|
|
std::string comment;
|
|
std::string name;
|
|
};
|
|
|
|
// ------------------------------------------------------------------------------------
|
|
|
|
void save_image_dataset_metadata (
|
|
const dataset& meta,
|
|
const std::string& filename
|
|
);
|
|
/*!
|
|
ensures
|
|
- Writes the contents of the meta object to a file with the given
|
|
filename. The file will be in an XML format.
|
|
throws
|
|
- dlib::error
|
|
This exception is thrown if there is an error which prevents
|
|
this function from succeeding.
|
|
!*/
|
|
|
|
// ------------------------------------------------------------------------------------
|
|
|
|
void load_image_dataset_metadata (
|
|
dataset& meta,
|
|
const std::string& filename
|
|
);
|
|
/*!
|
|
ensures
|
|
- Attempts to interpret filename as a file containing XML formatted data
|
|
as produced by the save_image_dataset_metadata() function. Then
|
|
meta is loaded with the contents of the file.
|
|
throws
|
|
- dlib::error
|
|
This exception is thrown if there is an error which prevents
|
|
this function from succeeding.
|
|
!*/
|
|
|
|
// ------------------------------------------------------------------------------------
|
|
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
#ifdef NO_MAKEFILE
|
|
#include "image_dataset_metadata.cpp"
|
|
#endif
|
|
|
|
#endif // DLIB_IMAGE_DAtASET_METADATA_Hh_
|
|
|