Skip to content
Snippets Groups Projects
asr_processor.py 1.46 KiB
Newer Older
Marcin Wątroba's avatar
Marcin Wątroba committed
import os
import uuid
from abc import ABC, abstractmethod
from pathlib import Path

from flask import Flask, Response, jsonify, request

from sziszapangma.integration.base_asr_service.asr_result import AsrResult

Marcin Wątroba's avatar
Marcin Wątroba committed
_TEMP_DIRECTORY = "asr_processing"


class AsrProcessor(ABC):

    @abstractmethod
    def process_asr(self, audio_file_path: str) -> AsrResult:
        """Method to call for ASR results."""

    def process_request(self) -> Response:
        file_tag = str(uuid.uuid4())
        f = request.files["file"]
        if f is not None and f.filename is not None:
            file_extension = f.filename.split(".")[-1]
            file_name = f"{file_tag}.{file_extension}"
            file_path = f"{_TEMP_DIRECTORY}/{file_name}"
            f.save(file_path)
            try:
                transcription = self.process_asr(file_path)
                os.remove(file_path)
                result_object = jsonify(
                    {"transcription": transcription.words, "full_text": transcription.full_text}
                )
            except:
                result_object = jsonify({"error": "Error on asr processing"})
        else:
            result_object = jsonify({"error": "Error on asr processing"})
        return result_object

    def start_processor(self):
        app = Flask(__name__)
        Path(_TEMP_DIRECTORY).mkdir(parents=True, exist_ok=True)
        app.route("/process_asr", methods=["POST"])(self.process_request)
        app.run(debug=True, host="0.0.0.0")