def main(): parser = argparse.ArgumentParser() parser.add_argument("-g", "--detect_gender", type=bool, default=False, help="Enable gender detection") parser.add_argument("-d", "--vad_engine", choices=['sm', 'smn'], default='smn', help="Voice activity detection: smn (default) or sm") parser.add_argument("-b", "--ffmpeg_binary", default='ffmpeg', help="FFMPEG binary") parser.add_argument("input", help="Input file") parser.add_argument("output", help="Output file") args = parser.parse_args() seg = Segmenter(vad_engine=args.vad_engine, detect_gender=args.detect_gender, ffmpeg=args.ffmpeg_binary) seg.batch_process([args.input], [args.output], verbose=True)
def run_inaseg(input_wav, csv_out_dir): # load neural network into memory, may last few seconds with warnings.catch_warnings(): warnings.simplefilter("ignore", category=MatplotlibDeprecationWarning) from inaSpeechSegmenter import Segmenter seg = Segmenter(vad_engine="smn", detect_gender=True) with warnings.catch_warnings(): warnings.simplefilter("ignore") stem = input_wav.stem input_files = [str(input_wav)] output_files = [str(csv_out_dir / f"{stem}.csv")] seg.batch_process(input_files, output_files, verbose=True) #subprocess.run(["ina_speech_segmenter.py", "-i", input_wav, "-o", csv_out_dir]) return get_csv_path(input_wav, csv_out_dir)
def test_batch(self): seg = Segmenter(vad_engine='sm') with tempfile.TemporaryDirectory() as tmpdirname: lout = [os.path.join(tmpdirname, '1.csv'), os.path.join(tmpdirname, '2.csv')] ret = seg.batch_process(['./media/musanmix.mp3', './media/musanmix.mp3'], lout) self.assertTrue(filecmp.cmp(lout[0], lout[1])) self.assertTrue(filecmp.cmp(lout[0], './media/musanmix-sm-gender.csv'))
def test_praat_export(self): seg = Segmenter() with tempfile.TemporaryDirectory() as tmpdirname: lout = [os.path.join(tmpdirname, '1.TextGrid')] ret = seg.batch_process(['./media/musanmix.mp3'], lout, output_format='textgrid') self.assertTrue(filecmp.cmp(lout[0], './media/musanmix-smn-gender.TextGrid'))
import Pyro4 import sys import os import socket from inaSpeechSegmenter import Segmenter if __name__ == '__main__': dname = os.path.dirname(os.path.realpath(__file__)) hostname = socket.gethostname() uri = sys.argv[1] jobserver = Pyro4.Proxy(uri) ret = -1 outname = 'init' # batch size set at 1024. Use lower values with small gpus g = Segmenter(batch_size=1024) while True: lsrc, ldst = jobserver.get_njobs('%s %s' % (hostname, ret)) print(lsrc, ldst) if len(lsrc) == 0: print('job list finished') break ret = g.batch_process(lsrc, ldst, skipifexist=True, nbtry=3)
else: input_files += glob.glob(e) assert len( input_files ) > 0, 'No existing media selected for analysis! Bad values provided to -i (%s)' % args.input odir = args.output_directory.strip(" \t\n\r").rstrip('/') assert os.access(odir, os.W_OK), 'Directory %s is not writable!' % odir # Do processings from inaSpeechSegmenter import Segmenter, seg2csv # load neural network into memory, may last few seconds detect_gender = bool(distutils.util.strtobool(args.detect_gender)) seg = Segmenter(vad_engine=args.vad_engine, detect_gender=detect_gender, ffmpeg=args.ffmpeg_binary, energy_ratio=args.energy_ratio, batch_size=args.batch_size) with warnings.catch_warnings(): warnings.simplefilter("ignore") base = [os.path.splitext(os.path.basename(e))[0] for e in input_files] output_files = [ os.path.join(odir, e + '.' + args.export_format) for e in base ] seg.batch_process(input_files, output_files, verbose=True, output_format=args.export_format)
args = parser.parse_args() # Preprocess arguments and check their consistency input_files = [] for e in args.input: if e.startswith("http"): input_files += [e] else: input_files += glob.glob(e) assert len( input_files ) > 0, 'No existing media selected for analysis! Bad values provided to -i (%s)' % args.input odir = args.output_directory.strip(" \t\n\r").rstrip('/') assert os.access(odir, os.W_OK), 'Directory %s is not writable!' % odir # Do processings from inaSpeechSegmenter import Segmenter, seg2csv # load neural network into memory, may last few seconds detect_gender = bool(distutils.util.strtobool(args.detect_gender)) seg = Segmenter(vad_engine=args.vad_engine, detect_gender=detect_gender, ffmpeg=args.ffmpeg_binary) with warnings.catch_warnings(): warnings.simplefilter("ignore") base = [os.path.splitext(os.path.basename(e))[0] for e in input_files] output_files = [os.path.join(odir, e + '.csv') for e in base] seg.batch_process(input_files, output_files, verbose=True)