Skip to content

Commit

Permalink
itadata2024
Browse files Browse the repository at this point in the history
  • Loading branch information
PasoStudio73 committed Oct 4, 2024
1 parent deac50f commit 2edbf69
Show file tree
Hide file tree
Showing 7 changed files with 319 additions and 10 deletions.
2 changes: 2 additions & 0 deletions src/rules.jl
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ function interesting_rules(
map(r->(consequent(r), readmetrics(r)), irules)
p_irules = sort(irules, by=readmetrics)

isempty(p_irules) && throw(ArgumentError("No interesting rules found."))

p_X = DataFrame(antecedent=String[], consequent=String[]; [name => Vector{Union{Float64, Int}}() for name in keys(readmetrics(p_irules[1]))]...)
# p_X = DataFrame(
# antecedent = String[],
Expand Down
36 changes: 36 additions & 0 deletions test/launcher.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/bin/bash

N_THREADS=30

# ------------------------------------------------------------------------------------ #
# itadata 2024 #
# ------------------------------------------------------------------------------------ #
# n=1
# session="session_"$n
# tmux new-session -d -s $session
# tmux send-keys -t $session 'julia -i -t '$N_THREADS' ravdess_emotion_2bins.jl ' Enter
# [ -n "${TMUX:-}" ]

n=2
session="session_"$n
tmux new-session -d -s $session
tmux send-keys -t $session 'julia -i -t '$N_THREADS' ravdess_emotion_8bins.jl ' Enter
[ -n "${TMUX:-}" ]

# n=3
# session="session_"$n
# tmux new-session -d -s $session
# tmux send-keys -t $session 'julia -i -t '$N_THREADS' respiratory_pneumonia.jl ' Enter
# [ -n "${TMUX:-}" ]

# n=5
# session="session_"$n
# tmux new-session -d -s $session
# tmux send-keys -t $session 'julia -i -t '$N_THREADS' respiratory_copd.jl ' Enter
# [ -n "${TMUX:-}" ]

# n=5
# session="session_"$n
# tmux new-session -d -s $session
# tmux send-keys -t $session 'julia -i -t '$N_THREADS' respiratory_bronchiolitis.jl ' Enter
# [ -n "${TMUX:-}" ]
13 changes: 8 additions & 5 deletions test/ravdess_emotion_2bins.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@ using SoleAudio, Random
# -------------------------------------------------------------------------- #
# experiment specific parameters #
# -------------------------------------------------------------------------- #
wav_path = "/home/paso/Documents/Aclai/Datasets/emotion_recognition/Ravdess/audio_speech_actors_01-24"
# wav_path = "/home/paso/Documents/Aclai/Datasets/emotion_recognition/Ravdess/audio_speech_actors_01-24"
wav_path = "/home/paso/datasets/emotion_recognition/Ravdess/audio_speech_actors_01-24"

# classes = :emo2bins
classes = :emo3bins
classes = :emo2bins
# classes = :emo3bins
# classes = :emo8bins

if classes == :emo2bins
Expand Down Expand Up @@ -75,8 +76,8 @@ end
# min_samples = 400

# only for debugging
min_length = 17000
min_samples = 6
min_length = 11000
min_samples = 500

features = :catch9
# features = :minmax
Expand Down Expand Up @@ -108,3 +109,5 @@ irules = get_interesting_rules(
train_ratio=train_ratio,
rng=rng,
)

jldsave("ravdess_emotion_2bins.jld2", true; irules)
9 changes: 6 additions & 3 deletions test/ravdess_emotion_8bins.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ using SoleAudio, Random
# -------------------------------------------------------------------------- #
# experiment specific parameters #
# -------------------------------------------------------------------------- #
wav_path = "/home/paso/Documents/Aclai/Datasets/emotion_recognition/Ravdess/audio_speech_actors_01-24"
# wav_path = "/home/paso/Documents/Aclai/Datasets/emotion_recognition/Ravdess/audio_speech_actors_01-24"
wav_path = "/home/paso/datasets/emotion_recognition/Ravdess/audio_speech_actors_01-24"

# classes = :emo2bins
# classes = :emo3bins
Expand Down Expand Up @@ -75,8 +76,8 @@ end
# min_samples = 400

# only for debugging
min_length = 13500
min_samples = 6
min_length = 12000
min_samples = 46

features = :catch9
# features = :minmax
Expand Down Expand Up @@ -108,3 +109,5 @@ irules = get_interesting_rules(
train_ratio=train_ratio,
rng=rng,
)

jldsave("ravdess_emotion_8bins.jld2", true; irules)
130 changes: 130 additions & 0 deletions test/respiratory_bronchiolitis.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
using DataFrames, JLD2
using SoleAudio, Random
# using Plots

# TODO
# scrivi un file text con tutti i settaggi usati
# output formattato per latex su un file.tex

# -------------------------------------------------------------------------- #
# experiment specific parameters #
# -------------------------------------------------------------------------- #
# wav_path ="/home/paso/Documents/Aclai/Datasets/health_recognition/Respiratory_Sound_Database/audio_partitioned"
# csv_path = "/home/paso/Documents/Aclai/Datasets/health_recognition/Respiratory_Sound_Database"
wav_path ="/home/paso/datasets/health_recognition/Respiratory_Sound_Database/audio_partitioned"
csv_path = "/home/paso/datasets/health_recognition/Respiratory_Sound_Database"

csv_file = csv_path * "/" * "patient_diagnosis.csv"

# classes = :Pneumonia
# classes = :COPD
# classes = :URTI
# classes = :Bronchiectasis
classes = :Bronchiolitis
# classes = :resp4bins

if classes == :Pneumonia
classes_dict = Dict{String,String}(
"Pneumonia" => "sick",
"Healthy" => "healthy",
)
elseif classes == :COPD
classes_dict = Dict{String,String}(
"COPD" => "sick",
"Healthy" => "healthy",
)
elseif classes == :URTI
classes_dict = Dict{String,String}(
"URTI" => "sick",
"Healthy" => "healthy",
)
elseif classes == :Bronchiectasis
classes_dict = Dict{String,String}(
"Bronchiectasis" => "sick",
"Healthy" => "healthy",
)
elseif classes == :Bronchiolitis
classes_dict = Dict{String,String}(
"Bronchiolitis" => "sick",
"Healthy" => "healthy",
)
elseif classes == :resp4bins
classes_dict = Dict{String,String}(
"Pneumonia" => "pneumonia",
"COPD" => "copd",
"URTI" => "urti",
"Healthy" => "healthy",
)
end

fragmented = true
frag_func(filename) = match(r"^(\d+)", filename)[1]

header = false
id_labels = :Column1
label_labels = :Column2

# -------------------------------------------------------------------------- #
# global parameters #
# -------------------------------------------------------------------------- #
featset = (:mel, :mfcc, :spectrals)

audioparams = let sr = 8000
(
sr = sr,
norm = true,
speech_detect = true,
sdetect_thresholds=(0,0),
sdetect_spread_threshold=0.02,
nfft = 256,
mel_scale = :mel_htk, # :mel_htk, :mel_slaney, :erb, :bark, :semitones, :tuned_semitones
mel_nbands = 26,
mfcc_ncoeffs = 13,
mel_freqrange = (0, round(Int, sr / 2)),
)
end

# min_length = 11500
# min_samples = 400

# only for debugging
min_length = 16000
min_samples = 6

features = :catch9
# features = :minmax
# features = :custom

# modal analysis
nwindows = 20
relative_overlap = 0.05

# partitioning
train_ratio = 0.8
train_seed = 11
rng = Random.MersenneTwister(train_seed)

# -------------------------------------------------------------------------- #
# main #
# -------------------------------------------------------------------------- #
irules = get_interesting_rules(
wav_path=wav_path,
csv_file=csv_file,
classes_dict=classes_dict,
fragmented=fragmented,
frag_func=frag_func,
header=header,
id_labels=id_labels,
label_labels=label_labels,
featset=featset,
audioparams=audioparams,
min_length=min_length,
min_samples=min_samples,
features=features,
nwindows=nwindows,
relative_overlap=relative_overlap,
train_ratio=train_ratio,
rng=rng,
)

jldsave("respiratory_bronchiolitis.jld2", true; irules)
130 changes: 130 additions & 0 deletions test/respiratory_copd.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
using DataFrames, JLD2
using SoleAudio, Random
# using Plots

# TODO
# scrivi un file text con tutti i settaggi usati
# output formattato per latex su un file.tex

# -------------------------------------------------------------------------- #
# experiment specific parameters #
# -------------------------------------------------------------------------- #
# wav_path ="/home/paso/Documents/Aclai/Datasets/health_recognition/Respiratory_Sound_Database/audio_partitioned"
# csv_path = "/home/paso/Documents/Aclai/Datasets/health_recognition/Respiratory_Sound_Database"
wav_path ="/home/paso/datasets/health_recognition/Respiratory_Sound_Database/audio_partitioned"
csv_path = "/home/paso/datasets/health_recognition/Respiratory_Sound_Database"

csv_file = csv_path * "/" * "patient_diagnosis.csv"

# classes = :Pneumonia
classes = :COPD
# classes = :URTI
# classes = :Bronchiectasis
# classes = :Bronchiolitis
# classes = :resp4bins

if classes == :Pneumonia
classes_dict = Dict{String,String}(
"Pneumonia" => "sick",
"Healthy" => "healthy",
)
elseif classes == :COPD
classes_dict = Dict{String,String}(
"COPD" => "sick",
"Healthy" => "healthy",
)
elseif classes == :URTI
classes_dict = Dict{String,String}(
"URTI" => "sick",
"Healthy" => "healthy",
)
elseif classes == :Bronchiectasis
classes_dict = Dict{String,String}(
"Bronchiectasis" => "sick",
"Healthy" => "healthy",
)
elseif classes == :Bronchiolitis
classes_dict = Dict{String,String}(
"Bronchiolitis" => "sick",
"Healthy" => "healthy",
)
elseif classes == :resp4bins
classes_dict = Dict{String,String}(
"Pneumonia" => "pneumonia",
"COPD" => "copd",
"URTI" => "urti",
"Healthy" => "healthy",
)
end

fragmented = true
frag_func(filename) = match(r"^(\d+)", filename)[1]

header = false
id_labels = :Column1
label_labels = :Column2

# -------------------------------------------------------------------------- #
# global parameters #
# -------------------------------------------------------------------------- #
featset = (:mel, :mfcc, :spectrals)

audioparams = let sr = 8000
(
sr = sr,
norm = true,
speech_detect = true,
sdetect_thresholds=(0,0),
sdetect_spread_threshold=0.02,
nfft = 256,
mel_scale = :mel_htk, # :mel_htk, :mel_slaney, :erb, :bark, :semitones, :tuned_semitones
mel_nbands = 26,
mfcc_ncoeffs = 13,
mel_freqrange = (0, round(Int, sr / 2)),
)
end

# min_length = 11500
# min_samples = 400

# only for debugging
min_length = 16000
min_samples = 6

features = :catch9
# features = :minmax
# features = :custom

# modal analysis
nwindows = 20
relative_overlap = 0.05

# partitioning
train_ratio = 0.8
train_seed = 11
rng = Random.MersenneTwister(train_seed)

# -------------------------------------------------------------------------- #
# main #
# -------------------------------------------------------------------------- #
irules = get_interesting_rules(
wav_path=wav_path,
csv_file=csv_file,
classes_dict=classes_dict,
fragmented=fragmented,
frag_func=frag_func,
header=header,
id_labels=id_labels,
label_labels=label_labels,
featset=featset,
audioparams=audioparams,
min_length=min_length,
min_samples=min_samples,
features=features,
nwindows=nwindows,
relative_overlap=relative_overlap,
train_ratio=train_ratio,
rng=rng,
)

jldsave("respiratory_copd.jld2", true; irules)
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,11 @@ using SoleAudio, Random
# -------------------------------------------------------------------------- #
# experiment specific parameters #
# -------------------------------------------------------------------------- #
wav_path ="/home/paso/Documents/Aclai/Datasets/health_recognition/Respiratory_Sound_Database/audio_partitioned"
csv_path = "/home/paso/Documents/Aclai/Datasets/health_recognition/Respiratory_Sound_Database"
# wav_path ="/home/paso/Documents/Aclai/Datasets/health_recognition/Respiratory_Sound_Database/audio_partitioned"
# csv_path = "/home/paso/Documents/Aclai/Datasets/health_recognition/Respiratory_Sound_Database"
wav_path ="/home/paso/datasets/health_recognition/Respiratory_Sound_Database/audio_partitioned"
csv_path = "/home/paso/datasets/health_recognition/Respiratory_Sound_Database"

csv_file = csv_path * "/" * "patient_diagnosis.csv"

classes = :Pneumonia
Expand Down Expand Up @@ -123,3 +126,5 @@ irules = get_interesting_rules(
train_ratio=train_ratio,
rng=rng,
)

jldsave("respiratory_pneumonia.jld2", true; irules)

0 comments on commit 2edbf69

Please sign in to comment.