nkululeko 0.81.1__tar.gz → 0.81.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. {nkululeko-0.81.1 → nkululeko-0.81.3}/CHANGELOG.md +9 -0
  2. {nkululeko-0.81.1/nkululeko.egg-info → nkululeko-0.81.3}/PKG-INFO +12 -1
  3. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/constants.py +1 -1
  4. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/data/dataset.py +4 -1
  5. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/demo_predictor.py +6 -2
  6. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_agender_agender.py +5 -4
  7. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feinberg_praat.py +116 -118
  8. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model.py +1 -1
  9. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model_cnn.py +1 -1
  10. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model_mlp.py +1 -1
  11. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model_mlp_regression.py +13 -9
  12. {nkululeko-0.81.1/nkululeko → nkululeko-0.81.3/nkululeko/reporting}/reporter.py +86 -51
  13. {nkululeko-0.81.1/nkululeko → nkululeko-0.81.3/nkululeko/reporting}/result.py +5 -0
  14. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/runmanager.py +1 -1
  15. {nkululeko-0.81.1 → nkululeko-0.81.3/nkululeko.egg-info}/PKG-INFO +12 -1
  16. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko.egg-info/SOURCES.txt +2 -2
  17. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko.egg-info/requires.txt +2 -0
  18. {nkululeko-0.81.1 → nkululeko-0.81.3}/setup.cfg +2 -0
  19. {nkululeko-0.81.1 → nkululeko-0.81.3}/LICENSE +0 -0
  20. {nkululeko-0.81.1 → nkululeko-0.81.3}/README.md +0 -0
  21. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/aesdd/process_database.py +0 -0
  22. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/androids/process_database.py +0 -0
  23. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/androids_orig/process_database.py +0 -0
  24. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/androids_test/process_database.py +0 -0
  25. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/ased/process_database.py +0 -0
  26. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/asvp-esd/process_database.py +0 -0
  27. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/baved/process_database.py +0 -0
  28. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/cafe/process_database.py +0 -0
  29. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/clac/process_database.py +0 -0
  30. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/cmu-mosei/process_database.py +0 -0
  31. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/crema-d/process_database.py +0 -0
  32. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/demos/process_database.py +0 -0
  33. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/ekorpus/process_database.py +0 -0
  34. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/emns/process_database.py +0 -0
  35. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/emofilm/convert_to_16k.py +0 -0
  36. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/emofilm/process_database.py +0 -0
  37. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/emorynlp/process_database.py +0 -0
  38. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/emov-db/process_database.py +0 -0
  39. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/emovo/process_database.py +0 -0
  40. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/emozionalmente/create.py +0 -0
  41. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/enterface/process_database.py +0 -0
  42. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/esd/process_database.py +0 -0
  43. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/gerparas/process_database.py +0 -0
  44. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/iemocap/process_database.py +0 -0
  45. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/jl/process_database.py +0 -0
  46. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/jtes/process_database.py +0 -0
  47. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/meld/process_database.py +0 -0
  48. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/mesd/process_database.py +0 -0
  49. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/mess/process_database.py +0 -0
  50. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/mlendsnd/process_database.py +0 -0
  51. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/msp-improv/process_database2.py +0 -0
  52. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/msp-podcast/process_database.py +0 -0
  53. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/oreau2/process_database.py +0 -0
  54. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/portuguese/process_database.py +0 -0
  55. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/ravdess/process_database.py +0 -0
  56. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/ravdess/process_database_speaker.py +0 -0
  57. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/savee/process_database.py +0 -0
  58. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/shemo/process_database.py +0 -0
  59. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/subesco/process_database.py +0 -0
  60. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/tess/process_database.py +0 -0
  61. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/thorsten-emotional/process_database.py +0 -0
  62. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/urdu/process_database.py +0 -0
  63. {nkululeko-0.81.1 → nkululeko-0.81.3}/data/vivae/process_database.py +0 -0
  64. {nkululeko-0.81.1 → nkululeko-0.81.3}/docs/source/conf.py +0 -0
  65. {nkululeko-0.81.1 → nkululeko-0.81.3}/meta/demos/demo_best_model.py +0 -0
  66. {nkululeko-0.81.1 → nkululeko-0.81.3}/meta/demos/multiple_exeriments/do_experiments.py +0 -0
  67. {nkululeko-0.81.1 → nkululeko-0.81.3}/meta/demos/multiple_exeriments/parse_nkulu.py +0 -0
  68. {nkululeko-0.81.1 → nkululeko-0.81.3}/meta/demos/my_experiment.py +0 -0
  69. {nkululeko-0.81.1 → nkululeko-0.81.3}/meta/demos/my_experiment_local.py +0 -0
  70. {nkululeko-0.81.1 → nkululeko-0.81.3}/meta/demos/plot_faster_anim.py +0 -0
  71. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/__init__.py +0 -0
  72. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/aug_train.py +0 -0
  73. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/augment.py +0 -0
  74. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/augmenting/__init__.py +0 -0
  75. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/augmenting/augmenter.py +0 -0
  76. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/augmenting/randomsplicer.py +0 -0
  77. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/augmenting/randomsplicing.py +0 -0
  78. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/augmenting/resampler.py +0 -0
  79. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/autopredict/__init__.py +0 -0
  80. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/autopredict/ap_age.py +0 -0
  81. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/autopredict/ap_arousal.py +0 -0
  82. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/autopredict/ap_dominance.py +0 -0
  83. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/autopredict/ap_gender.py +0 -0
  84. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/autopredict/ap_mos.py +0 -0
  85. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/autopredict/ap_pesq.py +0 -0
  86. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/autopredict/ap_sdr.py +0 -0
  87. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/autopredict/ap_snr.py +0 -0
  88. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/autopredict/ap_stoi.py +0 -0
  89. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/autopredict/ap_valence.py +0 -0
  90. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/autopredict/estimate_snr.py +0 -0
  91. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/cacheddataset.py +0 -0
  92. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/data/__init__.py +0 -0
  93. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/data/dataset_csv.py +0 -0
  94. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/demo.py +0 -0
  95. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/demo_feats.py +0 -0
  96. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/experiment.py +0 -0
  97. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/explore.py +0 -0
  98. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/export.py +0 -0
  99. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/__init__.py +0 -0
  100. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_agender.py +0 -0
  101. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_analyser.py +0 -0
  102. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_audmodel.py +0 -0
  103. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_audmodel_dim.py +0 -0
  104. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_clap.py +0 -0
  105. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_hubert.py +0 -0
  106. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_import.py +0 -0
  107. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_mld.py +0 -0
  108. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_mos.py +0 -0
  109. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_opensmile.py +0 -0
  110. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_oxbow.py +0 -0
  111. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_praat.py +0 -0
  112. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_snr.py +0 -0
  113. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_spectra.py +0 -0
  114. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_spkrec.py +0 -0
  115. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_squim.py +0 -0
  116. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_trill.py +0 -0
  117. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_wav2vec2.py +0 -0
  118. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_wavlm.py +0 -0
  119. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feat_extract/featureset.py +0 -0
  120. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/feature_extractor.py +0 -0
  121. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/file_checker.py +0 -0
  122. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/filter_data.py +0 -0
  123. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/glob_conf.py +0 -0
  124. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/losses/__init__.py +0 -0
  125. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/losses/loss_ccc.py +0 -0
  126. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/losses/loss_softf1loss.py +0 -0
  127. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/modelrunner.py +0 -0
  128. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/__init__.py +0 -0
  129. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model_bayes.py +0 -0
  130. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model_gmm.py +0 -0
  131. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model_knn.py +0 -0
  132. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model_knn_reg.py +0 -0
  133. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model_lin_reg.py +0 -0
  134. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model_svm.py +0 -0
  135. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model_svr.py +0 -0
  136. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model_tree.py +0 -0
  137. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model_tree_reg.py +0 -0
  138. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model_xgb.py +0 -0
  139. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/models/model_xgr.py +0 -0
  140. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/multidb.py +0 -0
  141. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/nkululeko.py +0 -0
  142. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/plots.py +0 -0
  143. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/predict.py +0 -0
  144. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/reporting/__init__.py +0 -0
  145. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/reporting/defines.py +0 -0
  146. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/reporting/latex_writer.py +0 -0
  147. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/reporting/report.py +0 -0
  148. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/reporting/report_item.py +0 -0
  149. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/resample.py +0 -0
  150. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/scaler.py +0 -0
  151. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/segment.py +0 -0
  152. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/segmenting/__init__.py +0 -0
  153. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/segmenting/seg_inaspeechsegmenter.py +0 -0
  154. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/segmenting/seg_silero.py +0 -0
  155. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/syllable_nuclei.py +0 -0
  156. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/test.py +0 -0
  157. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/test_predictor.py +0 -0
  158. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/utils/__init__.py +0 -0
  159. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/utils/files.py +0 -0
  160. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/utils/stats.py +0 -0
  161. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko/utils/util.py +0 -0
  162. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko.egg-info/dependency_links.txt +0 -0
  163. {nkululeko-0.81.1 → nkululeko-0.81.3}/nkululeko.egg-info/top_level.txt +0 -0
  164. {nkululeko-0.81.1 → nkululeko-0.81.3}/pyproject.toml +0 -0
  165. {nkululeko-0.81.1 → nkululeko-0.81.3}/setup.py +0 -0
  166. {nkululeko-0.81.1 → nkululeko-0.81.3}/venv/bin/activate_this.py +0 -0
