Beispiel #1
0
def create_mp4(video, audio, save_path=None):
    audio = AudioFileClip(audio) if audio is not None else None
    fps = video.shape[0] / audio.duration
    imageio.mimsave("backend_files/mute.mp4", video)
    video = VideoFileClip("backend_files/mute.mp4", audio=False)
    video.set_audio(audio)
    if save_path is not None:
        video.write_videofile(save_path, fps=fps)  # , codec='mpeg4')
    return video
Beispiel #2
0
def form():

    ## Dealing with form data from the last round, if applicable
    try:
        classname=request.form['classname']

        if request.form['button'] == 'Apply Label':
            write_classname = classname

        else:
            write_classname = request.form['button']
        audio_file_id=request.form['audio_file_id']
        start_time=request.form['start_time']
        output_csv_path='/home/audio_labeler/output_table.csv'
        with open(output_csv_path,'a') as fo:
            label_duration = 1
            fo.write(audio_file_id + ',' + \
            str(float(start_time)) + ',' + \
            str(float(label_duration)) + ',' + \
            '''"''' + write_classname + '''"\n''')
        shutil.copy(output_csv_path,'/home/audio_labeler/static/output/output_table.csv')
    except:
        classname=''

    try:
        os.remove('/home/audio_labeler/static/' + request.form['temp_wav_filename'])
    except:
        pass

    default_buttons=["Background Speaker","Music","Silence","Multiple Speakers","Not Sure", "Noise",""]

    try:
        if write_classname not in default_buttons:
            label_count_dict[write_classname] += 1
    except:
        try:
            if write_classname not in default_buttons:
                label_count_dict[write_classname] = 1
        except: pass

    label_counts = map(list, label_count_dict.items())
    label_counts = sorted(label_counts, key=itemgetter(1))[::-1]

    ## Launching new round
    #audio_filename=random.choice([item for item in os.listdir('/home/audio_labeler/clips') if item[-4:].lower() in ('.mp3','.wav','.mp4')])
    media_path = random.choice(media_paths)
    audio_file_id = media_path.split('/')[-1][:-4]
    duration = media_duration(media_path)
    start_time = int((random.random()*(duration-5.0)))
    snd = AudioFileClip.AudioFileClip(media_path)
    temp_wav_filename = str(random.random())[2:] + '.wav'
    snd.subclip(start_time,start_time + 5).write_audiofile('/home/audio_labeler/static/' + temp_wav_filename)
    response = render_template('form_audio.html', audio_file_id=audio_file_id, \
                start_time=start_time, classname=classname, temp_wav_filename=temp_wav_filename, \
                media_path=media_path, label_counts=label_counts[:15])
    return response
Beispiel #3
0
def subclip(media_path, start_time, end_time, out_dir=''):
    if out_dir == '':
        out_dir = os.path.dirname(media_path)
    audio_filename = media_path.split('/')[-1]
    basename = audio_filename[:-4]
    start_time = round(float(start_time), 3)
    end_time = round(float(end_time), 3)
    snd = AudioFileClip.AudioFileClip(media_path)
    out_filename = basename + '__' + str(start_time) + '_' + str(
        end_time) + '.wav'
    snd.subclip(start_time,
                end_time).write_audiofile(os.path.join(out_dir, out_filename))
    return os.path.join(out_dir, out_filename)
Beispiel #4
0
def subclip_list(media_path, range_pairs, out_dir=''):
    if out_dir == '':
        out_dir = os.path.dirname(media_path)
    snd = AudioFileClip.AudioFileClip(media_path)
    file_duration = duration(media_path)
    for pair in range_pairs:
        start = pair[0]
        duration_secs = pair[1]
        if (float(start) >= 0.0) & (float(duration_secs) > 0.0):
            if start + duration_secs > file_duration:
                duration_secs = file_duration - start
            basename = media_path.split('/')[-1][:-4]
            out_filename = basename + '__' + str(round(start, 4)) + '_' + str(
                round(duration_secs, 4)) + '.wav'
            snd.subclip(float(start),
                        float(start) + float(duration_secs)).write_audiofile(
                            os.path.join(out_dir, out_filename))
Beispiel #5
0
 def read_flute(self):
     sigs = []
     i = 1
     if (self.flute):
         print('start flute feature extraction')
         os.chdir(os.getcwd() + '\\flute')
         for path in os.listdir():
             if (i % 100 == 0):
                 print("flute : ", i, "/", np.size(os.listdir()))
             # y, sr = lr.load(path)
             signal = sig()
             audio = mpe.AudioFileClip(path)
             signal.y = np.mean(audio.to_soundarray(buffersize=200), 1)
             signal.sr = audio.fps  # sampling rate
             feat = feature_extraction.features(signal.y, signal.sr)
             feat_vec = feat.get_feature_vectors()
             self.X.append(feat_vec.tolist())
             self.Y.append(2)  #2 for flute
             sigs.append(signal)
             i = i + 1
         os.chdir("..")
     return sigs
Beispiel #6
0
def main(argv):
    try:
        model_path = sys.argv[1]
        resolution_secs = float(sys.argv[2])
        dir_path = sys.argv[3]
    except getopt.GetoptError:
        print "sida_batch_classify.py <pkl model pathname> <directory pathname>"
        sys.exit(2)

    print('>> Model: ' + model_path)
    print('>> Directory: ' + dir_path)

    classifier = joblib.load(model_path)

    model_basename = os.path.basename(model_path).replace('.pkl','')

    media_pathnames = attk.find_media_paths(dir_path)

    random.shuffle(media_pathnames)

    for media_pathname in media_pathnames:

        media_basename = '.'.join(os.path.basename(media_pathname).split('.')[:-1])

        csv_path = os.path.join(dir_path, media_basename + '__' + model_basename+'_'+str(resolution_secs)+'.csv')

        if not os.path.isfile(csv_path):

            tic = timeit.default_timer()

            print('    >> Classifying '+ media_pathname.split('/')[-1])

            if media_pathname[-4:].lower() == '.wav':
                wav_pathname = media_pathname
                using_temp_wav = False

            else:
                wav_pathname = attk.temp_wav_path(media_pathname)
                using_temp_wav = True

            snd = AudioFileClip.AudioFileClip(wav_pathname)

            classifier_output = []

            for i in range(int(attk.duration(wav_pathname)/resolution_secs)):
                try:
                    snd.subclip(i * resolution_secs , (i * resolution_secs) + resolution_secs).write_audiofile('/tmp/temp_sida_clip.wav')
                    classifier_output.append(classify_clip(classifier, '/tmp/temp_sida_clip.wav'))
                except Exception as e:
                    classifier_output.append(0.0)
                    print(e)

            with open(csv_path, 'w') as fo:
                i = 0
                for value in classifier_output:
                    start = round(i * resolution_secs, 4)
                    duration = round(resolution_secs, 4)
                    fo.write(str(start) + ',' + str(duration) + ',' + str(value) + '\n')
                    i += 1

            if using_temp_wav == True:
                os.remove(wav_pathname)

            print("     >> Completed in " + str(round(timeit.default_timer() - tic, 4))) + " seconds\n"