本文主要介紹PPT抽取及摘要的AI能力和實現方式。PPT抽取及摘要是指提取視頻中的PPT畫面,并將每頁PPT展示時所講述的內容,提煉成摘要總結,便于快速回顧PPT及講解內容。
功能說明
可提取視頻文件中的PPT圖片并總結對應演講內容的摘要。
僅支持PPT在主要界面(投屏或周邊有人物視頻),不支持人物在PPT前走動或演講。可通過通義聽悟網站測試效果。點此測試
請求參數
參數名 | 類型 | 是否必填 | 說明 |
PptExtractionEnabled | boolean | 否 | 默認為false |
示例設置
{
"Input":{
...
},
"Parameters":{
...
"PptExtractionEnabled":true,
...
}
}
代碼示例
#!/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():
root = dict()
root['AppKey'] = '輸入您在聽悟管控臺創建的Appkey'
# 基本請求參數
input = dict()
input['SourceLanguage'] = 'cn'
input['TaskKey'] = 'task' + datetime.datetime.now().strftime('%Y%m%d%H%M%S')
input['FileUrl'] = '輸入待測試的音頻url鏈接'
root['Input'] = input
# AI相關參數,按需設置即可
parameters = dict()
# ppt抽取和ppt總結
parameters['PptExtractionEnabled'] = True
root['Parameters'] = parameters
return root
body = init_parameters()
print(body)
# TODO 請通過環境變量設置您的 AccessKeyId 和 AccessKeySecret
credentials = AccessKeyCredential(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
client = AcsClient(region_id='cn-beijing', credential=credentials)
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)
print("response: \n" + json.dumps(json.loads(response), indent=4, ensure_ascii=False))
package com.alibaba.tingwu.client.demo.aitest;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;
import org.junit.Test;
/**
* @author tingwu2023
*/
public class PptExtractionTest {
@Test
public void testPpt() throws ClientException {
CommonRequest request = createCommonRequest("tingwu.cn-beijing.aliyuncs.com", "2023-09-30", ProtocolType.HTTPS, MethodType.PUT, "/openapi/tingwu/v2/tasks");
request.putQueryParameter("type", "offline");
JSONObject root = new JSONObject();
root.put("AppKey", "輸入您在聽悟管控臺創建的Appkey");
JSONObject input = new JSONObject();
input.fluentPut("FileUrl", "輸入待測試的音頻url鏈接")
.fluentPut("SourceLanguage", "cn")
.fluentPut("TaskKey", "task" + System.currentTimeMillis());
root.put("Input", input);
JSONObject parameters = new JSONObject();
parameters.put("PptExtractionEnabled", true);
root.put("Parameters", parameters);
System.out.println(root.toJSONString());
request.setHttpContent(root.toJSONString().getBytes(), "utf-8", FormatType.JSON);
// TODO 請通過環境變量設置您的AccessKeyId、AccessKeySecret
DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
IAcsClient client = new DefaultAcsClient(profile);
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
}
public static CommonRequest createCommonRequest(String domain, String version, ProtocolType protocolType, MethodType method, String uri) {
// 創建API請求并設置參數
CommonRequest request = new CommonRequest();
request.setSysDomain(domain);
request.setSysVersion(version);
request.setSysProtocol(protocolType);
request.setSysMethod(method);
request.setSysUriPattern(uri);
request.setHttpContentType(FormatType.JSON);
return request;
}
}
示例輸出
{
"Code":"0",
"Data":{
"TaskId":"d9cea51c1fezg647af24e815********",
"TaskStatus":"COMPLETED",
"Result":{
"PptExtraction":"http://speech-swap.oss-cn-zhangjiakou.aliyuncs.com/tingwu_data/output/1738248129743478/d9cea51c1fef4647af24e8154d6ae0c0/d9cea51c1fef4647af24e8154d6ae0c0_PptExtraction_20231030213209.json?Expires=1698759180&OSSAccessKeyId=LTAI4G4********j6oX8nt5S&Signature=4XY2*******Yra72pue4g1vetQ%3D",
"Transcription":"http://speech-swap.oss-cn-zhangjiakou.aliyuncs.com/tingwu_data/output/1738248129743478/d9cea51c1fef4647af24e8154d6ae0c0/d9cea51c1fef4647af24e8154d6ae0c0_Transcription_20231030213158.json?Expires=1698759180&OSSAccessKeyId=LTAI4G4********j6oX8nt5S&Signature=hV4C*******1aMauJnlg8djxZCQ%3D"
}
},
"Message":"success",
"RequestId":"3c347cdc-7e54-456b-9db3-c23********"
}
其中PptExtraction字段對應的即為章節速覽結果的http url下載鏈接。
協議解析
上述輸出中的章節速覽結果url中的內容為JSON格式的報文,示例如下所示。
{
"TaskId":"d9cea51c1fef464zaf21e815*******",
"PptExtraction":{
"AvailableForSummary":true,
"PdfPath":"https://speech-swap.oss-cn-zhangjiakou.aliyuncs.com/tingwu/output/1738248129743478/61556f87f76a4ee285cb87629f8b0394/ppt_20231031110531/61556f87f76a4ee285cb87629f8b0394.pdf?Expires=1698731046&OSSAccessKeyId=TMP.3Kjg********j8rW8SRKjmSJYNMmWEWEALNc8Es2mK98ASLkvGAJwvzmUx9Y1eSxMmqWRrUYh6AD2PeaDh8mWHAHxjPRZ&Signature=URg%2BgSN******t2%2FUfiniGdYRGE%3D",
"KeyFrameList":[
{
"Id":1,
"Start":1160,
"End":12320,
"FileUrl":"https://speech-swap.oss-cn-zhangjiakou.aliyuncs.com/tingwu/output/1738248129743478/61556f87f76a4ee285cb87629f8b0394/ppt_20231031110531/61556f87f76a4ee285cb87629f8b0394_001.png?Expires=1698730995&OSSAccessKeyId=TMP.3Kjg********j8rW8SRKjmSJYNMmWEWEALNc8Es2mK98ASLkvGAJwvzmUx9Y1eSxMmqWRrUYh6AD2PeaDh8mWHAHxjPRZ&Signature=aO******TxzY%2FQFo9glABLwmnnY%3D"
},
{
"Id":2,
"Start":14880,
"End":50389,
"FileUrl":"https://speech-swap.oss-cn-zhangjiakou.aliyuncs.com/tingwu/output/1738248129743478/61556f87f76a4ee285cb87629f8b0394/ppt_20231031110531/61556f87f76a4ee285cb87629f8b0394_002.png?Expires=1698731023&OSSAccessKeyId=TMP.3Kjg********j8rW8SRKjmSJYNMmWEWEALNc8Es2mK98ASLkvGAJwvzmUx9Y1eSxMmqWRrUYh6AD2PeaDh8mWHAHxjPRZ&Signature=2N*******vM8dYfJYNaXG59HA%3D"
}
]
}
}
具體字段定義如下。
參數名 | 類型 | 說明 |
TaskId | string | 創建任務時生成的TaskId。 |
PptExtraction | object | ppt抽取和總結對象, 如果不存在或為空,表示沒有任何結果。 |
PptExtraction.AvailableForSummary | boolean | 標識是否存在PPT總結文本。 為false表示沒有PPT總結結果,為true表示至少有一條。 |
PptExtraction.KeyFrameList | list[] | ppt結果list,含ppt圖片和總結文本。 |
PptExtraction.KeyFrameList[i].Id | long | 序號。 |
PptExtraction.KeyFrameList[i].Start | long | 相對于音頻起始時間的開始時間,相對時間戳,單位毫秒。 |
PptExtraction.KeyFrameList[i].End | long | 相對于音頻起始時間的結束時間,相對時間戳,單位毫秒。 |
PptExtraction.KeyFrameList[i].FileUrl | string | 生成的ppt圖片結果,http下載鏈接。 |
PptExtraction.KeyFrameList[i].Summary | string | 對應的ppt總結。 |
常見問題
PPT抽取及摘要功能在什么場景下可以調用?
您可以在創建音視頻文件離線轉寫時,直接設置;
您也可以在離線轉寫結束后,再次發起重跑任務請求(必須基于同一個TaskId),生成章節信息。
另外,不同于其他功能,由于該功能定位于從視頻中抽取ppt畫面及總結,因此其使用場景相對有限,比如:在實時會議場景下無法使用(該場景是實時音頻流,無視頻信息),在離線轉寫場景且原始文件非視頻格式時也無法使用。
為什么我調用后沒有生成PPT抽取結果,或為空?
一個可能是調用參數沒有啟用或設置不正確,請您仔細參考開發文檔進行對比并正確設置。
另一個可能是在實時會議場景或離線轉寫場景且原始文件非視頻格式時使用時,都無法抽取到PPT畫面,進而無ppt抽取結果和總結結果。
另外一個可能即使您是在離線轉寫場景且是視頻文件,如果沒有找到PPT畫面內容則也是沒有對應結果生成的。
為什么我返回了語音轉寫的結果?
雖然在PPT抽取時并不依賴語音轉寫(ASR)內容,但進行PPT總結時,是需要結合ASR轉寫文本信息進行模型處理的。
為什么我的結果里,有的含有PPT抽取的圖片和總結,而有的時候只有圖片而沒有總結?
該功能本身是分兩步執行的: 先從視頻中抽取到PPT畫面并保存成圖片;再根據時間戳信息結合ASR文本提煉總結內容。因此即使抽取到了圖片,但由于對應的ASR文本過短、過少,無法提煉出有效總結內容,此時該PPT圖片對應的總結內容即為空。