File size: 2,561 Bytes
c2864d3
 
91a018b
2ea3a36
 
03f0774
419ab6f
9bb1bc6
fcf5834
c2864d3
2ea3a36
fbe647d
 
2ea3a36
fbe647d
 
2ea3a36
fbe647d
 
 
 
2ea3a36
 
 
5020140
68d753f
9bb1bc6
 
68d753f
 
 
 
 
fa58d25
9bb1bc6
 
 
 
 
 
68d753f
9bb1bc6
fa58d25
68d753f
2ea3a36
68d753f
9bb1bc6
68d753f
fa58d25
 
392c31a
c2864d3
 
1379c69
 
 
 
 
 
 
 
 
 
 
91a018b
 
 
 
 
 
 
fbe647d
 
91a018b
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
from flask import Flask, request, jsonify
from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForTokenClassification
import whisper
import os
import tempfile
import io
import torchaudio

app = Flask(__name__)

# Initialize Whisper model
whisper_model = whisper.load_model("small")  # Renamed variable

# Initialize Emotion Classifier
classifier = pipeline("text-classification", model="j-hartmann/emotion-english-distilroberta-base", return_all_scores=True)

# Initialize NER pipeline
ner_tokenizer = AutoTokenizer.from_pretrained("dslim/bert-base-NER")
ner_model = AutoModelForTokenClassification.from_pretrained("dslim/bert-base-NER")  # Renamed variable
ner_pipeline = pipeline("ner", model=ner_model, tokenizer=ner_tokenizer)  # Renamed variable


@app.route('/transcribe', methods=['POST'])
def transcribe():
    try:
        # Read raw bytes from the request
        audio_bytes = request.data  
        if not audio_bytes:
            return jsonify({"error": "No audio data provided"}), 400

        # Convert bytes to a file-like object
        audio_file = io.BytesIO(audio_bytes)

        # Load audio as a waveform using torchaudio
        waveform, sample_rate = torchaudio.load(audio_file)

        # Whisper expects a NumPy array, so we convert it
        audio_numpy = waveform.squeeze().numpy()

        # Transcribe the audio
        result = model.transcribe(audio_numpy)

        return jsonify({"text": result["text"]})

    except Exception as e:
        print("Error:", str(e))  # Log error for debugging
        return jsonify({"error": "Internal Server Error", "details": str(e)}), 500

        
        
@app.route('/classify', methods=['POST'])
def classify():
    try:
        data = request.get_json()
        if 'text' not in data:
            return jsonify({"error": "Missing 'text' field"}), 400
        
        text = data['text']
        result = classifier(text)
        return jsonify(result)
    
    except Exception as e:
        return jsonify({"error": str(e)}), 500

@app.route('/ner', methods=['POST'])
def ner_endpoint():
    try:
        data = request.get_json()
        text = data.get("text", "")
        
        # Use the renamed ner_pipeline
        ner_results = ner_pipeline(text)
        
        words_and_entities = [
            {"word": result['word'], "entity": result['entity']} 
            for result in ner_results
        ]
        
        return jsonify({"entities": words_and_entities})
    except Exception as e:
        return jsonify({"error": str(e)}), 500