@@ -1,6 +1,15 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ Version 0.81.3
5
+ --------------
6
+ * added confidence intervals to result reporting
7
+
8
+ Version 0.81.2
9
+ --------------
10
+ * added a parselmouth.Praat error if pitch out of range
11
+ * changed file path for demo_predictor
12
+
4
13
  Version 0.81.1
5
14
  --------------
6
15
  * fixed bugs in demo module
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nkululeko
3
- Version: 0.81.1
3
+ Version: 0.81.3
4
4
  Summary: Machine learning audio prediction experiments based on templates
5
5
  Home-page: https://github.com/felixbur/nkululeko
6
6
  Author: Felix Burkhardt
@@ -18,7 +18,9 @@ Requires-Dist: audformat
18
18
  Requires-Dist: audinterface
19
19
  Requires-Dist: audiofile
20
20
  Requires-Dist: audiomentations
21
+ Requires-Dist: audmetric
21
22
  Requires-Dist: audonnx
23
+ Requires-Dist: confidence_intervals
22
24
  Requires-Dist: datasets
23
25
  Requires-Dist: imageio
24
26
  Requires-Dist: laion-clap
@@ -321,6 +323,15 @@ F. Burkhardt, Johannes Wagner, Hagen Wierstorf, Florian Eyben and Björn Schulle
321
323
  Changelog
