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
|