from concurrent.futures import ThreadPoolExecutor from typing import Optional import uvicorn from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from asr_client import send_asr_request, send_task_request from database import insert, update, query, Task 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=31013, reload=True, debug=True) # gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker #线上启动命令