322
324
  =========
323
325
 
326
+ Version 0.81.3
327
+ --------------
328
+ * added confidence intervals to result reporting
329
+
330
+ Version 0.81.2
331
+ --------------
332
+ * added a parselmouth.Praat error if pitch out of range
333
+ * changed file path for demo_predictor
334
+
324
335
  Version 0.81.1
325
336
  --------------
326
337
  * fixed bugs in demo module
@@ -1,2 +1,2 @@
1
- VERSION="0.81.1"
1
+ VERSION="0.81.3"
2
2
  SAMPLING_RATE = 16000
@@ -162,7 +162,10 @@ class Dataset:
162
162
  if column not in [self.target, "age", "speaker", "gender"]:
163
163
  df[column] = df_target[column]
164
164
  except audformat.core.errors.BadKeyError:
165
- pass
165
+ if not self.is_labeled:
166
+ self.util.error(
167
+ f"Giving up: no target ({self.target}) column found"
168
+ )
166
169
 
167
170
  if self.is_labeled:
168
171
  # remember the target in case they get labelencoded later
@@ -1,3 +1,4 @@
1
+ import os
1
2
  import pandas as pd
2
3
  import numpy as np
3
4
  import audiofile
@@ -52,13 +53,16 @@ class Demo_predictor:
52
53
  file_list.append(line)
53
54
  for file_name in file_list:
54
55
  test_folder = glob_conf.config["DATA"]["test_folder"]
55
- file_path = test_folder + file_name.strip()
56
+ file_path = os.path.join(test_folder, file_name.strip())
56
57
  sig, sr = audiofile.read(file_path)
57
58
  print(f"predicting file {file_path}")
58
59
  res_dict = self.predict_signal(sig, sr)
59
- df_tmp = pd.DataFrame(res_dict, index=[file_path])
60
+ df_tmp = pd.DataFrame(res_dict, index=[file_name.strip()])
60
61
  df_res = pd.concat([df_res, df_tmp], ignore_index=False)
