2

I'm total noob as it comes to dlib. I know how to load face shape model directly from file and it works.

dlib::shape_predictor face_shape_predictor_;
dlib::deserialize("shape_predictor_68_face_landmarks.dat") >> face_shape_predictor_;

But how to deserialize from istream?

I have the following code:

dlib::shape_predictor face_shape_predictor_;
std::stringstream face_data_stream;

loadDataToStream(face_data_stream);
dlib::deserialize(face_shape_predictor_, face_data_stream);

And I don't know how to get it work.

Shot
  • 345
  • 5
  • 19
  • Answer can be found here: http://stackoverflow.com/questions/37724457/is-it-possible-to-load-read-shape-predictor-68-face-landmarks-dat-at-compile-tim – Evgeniy Jun 24 '16 at 12:48

2 Answers2

5

The first search result in google for "dlib deserailize" leads to this text ;)

There are two global functions in the dlib namespace that provide serialization and
deserialization support.  Their signatures and specifications are as follows:

    void serialize (
        const serializable_type& item,
        std::ostream& out
    );
    /!*
        ensures
            - writes the state of item to the output stream out
            - if (serializable_type implements the enumerable interface) then
                - item.at_start() == true
        throws                    
            - serialization_error
                This exception is thrown if there is some problem which prevents
                us from successfully writing item to the output stream.
            - any other exception
    *!/

    void deserialize (
        serializable_type& item,
        std::istream& in
    );
    /!*
        ensures
            - #item == a deserialized copy of the serializable_type that was
              in the input stream in.
            - Reads all the bytes associated with the serialized serializable_type
              contained inside the input stream and no more.  This means you
              can serialize multiple objects to an output stream and then read
              them all back in, one after another, using deserialize().
            - if (serializable_type implements the enumerable interface) then
                - item.at_start() == true
        throws                    
            - serialization_error
                This exception is thrown if there is some problem which prevents
                us from successfully deserializing item from the input stream.
                If this exception is thrown then item will have an initial value 
                for its type.
            - any other exception
    *!/

For convenience, you can also serialize to a file using this syntax:
    serialize("your_file.dat") << some_object << another_object;

That overwrites the contents of your_file.dat with the serialized data from some_object
and another_object.  Then to recall the objects from the file you can do:
    deserialize("your_file.dat") >> some_object >> another_object;
Davis King
  • 4,731
  • 1
  • 25
  • 26
0

Actually, adding the following code:

using namespace dlib;

Solved the compilation problem.

Shot
  • 345
  • 5
  • 19