Я создаю rest api, который получает файл wav, по сути, это должен быть конвейер.
Он принимает запись разговора в формате wav между 2 людьми, извлекает один канал, занимает 10 секунд и преобразует эти 10 секунд в тензорную форму.
У меня есть 3 отдельные функции, и я тестировал их, вызывая python для каждой из них в оболочке. Теперь нужно объединить все это в одну удобную веб-службу: получить необработанную запись на 1 конце - создать тензор на 2-м конце.
Этот код извлекает и сохраняет канал:
def get_customer_voice(file):
wav = wf.read(file)
ch = wav[1].shape[1]
sr = wav[0]
c1 = wav[1][:,1]
if ch==1:
exit()
vad = VoiceActivityDetection()
vad.process(c1)
voice_samples = vad.get_voice_samples()
wf.write('%s_customer.wav'%file,sr,voice_samples)
I вызвал все 3, как это, в cmd:
>>>python get_customer_voice file1_2019.wav //produces file1_1channel.wav
>>>python get_10_seconds.py file1_2019_1channel.wav // produces file1_1channel_10_seconds.wav
>>>python get_embeddig.py file_10_sec.wav //gives final embedding
Но функция extract_channel сохраняет его как файл, как обойтись без сохранения файла? Как передать каждый вновь сформированный файл без сохранения и протестировать в почтальоне, чтобы убедиться, что этот веб-сервис работает?
Мой flask server.py:
app = Flask(__name__)
@app.route('/process_all', methods = ['POST'])
def process_all():
if request.method == 'POST':
file_wav = request.files['file_wav']
file_1_channel = get_channel(file_wav)// not working
file_10sec = get_10_sec(file_1_channel)// not working
embedding = get_embedding(file_10sec)
return jsonify({'response': str(embedding)})
if __name__ == '__main__':
app.run(debug=True, port=9090)
Как склеить все 3 функции вместе?
один потенциал Решение состоит в том, чтобы не сохранять массив numpy обратно в wav и просто работать с массивами numpy. Кто сталкивался с такой же проблемой обертывания модели в успокаивающем api?