diff --git a/opendbm/api_lib/movement/api.py b/opendbm/api_lib/movement/api.py new file mode 100644 index 00000000..01257d34 --- /dev/null +++ b/opendbm/api_lib/movement/api.py @@ -0,0 +1,105 @@ +import os +import shutil +import tempfile +from collections import OrderedDict + +from opendbm.api_lib.model import VideoModel +from opendbm.api_lib.util import check_isfile +from opendbm.dbm_lib.controller import process_feature as pf + +from ._eye_blink import EyeBlink +from ._eye_gaze import EyeGaze +from ._facial_tremor import FacialTremor +from ._head_movement import HeadMovement +from ._vocal_tremor import VocalTremor + + +class Movement(VideoModel): + def __init__(self): + super().__init__() + self._eye_blink = EyeBlink() + self._eye_gaze = EyeGaze() + self._facial_tremor = FacialTremor() + self._head_movement = HeadMovement() + self._vocal_tremor = VocalTremor() + + self._models = OrderedDict( + { + "eye_blink": self._eye_blink, + "eye_gaze": self._eye_gaze, + "facial_tremor": self._facial_tremor, + "head_movement": self._head_movement, + "vocal_tremor": self._vocal_tremor, + } + ) + + def fit(self, path): + """Fit a file in filepath to OpenFace Model. Make sure to set the Docker to be active first. + For installation, see https://teebid.github.io/aicure_opendbm/docs/openface-docker-installation + + Parameters + ---------- + path : string, + File Path of MP4/MOV file. + + """ + check_isfile(path) + result_path, result_path_lmk, bn = super()._fit(path, "movement") + wav_path = pf.audio_to_wav(path, tmp=True) + + for k, v in self._models.items(): + if k in ["eye_gaze", "head_movement"]: + v._df = v._fit_transform(result_path) + elif k == "facial_tremor": + v._df = v._fit_transform(result_path_lmk) + elif k == "vocal_tremor": + v._df = v._fit_transform(wav_path) + else: + v._df = v._fit_transform(path) + shutil.rmtree(f"{tempfile.gettempdir()}/{bn}/") + shutil.rmtree(f"{tempfile.gettempdir()}/{bn}_landmark_output/") + os.remove(wav_path) + + def get_eye_blink(self): + """ + Get the model object of Eye Blink + Returns: + self: object + """ + return self._eye_blink + + def get_eye_gaze(self): + """ + Get the model object of Eye Gaze + Returns: + self: object + Model Object + """ + return self._eye_gaze + + def get_facial_tremor(self): + """ + Get the model object of Facial Tremor + Returns: + self: object + Model Object + """ + return self._facial_tremor + + def get_head_movement(self): + """ + Get the model object of Head Movement + Returns: + self: object + Model Object + """ + return self._head_movement + + def get_vocal_tremor(self): + """ + Get the model object of Vocal Tremor + Returns: + self: object + Model Object + """ + return self._vocal_tremor