# -*- coding: utf-8 -*- # ------------------------------------------------------------------------------ # File Name: fastapi_service.py # Original Author: Clark Lin # Email: clark_lin@outlook.com # # Change History # Version Date By Description # 0.01 2024-04-24 Clark Lin Initial version # 0.02 2024-05-16 Clark Lin Added whisper service # # Main features summary: # - REST API for OAuth2 Authentication # - REST API for PaddleOCR # # Copyright Information: # Copyright © 2024 Oasis # Licensed TBD # ------------------------------------------------------------------------------ # Import FastAPI Libs from fastapi import FastAPI from fastapi import Depends from pydantic import BaseModel import fastapi_security_util from fastapi_security_util import Token import paddleocr_service from paddleocr_service import RawImage from typing import Annotated from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm from whisper_service import RawAudio import whisper_service # ------------------------------------------------ # Init Global Variables # ------------------------------------------------ # Init Oauth2 schema, specify token endpoint oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") # ------------------------------------------------ # Define FastAPI # ------------------------------------------------ app = FastAPI() # ------------------------------------------------ # Call Token Service # ------------------------------------------------ @app.post("/token") def get_access_token(form_data: Annotated[OAuth2PasswordRequestForm, Depends()]) -> Token: return fastapi_security_util.get_access_token(form_data) # ------------------------------------------------ # Call OCR Service # ------------------------------------------------ @app.post("/paddleocr/read-image") def read_image(token: Annotated[str, Depends(oauth2_scheme)], image:RawImage): return paddleocr_service.read_image(token, image) # ------------------------------------------------ # Call Whisper Service # ------------------------------------------------ @app.post("/whisper/read-audio") def read_audio(token: Annotated[str, Depends(oauth2_scheme)], audio:RawAudio): return whisper_service.read_audio(token, audio)