Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
 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'))
Exemple #4
0
 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'))       
Exemple #5
0
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)