code refactor only

This commit is contained in:
jordi.hasianta
2022-09-15 20:26:04 +07:00
parent 0b74c9d02b
commit 436d4e5a4f

View File

@@ -4,25 +4,21 @@ project_name: DBM
created: 2020-20-07 created: 2020-20-07
""" """
from opendbm.dbm_lib.dbm_features.raw_features.audio import shimmer, pause_segment, gne, formant_freq, pitch_freq, mfcc, \
jitter, intensity, voice_frame_score, hnr
from opendbm.dbm_lib.dbm_features.raw_features.video import face_asymmetry, face_landmark
from opendbm.dbm_lib.dbm_features.raw_features.video import face_au, face_emotion_expressivity
from opendbm.dbm_lib.dbm_features.raw_features.movement import head_motion, eye_blink, eye_gaze
from opendbm.dbm_lib.dbm_features.raw_features.movement import facial_tremor, voice_tremor
from opendbm.dbm_lib.dbm_features.raw_features.nlp import transcribe, speech_features
import subprocess
import logging
from os.path import isfile, splitext, basename, dirname, join
import glob import glob
import logging
import os import os
import subprocess
import tempfile
from os.path import basename, dirname, isfile, join, splitext
from opendbm.dbm_lib.dbm_features.raw_features import audio, movement, nlp, video
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
logger=logging.getLogger() logger = logging.getLogger()
def audio_to_wav(input_filepath):
""" Extracts a video's audio file and saves it to wav def audio_to_wav(input_filepath, tmp=False):
"""Extracts a video's audio file and saves it to wav
Args: Args:
input_filepath: (str) input_filepath: (str)
Returns: Returns:
@@ -30,19 +26,41 @@ def audio_to_wav(input_filepath):
try: try:
fname, _ = splitext(input_filepath) fname, _ = splitext(input_filepath)
output_filepath = fname + '.wav' if tmp:
fname = os.path.basename(input_filepath)
output_filepath = f"{tempfile.gettempdir()}/{fname}.wav"
else:
output_filepath = fname + ".wav"
if not isfile(output_filepath): if not isfile(output_filepath):
call = ['ffmpeg', '-i', input_filepath, '-vn', '-acodec', 'pcm_s16le', '-ar', '44100', output_filepath] call = [
"ffmpeg",
"-i",
input_filepath,
"-vn",
"-acodec",
"pcm_s16le",
"-ar",
"44100",
output_filepath,
]
logger.info('Converting audio from {} to wav'.format(input_filepath)) logger.info("Converting audio from {} to wav".format(input_filepath))
subprocess.check_output(call) subprocess.Popen(
logger.info('wav output saved in {}'.format(output_filepath)) call,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
stdin=subprocess.PIPE,
).wait()
# subprocess.check_output(call)
logger.info("wav output saved in {}".format(output_filepath))
else: else:
logger.info('Output file {} already exists'.format(output_filepath)) logger.info("Output file {} already exists".format(output_filepath))
return output_filepath
except Exception as e: except Exception as e:
logger.error('Failed to extract audio from Video') logger.error("Failed to extract audio from Video", e)
def process_acoustic(video_uri, out_dir, dbm_group, r_config): def process_acoustic(video_uri, out_dir, dbm_group, r_config):
""" """
@@ -51,39 +69,40 @@ def process_acoustic(video_uri, out_dir, dbm_group, r_config):
video_uri: video path; out_dir: raw variable output dir video_uri: video path; out_dir: raw variable output dir
dbm_group: list of features group to process; r_config: raw feature config object dbm_group: list of features group to process; r_config: raw feature config object
""" """
if dbm_group != None and len(dbm_group)>0 and 'acoustic' not in dbm_group: if dbm_group is not None and len(dbm_group) > 0 and "acoustic" not in dbm_group:
return return
logger.info('Processing acoustic variables from data in {}'.format(video_uri)) logger.info("Processing acoustic variables from data in {}".format(video_uri))
logger.info('processing audio intensity....') logger.info("processing audio intensity....")
intensity.run_intensity(video_uri, out_dir, r_config) audio.intensity.run_intensity(video_uri, out_dir, r_config)
logger.info('processing audio pitch freq....') logger.info("processing audio pitch freq....")
pitch_freq.run_pitch(video_uri, out_dir, r_config) audio.pitch_freq.run_pitch(video_uri, out_dir, r_config)
logger.info('processing HNR....') logger.info("processing HNR....")
hnr.run_hnr(video_uri, out_dir, r_config) audio.hnr.run_hnr(video_uri, out_dir, r_config)
logger.info('processing GNE....') logger.info("processing GNE....")
gne.run_gne(video_uri, out_dir, r_config) audio.gne.run_gne(video_uri, out_dir, r_config)
logger.info('processing voice frame score....') logger.info("processing voice frame score....")
voice_frame_score.run_vfs(video_uri, out_dir, r_config) audio.voice_frame_score.run_vfs(video_uri, out_dir, r_config)
logger.info('processing formant frequency....') logger.info("processing formant frequency....")
formant_freq.run_formant(video_uri, out_dir, r_config) audio.formant_freq.run_formant(video_uri, out_dir, r_config)
logger.info('processing pause segment....') logger.info("processing pause segment....")
pause_segment.run_pause_segment(video_uri, out_dir, r_config) audio.pause_segment.run_pause_segment(video_uri, out_dir, r_config)
logger.info('processing jitter....') logger.info("processing jitter....")
jitter.run_jitter(video_uri, out_dir, r_config) audio.jitter.run_jitter(video_uri, out_dir, r_config)
logger.info('processing shimmer....') logger.info("processing shimmer....")
shimmer.run_shimmer(video_uri, out_dir, r_config) audio.shimmer.run_shimmer(video_uri, out_dir, r_config)
logger.info("processing mfcc....")
audio.mfcc.run_mfcc(video_uri, out_dir, r_config)
logger.info('processing mfcc....')
mfcc.run_mfcc(video_uri, out_dir, r_config)
def process_facial(video_uri, out_dir, dbm_group, r_config): def process_facial(video_uri, out_dir, dbm_group, r_config):
""" """
@@ -92,21 +111,22 @@ def process_facial(video_uri, out_dir, dbm_group, r_config):
video_uri: video path; out_dir: raw variable output dir video_uri: video path; out_dir: raw variable output dir
dbm_group: list of features to process; r_config: raw feature config object dbm_group: list of features to process; r_config: raw feature config object
""" """
if dbm_group != None and len(dbm_group)>0 and 'facial' not in dbm_group: if dbm_group is not None and len(dbm_group) > 0 and "facial" not in dbm_group:
return return
logger.info('Processing facial variables from data in {}'.format(video_uri)) logger.info("Processing facial variables from data in {}".format(video_uri))
logger.info('processing facial asymmetry....') logger.info("processing facial asymmetry....")
face_asymmetry.run_face_asymmetry(video_uri, out_dir, r_config) video.face_asymmetry.run_face_asymmetry(video_uri, out_dir, r_config)
logger.info('processing facial Action Unit....') logger.info("processing facial Action Unit....")
face_au.run_face_au(video_uri, out_dir, r_config) video.face_au.run_face_au(video_uri, out_dir, r_config)
logger.info('processing facial expressivity....') logger.info("processing facial expressivity....")
face_emotion_expressivity.run_face_expressivity(video_uri, out_dir, r_config) video.face_emotion_expressivity.run_face_expressivity(video_uri, out_dir, r_config)
logger.info("processing facial landmark....")
video.face_landmark.run_face_landmark(video_uri, out_dir, r_config)
logger.info('processing facial landmark....')
face_landmark.run_face_landmark(video_uri, out_dir, r_config)
def process_movement(video_uri, out_dir, dbm_group, r_config, dlib_model): def process_movement(video_uri, out_dir, dbm_group, r_config, dlib_model):
""" """
@@ -116,25 +136,27 @@ def process_movement(video_uri, out_dir, dbm_group, r_config, dlib_model):
dbm_group: list of features to process; r_config: raw feature config object dbm_group: list of features to process; r_config: raw feature config object
dlib_model: shape predictor model path dlib_model: shape predictor model path
""" """
if dbm_group != None and len(dbm_group)>0 and 'movement' not in dbm_group: if dbm_group is not None and len(dbm_group) > 0 and "movement" not in dbm_group:
return return
logger.info('Processing movement variables from data in {}'.format(video_uri)) logger.info("Processing movement variables from data in {}".format(video_uri))
logger.info('processing head movement....') logger.info("processing head movement....")
head_motion.run_head_movement(video_uri, out_dir, r_config) movement.head_motion.run_head_movement(video_uri, out_dir, r_config)
logger.info('processing eye blink....') logger.info("processing eye blink....")
eye_blink.run_eye_blink(video_uri, out_dir, r_config, dlib_model) movement.eye_blink.run_eye_blink(video_uri, out_dir, r_config, dlib_model)
logger.info('processing eye gaze....') logger.info("processing eye gaze....")
eye_gaze.run_eye_gaze(video_uri, out_dir, r_config) movement.eye_gaze.run_eye_gaze(video_uri, out_dir, r_config)
logger.info('processing voice tremor....') logger.info("processing voice tremor....")
voice_tremor.run_vtremor(video_uri, out_dir, r_config) movement.voice_tremor.run_vtremor(video_uri, out_dir, r_config)
logger.info('processing facial tremor....') logger.info("processing facial tremor....")
facial_tremor.fac_tremor_process(video_uri, out_dir, r_config, model_output=True) movement.facial_tremor.fac_tremor_process(
video_uri, out_dir, r_config, model_output=True
)
def process_nlp(video_uri, out_dir, dbm_group, tran_tog, r_config, deep_path): def process_nlp(video_uri, out_dir, dbm_group, tran_tog, r_config, deep_path):
@@ -145,15 +167,15 @@ def process_nlp(video_uri, out_dir, dbm_group, tran_tog, r_config, deep_path):
dbm_group: list of features to process; r_config: raw feature config object dbm_group: list of features to process; r_config: raw feature config object
deep_path: deep speech build path deep_path: deep speech build path
""" """
if dbm_group != None and len(dbm_group)>0 and 'speech' not in dbm_group: if dbm_group is not None and len(dbm_group) > 0 and "speech" not in dbm_group:
return return
logger.info('Processing nlp variables from data in {}'.format(video_uri)) logger.info("Processing nlp variables from data in {}".format(video_uri))
transcribe.run_transcribe(video_uri, out_dir, r_config, deep_path) nlp.transcribe.run_transcribe(video_uri, out_dir, r_config, deep_path)
speech_features.run_speech_feature(video_uri, out_dir, r_config, tran_tog) nlp.speech_features.run_speech_feature(video_uri, out_dir, r_config, tran_tog)
def remove_file(file_path, file_ext = '.wav'): def remove_file(file_path, file_ext=".wav"):
""" """
removing wav file removing wav file
""" """
@@ -161,5 +183,5 @@ def remove_file(file_path, file_ext = '.wav'):
file_name, _ = splitext(basename(file_path)) file_name, _ = splitext(basename(file_path))
wav_file = glob.glob(join(file_dir, file_name + file_ext)) wav_file = glob.glob(join(file_dir, file_name + file_ext))
if len(wav_file)> 0: if len(wav_file) > 0:
os.remove(wav_file[0]) os.remove(wav_file[0])