// Copyright (C) 2012 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_FULL_OBJECT_DeTECTION_H__
#define DLIB_FULL_OBJECT_DeTECTION_H__
#include "../geometry.h"
#include "full_object_detection_abstract.h"
#include <vector>
#include "../serialize.h"
namespace dlib
{
// ----------------------------------------------------------------------------------------
const static point OBJECT_PART_NOT_PRESENT(0x7FFFFFFF,
0x7FFFFFFF);
// ----------------------------------------------------------------------------------------
class full_object_detection
{
public:
full_object_detection(
const rectangle& rect_,
const std::vector<point>& parts_
) : rect(rect_), parts(parts_) {}
full_object_detection(){}
explicit full_object_detection(
const rectangle& rect_
) : rect(rect_) {}
const rectangle& get_rect() const { return rect; }
unsigned long num_parts() const { return parts.size(); }
const point& part(
unsigned long idx
) const
{
// make sure requires clause is not broken
DLIB_ASSERT(idx < num_parts(),
"\t point full_object_detection::part()"
<< "\n\t Invalid inputs were given to this function "
<< "\n\t idx: " << idx
<< "\n\t num_parts(): " << num_parts()
<< "\n\t this: " << this
);
return parts[idx];
}
friend void serialize (
const full_object_detection& item,
std::ostream& out
)
{
int version = 1;
serialize(version, out);
serialize(item.rect, out);
serialize(item.parts, out);
}
friend void deserialize (
full_object_detection& item,
std::istream& in
)
{
int version = 0;
deserialize(version, in);
if (version != 1)
throw serialization_error("Unexpected version encountered while deserializing dlib::full_object_detection.");
deserialize(item.rect, in);
deserialize(item.parts, in);
}
private:
rectangle rect;
std::vector<point> parts;
};
// ----------------------------------------------------------------------------------------
inline bool all_parts_in_rect (
const full_object_detection& obj
)
{
for (unsigned long i = 0; i < obj.num_parts(); ++i)
{
if (obj.get_rect().contains(obj.part(i)) == false &&
obj.part(i) != OBJECT_PART_NOT_PRESENT)
return false;
}
return true;
}
// ----------------------------------------------------------------------------------------
}
#endif // DLIB_FULL_OBJECT_DeTECTION_H_