|
<html><head><title>dlib C++ Library - load_image_dataset.h</title></head><body bgcolor='white'><pre> |
|
<font color='#009900'>// Copyright (C) 2012 Davis E. King ([email protected]) |
|
</font><font color='#009900'>// License: Boost Software License See LICENSE.txt for the full license. |
|
</font><font color='#0000FF'>#ifndef</font> DLIB_LOAD_IMAGE_DaTASET_Hh_ |
|
<font color='#0000FF'>#define</font> DLIB_LOAD_IMAGE_DaTASET_Hh_ |
|
|
|
<font color='#0000FF'>#include</font> "<a style='text-decoration:none' href='load_image_dataset_abstract.h.html'>load_image_dataset_abstract.h</a>" |
|
<font color='#0000FF'>#include</font> "<a style='text-decoration:none' href='../misc_api.h.html'>../misc_api.h</a>" |
|
<font color='#0000FF'>#include</font> "<a style='text-decoration:none' href='../dir_nav.h.html'>../dir_nav.h</a>" |
|
<font color='#0000FF'>#include</font> "<a style='text-decoration:none' href='../image_io.h.html'>../image_io.h</a>" |
|
<font color='#0000FF'>#include</font> "<a style='text-decoration:none' href='../array.h.html'>../array.h</a>" |
|
<font color='#0000FF'>#include</font> <font color='#5555FF'><</font>vector<font color='#5555FF'>></font> |
|
<font color='#0000FF'>#include</font> "<a style='text-decoration:none' href='../geometry.h.html'>../geometry.h</a>" |
|
<font color='#0000FF'>#include</font> "<a style='text-decoration:none' href='image_dataset_metadata.h.html'>image_dataset_metadata.h</a>" |
|
<font color='#0000FF'>#include</font> <font color='#5555FF'><</font>string<font color='#5555FF'>></font> |
|
<font color='#0000FF'>#include</font> <font color='#5555FF'><</font>set<font color='#5555FF'>></font> |
|
<font color='#0000FF'>#include</font> "<a style='text-decoration:none' href='../image_processing/full_object_detection.h.html'>../image_processing/full_object_detection.h</a>" |
|
<font color='#0000FF'>#include</font> <font color='#5555FF'><</font>utility<font color='#5555FF'>></font> |
|
<font color='#0000FF'>#include</font> <font color='#5555FF'><</font>limits<font color='#5555FF'>></font> |
|
<font color='#0000FF'>#include</font> "<a style='text-decoration:none' href='../image_transforms/image_pyramid.h.html'>../image_transforms/image_pyramid.h</a>" |
|
|
|
|
|
<font color='#0000FF'>namespace</font> dlib |
|
<b>{</b> |
|
|
|
<font color='#009900'>// ---------------------------------------------------------------------------------------- |
|
</font> |
|
<font color='#0000FF'>class</font> <b><a name='image_dataset_file'></a>image_dataset_file</b> |
|
<b>{</b> |
|
<font color='#0000FF'>public</font>: |
|
<b><a name='image_dataset_file'></a>image_dataset_file</b><font face='Lucida Console'>(</font><font color='#0000FF'>const</font> std::string<font color='#5555FF'>&</font> filename<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
_skip_empty_images <font color='#5555FF'>=</font> <font color='#979000'>false</font>; |
|
_have_parts <font color='#5555FF'>=</font> <font color='#979000'>false</font>; |
|
_filename <font color='#5555FF'>=</font> filename; |
|
_box_area_thresh <font color='#5555FF'>=</font> std::numeric_limits<font color='#5555FF'><</font><font color='#0000FF'><u>double</u></font><font color='#5555FF'>></font>::<font color='#BB00BB'>infinity</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
|
|
image_dataset_file <b><a name='boxes_match_label'></a>boxes_match_label</b><font face='Lucida Console'>(</font> |
|
<font color='#0000FF'>const</font> std::string<font color='#5555FF'>&</font> label |
|
<font face='Lucida Console'>)</font> <font color='#0000FF'>const</font> |
|
<b>{</b> |
|
image_dataset_file <font color='#BB00BB'>temp</font><font face='Lucida Console'>(</font><font color='#5555FF'>*</font><font color='#0000FF'>this</font><font face='Lucida Console'>)</font>; |
|
temp._labels.<font color='#BB00BB'>insert</font><font face='Lucida Console'>(</font>label<font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>return</font> temp; |
|
<b>}</b> |
|
|
|
image_dataset_file <b><a name='skip_empty_images'></a>skip_empty_images</b><font face='Lucida Console'>(</font> |
|
<font face='Lucida Console'>)</font> <font color='#0000FF'>const</font> |
|
<b>{</b> |
|
image_dataset_file <font color='#BB00BB'>temp</font><font face='Lucida Console'>(</font><font color='#5555FF'>*</font><font color='#0000FF'>this</font><font face='Lucida Console'>)</font>; |
|
temp._skip_empty_images <font color='#5555FF'>=</font> <font color='#979000'>true</font>; |
|
<font color='#0000FF'>return</font> temp; |
|
<b>}</b> |
|
|
|
image_dataset_file <b><a name='boxes_have_parts'></a>boxes_have_parts</b><font face='Lucida Console'>(</font> |
|
<font face='Lucida Console'>)</font> <font color='#0000FF'>const</font> |
|
<b>{</b> |
|
image_dataset_file <font color='#BB00BB'>temp</font><font face='Lucida Console'>(</font><font color='#5555FF'>*</font><font color='#0000FF'>this</font><font face='Lucida Console'>)</font>; |
|
temp._have_parts <font color='#5555FF'>=</font> <font color='#979000'>true</font>; |
|
<font color='#0000FF'>return</font> temp; |
|
<b>}</b> |
|
|
|
image_dataset_file <b><a name='shrink_big_images'></a>shrink_big_images</b><font face='Lucida Console'>(</font> |
|
<font color='#0000FF'><u>double</u></font> new_box_area_thresh <font color='#5555FF'>=</font> <font color='#979000'>150</font><font color='#5555FF'>*</font><font color='#979000'>150</font> |
|
<font face='Lucida Console'>)</font> <font color='#0000FF'>const</font> |
|
<b>{</b> |
|
image_dataset_file <font color='#BB00BB'>temp</font><font face='Lucida Console'>(</font><font color='#5555FF'>*</font><font color='#0000FF'>this</font><font face='Lucida Console'>)</font>; |
|
temp._box_area_thresh <font color='#5555FF'>=</font> new_box_area_thresh; |
|
<font color='#0000FF'>return</font> temp; |
|
<b>}</b> |
|
|
|
<font color='#0000FF'><u>bool</u></font> <b><a name='should_load_box'></a>should_load_box</b> <font face='Lucida Console'>(</font> |
|
<font color='#0000FF'>const</font> image_dataset_metadata::box<font color='#5555FF'>&</font> box |
|
<font face='Lucida Console'>)</font> <font color='#0000FF'>const</font> |
|
<b>{</b> |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>_have_parts <font color='#5555FF'>&</font><font color='#5555FF'>&</font> box.parts.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#5555FF'>=</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font> |
|
<font color='#0000FF'>return</font> <font color='#979000'>false</font>; |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>_labels.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#5555FF'>=</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font> |
|
<font color='#0000FF'>return</font> <font color='#979000'>true</font>; |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>_labels.<font color='#BB00BB'>count</font><font face='Lucida Console'>(</font>box.label<font face='Lucida Console'>)</font> <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font> |
|
<font color='#0000FF'>return</font> <font color='#979000'>true</font>; |
|
<font color='#0000FF'>return</font> <font color='#979000'>false</font>; |
|
<b>}</b> |
|
|
|
<font color='#0000FF'>const</font> std::string<font color='#5555FF'>&</font> <b><a name='get_filename'></a>get_filename</b><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#0000FF'>const</font> <b>{</b> <font color='#0000FF'>return</font> _filename; <b>}</b> |
|
<font color='#0000FF'><u>bool</u></font> <b><a name='should_skip_empty_images'></a>should_skip_empty_images</b><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#0000FF'>const</font> <b>{</b> <font color='#0000FF'>return</font> _skip_empty_images; <b>}</b> |
|
<font color='#0000FF'><u>bool</u></font> <b><a name='should_boxes_have_parts'></a>should_boxes_have_parts</b><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#0000FF'>const</font> <b>{</b> <font color='#0000FF'>return</font> _have_parts; <b>}</b> |
|
<font color='#0000FF'><u>double</u></font> <b><a name='box_area_thresh'></a>box_area_thresh</b><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#0000FF'>const</font> <b>{</b> <font color='#0000FF'>return</font> _box_area_thresh; <b>}</b> |
|
<font color='#0000FF'>const</font> std::set<font color='#5555FF'><</font>std::string<font color='#5555FF'>></font><font color='#5555FF'>&</font> <b><a name='get_selected_box_labels'></a>get_selected_box_labels</b><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#0000FF'>const</font> <b>{</b> <font color='#0000FF'>return</font> _labels; <b>}</b> |
|
|
|
<font color='#0000FF'>private</font>: |
|
std::string _filename; |
|
std::set<font color='#5555FF'><</font>std::string<font color='#5555FF'>></font> _labels; |
|
<font color='#0000FF'><u>bool</u></font> _skip_empty_images; |
|
<font color='#0000FF'><u>bool</u></font> _have_parts; |
|
<font color='#0000FF'><u>double</u></font> _box_area_thresh; |
|
|
|
<b>}</b>; |
|
|
|
<font color='#009900'>// ---------------------------------------------------------------------------------------- |
|
</font> |
|
<font color='#0000FF'>template</font> <font color='#5555FF'><</font> |
|
<font color='#0000FF'>typename</font> array_type |
|
<font color='#5555FF'>></font> |
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>rectangle<font color='#5555FF'>></font> <font color='#5555FF'>></font> <b><a name='load_image_dataset'></a>load_image_dataset</b> <font face='Lucida Console'>(</font> |
|
array_type<font color='#5555FF'>&</font> images, |
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>rectangle<font color='#5555FF'>></font> <font color='#5555FF'>></font><font color='#5555FF'>&</font> object_locations, |
|
<font color='#0000FF'>const</font> image_dataset_file<font color='#5555FF'>&</font> source |
|
<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
images.<font color='#BB00BB'>clear</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
object_locations.<font color='#BB00BB'>clear</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
|
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>rectangle<font color='#5555FF'>></font> <font color='#5555FF'>></font> ignored_rects; |
|
|
|
<font color='#0000FF'>using</font> <font color='#0000FF'>namespace</font> dlib::image_dataset_metadata; |
|
dataset data; |
|
<font color='#BB00BB'>load_image_dataset_metadata</font><font face='Lucida Console'>(</font>data, source.<font color='#BB00BB'>get_filename</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
|
|
<font color='#009900'>// Set the current directory to be the one that contains the |
|
</font> <font color='#009900'>// metadata file. We do this because the file might contain |
|
</font> <font color='#009900'>// file paths which are relative to this folder. |
|
</font> locally_change_current_dir <font color='#BB00BB'>chdir</font><font face='Lucida Console'>(</font><font color='#BB00BB'>get_parent_directory</font><font face='Lucida Console'>(</font><font color='#BB00BB'>file</font><font face='Lucida Console'>(</font>source.<font color='#BB00BB'>get_filename</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
|
|
|
|
<font color='#0000FF'>typedef</font> <font color='#0000FF'>typename</font> array_type::value_type image_type; |
|
|
|
|
|
image_type img; |
|
std::vector<font color='#5555FF'><</font>rectangle<font color='#5555FF'>></font> rects, ignored; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'><u>unsigned</u></font> <font color='#0000FF'><u>long</u></font> i <font color='#5555FF'>=</font> <font color='#979000'>0</font>; i <font color='#5555FF'><</font> data.images.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; <font color='#5555FF'>+</font><font color='#5555FF'>+</font>i<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'><u>double</u></font> min_rect_size <font color='#5555FF'>=</font> std::numeric_limits<font color='#5555FF'><</font><font color='#0000FF'><u>double</u></font><font color='#5555FF'>></font>::<font color='#BB00BB'>infinity</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
rects.<font color='#BB00BB'>clear</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
ignored.<font color='#BB00BB'>clear</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'><u>unsigned</u></font> <font color='#0000FF'><u>long</u></font> j <font color='#5555FF'>=</font> <font color='#979000'>0</font>; j <font color='#5555FF'><</font> data.images[i].boxes.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; <font color='#5555FF'>+</font><font color='#5555FF'>+</font>j<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>source.<font color='#BB00BB'>should_load_box</font><font face='Lucida Console'>(</font>data.images[i].boxes[j]<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>data.images[i].boxes[j].ignore<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
ignored.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font>data.images[i].boxes[j].rect<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<font color='#0000FF'>else</font> |
|
<b>{</b> |
|
rects.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font>data.images[i].boxes[j].rect<font face='Lucida Console'>)</font>; |
|
min_rect_size <font color='#5555FF'>=</font> std::min<font color='#5555FF'><</font><font color='#0000FF'><u>double</u></font><font color='#5555FF'>></font><font face='Lucida Console'>(</font>min_rect_size, rects.<font color='#BB00BB'>back</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>.<font color='#BB00BB'>area</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<b>}</b> |
|
<b>}</b> |
|
|
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font color='#5555FF'>!</font>source.<font color='#BB00BB'>should_skip_empty_images</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#5555FF'>|</font><font color='#5555FF'>|</font> rects.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#BB00BB'>load_image</font><font face='Lucida Console'>(</font>img, data.images[i].filename<font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>rects.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#009900'>// if shrinking the image would still result in the smallest box being |
|
</font> <font color='#009900'>// bigger than the box area threshold then shrink the image. |
|
</font> <font color='#0000FF'>while</font><font face='Lucida Console'>(</font>min_rect_size<font color='#5555FF'>/</font><font color='#979000'>2</font><font color='#5555FF'>/</font><font color='#979000'>2</font> <font color='#5555FF'>></font> source.<font color='#BB00BB'>box_area_thresh</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
pyramid_down<font color='#5555FF'><</font><font color='#979000'>2</font><font color='#5555FF'>></font> pyr; |
|
<font color='#BB00BB'>pyr</font><font face='Lucida Console'>(</font>img<font face='Lucida Console'>)</font>; |
|
min_rect_size <font color='#5555FF'>*</font><font color='#5555FF'>=</font> <font face='Lucida Console'>(</font><font color='#979000'>1.0</font><font color='#5555FF'>/</font><font color='#979000'>2.0</font><font face='Lucida Console'>)</font><font color='#5555FF'>*</font><font face='Lucida Console'>(</font><font color='#979000'>1.0</font><font color='#5555FF'>/</font><font color='#979000'>2.0</font><font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'>auto</font><font color='#5555FF'>&</font><font color='#5555FF'>&</font> r : rects<font face='Lucida Console'>)</font> |
|
r <font color='#5555FF'>=</font> pyr.<font color='#BB00BB'>rect_down</font><font face='Lucida Console'>(</font>r<font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'>auto</font><font color='#5555FF'>&</font><font color='#5555FF'>&</font> r : ignored<font face='Lucida Console'>)</font> |
|
r <font color='#5555FF'>=</font> pyr.<font color='#BB00BB'>rect_down</font><font face='Lucida Console'>(</font>r<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<font color='#0000FF'>while</font><font face='Lucida Console'>(</font>min_rect_size<font color='#5555FF'>*</font><font face='Lucida Console'>(</font><font color='#979000'>2.0</font><font color='#5555FF'>/</font><font color='#979000'>3.0</font><font face='Lucida Console'>)</font><font color='#5555FF'>*</font><font face='Lucida Console'>(</font><font color='#979000'>2.0</font><font color='#5555FF'>/</font><font color='#979000'>3.0</font><font face='Lucida Console'>)</font> <font color='#5555FF'>></font> source.<font color='#BB00BB'>box_area_thresh</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
pyramid_down<font color='#5555FF'><</font><font color='#979000'>3</font><font color='#5555FF'>></font> pyr; |
|
<font color='#BB00BB'>pyr</font><font face='Lucida Console'>(</font>img<font face='Lucida Console'>)</font>; |
|
min_rect_size <font color='#5555FF'>*</font><font color='#5555FF'>=</font> <font face='Lucida Console'>(</font><font color='#979000'>2.0</font><font color='#5555FF'>/</font><font color='#979000'>3.0</font><font face='Lucida Console'>)</font><font color='#5555FF'>*</font><font face='Lucida Console'>(</font><font color='#979000'>2.0</font><font color='#5555FF'>/</font><font color='#979000'>3.0</font><font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'>auto</font><font color='#5555FF'>&</font><font color='#5555FF'>&</font> r : rects<font face='Lucida Console'>)</font> |
|
r <font color='#5555FF'>=</font> pyr.<font color='#BB00BB'>rect_down</font><font face='Lucida Console'>(</font>r<font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'>auto</font><font color='#5555FF'>&</font><font color='#5555FF'>&</font> r : ignored<font face='Lucida Console'>)</font> |
|
r <font color='#5555FF'>=</font> pyr.<font color='#BB00BB'>rect_down</font><font face='Lucida Console'>(</font>r<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<b>}</b> |
|
images.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font>img<font face='Lucida Console'>)</font>; |
|
object_locations.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font>rects<font face='Lucida Console'>)</font>; |
|
ignored_rects.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font>ignored<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<b>}</b> |
|
|
|
<font color='#0000FF'>return</font> ignored_rects; |
|
<b>}</b> |
|
|
|
<font color='#009900'>// ---------------------------------------------------------------------------------------- |
|
</font> |
|
<font color='#0000FF'>namespace</font> impl |
|
<b>{</b> |
|
<font color='#0000FF'>inline</font> <font color='#0000FF'><u>size_t</u></font> <b><a name='num_non_ignored_boxes'></a>num_non_ignored_boxes</b> <font face='Lucida Console'>(</font><font color='#0000FF'>const</font> std::vector<font color='#5555FF'><</font>mmod_rect<font color='#5555FF'>></font><font color='#5555FF'>&</font> rects<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'><u>size_t</u></font> cnt <font color='#5555FF'>=</font> <font color='#979000'>0</font>; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'>auto</font><font color='#5555FF'>&</font> b : rects<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font color='#5555FF'>!</font>b.ignore<font face='Lucida Console'>)</font> |
|
cnt<font color='#5555FF'>+</font><font color='#5555FF'>+</font>; |
|
<b>}</b> |
|
<font color='#0000FF'>return</font> cnt; |
|
<b>}</b> |
|
<b>}</b> |
|
|
|
<font color='#0000FF'>template</font> <font color='#5555FF'><</font> |
|
<font color='#0000FF'>typename</font> array_type |
|
<font color='#5555FF'>></font> |
|
<font color='#0000FF'><u>void</u></font> <b><a name='load_image_dataset'></a>load_image_dataset</b> <font face='Lucida Console'>(</font> |
|
array_type<font color='#5555FF'>&</font> images, |
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>mmod_rect<font color='#5555FF'>></font> <font color='#5555FF'>></font><font color='#5555FF'>&</font> object_locations, |
|
<font color='#0000FF'>const</font> image_dataset_file<font color='#5555FF'>&</font> source |
|
<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
images.<font color='#BB00BB'>clear</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
object_locations.<font color='#BB00BB'>clear</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
|
|
<font color='#0000FF'>using</font> <font color='#0000FF'>namespace</font> dlib::image_dataset_metadata; |
|
dataset data; |
|
<font color='#BB00BB'>load_image_dataset_metadata</font><font face='Lucida Console'>(</font>data, source.<font color='#BB00BB'>get_filename</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
|
|
<font color='#009900'>// Set the current directory to be the one that contains the |
|
</font> <font color='#009900'>// metadata file. We do this because the file might contain |
|
</font> <font color='#009900'>// file paths which are relative to this folder. |
|
</font> locally_change_current_dir <font color='#BB00BB'>chdir</font><font face='Lucida Console'>(</font><font color='#BB00BB'>get_parent_directory</font><font face='Lucida Console'>(</font><font color='#BB00BB'>file</font><font face='Lucida Console'>(</font>source.<font color='#BB00BB'>get_filename</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
|
|
<font color='#0000FF'>typedef</font> <font color='#0000FF'>typename</font> array_type::value_type image_type; |
|
|
|
image_type img; |
|
std::vector<font color='#5555FF'><</font>mmod_rect<font color='#5555FF'>></font> rects; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'><u>unsigned</u></font> <font color='#0000FF'><u>long</u></font> i <font color='#5555FF'>=</font> <font color='#979000'>0</font>; i <font color='#5555FF'><</font> data.images.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; <font color='#5555FF'>+</font><font color='#5555FF'>+</font>i<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'><u>double</u></font> min_rect_size <font color='#5555FF'>=</font> std::numeric_limits<font color='#5555FF'><</font><font color='#0000FF'><u>double</u></font><font color='#5555FF'>></font>::<font color='#BB00BB'>infinity</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
rects.<font color='#BB00BB'>clear</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'><u>unsigned</u></font> <font color='#0000FF'><u>long</u></font> j <font color='#5555FF'>=</font> <font color='#979000'>0</font>; j <font color='#5555FF'><</font> data.images[i].boxes.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; <font color='#5555FF'>+</font><font color='#5555FF'>+</font>j<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>source.<font color='#BB00BB'>should_load_box</font><font face='Lucida Console'>(</font>data.images[i].boxes[j]<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>data.images[i].boxes[j].ignore<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
rects.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font><font color='#BB00BB'>ignored_mmod_rect</font><font face='Lucida Console'>(</font>data.images[i].boxes[j].rect<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<font color='#0000FF'>else</font> |
|
<b>{</b> |
|
rects.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font><font color='#BB00BB'>mmod_rect</font><font face='Lucida Console'>(</font>data.images[i].boxes[j].rect<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
min_rect_size <font color='#5555FF'>=</font> std::min<font color='#5555FF'><</font><font color='#0000FF'><u>double</u></font><font color='#5555FF'>></font><font face='Lucida Console'>(</font>min_rect_size, rects.<font color='#BB00BB'>back</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>.rect.<font color='#BB00BB'>area</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
rects.<font color='#BB00BB'>back</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>.label <font color='#5555FF'>=</font> data.images[i].boxes[j].label; |
|
|
|
<b>}</b> |
|
<b>}</b> |
|
|
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font color='#5555FF'>!</font>source.<font color='#BB00BB'>should_skip_empty_images</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#5555FF'>|</font><font color='#5555FF'>|</font> impl::<font color='#BB00BB'>num_non_ignored_boxes</font><font face='Lucida Console'>(</font>rects<font face='Lucida Console'>)</font> <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#BB00BB'>load_image</font><font face='Lucida Console'>(</font>img, data.images[i].filename<font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>rects.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#009900'>// if shrinking the image would still result in the smallest box being |
|
</font> <font color='#009900'>// bigger than the box area threshold then shrink the image. |
|
</font> <font color='#0000FF'>while</font><font face='Lucida Console'>(</font>min_rect_size<font color='#5555FF'>/</font><font color='#979000'>2</font><font color='#5555FF'>/</font><font color='#979000'>2</font> <font color='#5555FF'>></font> source.<font color='#BB00BB'>box_area_thresh</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
pyramid_down<font color='#5555FF'><</font><font color='#979000'>2</font><font color='#5555FF'>></font> pyr; |
|
<font color='#BB00BB'>pyr</font><font face='Lucida Console'>(</font>img<font face='Lucida Console'>)</font>; |
|
min_rect_size <font color='#5555FF'>*</font><font color='#5555FF'>=</font> <font face='Lucida Console'>(</font><font color='#979000'>1.0</font><font color='#5555FF'>/</font><font color='#979000'>2.0</font><font face='Lucida Console'>)</font><font color='#5555FF'>*</font><font face='Lucida Console'>(</font><font color='#979000'>1.0</font><font color='#5555FF'>/</font><font color='#979000'>2.0</font><font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'>auto</font><font color='#5555FF'>&</font><font color='#5555FF'>&</font> r : rects<font face='Lucida Console'>)</font> |
|
r.rect <font color='#5555FF'>=</font> pyr.<font color='#BB00BB'>rect_down</font><font face='Lucida Console'>(</font>r.rect<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<font color='#0000FF'>while</font><font face='Lucida Console'>(</font>min_rect_size<font color='#5555FF'>*</font><font face='Lucida Console'>(</font><font color='#979000'>2.0</font><font color='#5555FF'>/</font><font color='#979000'>3.0</font><font face='Lucida Console'>)</font><font color='#5555FF'>*</font><font face='Lucida Console'>(</font><font color='#979000'>2.0</font><font color='#5555FF'>/</font><font color='#979000'>3.0</font><font face='Lucida Console'>)</font> <font color='#5555FF'>></font> source.<font color='#BB00BB'>box_area_thresh</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
pyramid_down<font color='#5555FF'><</font><font color='#979000'>3</font><font color='#5555FF'>></font> pyr; |
|
<font color='#BB00BB'>pyr</font><font face='Lucida Console'>(</font>img<font face='Lucida Console'>)</font>; |
|
min_rect_size <font color='#5555FF'>*</font><font color='#5555FF'>=</font> <font face='Lucida Console'>(</font><font color='#979000'>2.0</font><font color='#5555FF'>/</font><font color='#979000'>3.0</font><font face='Lucida Console'>)</font><font color='#5555FF'>*</font><font face='Lucida Console'>(</font><font color='#979000'>2.0</font><font color='#5555FF'>/</font><font color='#979000'>3.0</font><font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'>auto</font><font color='#5555FF'>&</font><font color='#5555FF'>&</font> r : rects<font face='Lucida Console'>)</font> |
|
r.rect <font color='#5555FF'>=</font> pyr.<font color='#BB00BB'>rect_down</font><font face='Lucida Console'>(</font>r.rect<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<b>}</b> |
|
images.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font>std::<font color='#BB00BB'>move</font><font face='Lucida Console'>(</font>img<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
object_locations.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font>std::<font color='#BB00BB'>move</font><font face='Lucida Console'>(</font>rects<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<b>}</b> |
|
<b>}</b> |
|
|
|
<font color='#009900'>// ---------------------------------------------------------------------------------------- |
|
</font> |
|
<font color='#009900'>// ******* THIS FUNCTION IS DEPRECATED, you should use another version of load_image_dataset() ******* |
|
</font> <font color='#0000FF'>template</font> <font color='#5555FF'><</font> |
|
<font color='#0000FF'>typename</font> image_type, |
|
<font color='#0000FF'>typename</font> MM |
|
<font color='#5555FF'>></font> |
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>rectangle<font color='#5555FF'>></font> <font color='#5555FF'>></font> <b><a name='load_image_dataset'></a>load_image_dataset</b> <font face='Lucida Console'>(</font> |
|
array<font color='#5555FF'><</font>image_type,MM<font color='#5555FF'>></font><font color='#5555FF'>&</font> images, |
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>rectangle<font color='#5555FF'>></font> <font color='#5555FF'>></font><font color='#5555FF'>&</font> object_locations, |
|
<font color='#0000FF'>const</font> std::string<font color='#5555FF'>&</font> filename, |
|
<font color='#0000FF'>const</font> std::string<font color='#5555FF'>&</font> label, |
|
<font color='#0000FF'><u>bool</u></font> skip_empty_images <font color='#5555FF'>=</font> <font color='#979000'>false</font> |
|
<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
image_dataset_file <font color='#BB00BB'>f</font><font face='Lucida Console'>(</font>filename<font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>label.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font> |
|
f <font color='#5555FF'>=</font> f.<font color='#BB00BB'>boxes_match_label</font><font face='Lucida Console'>(</font>label<font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>skip_empty_images<font face='Lucida Console'>)</font> |
|
f <font color='#5555FF'>=</font> f.<font color='#BB00BB'>skip_empty_images</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>return</font> <font color='#BB00BB'>load_image_dataset</font><font face='Lucida Console'>(</font>images, object_locations, f<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
|
|
<font color='#009900'>// ---------------------------------------------------------------------------------------- |
|
</font> |
|
<font color='#0000FF'>template</font> <font color='#5555FF'><</font> |
|
<font color='#0000FF'>typename</font> array_type |
|
<font color='#5555FF'>></font> |
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>rectangle<font color='#5555FF'>></font> <font color='#5555FF'>></font> <b><a name='load_image_dataset'></a>load_image_dataset</b> <font face='Lucida Console'>(</font> |
|
array_type<font color='#5555FF'>&</font> images, |
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>rectangle<font color='#5555FF'>></font> <font color='#5555FF'>></font><font color='#5555FF'>&</font> object_locations, |
|
<font color='#0000FF'>const</font> std::string<font color='#5555FF'>&</font> filename |
|
<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'>return</font> <font color='#BB00BB'>load_image_dataset</font><font face='Lucida Console'>(</font>images, object_locations, <font color='#BB00BB'>image_dataset_file</font><font face='Lucida Console'>(</font>filename<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
|
|
<font color='#009900'>// ---------------------------------------------------------------------------------------- |
|
</font> |
|
<font color='#0000FF'>template</font> <font color='#5555FF'><</font> |
|
<font color='#0000FF'>typename</font> array_type |
|
<font color='#5555FF'>></font> |
|
<font color='#0000FF'><u>void</u></font> <b><a name='load_image_dataset'></a>load_image_dataset</b> <font face='Lucida Console'>(</font> |
|
array_type<font color='#5555FF'>&</font> images, |
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>mmod_rect<font color='#5555FF'>></font><font color='#5555FF'>></font><font color='#5555FF'>&</font> object_locations, |
|
<font color='#0000FF'>const</font> std::string<font color='#5555FF'>&</font> filename |
|
<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#BB00BB'>load_image_dataset</font><font face='Lucida Console'>(</font>images, object_locations, <font color='#BB00BB'>image_dataset_file</font><font face='Lucida Console'>(</font>filename<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
|
|
<font color='#009900'>// ---------------------------------------------------------------------------------------- |
|
</font><font color='#009900'>// ---------------------------------------------------------------------------------------- |
|
</font><font color='#009900'>// ---------------------------------------------------------------------------------------- |
|
</font> |
|
<font color='#0000FF'>template</font> <font color='#5555FF'><</font> |
|
<font color='#0000FF'>typename</font> array_type |
|
<font color='#5555FF'>></font> |
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>rectangle<font color='#5555FF'>></font> <font color='#5555FF'>></font> <b><a name='load_image_dataset'></a>load_image_dataset</b> <font face='Lucida Console'>(</font> |
|
array_type<font color='#5555FF'>&</font> images, |
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>full_object_detection<font color='#5555FF'>></font> <font color='#5555FF'>></font><font color='#5555FF'>&</font> object_locations, |
|
<font color='#0000FF'>const</font> image_dataset_file<font color='#5555FF'>&</font> source, |
|
std::vector<font color='#5555FF'><</font>std::string<font color='#5555FF'>></font><font color='#5555FF'>&</font> parts_list |
|
<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'>typedef</font> <font color='#0000FF'>typename</font> array_type::value_type image_type; |
|
parts_list.<font color='#BB00BB'>clear</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
images.<font color='#BB00BB'>clear</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
object_locations.<font color='#BB00BB'>clear</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
|
|
<font color='#0000FF'>using</font> <font color='#0000FF'>namespace</font> dlib::image_dataset_metadata; |
|
dataset data; |
|
<font color='#BB00BB'>load_image_dataset_metadata</font><font face='Lucida Console'>(</font>data, source.<font color='#BB00BB'>get_filename</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
|
|
<font color='#009900'>// Set the current directory to be the one that contains the |
|
</font> <font color='#009900'>// metadata file. We do this because the file might contain |
|
</font> <font color='#009900'>// file paths which are relative to this folder. |
|
</font> locally_change_current_dir <font color='#BB00BB'>chdir</font><font face='Lucida Console'>(</font><font color='#BB00BB'>get_parent_directory</font><font face='Lucida Console'>(</font><font color='#BB00BB'>file</font><font face='Lucida Console'>(</font>source.<font color='#BB00BB'>get_filename</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
|
|
|
|
std::set<font color='#5555FF'><</font>std::string<font color='#5555FF'>></font> all_parts; |
|
|
|
<font color='#009900'>// find out what parts are being used in the dataset. Store results in all_parts. |
|
</font> <font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'><u>unsigned</u></font> <font color='#0000FF'><u>long</u></font> i <font color='#5555FF'>=</font> <font color='#979000'>0</font>; i <font color='#5555FF'><</font> data.images.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; <font color='#5555FF'>+</font><font color='#5555FF'>+</font>i<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'><u>unsigned</u></font> <font color='#0000FF'><u>long</u></font> j <font color='#5555FF'>=</font> <font color='#979000'>0</font>; j <font color='#5555FF'><</font> data.images[i].boxes.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; <font color='#5555FF'>+</font><font color='#5555FF'>+</font>j<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>source.<font color='#BB00BB'>should_load_box</font><font face='Lucida Console'>(</font>data.images[i].boxes[j]<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'>const</font> std::map<font color='#5555FF'><</font>std::string,point<font color='#5555FF'>></font><font color='#5555FF'>&</font> parts <font color='#5555FF'>=</font> data.images[i].boxes[j].parts; |
|
std::map<font color='#5555FF'><</font>std::string,point<font color='#5555FF'>></font>::const_iterator itr; |
|
|
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font>itr <font color='#5555FF'>=</font> parts.<font color='#BB00BB'>begin</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; itr <font color='#5555FF'>!</font><font color='#5555FF'>=</font> parts.<font color='#BB00BB'>end</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; <font color='#5555FF'>+</font><font color='#5555FF'>+</font>itr<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
all_parts.<font color='#BB00BB'>insert</font><font face='Lucida Console'>(</font>itr<font color='#5555FF'>-</font><font color='#5555FF'>></font>first<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<b>}</b> |
|
<b>}</b> |
|
<b>}</b> |
|
|
|
<font color='#009900'>// make a mapping between part names and the integers [0, all_parts.size()) |
|
</font> std::map<font color='#5555FF'><</font>std::string,<font color='#0000FF'><u>int</u></font><font color='#5555FF'>></font> parts_idx; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font>std::set<font color='#5555FF'><</font>std::string<font color='#5555FF'>></font>::iterator i <font color='#5555FF'>=</font> all_parts.<font color='#BB00BB'>begin</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; i <font color='#5555FF'>!</font><font color='#5555FF'>=</font> all_parts.<font color='#BB00BB'>end</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; <font color='#5555FF'>+</font><font color='#5555FF'>+</font>i<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
parts_idx[<font color='#5555FF'>*</font>i] <font color='#5555FF'>=</font> parts_list.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
parts_list.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font><font color='#5555FF'>*</font>i<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
|
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>rectangle<font color='#5555FF'>></font> <font color='#5555FF'>></font> ignored_rects; |
|
std::vector<font color='#5555FF'><</font>rectangle<font color='#5555FF'>></font> ignored; |
|
image_type img; |
|
std::vector<font color='#5555FF'><</font>full_object_detection<font color='#5555FF'>></font> object_dets; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'><u>unsigned</u></font> <font color='#0000FF'><u>long</u></font> i <font color='#5555FF'>=</font> <font color='#979000'>0</font>; i <font color='#5555FF'><</font> data.images.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; <font color='#5555FF'>+</font><font color='#5555FF'>+</font>i<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'><u>double</u></font> min_rect_size <font color='#5555FF'>=</font> std::numeric_limits<font color='#5555FF'><</font><font color='#0000FF'><u>double</u></font><font color='#5555FF'>></font>::<font color='#BB00BB'>infinity</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
object_dets.<font color='#BB00BB'>clear</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
ignored.<font color='#BB00BB'>clear</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'><u>unsigned</u></font> <font color='#0000FF'><u>long</u></font> j <font color='#5555FF'>=</font> <font color='#979000'>0</font>; j <font color='#5555FF'><</font> data.images[i].boxes.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; <font color='#5555FF'>+</font><font color='#5555FF'>+</font>j<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>source.<font color='#BB00BB'>should_load_box</font><font face='Lucida Console'>(</font>data.images[i].boxes[j]<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>data.images[i].boxes[j].ignore<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
ignored.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font>data.images[i].boxes[j].rect<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<font color='#0000FF'>else</font> |
|
<b>{</b> |
|
std::vector<font color='#5555FF'><</font>point<font color='#5555FF'>></font> <font color='#BB00BB'>partlist</font><font face='Lucida Console'>(</font>parts_idx.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>, OBJECT_PART_NOT_PRESENT<font face='Lucida Console'>)</font>; |
|
|
|
<font color='#009900'>// populate partlist with all the parts present in this box. |
|
</font> <font color='#0000FF'>const</font> std::map<font color='#5555FF'><</font>std::string,point<font color='#5555FF'>></font><font color='#5555FF'>&</font> parts <font color='#5555FF'>=</font> data.images[i].boxes[j].parts; |
|
std::map<font color='#5555FF'><</font>std::string,point<font color='#5555FF'>></font>::const_iterator itr; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font>itr <font color='#5555FF'>=</font> parts.<font color='#BB00BB'>begin</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; itr <font color='#5555FF'>!</font><font color='#5555FF'>=</font> parts.<font color='#BB00BB'>end</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; <font color='#5555FF'>+</font><font color='#5555FF'>+</font>itr<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
partlist[parts_idx[itr<font color='#5555FF'>-</font><font color='#5555FF'>></font>first]] <font color='#5555FF'>=</font> itr<font color='#5555FF'>-</font><font color='#5555FF'>></font>second; |
|
<b>}</b> |
|
|
|
object_dets.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font><font color='#BB00BB'>full_object_detection</font><font face='Lucida Console'>(</font>data.images[i].boxes[j].rect, partlist<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
min_rect_size <font color='#5555FF'>=</font> std::min<font color='#5555FF'><</font><font color='#0000FF'><u>double</u></font><font color='#5555FF'>></font><font face='Lucida Console'>(</font>min_rect_size, object_dets.<font color='#BB00BB'>back</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>.<font color='#BB00BB'>get_rect</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>.<font color='#BB00BB'>area</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<b>}</b> |
|
<b>}</b> |
|
|
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font><font color='#5555FF'>!</font>source.<font color='#BB00BB'>should_skip_empty_images</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#5555FF'>|</font><font color='#5555FF'>|</font> object_dets.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#BB00BB'>load_image</font><font face='Lucida Console'>(</font>img, data.images[i].filename<font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>if</font> <font face='Lucida Console'>(</font>object_dets.<font color='#BB00BB'>size</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#5555FF'>!</font><font color='#5555FF'>=</font> <font color='#979000'>0</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
<font color='#009900'>// if shrinking the image would still result in the smallest box being |
|
</font> <font color='#009900'>// bigger than the box area threshold then shrink the image. |
|
</font> <font color='#0000FF'>while</font><font face='Lucida Console'>(</font>min_rect_size<font color='#5555FF'>/</font><font color='#979000'>2</font><font color='#5555FF'>/</font><font color='#979000'>2</font> <font color='#5555FF'>></font> source.<font color='#BB00BB'>box_area_thresh</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
pyramid_down<font color='#5555FF'><</font><font color='#979000'>2</font><font color='#5555FF'>></font> pyr; |
|
<font color='#BB00BB'>pyr</font><font face='Lucida Console'>(</font>img<font face='Lucida Console'>)</font>; |
|
min_rect_size <font color='#5555FF'>*</font><font color='#5555FF'>=</font> <font face='Lucida Console'>(</font><font color='#979000'>1.0</font><font color='#5555FF'>/</font><font color='#979000'>2.0</font><font face='Lucida Console'>)</font><font color='#5555FF'>*</font><font face='Lucida Console'>(</font><font color='#979000'>1.0</font><font color='#5555FF'>/</font><font color='#979000'>2.0</font><font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'>auto</font><font color='#5555FF'>&</font><font color='#5555FF'>&</font> r : object_dets<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
r.<font color='#BB00BB'>get_rect</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#5555FF'>=</font> pyr.<font color='#BB00BB'>rect_down</font><font face='Lucida Console'>(</font>r.<font color='#BB00BB'>get_rect</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'><u>unsigned</u></font> <font color='#0000FF'><u>long</u></font> k <font color='#5555FF'>=</font> <font color='#979000'>0</font>; k <font color='#5555FF'><</font> r.<font color='#BB00BB'>num_parts</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; <font color='#5555FF'>+</font><font color='#5555FF'>+</font>k<font face='Lucida Console'>)</font> |
|
r.<font color='#BB00BB'>part</font><font face='Lucida Console'>(</font>k<font face='Lucida Console'>)</font> <font color='#5555FF'>=</font> pyr.<font color='#BB00BB'>point_down</font><font face='Lucida Console'>(</font>r.<font color='#BB00BB'>part</font><font face='Lucida Console'>(</font>k<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'>auto</font><font color='#5555FF'>&</font><font color='#5555FF'>&</font> r : ignored<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
r <font color='#5555FF'>=</font> pyr.<font color='#BB00BB'>rect_down</font><font face='Lucida Console'>(</font>r<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<b>}</b> |
|
<font color='#0000FF'>while</font><font face='Lucida Console'>(</font>min_rect_size<font color='#5555FF'>*</font><font face='Lucida Console'>(</font><font color='#979000'>2.0</font><font color='#5555FF'>/</font><font color='#979000'>3.0</font><font face='Lucida Console'>)</font><font color='#5555FF'>*</font><font face='Lucida Console'>(</font><font color='#979000'>2.0</font><font color='#5555FF'>/</font><font color='#979000'>3.0</font><font face='Lucida Console'>)</font> <font color='#5555FF'>></font> source.<font color='#BB00BB'>box_area_thresh</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
pyramid_down<font color='#5555FF'><</font><font color='#979000'>3</font><font color='#5555FF'>></font> pyr; |
|
<font color='#BB00BB'>pyr</font><font face='Lucida Console'>(</font>img<font face='Lucida Console'>)</font>; |
|
min_rect_size <font color='#5555FF'>*</font><font color='#5555FF'>=</font> <font face='Lucida Console'>(</font><font color='#979000'>2.0</font><font color='#5555FF'>/</font><font color='#979000'>3.0</font><font face='Lucida Console'>)</font><font color='#5555FF'>*</font><font face='Lucida Console'>(</font><font color='#979000'>2.0</font><font color='#5555FF'>/</font><font color='#979000'>3.0</font><font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'>auto</font><font color='#5555FF'>&</font><font color='#5555FF'>&</font> r : object_dets<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
r.<font color='#BB00BB'>get_rect</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font> <font color='#5555FF'>=</font> pyr.<font color='#BB00BB'>rect_down</font><font face='Lucida Console'>(</font>r.<font color='#BB00BB'>get_rect</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'><u>unsigned</u></font> <font color='#0000FF'><u>long</u></font> k <font color='#5555FF'>=</font> <font color='#979000'>0</font>; k <font color='#5555FF'><</font> r.<font color='#BB00BB'>num_parts</font><font face='Lucida Console'>(</font><font face='Lucida Console'>)</font>; <font color='#5555FF'>+</font><font color='#5555FF'>+</font>k<font face='Lucida Console'>)</font> |
|
r.<font color='#BB00BB'>part</font><font face='Lucida Console'>(</font>k<font face='Lucida Console'>)</font> <font color='#5555FF'>=</font> pyr.<font color='#BB00BB'>point_down</font><font face='Lucida Console'>(</font>r.<font color='#BB00BB'>part</font><font face='Lucida Console'>(</font>k<font face='Lucida Console'>)</font><font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<font color='#0000FF'>for</font> <font face='Lucida Console'>(</font><font color='#0000FF'>auto</font><font color='#5555FF'>&</font><font color='#5555FF'>&</font> r : ignored<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
r <font color='#5555FF'>=</font> pyr.<font color='#BB00BB'>rect_down</font><font face='Lucida Console'>(</font>r<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<b>}</b> |
|
<b>}</b> |
|
images.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font>img<font face='Lucida Console'>)</font>; |
|
object_locations.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font>object_dets<font face='Lucida Console'>)</font>; |
|
ignored_rects.<font color='#BB00BB'>push_back</font><font face='Lucida Console'>(</font>ignored<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
<b>}</b> |
|
|
|
|
|
<font color='#0000FF'>return</font> ignored_rects; |
|
<b>}</b> |
|
|
|
<font color='#009900'>// ---------------------------------------------------------------------------------------- |
|
</font> |
|
<font color='#0000FF'>template</font> <font color='#5555FF'><</font> |
|
<font color='#0000FF'>typename</font> array_type |
|
<font color='#5555FF'>></font> |
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>rectangle<font color='#5555FF'>></font> <font color='#5555FF'>></font> <b><a name='load_image_dataset'></a>load_image_dataset</b> <font face='Lucida Console'>(</font> |
|
array_type<font color='#5555FF'>&</font> images, |
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>full_object_detection<font color='#5555FF'>></font> <font color='#5555FF'>></font><font color='#5555FF'>&</font> object_locations, |
|
<font color='#0000FF'>const</font> image_dataset_file<font color='#5555FF'>&</font> source |
|
<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
std::vector<font color='#5555FF'><</font>std::string<font color='#5555FF'>></font> parts_list; |
|
<font color='#0000FF'>return</font> <font color='#BB00BB'>load_image_dataset</font><font face='Lucida Console'>(</font>images, object_locations, source, parts_list<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
|
|
<font color='#009900'>// ---------------------------------------------------------------------------------------- |
|
</font> |
|
<font color='#0000FF'>template</font> <font color='#5555FF'><</font> |
|
<font color='#0000FF'>typename</font> array_type |
|
<font color='#5555FF'>></font> |
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>rectangle<font color='#5555FF'>></font> <font color='#5555FF'>></font> <b><a name='load_image_dataset'></a>load_image_dataset</b> <font face='Lucida Console'>(</font> |
|
array_type<font color='#5555FF'>&</font> images, |
|
std::vector<font color='#5555FF'><</font>std::vector<font color='#5555FF'><</font>full_object_detection<font color='#5555FF'>></font> <font color='#5555FF'>></font><font color='#5555FF'>&</font> object_locations, |
|
<font color='#0000FF'>const</font> std::string<font color='#5555FF'>&</font> filename |
|
<font face='Lucida Console'>)</font> |
|
<b>{</b> |
|
std::vector<font color='#5555FF'><</font>std::string<font color='#5555FF'>></font> parts_list; |
|
<font color='#0000FF'>return</font> <font color='#BB00BB'>load_image_dataset</font><font face='Lucida Console'>(</font>images, object_locations, <font color='#BB00BB'>image_dataset_file</font><font face='Lucida Console'>(</font>filename<font face='Lucida Console'>)</font>, parts_list<font face='Lucida Console'>)</font>; |
|
<b>}</b> |
|
|
|
<font color='#009900'>// ---------------------------------------------------------------------------------------- |
|
</font> |
|
<b>}</b> |
|
|
|
<font color='#0000FF'>#endif</font> <font color='#009900'>// DLIB_LOAD_IMAGE_DaTASET_Hh_ |
|
</font> |
|
|
|
</pre></body></html> |