2023-11-05 21:28:07 +01:00
|
|
|
using Images, GIFImages
|
|
|
|
|
|
|
|
|
|
function readyalefaces_to_tensor(str::String="all")::Tuple{Array, Array{String}}
|
|
|
|
|
# output (F, descr)
|
|
|
|
|
|
|
|
|
|
nindividuals = 15
|
|
|
|
|
|
|
|
|
|
if str == "easy"
|
|
|
|
|
extensions = ["happy", "normal", "sad", "sleepy", "surprised", "wink"]
|
|
|
|
|
elseif str == "easy-nowink"
|
|
|
|
|
extensions = ["happy", "normal", "sad", "sleepy", "surprised"]
|
|
|
|
|
elseif str == "nowink"
|
|
|
|
|
extensions = ["centerlight", "glasses", "happy", "leftlight", "noglasses", "normal", "rightlight", "sad", "sleepy", "surprised"]
|
|
|
|
|
elseif str == "hard" || str == "all"
|
|
|
|
|
extensions = ["centerlight", "glasses", "happy", "leftlight", "noglasses", "normal", "rightlight", "sad", "sleepy", "surprised", "wink"]
|
|
|
|
|
else
|
|
|
|
|
throw(ArgumentError("unknown selector"))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
F = Array{Float32}(undef, (243, 320, length(extensions), nindividuals))
|
|
|
|
|
|
|
|
|
|
for i ∈ 1:nindividuals
|
2023-11-12 18:20:31 +01:00
|
|
|
basename = joinpath(@__DIR__, "yalefaces/subject")
|
2023-11-05 21:28:07 +01:00
|
|
|
if i < 10
|
|
|
|
|
basename *= "0" * string(i)
|
|
|
|
|
else
|
|
|
|
|
basename *= string(i)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for j = 1:length(extensions)
|
|
|
|
|
fullname = basename * "." * extensions[j] * ".gif"
|
|
|
|
|
X = Gray.(gif_decode(fullname))
|
|
|
|
|
F[:, :, j, i] = X[:,:,1] # just the first frame of the gif (should have only one in total)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
descr = extensions
|
|
|
|
|
|
|
|
|
|
(F, descr)
|
|
|
|
|
end
|