liyuyi@c-top.com.cn 4 rokov pred
commit
5e6e6df358

+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/../../../:\video-to-word\.idea/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/

+ 21 - 0
.idea/deployment.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="PublishConfigData" remoteFilesAllowedToDisappearOnAutoupload="false">
+    <serverData>
+      <paths name="ai_target_remote_root@139.186.165.84:22 password">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="similar_material_remote_root@139.186.165.84">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+    </serverData>
+  </component>
+</project>

+ 19 - 0
.idea/inspectionProfiles/Project_Default.xml

@@ -0,0 +1,19 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
+      <Languages>
+        <language minSize="120" name="Python" />
+      </Languages>
+    </inspection_tool>
+    <inspection_tool class="PyPep8Inspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
+      <option name="ignoredErrors">
+        <list>
+          <option value="E131" />
+        </list>
+      </option>
+    </inspection_tool>
+    <inspection_tool class="SqlDialectInspection" enabled="false" level="WARNING" enabled_by_default="false" />
+    <inspection_tool class="SqlResolveInspection" enabled="false" level="ERROR" enabled_by_default="false" />
+  </profile>
+</component>

+ 6 - 0
.idea/inspectionProfiles/profiles_settings.xml

@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="USE_PROJECT_PROFILE" value="false" />
+    <version value="1.0" />
+  </settings>
+</component>

+ 4 - 0
.idea/misc.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8" project-jdk-type="Python SDK" />
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/video-to-word.iml" filepath="$PROJECT_DIR$/.idea/video-to-word.iml" />
+    </modules>
+  </component>
+</project>

+ 11 - 0
.idea/video-to-word.iml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="PYTHON_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+  <component name="TestRunnerService">
+    <option name="PROJECT_TEST_RUNNER" value="pytest" />
+  </component>
+</module>

+ 0 - 0
__init__.py


BIN
__pycache__/asr_client.cpython-39.pyc


BIN
__pycache__/database.cpython-39.pyc


BIN
__pycache__/main.cpython-39.pyc


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 65 - 0
asr_client.py


+ 80 - 0
database.py

@@ -0,0 +1,80 @@
+# 导入:
+from hashlib import md5
+from sqlalchemy.orm import sessionmaker
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy import Column, Integer, String,DateTime,Text,create_engine,and_
+from datetime import datetime
+from urllib import parse
+
+# 创建对象的基类:
+Base = declarative_base()
+passowrd = parse.quote_plus('hcst@2020')
+# 定义User对象:
+class Task(Base):
+    # 表的名字:
+    __tablename__ = 'tb_asr_result'
+
+    # 表的结构:
+    md5 =  Column(String(100))
+    task_id = Column(Integer, primary_key=True)
+    task_status = Column(Integer)
+    task_result = Column(Text)
+    word_text = Column(Text)
+    word_split = Column(Text)
+    create_time = Column(DateTime, nullable=True, default=datetime.now)
+    update_time = Column(DateTime)
+
+# 初始化数据库连接:
+engine = create_engine('mysql+mysqlconnector://hcst:'+passowrd+'@139.186.165.84:3306/db_ai_word')
+# 创建DBSession类型:
+DBSession = sessionmaker(bind=engine)
+
+def query(md5,task_status,task_id):
+    condition = (1==1)
+    if md5 != None:
+        condition = and_(condition, Task.md5 == md5)
+    if task_status != None:
+        condition = and_(condition, Task.task_status == task_status)
+    if task_id != None:
+        condition = and_(condition, Task.task_id == task_id)
+    # 创建Session:
+    session = DBSession()
+    # 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
+    task = session.query(Task).filter(condition).order_by(Task.create_time.desc()).all()
+    # 关闭Session:
+    print(task)
+    session.close()
+    return task
+
+def insert(task:Task):
+    # 创建session对象:
+    session = DBSession()
+    # 添加到session:
+    session.add(task)
+    session.flush()
+    # 提交即保存到数据库:
+    session.commit()
+    # 关闭session:
+    session.close()
+    return task
+
+def update(task):
+    # 创建session对象:
+    session = DBSession()
+    taskdb = session.query(Task).filter(Task.task_id==task.task_id).one()
+    taskdb.task_status = task.task_status
+    taskdb.word_text = task.word_text
+    taskdb.word_split = task.word_split
+    taskdb.task_result = task.task_result
+    # 提交即保存到数据库:
+    session.commit()
+    # 关闭session:
+    session.close()
+
+if __name__ == '__main__':
+    print('test query')
+    # task = Task(task_id = '3',task_status=1,md5='dx')
+    # task = insert(task)
+    task = query(None,None,1)[0]
+    print(task.md5)
+    #update(task)

+ 103 - 0
main.py

@@ -0,0 +1,103 @@
+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()
+    if json.Data.Status == 2:
+        task.word_text = json.Data.ResultDetail[0].FinalSentence
+        task.word_split = json.Data.ResultDetail[0].SliceSentence
+    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=8000, reload=True, debug=True)
+
+#gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker #线上启动命令

+ 21 - 0
requirements.txt

@@ -0,0 +1,21 @@
+asgiref==3.4.1
+certifi==2021.5.30
+charset-normalizer==2.0.4
+click==8.0.1
+colorama==0.4.4
+fastapi==0.68.1
+greenlet==1.1.1
+h11==0.12.0
+idna==3.2
+mysql==0.0.3
+mysql-connector==2.2.9
+mysqlclient==2.0.3
+pydantic==1.8.2
+requests==2.26.0
+SQLAlchemy==1.4.23
+starlette==0.14.2
+tencentcloud-sdk-python==3.0.484
+typing-extensions==3.10.0.2
+urllib3==1.26.6
+uvicorn==0.15.0
+wincertstore==0.2