|
|
import os, sys |
|
|
import unittest |
|
|
from pathlib import Path |
|
|
import pandas as pd |
|
|
|
|
|
sys.path.insert(0, os.path.abspath(".")) |
|
|
|
|
|
|
|
|
from acodet.create_session_file import create_session_file |
|
|
|
|
|
create_session_file() |
|
|
import json |
|
|
|
|
|
with open("acodet/src/tmp_session.json", "r") as f: |
|
|
session = json.load(f) |
|
|
session["sound_files_source"] = "tests/test_files/test_audio_files" |
|
|
session[ |
|
|
"generated_annotation_source" |
|
|
] = "tests/test_files/test_generated_annotations" |
|
|
session[ |
|
|
"annotation_destination" |
|
|
] = "tests/test_files/test_combined_annotations" |
|
|
session[ |
|
|
"generated_annotations_folder" |
|
|
] = "tests/test_files/test_generated_annotations" |
|
|
|
|
|
session[ |
|
|
"reviewed_annotation_source" |
|
|
] = "tests/test_files/test_generated_annotations" |
|
|
session["tfrecords_destination_folder"] = "tests/test_files/test_tfrecords" |
|
|
|
|
|
with open("acodet/src/tmp_session.json", "w") as f: |
|
|
json.dump(session, f) |
|
|
|
|
|
|
|
|
|
|
|
from acodet.annotate import run_annotation, filter_annots_by_thresh |
|
|
from acodet.funcs import return_windowed_file, get_train_set_size |
|
|
from acodet.models import GoogleMod |
|
|
from acodet.combine_annotations import generate_final_annotations |
|
|
from acodet.tfrec import write_tfrec_dataset |
|
|
from acodet.train import run_training |
|
|
from acodet import global_config as conf |
|
|
|
|
|
|
|
|
|
|
|
class TestDetection(unittest.TestCase): |
|
|
def test_annotation(self): |
|
|
self.time_stamp = run_annotation() |
|
|
df = pd.read_csv( |
|
|
( |
|
|
Path(conf.GEN_ANNOTS_DIR) |
|
|
.joinpath(self.time_stamp) |
|
|
.joinpath("stats.csv") |
|
|
) |
|
|
) |
|
|
self.assertEqual( |
|
|
df["number of predictions with thresh>0.8"][0], |
|
|
326, |
|
|
"Number of predictions is not what it should be.", |
|
|
) |
|
|
|
|
|
filter_annots_by_thresh(self.time_stamp) |
|
|
file = list( |
|
|
Path(conf.GEN_ANNOT_SRC) |
|
|
.joinpath(self.time_stamp) |
|
|
.joinpath(f"thresh_{conf.THRESH}") |
|
|
.glob("**/*.txt") |
|
|
)[0] |
|
|
df = pd.read_csv(file) |
|
|
self.assertEqual( |
|
|
len(df), |
|
|
309, |
|
|
"Number of predictions from filtered thresholds " "is incorrect.", |
|
|
) |
|
|
|
|
|
|
|
|
class TestTraining(unittest.TestCase): |
|
|
def test_model_load(self): |
|
|
model = GoogleMod(load_g_ckpt=False).model |
|
|
self.assertGreater(len(model.layers), 15) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestTFRecordCreation(unittest.TestCase): |
|
|
def test_tfrecord(self): |
|
|
time_stamp = list(Path(conf.ANNOT_DEST).iterdir())[-1] |
|
|
write_tfrec_dataset(annot_dir=time_stamp, active_learning=False) |
|
|
metadata_file_path = Path(conf.TFREC_DESTINATION).joinpath( |
|
|
"dataset_meta_train.json" |
|
|
) |
|
|
self.assertEqual( |
|
|
metadata_file_path.exists(), |
|
|
1, |
|
|
"TFRecords metadata file was not created.", |
|
|
) |
|
|
|
|
|
with open(metadata_file_path, "r") as f: |
|
|
data = json.load(f) |
|
|
self.assertEqual( |
|
|
data["dataset"]["size"]["train"], |
|
|
517, |
|
|
"TFRecords files has wrong number of datapoints.", |
|
|
) |
|
|
|
|
|
def test_combined_annotation(self): |
|
|
generate_final_annotations(active_learning=False) |
|
|
time_stamp = list(Path(conf.GEN_ANNOTS_DIR).iterdir())[-1].stem |
|
|
combined_annots_path = ( |
|
|
Path(conf.ANNOT_DEST) |
|
|
.joinpath(time_stamp) |
|
|
.joinpath("combined_annotations.csv") |
|
|
) |
|
|
self.assertEqual( |
|
|
combined_annots_path.exists(), |
|
|
1, |
|
|
"csv file containing combined_annotations does not exist.", |
|
|
) |
|
|
df = pd.read_csv(combined_annots_path) |
|
|
self.assertEqual( |
|
|
df.start.iloc[-1], |
|
|
1795.2825, |
|
|
"The annotations in combined_annotations.csv don't seem to be identical", |
|
|
) |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
unittest.main() |
|
|
|