61
62
  df_res = df_res.set_index(df_res.index.rename("file"))
63
+ # save only filename and prediction (df_tmp) by default
64
+ # drop other columns
65
+ # df_res = df_res[["predicted"]]
62
66
  if self.outfile is not None:
63
67
  df_res.to_csv(self.outfile)
64
68
  else:
@@ -32,10 +32,11 @@ class AgenderAgenderSet(Featureset):
32
32
  audeer.extract_archive(archive_path, model_root)
33
33
  device = self.util.config_val("MODEL", "device", "cpu")
34
34
  self.model = audonnx.load(model_root, device=device)
35
- pytorch_total_params = sum(p.numel() for p in self.model.parameters())
36
- self.util.debug(
37
- f"initialized agender model with {pytorch_total_params} parameters in total"
38
- )
35
+ # pytorch_total_params = sum(p.numel() for p in self.model.parameters())
36
+ # self.util.debug(
37
+ # f"initialized agender model with {pytorch_total_params} parameters in total"
38
+ # )
39
+ self.util.debug("initialized agender model")
39
40
  self.model_loaded = True
40
41
 
41
42
  def extract(self):
@@ -1,47 +1,46 @@
1
- """
2
- This is a copy of David R. Feinberg's Praat scripts
1
+ """This is a copy of David R. Feinberg's Praat scripts.
3
2
  https://github.com/drfeinberg/PraatScripts
