|
import os |
|
import tempfile |
|
import json |
|
from flask import Flask, request, jsonify |
|
from werkzeug.utils import secure_filename |
|
|
|
from preprocess import process_audio_file |
|
from pause import annotate_pauses |
|
from repetition import annotate_repetitions |
|
from syllable import annotate_syllables |
|
from fillerword import annotate_fillerwords |
|
from morpheme import annotate_morpheme |
|
from morpheme_omission import annotate_morpheme_omission |
|
|
|
from annotation import annotate_transcript |
|
|
|
|
|
|
|
app = Flask(__name__) |
|
|
|
@app.route('/process_old', methods=['POST']) |
|
def process_audio_old(): |
|
data = request.get_json() |
|
if not data or 'input_audio_file' not in data: |
|
return jsonify({'error': 'Missing input_audio_file parameter'}), 400 |
|
|
|
input_audio_file = data['input_audio_file'] |
|
device = data.get('device', 'cuda') |
|
pause_threshold = data.get('pause_threshold', 0.5) |
|
num_speakers = data.get('num_speakers', 2) |
|
|
|
app.logger.info(f"Processing audio file: {input_audio_file}") |
|
|
|
session_id = process_audio_file(input_audio_file, num_speakers=num_speakers, device=device) |
|
annotate_pauses(session_id, pause_threshold) |
|
annotate_repetitions(session_id) |
|
annotate_syllables(session_id) |
|
annotate_fillerwords(session_id) |
|
|
|
output_annotation = annotate_transcript(session_id) |
|
|
|
result = { |
|
'session_id': session_id, |
|
'annotation_result': output_annotation |
|
} |
|
return jsonify(result), 200 |
|
|
|
|
|
|
|
@app.route('/process', methods=['POST']) |
|
def process_audio(): |
|
if 'audio_file' not in request.files: |
|
return jsonify({'error': 'Missing audio file '}), 400 |
|
audio_file = request.files['audio_file'] |
|
filename = secure_filename(audio_file.filename) |
|
|
|
suffix = os.path.splitext(filename)[1] or '.wav' |
|
with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp: |
|
audio_path = tmp.name |
|
audio_file.save(audio_path) |
|
|
|
device = request.form.get('device', 'cuda') |
|
pause_threshold = float(request.form.get('pause_threshold', 0.5)) |
|
num_speakers = int(request.form.get('num_speakers', 2)) |
|
|
|
app.logger.info(f"Processing uploaded audio: {audio_path}") |
|
|
|
session_id = process_audio_file(audio_path, num_speakers=num_speakers, device=device) |
|
annotate_pauses(session_id, pause_threshold) |
|
annotate_repetitions(session_id) |
|
|
|
annotate_fillerwords(session_id) |
|
|
|
annotate_morpheme(session_id) |
|
annotate_morpheme_omission(session_id) |
|
|
|
|
|
|
|
json_path = f"session_data/{session_id}/{session_id}_transcriptionCW.json" |
|
if not os.path.isfile(json_path): |
|
return jsonify({'error': f"Annotation file {json_path} not found"}), 500 |
|
|
|
with open(json_path, 'r', encoding='utf-8') as f: |
|
transcription = json.load(f) |
|
|
|
|
|
try: |
|
os.remove(audio_path) |
|
except OSError: |
|
pass |
|
|
|
return jsonify(transcription), 200 |
|
|
|
|
|
if __name__ == "__main__": |
|
app.run(host="0.0.0.0", port=7860, debug=True) |
|
|