from typing import Optional from fastapi import FastAPI from concurrent.futures import ThreadPoolExecutor from sqlalchemy.sql.elements import Null from sqlalchemy.sql.expression import null from datetime import date import requests import uuid import os import uvicorn from asr_client import send_asr_request, send_task_request from database import insert, update, query, Task from datetime import datetime from fastapi.middleware.cors import CORSMiddleware import hashlib import traceback import json threadPool = ThreadPoolExecutor(max_workers=4) app = FastAPI() origins = [ "http://192.168.1.34", "http://192.168.1.34:8000", "http://192.168.1.105", "http://192.168.1.105:3000", "http://111.206.86.186", "http://111.206.86.186:3000", "http://adsp.tjyourong.com.cn", "http://adsp.tjyourong.com.cn:3000", "http://adsp.c-top.com.cn", "http://adsp.c-top.com.cn:3000" ] app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) class QueryItem(): md5: Optional[str] = None url: Optional[str] = None @app.get('/') def index(): return {'message': '你已经正确创建 FastApi 服务!'} @app.post('/asr/task/submit') def task_submit(md5: str, url: str): json = send_asr_request(url) task = Task(md5=md5, task_id=json.Data.TaskId, task_result=json.to_json_string(), task_status=1) insert(task) return {'code': 0, 'taskId': json.Data.TaskId} @app.post('/asr/task/result') def task_submit(task_id: int): json = send_task_request(task_id) task = query(None, None, task_id)[0] task.task_status = json.Data.Status task.task_result = json.to_json_string() try: if json.Data.Status == 2: task.word_text = json.Data.ResultDetail[0].FinalSentence task.word_split = json.Data.ResultDetail[0].SliceSentence except: # 提取原始文本内容和分词内容发生异常,把 task_status 置为 -1 task.task_status = -1 update(task) return {'code': 0, 'status': json.Data.StatusStr} @app.post('/asr/task/list') def task_submit(task_status: int): task = query(None, task_status, None) return {'code': 0, 'data': task} # @app.post('/asr/task/result') # def retry(item:Item): # #插入数据库 # task = query(item.taskId,None,None,None)[0] # item.inputVideoUrl = task.input_video_url # item.inputImageUrl = task.input_image_url # threadPool.submit(videoSwap,item).add_done_callback(swapFinish) # return {'code':0,'data':{'taskId': task.id}} # @app.post('/jeecg-boot/task/single') # def single(item:Item): # #插入数据库 # old_task = query(None,item.videoMd5,item.imageMd5,None) # if len(old_task) > 0: # return {'code':-1,'data':old_task} # uid = str(uuid.uuid4()) # suid = ''.join(uid.split('-')) # video_input = item.inputVideoUrl # image_input = item.inputImageUrl # task = Task(input_video_url = video_input,input_image_url=image_input,status='waiting',input_video_md5=item.videoMd5,input_image_md5=item.imageMd5,create_by=item.createBy) # task = insert(task) # item.taskId = task.id # threadPool.submit(videoSwap,item).add_done_callback(swapFinish) # return {'code':0,'data':{'taskId': task.id}} if __name__ == '__main__': uvicorn.run(app='main:app', host="0.0.0.0", port=31012, reload=True, debug=True) # gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker #线上启动命令