4
- taken June 23rd 2022
3
+ taken June 23rd 2022.
5
4
  """
6
5
 
7
6
  #!/usr/bin/env python3
7
+ import math
8
+ import statistics
9
+
8
10
  import numpy as np
9
11
  import pandas as pd
10
- import math
11
- from tqdm import tqdm
12
12
  import parselmouth
13
- import statistics
14
- from nkululeko.utils.util import Util
15
- import audiofile
16
13
  from parselmouth.praat import call
17
14
  from scipy.stats.mstats import zscore
18
15
  from sklearn.decomposition import PCA
19
- from sklearn.preprocessing import StandardScaler
16
+ from tqdm import tqdm
17
+
18
+ import audiofile
20
19
 
21
20
 
22
21
  # This is the function to measure source acoustics using default male parameters.
23
22
 
24
23
 
25
- def measurePitch(voiceID, f0min, f0max, unit):
26
- sound = parselmouth.Sound(voiceID) # read the sound
24
+ def measure_pitch(voice_id, f0min, f0max, unit):
25
+ sound = parselmouth.Sound(voice_id) # read the sound
27
26
  duration = call(sound, "Get total duration") # duration
28
27
  pitch = call(sound, "To Pitch", 0.0, f0min, f0max) # create a praat pitch object
29
- meanF0 = call(pitch, "Get mean", 0, 0, unit) # get mean pitch
30
- stdevF0 = call(
28
+ mean_f0 = call(pitch, "Get mean", 0, 0, unit) # get mean pitch
29
+ stdev_f0 = call(
31
30
  pitch, "Get standard deviation", 0, 0, unit
32
31
  ) # get standard deviation
33
32
  harmonicity = call(sound, "To Harmonicity (cc)", 0.01, f0min, 0.1, 1.0)
34
33
  hnr = call(harmonicity, "Get mean", 0, 0)
35
- pointProcess = call(sound, "To PointProcess (periodic, cc)", f0min, f0max)
36
- localJitter = call(pointProcess, "Get jitter (local)", 0, 0, 0.0001, 0.02, 1.3)
37
- localabsoluteJitter = call(
38
- pointProcess, "Get jitter (local, absolute)", 0, 0, 0.0001, 0.02, 1.3
34
+ point_process = call(sound, "To PointProcess (periodic, cc)", f0min, f0max)
35
+ local_jitter = call(point_process, "Get jitter (local)", 0, 0, 0.0001, 0.02, 1.3)
36
+ localabsolute_jitter = call(
37
+ point_process, "Get jitter (local, absolute)", 0, 0, 0.0001, 0.02, 1.3
39
38
  )
40
- rapJitter = call(pointProcess, "Get jitter (rap)", 0, 0, 0.0001, 0.02, 1.3)
41
- ppq5Jitter = call(pointProcess, "Get jitter (ppq5)", 0, 0, 0.0001, 0.02, 1.3)
42
- ddpJitter = call(pointProcess, "Get jitter (ddp)", 0, 0, 0.0001, 0.02, 1.3)
43
- localShimmer = call(
44
- [sound, pointProcess],
39
+ rap_jitter = call(point_process, "Get jitter (rap)", 0, 0, 0.0001, 0.02, 1.3)
40
+ ppq5_jitter = call(point_process, "Get jitter (ppq5)", 0, 0, 0.0001, 0.02, 1.3)
41
+ ddp_jitter = call(point_process, "Get jitter (ddp)", 0, 0, 0.0001, 0.02, 1.3)
42
+ local_shimmer = call(
43
+ [sound, point_process],
45
44
  "Get shimmer (local)",
46
45
  0,
47
46
  0,
@@ -50,8 +49,8 @@ def measurePitch(voiceID, f0min, f0max, unit):
50
49
  1.3,
51
50
  1.6,
52
51
  )
53
- localdbShimmer = call(
54
- [sound, pointProcess],
52
+ localdb_shimmer = call(
53
+ [sound, point_process],
55
54
  "Get shimmer (local_dB)",
56
55
  0,
57
56
  0,
@@ -60,8 +59,8 @@ def measurePitch(voiceID, f0min, f0max, unit):
60
59
  1.3,
61
60
  1.6,
62
61
  )
63
- apq3Shimmer = call(
64
- [sound, pointProcess],
62
+ apq3_shimmer = call(
63
+ [sound, point_process],
65
64
  "Get shimmer (apq3)",
66
65
  0,
67
66
  0,
@@ -70,8 +69,8 @@ def measurePitch(voiceID, f0min, f0max, unit):
70
69
  1.3,
71
70
  1.6,
72
71
  )
73
- aqpq5Shimmer = call(
74
- [sound, pointProcess],
72
+ aqpq5_shimmer = call(
73
+ [sound, point_process],
75
74
  "Get shimmer (apq5)",
76
75
  0,
77
76
  0,
@@ -80,8 +79,8 @@ def measurePitch(voiceID, f0min, f0max, unit):
80
79
  1.3,
81
80
  1.6,
82
81
  )
83
- apq11Shimmer = call(
84
- [sound, pointProcess],
82
+ apq11_shimmer = call(
83
+ [sound, point_process],
85
84
  "Get shimmer (apq11)",
86
85
  0,
87
86
  0,
@@ -90,26 +89,26 @@ def measurePitch(voiceID, f0min, f0max, unit):
90
89
  1.3,
91
90
  1.6,
92
91
  )
93
- ddaShimmer = call(
94
- [sound, pointProcess], "Get shimmer (dda)", 0, 0, 0.0001, 0.02, 1.3, 1.6
92
+ dda_shimmer = call(
93
+ [sound, point_process], "Get shimmer (dda)", 0, 0, 0.0001, 0.02, 1.3, 1.6
95
94
  )
96
95
 
97
96
  return (
98
97
  duration,
99
- meanF0,
100
- stdevF0,
98
+ mean_f0,
99
+ stdev_f0,
101
100
  hnr,
102
- localJitter,
103
- localabsoluteJitter,
104
- rapJitter,
105
- ppq5Jitter,
106
- ddpJitter,
107
- localShimmer,
108
- localdbShimmer,
109
- apq3Shimmer,
110
- aqpq5Shimmer,
111
- apq11Shimmer,
112
- ddaShimmer,
101
+ local_jitter,
102
+ localabsolute_jitter,
103
+ rap_jitter,
104
+ ppq5_jitter,
105
+ ddp_jitter,
106
+ local_shimmer,
107
+ localdb_shimmer,
108
+ apq3_shimmer,
109
+ aqpq5_shimmer,
110
+ apq11_shimmer,
111
+ dda_shimmer,
113
112
  )
114
113
 
115
114
 
@@ -120,13 +119,13 @@ def measurePitch(voiceID, f0min, f0max, unit):
120
119
  # Adapted from: DOI 10.17605/OSF.IO/K2BHS
121
120
  # This function measures formants using Formant Position formula
122
121
  # def measureFormants(sound, wave_file, f0min,f0max):
123
- def measureFormants(sound, f0min, f0max):
122
+ def measure_formants(sound, f0min, f0max):
124
123
  sound = parselmouth.Sound(sound) # read the sound
125
124
  # pitch = call(sound, "To Pitch (cc)", 0, f0min, 15, 'no', 0.03, 0.45, 0.01, 0.35, 0.14, f0max)
126
- pointProcess = call(sound, "To PointProcess (periodic, cc)", f0min, f0max)
125
+ point_process = call(sound, "To PointProcess (periodic, cc)", f0min, f0max)
127
126
 
128
127
  formants = call(sound, "To Formant (burg)", 0.0025, 5, 5000, 0.025, 50)
129
- numPoints = call(pointProcess, "Get number of points")
128
+ num_points = call(point_process, "Get number of points")
130
129
 
131
130
  f1_list = []
132
131
  f2_list = []
@@ -134,9 +133,9 @@ def measureFormants(sound, f0min, f0max):
134
133
  f4_list = []
135
134
 
136
135
  # Measure formants only at glottal pulses
137
- for point in range(0, numPoints):
136
+ for point in range(0, num_points):
138
137
  point += 1
139
- t = call(pointProcess, "Get time from index", point)
138
+ t = call(point_process, "Get time from index", point)
140
139
  f1 = call(formants, "Get value at time", 1, t, "Hertz", "Linear")
141
140
  f2 = call(formants, "Get value at time", 2, t, "Hertz", "Linear")
142
141
  f3 = call(formants, "Get value at time", 3, t, "Hertz", "Linear")
@@ -179,7 +178,7 @@ def measureFormants(sound, f0min, f0max):
179
178
  # ## This function runs a 2-factor Principle Components Analysis (PCA) on Jitter and Shimmer
180
179
 
181
180
 
182
- def runPCA(df):
181
+ def run_pca(df):
183
182
  # z-score the Jitter and Shimmer measurements
184
183
  measures = [
185
184
  "localJitter",
@@ -211,19 +210,19 @@ def runPCA(df):
211
210
  # PCA
212
211
  pca = PCA(n_components=2)
213
212
  try:
214
- principalComponents = pca.fit_transform(x)
215
- if np.any(np.isnan(principalComponents)):
213
+ principal_components = pca.fit_transform(x)
214
+ if np.any(np.isnan(principal_components)):
216
215
  print("pc is nan")
217
- print(f"count: {np.count_nonzero(np.isnan(principalComponents))}")
218
- print(principalComponents)
219
- principalComponents = np.nan_to_num(principalComponents)
216
+ print(f"count: {np.count_nonzero(np.isnan(principal_components))}")
217
+ print(principal_components)
218
+ principal_components = np.nan_to_num(principal_components)
220
219
  except ValueError:
221
220
  print("need more than one file for pca")
222
- principalComponents = [[0, 0]]
223
- principalDf = pd.DataFrame(
224
- data=principalComponents, columns=["JitterPCA", "ShimmerPCA"]
221
+ principal_components = [[0, 0]]
222
+ principal_df = pd.DataFrame(
223
+ data=principal_components, columns=["JitterPCA", "ShimmerPCA"]
225
224
  )
226
- return principalDf
225
+ return principal_df
227
226
 
228
227
 
229
228
  # ## This block of code runs the above functions on all of the '.wav' files in the /audio folder
@@ -231,22 +230,21 @@ def runPCA(df):
231
230
 
232
231
  def compute_features(file_index):
233
232
  # create lists to put the results
234
- file_list = []
235
233
  duration_list = []
236
- mean_F0_list = []
237
- sd_F0_list = []
234
+ mean_f0_list = []
235
+ sd_f0_list = []
238
236
  hnr_list = []
239
- localJitter_list = []
240
- localabsoluteJitter_list = []
241
- rapJitter_list = []
242
- ppq5Jitter_list = []
243
- ddpJitter_list = []
244
- localShimmer_list = []
245
- localdbShimmer_list = []
246
- apq3Shimmer_list = []
247
- aqpq5Shimmer_list = []
248
- apq11Shimmer_list = []
249
- ddaShimmer_list = []
237
+ local_jitter_list = []
238
+ localabsolute_jitter_list = []
239
+ rap_jitter_list = []
240
+ ppq5_jitter_list = []
241
+ ddp_jitter_list = []
242
+ local_shimmer_list = []
243
+ localdb_shimmer_list = []
244
+ apq3_shimmer_list = []
245
+ aqpq5_shimmer_list = []
246
+ apq11_shimmer_list = []
247
+ dda_shimmer_list = []
250
248
  f1_mean_list = []
251
249
  f2_mean_list = []
252
250
  f3_mean_list = []
@@ -268,21 +266,21 @@ def compute_features(file_index):
268
266
  sound = parselmouth.Sound(values=signal, sampling_frequency=sampling_rate)
269
267
  (
270
268
  duration,
271
- meanF0,
272
- stdevF0,
269
+ mean_f0,
270
+ stdev_f0,
273
271
  hnr,
274
- localJitter,
275
- localabsoluteJitter,
276
- rapJitter,
277
- ppq5Jitter,
278
- ddpJitter,
279
- localShimmer,
280
- localdbShimmer,
281
- apq3Shimmer,
282
- aqpq5Shimmer,
283
- apq11Shimmer,
284
- ddaShimmer,
285
- ) = measurePitch(sound, 75, 300, "Hertz")
272
+ local_jitter,
273
+ localabsolute_jitter,
274
+ rap_jitter,
275
+ ppq5_jitter,
276
+ ddp_jitter,
277
+ local_shimmer,
278
+ localdb_shimmer,
279
+ apq3_shimmer,
280
+ aqpq5_shimmer,
281
+ apq11_shimmer,
282
+ dda_shimmer,
283
+ ) = measure_pitch(sound, 75, 300, "Hertz")
286
284
  (
287
285
  f1_mean,
288
286
  f2_mean,
@@ -292,28 +290,28 @@ def compute_features(file_index):
292
290
  f2_median,
293
291
  f3_median,
294
292
  f4_median,
295
- ) = measureFormants(sound, 75, 300)
293
+ ) = measure_formants(sound, 75, 300)
296
294
  # file_list.append(wave_file) # make an ID list
297
- except statistics.StatisticsError as se:
298
- print(f"error on file {wave_file}: {se}")
295
+ except (statistics.StatisticsError, parselmouth.PraatError) as errors:
296
+ print(f"error on file {wave_file}: {errors}")
299
297
 
300
298
  duration_list.append(duration) # make duration list
301
- mean_F0_list.append(meanF0) # make a mean F0 list
302
- sd_F0_list.append(stdevF0) # make a sd F0 list
299
+ mean_f0_list.append(mean_f0) # make a mean F0 list
300
+ sd_f0_list.append(stdev_f0) # make a sd F0 list
303
301
  hnr_list.append(hnr) # add HNR data
304
302
 
305
303
  # add raw jitter and shimmer measures
306
- localJitter_list.append(localJitter)
307
- localabsoluteJitter_list.append(localabsoluteJitter)
308
- rapJitter_list.append(rapJitter)
309
- ppq5Jitter_list.append(ppq5Jitter)
310
- ddpJitter_list.append(ddpJitter)
311
- localShimmer_list.append(localShimmer)
312
- localdbShimmer_list.append(localdbShimmer)
313
- apq3Shimmer_list.append(apq3Shimmer)
314
- aqpq5Shimmer_list.append(aqpq5Shimmer)
315
- apq11Shimmer_list.append(apq11Shimmer)
316
- ddaShimmer_list.append(ddaShimmer)
304
+ local_jitter_list.append(local_jitter)
305
+ localabsolute_jitter_list.append(localabsolute_jitter)
306
+ rap_jitter_list.append(rap_jitter)
307
+ ppq5_jitter_list.append(ppq5_jitter)
308
+ ddp_jitter_list.append(ddp_jitter)
309
+ local_shimmer_list.append(local_shimmer)
310
+ localdb_shimmer_list.append(localdb_shimmer)
311
+ apq3_shimmer_list.append(apq3_shimmer)
312
+ aqpq5_shimmer_list.append(aqpq5_shimmer)
313
+ apq11_shimmer_list.append(apq11_shimmer)
314
+ dda_shimmer_list.append(dda_shimmer)
317
315
 
318
316
  # add the formant data
319
317
  f1_mean_list.append(f1_mean)
@@ -330,20 +328,20 @@ def compute_features(file_index):
330
328
  np.column_stack(
331
329
  [
332
330
  duration_list,
333
- mean_F0_list,
334
- sd_F0_list,
331
+ mean_f0_list,
332
+ sd_f0_list,
335
333
  hnr_list,
336
- localJitter_list,
337
- localabsoluteJitter_list,
338
- rapJitter_list,
339
- ppq5Jitter_list,
340
- ddpJitter_list,
341
- localShimmer_list,
342
- localdbShimmer_list,
343
- apq3Shimmer_list,
344
- aqpq5Shimmer_list,
345
- apq11Shimmer_list,
346
- ddaShimmer_list,
334
+ local_jitter_list,
335
+ localabsolute_jitter_list,
336
+ rap_jitter_list,
337
+ ppq5_jitter_list,
338
+ ddp_jitter_list,
339
+ local_shimmer_list,
340
+ localdb_shimmer_list,
341
+ apq3_shimmer_list,
342
+ aqpq5_shimmer_list,
343
+ apq11_shimmer_list,
344
+ dda_shimmer_list,
347
345
  f1_mean_list,
348
346
  f2_mean_list,
349
347
  f3_mean_list,
@@ -382,7 +380,7 @@ def compute_features(file_index):
382
380
  )
383
381
 
384
382
  # add pca data
385
- pcaData = runPCA(df) # Run jitter and shimmer PCA
383
+ pcaData = run_pca(df) # Run jitter and shimmer PCA
386
384
  df = pd.concat([df, pcaData], axis=1) # Add PCA data
387
385
  # reload the data so it's all numbers
388
386
  df.to_csv("processed_results.csv", index=False)
@@ -4,7 +4,7 @@ import pandas as pd
4
4
  import numpy as np
5
5
  import nkululeko.glob_conf as glob_conf
6
6
  import sklearn.utils
7
- from nkululeko.reporter import Reporter
7
+ from nkululeko.reporting.reporter import Reporter
8
8
  import ast
9
9
  from sklearn.model_selection import GridSearchCV
10
10
  import pickle
@@ -20,7 +20,7 @@ from PIL import Image
20
20
  from nkululeko.utils.util import Util
21
21
  import nkululeko.glob_conf as glob_conf
22
22
  from nkululeko.models.model import Model
23
- from nkululeko.reporter import Reporter
23
+ from nkululeko.reporting.reporter import Reporter
24
24
  from nkululeko.losses.loss_softf1loss import SoftF1Loss
25
25
 
26
26
 
@@ -2,7 +2,7 @@
2
2
  from nkululeko.utils.util import Util
3
3
  import nkululeko.glob_conf as glob_conf
4
4
  from nkululeko.models.model import Model
5
- from nkululeko.reporter import Reporter
5
+ from nkululeko.reporting.reporter import Reporter
6
6
  import torch
7
7
  import ast
8
8
  import numpy as np
@@ -1,16 +1,20 @@
1
1
  # model_mlp.py
2
- from nkululeko.utils.util import Util
3
- import nkululeko.glob_conf as glob_conf
4
- from nkululeko.models.model import Model
5
- from nkululeko.reporter import Reporter
6
- import torch
7
2
  import ast
8
- import numpy as np
9
- from sklearn.metrics import mean_squared_error, mean_absolute_error
10
3
  from collections import OrderedDict
11
- from nkululeko.losses.loss_ccc import ConcordanceCorCoeff
12
4
  import os
13
5
 
6
+ import numpy as np
7
+ import torch
8
+
9
+ from audmetric import concordance_cc
10
+ from audmetric import mean_absolute_error
11
+ from audmetric import mean_squared_error
12
+
13
+ import nkululeko.glob_conf as glob_conf
14
+ from nkululeko.losses.loss_ccc import ConcordanceCorCoeff
15
+ from nkululeko.models.model import Model
16
+ from nkululeko.reporting.reporter import Reporter
17
+
14
18
 
15
19
  class MLP_Reg_model(Model):
16
20
  """MLP = multi layer perceptron"""
@@ -201,7 +205,7 @@ class MLP_Reg_model(Model):
201
205
  elif measure == "mae":
202
206
  result = mean_absolute_error(targets.numpy(), predictions.numpy())
203
207
  elif measure == "ccc":
204
- result = Reporter.ccc(targets.numpy(), predictions.numpy())
208
+ result = concordance_cc(targets.numpy(), predictions.numpy())
205
209
  else:
206
210
  self.util.error(f"unknown measure: {measure}")
207
211
  return result, targets, predictions