| 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) |
|
|