Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
dlib
Commits
60d474a8
Commit
60d474a8
authored
Sep 01, 2017
by
Davis King
Browse files
merged
parents
0bb3d9f1
972bf3c4
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
101 additions
and
40 deletions
+101
-40
dlib/dnn/layers.h
dlib/dnn/layers.h
+6
-0
dlib/dnn/layers_abstract.h
dlib/dnn/layers_abstract.h
+7
-0
dlib/dnn/tensor.h
dlib/dnn/tensor.h
+4
-1
dlib/gui_widgets/widgets.cpp
dlib/gui_widgets/widgets.cpp
+14
-10
dlib/gui_widgets/widgets_abstract.h
dlib/gui_widgets/widgets_abstract.h
+4
-2
tools/imglab/src/main.cpp
tools/imglab/src/main.cpp
+1
-1
tools/imglab/src/metadata_editor.cpp
tools/imglab/src/metadata_editor.cpp
+15
-25
tools/imglab/src/metadata_editor.h
tools/imglab/src/metadata_editor.h
+50
-1
No files found.
dlib/dnn/layers.h
View file @
60d474a8
...
...
@@ -2916,6 +2916,12 @@ namespace dlib
template
<
typename
SUBNET
>
void
forward
(
const
SUBNET
&
sub
,
resizable_tensor
&
output
)
{
if
(
aout
.
num_samples
()
!=
sub
.
get_output
().
num_samples
())
{
aout
=
alias_tensor
(
sub
.
get_output
().
num_samples
(),
_k
*
_nr
*
_nc
);
ain
=
alias_tensor
(
sub
.
get_output
().
num_samples
(),
sub
.
get_output
().
size
()
/
sub
.
get_output
().
num_samples
());
}
output
.
set_size
(
sub
.
get_output
().
num_samples
(),
_k
,
_nr
,
_nc
);
auto
out
=
aout
(
output
,
0
);
auto
in
=
ain
(
sub
.
get_output
(),
0
);
...
...
dlib/dnn/layers_abstract.h
View file @
60d474a8
...
...
@@ -428,6 +428,13 @@ namespace dlib
defined above. In particular, it defines a fully connected layer that
takes an input tensor and multiplies it by a weight matrix and outputs the
results.
The dimensions of the tensors output by this layer are as follows (letting
IN be the input tensor and OUT the output tensor):
- OUT.num_samples() == IN.num_samples()
- OUT.k() == get_num_outputs()
- OUT.nr() == 1
- OUT.nc() == 1
!*/
public:
...
...
dlib/dnn/tensor.h
View file @
60d474a8
...
...
@@ -617,7 +617,10 @@ namespace dlib
size_t
offset
)
const
{
DLIB_CASSERT
(
offset
+
size
()
<=
t
.
size
());
DLIB_CASSERT
(
offset
+
size
()
<=
t
.
size
(),
"offset: "
<<
offset
<<
"
\n
"
<<
"size(): "
<<
size
()
<<
"
\n
"
<<
"t.size(): "
<<
t
.
size
()
<<
"
\n
"
);
#ifdef DLIB_USE_CUDA
if
(
!
inst
.
cudnn_descriptor
)
...
...
dlib/gui_widgets/widgets.cpp
View file @
60d474a8
...
...
@@ -6277,10 +6277,14 @@ namespace dlib
for
(
unsigned
long
i
=
0
;
i
<
overlay_rects
.
size
();
++
i
)
{
const
rectangle
orect
=
get_rect_on_screen
(
i
);
rgb_alpha_pixel
color
=
overlay_rects
[
i
].
color
;
// draw crossed out boxes slightly faded
if
(
overlay_rects
[
i
].
crossed_out
)
color
.
alpha
=
150
;
if
(
rect_is_selected
&&
selected_rect
==
i
)
{
draw_rectangle
(
c
,
orect
,
invert_pixel
(
overlay_rects
[
i
].
color
),
area
);
draw_rectangle
(
c
,
orect
,
invert_pixel
(
color
),
area
);
}
else
if
(
highlighted_rect
<
overlay_rects
.
size
()
&&
highlighted_rect
==
i
)
{
...
...
@@ -6308,14 +6312,14 @@ namespace dlib
}
else
{
draw_rectangle
(
c
,
orect
,
overlay_rects
[
i
].
color
,
area
);
draw_rectangle
(
c
,
orect
,
color
,
area
);
}
if
(
overlay_rects
[
i
].
label
.
size
()
!=
0
)
{
// make a rectangle that is at the spot we want to draw our string
rectangle
r
(
orect
.
br_corner
(),
c
.
br_corner
());
mfont
->
draw_string
(
c
,
r
,
overlay_rects
[
i
].
label
,
overlay_rects
[
i
].
color
,
0
,
mfont
->
draw_string
(
c
,
r
,
overlay_rects
[
i
].
label
,
color
,
0
,
std
::
string
::
npos
,
area
);
}
...
...
@@ -6332,17 +6336,17 @@ namespace dlib
if
(
rect_is_selected
&&
selected_rect
==
i
&&
selected_part_name
.
size
()
!=
0
&&
selected_part_name
==
itr
->
first
)
{
draw_circle
(
c
,
center
(
temp
),
temp
.
width
()
/
2
,
invert_pixel
(
overlay_rects
[
i
].
color
),
area
);
draw_circle
(
c
,
center
(
temp
),
temp
.
width
()
/
2
,
invert_pixel
(
color
),
area
);
}
else
{
draw_circle
(
c
,
center
(
temp
),
temp
.
width
()
/
2
,
overlay_rects
[
i
].
color
,
area
);
draw_circle
(
c
,
center
(
temp
),
temp
.
width
()
/
2
,
color
,
area
);
}
// make a rectangle that is at the spot we want to draw our string
rectangle
r
((
temp
.
br_corner
()
+
temp
.
bl_corner
())
/
2
,
c
.
br_corner
());
mfont
->
draw_string
(
c
,
r
,
itr
->
first
,
overlay_rects
[
i
].
color
,
0
,
mfont
->
draw_string
(
c
,
r
,
itr
->
first
,
color
,
0
,
std
::
string
::
npos
,
area
);
}
...
...
@@ -6350,13 +6354,13 @@ namespace dlib
{
if
(
rect_is_selected
&&
selected_rect
==
i
)
{
draw_line
(
c
,
orect
.
tl_corner
(),
orect
.
br_corner
(),
invert_pixel
(
overlay_rects
[
i
].
color
),
area
);
draw_line
(
c
,
orect
.
bl_corner
(),
orect
.
tr_corner
(),
invert_pixel
(
overlay_rects
[
i
].
color
),
area
);
draw_line
(
c
,
orect
.
tl_corner
(),
orect
.
br_corner
(),
invert_pixel
(
color
),
area
);
draw_line
(
c
,
orect
.
bl_corner
(),
orect
.
tr_corner
(),
invert_pixel
(
color
),
area
);
}
else
{
draw_line
(
c
,
orect
.
tl_corner
(),
orect
.
br_corner
(),
overlay_rects
[
i
].
color
,
area
);
draw_line
(
c
,
orect
.
bl_corner
(),
orect
.
tr_corner
(),
overlay_rects
[
i
].
color
,
area
);
draw_line
(
c
,
orect
.
tl_corner
(),
orect
.
br_corner
(),
color
,
area
);
draw_line
(
c
,
orect
.
bl_corner
(),
orect
.
tr_corner
(),
color
,
area
);
}
}
}
...
...
dlib/gui_widgets/widgets_abstract.h
View file @
60d474a8
...
...
@@ -2801,7 +2801,7 @@ namespace dlib
>
void
set_image_clicked_handler
(
T
&
object
,
void
(
T
::*
event_handler
)(
const
point
&
p
,
bool
is_double_click
)
void
(
T
::*
event_handler
)(
const
point
&
p
,
bool
is_double_click
,
unsigned
long
btn
)
);
/*
requires
...
...
@@ -2811,6 +2811,7 @@ namespace dlib
anywhere on the image. When they do so this callback is called with the
location of the image pixel which was clicked. The is_double_click bool
will also tell you if it was a double click or single click.
- btn == the button that was released. (either base_window::LEFT, base_window::MIDDLE, or base_window::RIGHT)
- any previous calls to this function are overridden by this new call.
(i.e. you can only have one event handler associated with this
event at a time)
...
...
@@ -2819,7 +2820,7 @@ namespace dlib
*/
void
set_image_clicked_handler
(
const
any_function
<
void
(
const
point
&
p
,
bool
is_double_click
)
>&
event_handler
const
any_function
<
void
(
const
point
&
p
,
bool
is_double_click
,
unsigned
long
btn
)
>&
event_handler
);
/*
ensures
...
...
@@ -2827,6 +2828,7 @@ namespace dlib
on the image. When they do so this callback is called with the location
of the image pixel which was clicked. The is_double_click bool will also
tell you if it was a double click or single click.
- btn == the button that was released. (either base_window::LEFT, base_window::MIDDLE, or base_window::RIGHT)
- Any previous calls to this function are overridden by this new call.
(i.e. you can only have one event handler associated with this event at a
time)
...
...
tools/imglab/src/main.cpp
View file @
60d474a8
...
...
@@ -20,7 +20,7 @@
#include <dlib/dir_nav.h>
const
char
*
VERSION
=
"1.1
1
"
;
const
char
*
VERSION
=
"1.1
2
"
;
const
int
JPEG_QUALITY
=
90
;
...
...
tools/imglab/src/metadata_editor.cpp
View file @
60d474a8
...
...
@@ -19,27 +19,6 @@ using namespace dlib;
extern
const
char
*
VERSION
;
rgb_alpha_pixel
string_to_color
(
const
std
::
string
&
str
)
{
if
(
str
.
size
()
==
0
)
{
return
rgb_alpha_pixel
(
255
,
0
,
0
,
255
);
}
else
{
// make up a random color based on the string label.
hsi_pixel
pix
;
pix
.
h
=
static_cast
<
unsigned
char
>
(
dlib
::
hash
(
str
)
&
0xFF
);
pix
.
s
=
255
;
pix
.
i
=
150
;
rgb_alpha_pixel
result
;
assign_pixel
(
result
,
pix
);
return
result
;
}
}
// ----------------------------------------------------------------------------------------
metadata_editor
::
...
...
@@ -78,6 +57,7 @@ metadata_editor(
overlay_label_name
.
set_text
(
"Next Label: "
);
overlay_label
.
set_width
(
200
);
display
.
set_image_clicked_handler
(
*
this
,
&
metadata_editor
::
on_image_clicked
);
display
.
set_overlay_rects_changed_handler
(
*
this
,
&
metadata_editor
::
on_overlay_rects_changed
);
display
.
set_overlay_rect_selected_handler
(
*
this
,
&
metadata_editor
::
on_overlay_rect_selected
);
overlay_label
.
set_text_modified_handler
(
*
this
,
&
metadata_editor
::
on_overlay_label_changed
);
...
...
@@ -479,7 +459,8 @@ on_lb_images_clicked(
// ----------------------------------------------------------------------------------------
std
::
vector
<
dlib
::
image_display
::
overlay_rect
>
get_overlays
(
const
dlib
::
image_dataset_metadata
::
image
&
data
const
dlib
::
image_dataset_metadata
::
image
&
data
,
color_mapper
&
string_to_color
)
{
std
::
vector
<
dlib
::
image_display
::
overlay_rect
>
temp
(
data
.
boxes
.
size
());
...
...
@@ -521,7 +502,7 @@ load_image(
if
(
display_equialized_image
)
equalize_histogram
(
img
);
display
.
set_image
(
img
);
display
.
add_overlay
(
get_overlays
(
metadata
.
images
[
idx
]));
display
.
add_overlay
(
get_overlays
(
metadata
.
images
[
idx
]
,
string_to_color
));
}
// ----------------------------------------------------------------------------------------
...
...
@@ -569,7 +550,7 @@ load_image_and_set_size(
if
(
display_equialized_image
)
equalize_histogram
(
img
);
display
.
set_image
(
img
);
display
.
add_overlay
(
get_overlays
(
metadata
.
images
[
idx
]));
display
.
add_overlay
(
get_overlays
(
metadata
.
images
[
idx
]
,
string_to_color
));
}
// ----------------------------------------------------------------------------------------
...
...
@@ -600,12 +581,21 @@ on_overlay_rects_changed(
// ----------------------------------------------------------------------------------------
void
metadata_editor
::
on_image_clicked
(
const
point
&
/*p*/
,
bool
/*is_double_click*/
,
unsigned
long
/*btn*/
)
{
display
.
set_default_overlay_rect_color
(
string_to_color
(
trim
(
overlay_label
.
text
())));
}
// ----------------------------------------------------------------------------------------
void
metadata_editor
::
on_overlay_label_changed
(
)
{
display
.
set_default_overlay_rect_label
(
trim
(
overlay_label
.
text
()));
display
.
set_default_overlay_rect_color
(
string_to_color
(
trim
(
overlay_label
.
text
())));
}
// ----------------------------------------------------------------------------------------
...
...
tools/imglab/src/metadata_editor.h
View file @
60d474a8
...
...
@@ -4,7 +4,54 @@
#define DLIB_METADATA_EdITOR_H__
#include <dlib/gui_widgets.h>
#include "dlib/data_io.h"
#include <dlib/data_io.h>
#include <dlib/pixel.h>
#include <map>
// ----------------------------------------------------------------------------------------
class
color_mapper
{
public:
dlib
::
rgb_alpha_pixel
operator
()
(
const
std
::
string
&
str
)
{
auto
i
=
colors
.
find
(
str
);
if
(
i
!=
colors
.
end
())
{
return
i
->
second
;
}
else
{
using
namespace
dlib
;
hsi_pixel
pix
;
pix
.
h
=
reverse
(
colors
.
size
());
std
::
cout
<<
"new h: "
<<
(
unsigned
int
)
pix
.
h
<<
std
::
endl
;
pix
.
s
=
255
;
pix
.
i
=
150
;
rgb_alpha_pixel
result
;
assign_pixel
(
result
,
pix
);
colors
[
str
]
=
result
;
return
result
;
}
}
private:
// We use a bit reverse here because it causes us to evenly spread the colors as we
// allocated them. First the colors are maximally different, then become interleaved
// and progressively more similar as they are allocated.
unsigned
char
reverse
(
unsigned
char
b
)
{
// reverse the order of the bits in b.
b
=
((
b
*
0x0802LU
&
0x22110LU
)
|
(
b
*
0x8020LU
&
0x88440LU
))
*
0x10101LU
>>
16
;
return
b
;
}
std
::
map
<
std
::
string
,
dlib
::
rgb_alpha_pixel
>
colors
;
};
// ----------------------------------------------------------------------------------------
...
...
@@ -39,6 +86,7 @@ private:
void
save_metadata_to_file
(
const
std
::
string
&
file
);
void
load_image
(
unsigned
long
idx
);
void
load_image_and_set_size
(
unsigned
long
idx
);
void
on_image_clicked
(
const
dlib
::
point
&
p
,
bool
is_double_click
,
unsigned
long
btn
);
void
on_overlay_rects_changed
();
void
on_overlay_label_changed
();
void
on_overlay_rect_selected
(
const
dlib
::
image_display
::
overlay_rect
&
orect
);
...
...
@@ -59,6 +107,7 @@ private:
unsigned
long
keyboard_jump_pos
;
time_t
last_keyboard_jump_pos_update
;
bool
display_equialized_image
=
false
;
color_mapper
string_to_color
;
};
// ----------------------------------------------------------------------------------------
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment