177 lines
5.8 KiB
Python
177 lines
5.8 KiB
Python
|
|
#!/usr/bin/env python
|
|||
|
|
#coding=utf-8
|
|||
|
|
|
|||
|
|
import os
|
|||
|
|
import json
|
|||
|
|
import datetime
|
|||
|
|
from aliyunsdkcore.client import AcsClient
|
|||
|
|
from aliyunsdkcore.request import CommonRequest
|
|||
|
|
from aliyunsdkcore.auth.credentials import AccessKeyCredential
|
|||
|
|
|
|||
|
|
def create_common_request(domain, version, protocolType, method, uri):
|
|||
|
|
"""
|
|||
|
|
创建通用请求对象
|
|||
|
|
"""
|
|||
|
|
request = CommonRequest()
|
|||
|
|
request.set_accept_format('json')
|
|||
|
|
request.set_domain(domain)
|
|||
|
|
request.set_version(version)
|
|||
|
|
request.set_protocol_type(protocolType)
|
|||
|
|
request.set_method(method)
|
|||
|
|
request.set_uri_pattern(uri)
|
|||
|
|
request.add_header('Content-Type', 'application/json')
|
|||
|
|
return request
|
|||
|
|
|
|||
|
|
def init_parameters(app_key, file_url):
|
|||
|
|
"""
|
|||
|
|
初始化请求参数
|
|||
|
|
"""
|
|||
|
|
body = dict()
|
|||
|
|
body['AppKey'] = app_key
|
|||
|
|
|
|||
|
|
# 基本请求参数
|
|||
|
|
input = dict()
|
|||
|
|
input['SourceLanguage'] = 'cn'
|
|||
|
|
input['TaskKey'] = 'task' + datetime.datetime.now().strftime('%Y%m%d%H%M%S')
|
|||
|
|
input['FileUrl'] = file_url
|
|||
|
|
body['Input'] = input
|
|||
|
|
|
|||
|
|
# AI相关参数,按需设置即可
|
|||
|
|
parameters = dict()
|
|||
|
|
|
|||
|
|
# 音视频转换相关
|
|||
|
|
transcoding = dict()
|
|||
|
|
# 将原音视频文件转成mp3文件,用以后续浏览器播放
|
|||
|
|
transcoding['TargetAudioFormat'] = 'mp3'
|
|||
|
|
transcoding['SpectrumEnabled'] = False
|
|||
|
|
parameters['Transcoding'] = transcoding
|
|||
|
|
|
|||
|
|
# 语音识别控制相关
|
|||
|
|
transcription = dict()
|
|||
|
|
# 角色分离 : 可选
|
|||
|
|
transcription['DiarizationEnabled'] = True
|
|||
|
|
diarization = dict()
|
|||
|
|
diarization['SpeakerCount'] = 2
|
|||
|
|
transcription['Diarization'] = diarization
|
|||
|
|
parameters['Transcription'] = transcription
|
|||
|
|
|
|||
|
|
# 文本翻译控制相关 : 可选
|
|||
|
|
parameters['TranslationEnabled'] = True
|
|||
|
|
translation = dict()
|
|||
|
|
translation['TargetLanguages'] = ['en'] # 假设翻译成英文
|
|||
|
|
parameters['Translation'] = translation
|
|||
|
|
|
|||
|
|
# 章节速览相关 : 可选,包括: 标题、议程摘要
|
|||
|
|
parameters['AutoChaptersEnabled'] = True
|
|||
|
|
|
|||
|
|
# 智能纪要相关 : 可选,包括: 待办、关键信息(关键词、重点内容、场景识别)
|
|||
|
|
parameters['MeetingAssistanceEnabled'] = True
|
|||
|
|
meetingAssistance = dict()
|
|||
|
|
meetingAssistance['Types'] = ['Actions', 'KeyInformation']
|
|||
|
|
parameters['MeetingAssistance'] = meetingAssistance
|
|||
|
|
|
|||
|
|
# 摘要控制相关 : 可选,包括: 全文摘要、发言人总结摘要、问答摘要(问答回顾)
|
|||
|
|
parameters['SummarizationEnabled'] = True
|
|||
|
|
summarization = dict()
|
|||
|
|
summarization['Types'] = ['Paragraph', 'Conversational', 'QuestionsAnswering', 'MindMap']
|
|||
|
|
parameters['Summarization'] = summarization
|
|||
|
|
|
|||
|
|
# ppt抽取和ppt总结 : 可选
|
|||
|
|
parameters['PptExtractionEnabled'] = True
|
|||
|
|
|
|||
|
|
# 口语书面化 : 可选
|
|||
|
|
parameters['TextPolishEnabled'] = True
|
|||
|
|
|
|||
|
|
# 大模型后处理任务全局参数 : 可选
|
|||
|
|
parameters['Model'] = 'qwq'
|
|||
|
|
parameters['LlmOutputLanguage'] = 'en'
|
|||
|
|
|
|||
|
|
body['Parameters'] = parameters
|
|||
|
|
return body
|
|||
|
|
|
|||
|
|
def submit_tingwu_task(file_url, app_key, access_key_id, access_key_secret):
|
|||
|
|
"""
|
|||
|
|
提交通义听悟任务
|
|||
|
|
"""
|
|||
|
|
print(f"开始提交通义听悟任务,文件URL: {file_url}")
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
# 初始化参数
|
|||
|
|
body = init_parameters(app_key, file_url)
|
|||
|
|
print("初始化参数完成")
|
|||
|
|
|
|||
|
|
# 初始化客户端
|
|||
|
|
credentials = AccessKeyCredential(access_key_id, access_key_secret)
|
|||
|
|
client = AcsClient(region_id='cn-beijing', credential=credentials)
|
|||
|
|
print("初始化客户端完成")
|
|||
|
|
|
|||
|
|
# 创建请求
|
|||
|
|
request = create_common_request('tingwu.cn-beijing.aliyuncs.com', '2023-09-30', 'https', 'PUT', '/openapi/tingwu/v2/tasks')
|
|||
|
|
request.add_query_param('type', 'offline')
|
|||
|
|
|
|||
|
|
# 设置请求内容
|
|||
|
|
request.set_content(json.dumps(body).encode('utf-8'))
|
|||
|
|
|
|||
|
|
# 发送请求
|
|||
|
|
response = client.do_action_with_exception(request)
|
|||
|
|
response_data = json.loads(response)
|
|||
|
|
|
|||
|
|
print("任务提交成功")
|
|||
|
|
print(f"响应数据: {json.dumps(response_data, indent=4, ensure_ascii=False)}")
|
|||
|
|
|
|||
|
|
# 返回任务ID
|
|||
|
|
task_id = response_data.get('Data', {}).get('TaskId')
|
|||
|
|
if task_id:
|
|||
|
|
print(f"获取到任务ID: {task_id}")
|
|||
|
|
return task_id
|
|||
|
|
else:
|
|||
|
|
print("无法获取任务ID")
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"任务提交失败: {e}")
|
|||
|
|
import traceback
|
|||
|
|
traceback.print_exc()
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
def get_task_result(task_id, access_key_id, access_key_secret):
|
|||
|
|
"""
|
|||
|
|
获取任务结果
|
|||
|
|
"""
|
|||
|
|
print(f"开始查询任务结果,任务ID: {task_id}")
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
# 初始化客户端
|
|||
|
|
credentials = AccessKeyCredential(access_key_id, access_key_secret)
|
|||
|
|
client = AcsClient(region_id='cn-beijing', credential=credentials)
|
|||
|
|
|
|||
|
|
# 创建请求
|
|||
|
|
uri = '/openapi/tingwu/v2/tasks' + '/' + task_id
|
|||
|
|
request = create_common_request('tingwu.cn-beijing.aliyuncs.com', '2023-09-30', 'https', 'GET', uri)
|
|||
|
|
|
|||
|
|
# 发送请求
|
|||
|
|
response = client.do_action_with_exception(request)
|
|||
|
|
response_data = json.loads(response)
|
|||
|
|
|
|||
|
|
print("任务查询成功")
|
|||
|
|
print(f"响应数据: {json.dumps(response_data, indent=4, ensure_ascii=False)}")
|
|||
|
|
|
|||
|
|
return response_data
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"任务查询失败: {e}")
|
|||
|
|
import traceback
|
|||
|
|
traceback.print_exc()
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
def check_task_status(task_id, access_key_id, access_key_secret):
|
|||
|
|
"""
|
|||
|
|
检查任务状态
|
|||
|
|
"""
|
|||
|
|
result = get_task_result(task_id, access_key_id, access_key_secret)
|
|||
|
|
if result:
|
|||
|
|
task_status = result.get('Data', {}).get('TaskStatus')
|
|||
|
|
print(f"当前任务状态: {task_status}")
|
|||
|
|
return task_status
|
|||
|
|
return None
|