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
M
medienverarbeitung17.projectmood
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
Frank Tjado Ihmels
medienverarbeitung17.projectmood
Commits
95a0fb14
Commit
95a0fb14
authored
Nov 15, 2017
by
Arne Gerdes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Folder Classifier hinzugefuegt zum Testen von Gesichtserkennung mit Maschine Learning
parent
88e6d172
Changes
9
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
153365 additions
and
3 deletions
+153365
-3
projectmood/Classifier/__init__.py
projectmood/Classifier/__init__.py
+0
-0
projectmood/Classifier/master/__init__.py
projectmood/Classifier/master/__init__.py
+0
-0
projectmood/Classifier/master/classifier.py
projectmood/Classifier/master/classifier.py
+73
-0
projectmood/Classifier/master/face_detection.py
projectmood/Classifier/master/face_detection.py
+54
-0
projectmood/Classifier/master/img_seq.py
projectmood/Classifier/master/img_seq.py
+31
-0
projectmood/Haarcascade
projectmood/Haarcascade
+3
-3
projectmood/resources/haarcascade_frontalface_alt.xml
projectmood/resources/haarcascade_frontalface_alt.xml
+26161
-0
projectmood/resources/haarcascade_frontalface_alt2.xml
projectmood/resources/haarcascade_frontalface_alt2.xml
+23550
-0
projectmood/resources/haarcascade_frontalface_alt_tree.xml
projectmood/resources/haarcascade_frontalface_alt_tree.xml
+103493
-0
No files found.
projectmood/Classifier/__init__.py
0 → 100644
View file @
95a0fb14
projectmood/Classifier/master/__init__.py
0 → 100644
View file @
95a0fb14
projectmood/Classifier/master/classifier.py
0 → 100644
View file @
95a0fb14
# The Emotion Face detection Scripts
# You can modify this script as you wish
import
cv2
import
glob
as
gb
import
random
import
numpy
as
np
# Emotion list
emojis
=
[
"neutral"
,
"anger"
,
"contempt"
,
"disgust"
,
"fear"
,
"happy"
,
"sadness"
,
"surprise"
]
# Initialize fisher face classifier
fisher_face
=
cv2
.
createFisherFaceRecognizer
()
data
=
{}
# Function defination to get file list, randomly shuffle it and split 67/33
def
getFiles
(
emotion
):
files
=
gb
.
glob
(
"final_dataset
\\
%s
\\
*"
%
emotion
)
random
.
shuffle
(
files
)
training
=
files
[:
int
(
len
(
files
)
*
0.67
)]
# get first 67% of file list
prediction
=
files
[
-
int
(
len
(
files
)
*
0.33
):]
# get last 33% of file list
return
training
,
prediction
def
makeTrainingAndValidationSet
():
training_data
=
[]
training_labels
=
[]
prediction_data
=
[]
prediction_labels
=
[]
for
emotion
in
emojis
:
training
,
prediction
=
getFiles
(
emotion
)
# Append data to training and prediction list, and generate labels 0-7
for
item
in
training
:
image
=
cv2
.
imread
(
item
)
# open image
gray
=
cv2
.
cvtColor
(
image
,
cv2
.
COLOR_BGR2GRAY
)
# convert to grayscale
training_data
.
append
(
gray
)
# append image array to training data list
training_labels
.
append
(
emojis
.
index
(
emotion
))
for
item
in
prediction
:
# repeat above process for prediction set
image
=
cv2
.
imread
(
item
)
gray
=
cv2
.
cvtColor
(
image
,
cv2
.
COLOR_BGR2GRAY
)
prediction_data
.
append
(
gray
)
prediction_labels
.
append
(
emojis
.
index
(
emotion
))
return
training_data
,
training_labels
,
prediction_data
,
prediction_labels
def
runClassifier
():
training_data
,
training_labels
,
prediction_data
,
prediction_labels
=
makeTrainingAndValidationSet
()
print
(
"training fisher face classifier suing the training data"
)
print
(
"size of training set is:"
,
len
(
training_labels
),
"images"
)
fisher_face
.
train
(
training_data
,
np
.
asarray
(
training_labels
))
print
(
"classification prediction"
)
counter
=
0
right
=
0
wrong
=
0
for
image
in
prediction_data
:
pred
,
conf
=
fisher_face
.
predict
(
image
)
if
pred
==
prediction_labels
[
counter
]:
right
+=
1
counter
+=
1
else
:
wrong
+=
1
counter
+=
1
return
(
100
*
right
)
/
(
right
+
wrong
)
# Now run the classifier
metascore
=
[]
for
i
in
range
(
0
,
10
):
right
=
runClassifier
()
print
(
"got"
,
right
,
"percent right!"
)
metascore
.
append
(
right
)
print
(
"
\n\n
end score:"
,
np
.
mean
(
metascore
),
"percent right!"
)
\ No newline at end of file
projectmood/Classifier/master/face_detection.py
0 → 100644
View file @
95a0fb14
import
cv2
import
glob
as
gb
face_detector1
=
cv2
.
CascadeClassifier
(
"haarcascade_frontalface_default.xml"
)
face_detector2
=
cv2
.
CascadeClassifier
(
"haarcascade_frontalface_alt2.xml"
)
face_detector3
=
cv2
.
CascadeClassifier
(
"haarcascade_frontalface_alt.xml"
)
face_detector4
=
cv2
.
CascadeClassifier
(
"haarcascade_frontalface_alt_tree.xml"
)
emotion_list
=
[
"neutral"
,
"anger"
,
"contempt"
,
"disgust"
,
"fear"
,
"happy"
,
"sadness"
,
"surprise"
]
def
faceDetection
(
emotion
):
files
=
gb
.
glob
(
"selected_set
\\
%s
\\
*"
%
emotion
)
# Get list of all images with emotion
filenumber
=
0
for
f
in
files
:
frame
=
cv2
.
imread
(
f
)
# Open image
gray
=
cv2
.
cvtColor
(
frame
,
cv2
.
COLOR_BGR2GRAY
)
# Convert image to grayscale
# Detect face using 4 different classifiers
face1
=
face_detector1
.
detectMultiScale
(
gray
,
scaleFactor
=
1.1
,
minNeighbors
=
10
,
minSize
=
(
5
,
5
),
flags
=
cv2
.
CASCADE_SCALE_IMAGE
)
face2
=
face_detector2
.
detectMultiScale
(
gray
,
scaleFactor
=
1.1
,
minNeighbors
=
10
,
minSize
=
(
5
,
5
),
flags
=
cv2
.
CASCADE_SCALE_IMAGE
)
face3
=
face_detector3
.
detectMultiScale
(
gray
,
scaleFactor
=
1.1
,
minNeighbors
=
10
,
minSize
=
(
5
,
5
),
flags
=
cv2
.
CASCADE_SCALE_IMAGE
)
face4
=
face_detector4
.
detectMultiScale
(
gray
,
scaleFactor
=
1.1
,
minNeighbors
=
10
,
minSize
=
(
5
,
5
),
flags
=
cv2
.
CASCADE_SCALE_IMAGE
)
# Go over detected faces, stop at first detected face, return empty if no face.
if
len
(
face1
)
==
1
:
facefeatures
=
face1
elif
len
(
face2
)
==
1
:
facefeatures
==
face2
elif
len
(
face3
)
==
1
:
facefeatures
=
face3
elif
len
(
face4
)
==
1
:
facefeatures
=
face4
else
:
facefeatures
=
""
# Cut and save face
for
(
x
,
y
,
w
,
h
)
in
facefeatures
:
# get coordinates and size of rectangle containing face
print
(
"face found in file: %s"
%
f
)
gray
=
gray
[
y
:
y
+
h
,
x
:
x
+
w
]
# Cut the frame to size
try
:
out
=
cv2
.
resize
(
gray
,
(
350
,
350
))
# Resize face so all images have same size
cv2
.
imwrite
(
"final_dataset
\\
%s
\\
%s.jpg"
%
(
emotion
,
filenumber
),
out
)
# Write image
except
:
pass
# pass the file on error
filenumber
+=
1
# Increment image number
if
__name__
==
'__main__'
:
for
emotion
in
emotion_list
:
faceDetection
(
emotion
)
# Call our face detection module
projectmood/Classifier/master/img_seq.py
0 → 100644
View file @
95a0fb14
import
glob
as
gb
from
shutil
import
copyfile
emotions_list
=
[
"neutral"
,
"anger"
,
"contempt"
,
"disgust"
,
"fear"
,
"happy"
,
"sadness"
,
"surprise"
]
emotions_folders
=
gb
.
glob
(
"emotions
\\
*"
)
# Returns a list of all folders with participant numbers
def
imageWithEmotionEtraction
():
for
x
in
emotions_folders
:
participant
=
"%s"
%
x
[
-
4
:]
# store current participant number
for
sessions
in
gb
.
glob
(
"%s
\\
*"
%
x
):
for
files
in
gb
.
glob
(
"%s
\\
*"
%
sessions
):
current_session
=
files
[
20
:
-
30
]
file
=
open
(
files
,
'r'
)
emotion
=
int
(
float
(
file
.
readline
()))
# get path for last image in sequence, which contains the emotion
sourcefile_emotion
=
gb
.
glob
(
"images
\\
%s
\\
%s
\\
*"
%
(
participant
,
current_session
))[
-
1
]
# do same for neutral image
sourcefile_neutral
=
gb
.
glob
(
"images
\\
%s
\\
%s
\\
*"
%
(
participant
,
current_session
))[
0
]
# Generate path to put neutral image
dest_neut
=
"selected_set
\\
neutral
\\
%s"
%
sourcefile_neutral
[
25
:]
# Do same for emotion containing image
dest_emot
=
"selected_set
\\
%s
\\
%s"
%
(
emotions_list
[
emotion
],
sourcefile_emotion
[
25
:])
copyfile
(
sourcefile_neutral
,
dest_neut
)
# Copy file
copyfile
(
sourcefile_emotion
,
dest_emot
)
# Copy file
if
__name__
==
'__main__'
:
imageWithEmotionEtraction
()
\ No newline at end of file
projectmood/Haarcascade
View file @
95a0fb14
...
...
@@ -12,11 +12,11 @@ cap = cv2.VideoCapture(0)
while True:
#
Read the Video
ret,
img = cap.read(
)
#
Capture frame-by-frame
ret,
frame = cap.read(100
)
# convert the video to gray scale
gray = cv2.cvtColor(
img
, cv2.COLOR_BGR2GRAY)
gray = cv2.cvtColor(
frame
, cv2.COLOR_BGR2GRAY)
# Contrast Limited Adaptive Histogram Equalization
clahe = cv2.createCLAHE(clipLimit=4.0, tileGridSize=(8, 8))
...
...
projectmood/resources/haarcascade_frontalface_alt.xml
0 → 100644
View file @
95a0fb14
This diff is collapsed.
Click to expand it.
projectmood/resources/haarcascade_frontalface_alt2.xml
0 → 100644
View file @
95a0fb14
This diff is collapsed.
Click to expand it.
projectmood/resources/haarcascade_frontalface_alt_tree.xml
0 → 100644
View file @
95a0fb14
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