Files

177 lines
5.8 KiB
Python
Raw Permalink Normal View History

2026-03-08 01:34:54 +08:00
#!/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