Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
inovisao
pynovisao
Commits
6f925869
Commit
6f925869
authored
7 years ago
by
Geazy Menezes
Browse files
Options
Download
Email Patches
Plain Diff
first version feature: grafical confusion matrix
parent
600fde02
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
101 additions
and
1 deletion
+101
-1
src/classification/cnn_keras.py
src/classification/cnn_keras.py
+6
-0
src/classification/weka_classifiers.py
src/classification/weka_classifiers.py
+15
-0
src/main.py
src/main.py
+2
-1
src/pynovisao.py
src/pynovisao.py
+78
-0
No files found.
src/classification/cnn_keras.py
View file @
6f925869
...
...
@@ -522,3 +522,9 @@ class CNNKeras(Classifier):
class_mode
=
"categorical"
)
return
train_generator
,
validation_generator
,
test_generator
def
single_classify
(
self
,
image_path
,
directory
,
extractors
,
dict_classes
):
from
matplotlib
.
pylab
im
imread
image
=
imread
(
image_path
)
predict
=
self
.
model
.
predict
([
image
])[
0
]
return
dict_classes
[
predict
]
\ No newline at end of file
This diff is collapsed.
Click to expand it.
src/classification/weka_classifiers.py
View file @
6f925869
...
...
@@ -269,3 +269,18 @@ class WekaClassifiers(Classifier):
"""
self
.
data
=
None
self
.
classifier
=
None
def
single_classify
(
self
,
image_path
,
directory
,
extractors
,
dict_classes
):
'''
'''
from
extraction
import
FeatureExtractor
from
os
import
remove
test_file
=
'temp'
fextractor
=
FeatureExtractor
(
extractors
)
fextractor
.
extract_one_file
(
directory
,
image_path
,
output_file
=
test_file
)
predicted
=
self
.
classify
(
directory
,
test_dir
=
'.tmp'
,
test_data
=
test_file
+
'.arff'
,
image
=
None
)
remove
(
directory
+
'/'
+
test_file
+
'.arff'
)
return
predicted
[
0
]
\ No newline at end of file
This diff is collapsed.
Click to expand it.
src/main.py
View file @
6f925869
...
...
@@ -89,7 +89,8 @@ if __name__ == "__main__":
tk
.
add_command
(
"Load h5 weight (only for CNNs)"
,
act
.
open_weight
)
tk
.
add_command
(
"Execute"
,
act
.
run_classifier
,
'C'
)
tk
.
add_command
(
"Execute folder"
,
act
.
run_classifier_folder
)
tk
.
add_command
(
"Execute Graphical Confusion Matrix"
,
act
.
run_grafic_confusion_matrix
)
tk
.
add_menu
(
"Experimenter"
)
tk
.
add_check_button
(
"Ground Truth"
,
act
.
toggle_ground_truth
,
default_state
=
False
)
tk
.
add_separator
()
...
...
This diff is collapsed.
Click to expand it.
src/pynovisao.py
View file @
6f925869
...
...
@@ -45,6 +45,7 @@ class Act(object):
Arguments of program.
"""
self
.
tk
=
tk
self
.
has_trained
=
False
self
.
segmenter
=
[
segmentation
.
_segmenter_list
[
segmenter
].
meta
for
segmenter
in
segmentation
.
_segmenter_list
if
segmentation
.
_segmenter_list
[
segmenter
].
value
==
True
][
0
]()
...
...
@@ -329,6 +330,7 @@ class Act(object):
self
.
tk
.
refresh_panel_classes
(
self
.
classes
)
if
self
.
classifier
:
self
.
classifier
.
reset
()
self
.
has_trained
=
False
def
toggle_dataset_generator
(
self
):
"""Enable/disable the dataset generator on click in image.
...
...
@@ -628,6 +630,7 @@ class Act(object):
self
.
tk
.
append_log
(
"DONE (%0.3f seconds)"
,
(
TimeUtils
.
get_time
()
-
start_time
))
self
.
_image
=
self
.
_const_image
self
.
has_trained
=
True
def
_show_ground_truth
(
self
,
list_segments
,
len_segments
,
labels
,
start_time
):
...
...
@@ -941,3 +944,78 @@ class Act(object):
np
.
savetxt
(
f
,
all_frequency_weighted_IU
,
fmt
=
'%.5f'
)
f
.
close
()
def
run_grafic_confusion_matrix
(
self
):
'''
'''
if
not
self
.
has_trained
:
message
=
'Dataset Must Be Trained.'
IException
(
message
)
from
os.path
import
abspath
directory
=
self
.
tk
.
utils
.
ask_directory
()
if
not
directory
:
message
=
'No directory selected.'
IException
(
message
)
return
directory
=
abspath
(
directory
)
dataset
=
abspath
(
self
.
dataset
)
if
directory
==
self
.
dataset
:
title
=
'Same Dataset'
message
=
'The dataset selected is the same of the trained. Are you sure that is right?'
option
=
self
.
tk
.
ask_ok_cancel
(
title
,
message
)
if
not
option
:
return
from
shutil
import
rmtree
from
os
import
mkdir
,
listdir
from
os.path
import
isdir
from
os
import
symlink
def
create_folder_struct
(
matrix_path
,
class_names
,
human
,
computer
):
try
:
rmtree
(
matrix_path
)
except
Exception
as
e
:
print
str
(
e
)
pass
mkdir
(
matrix_path
,
0777
)
for
class_
in
class_names
:
real
=
matrix_path
+
human
+
class_
+
'/'
mkdir
(
real
,
0777
)
for
_class
in
class_names
:
mkdir
(
real
+
computer
+
_class
,
0777
)
index
=
directory
[
-
2
::
-
1
].
index
(
'/'
)
matrix_path
=
directory
[:
-
(
index
+
1
)]
+
'folder_confusion_matrix'
class_names
,
classes
=
listdir
(
directory
),
{}
for
i
in
range
(
len
(
class_names
)
-
1
,
-
1
,
-
1
):
if
isdir
(
dataset
+
'/'
+
class_names
[
i
]):
if
class_names
[
i
][
0
]
is
not
'.'
:
continue
del
class_names
[
i
]
for
i
,
name
in
enumerate
(
class_names
):
classes
[
name
],
classes
[
i
]
=
i
,
name
images
=
[]
for
classe
in
class_names
:
image_names
=
listdir
(
directory
+
'/'
+
classe
)
for
i
in
range
(
len
(
image_names
)):
image_names
[
i
]
=
directory
+
'/'
,
classe
,
'/'
+
image_names
[
i
]
images
.
extend
(
image_names
)
human
,
computer
=
'/human_'
,
'/computer_'
create_folder_struct
(
matrix_path
,
class_names
,
human
,
computer
)
for
image_path
in
images
:
original
=
reduce
(
lambda
a
,
b
:
a
+
b
,
image_path
)
real_class_path
=
matrix_path
+
human
+
image_path
[
1
]
predicted
=
self
.
classifier
.
single_classify
(
original
,
directory
,
self
.
extractors
,
classes
)
predicted_class_path
=
real_class_path
+
computer
+
predicted
name_predicted
=
predicted_class_path
+
image_path
[
2
]
symlink
(
original
,
name_predicted
)
message
=
'Graphical Confusion Matrix saved in '
+
matrix_path
self
.
tk
.
append_log
(
message
)
This diff is collapsed.
Click to expand it.
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