利用Python解析json生成PPT、xmind思维导图教程

文章目录

背景

通过调用阿里通义听悟接口,对视频进行了语音转写、智能总结等,现在需要解析返回的PPT和思维导图json文件,以可视化的形式进行呈现。关键点在于:

  • PPT生成时,注意用requests请求存放在云上的关键帧图片
  • 思维导图生成时,注意使用递归构造思维导图多叉树

部分json样例

  • 部分ppt-json样例:
json 复制代码
{
    "PptExtraction": {
      "AvailableForSummary": true,
      "KeyFrameList": [
        {
          "FileUrl": "https://prod-tingwu-paas-common-beijing.oss-cn-beijing.aliyuncs.com/tingwu/output/1897044919663278/d7da6c8d19a44e2d94c0480dd5ab2665/ppt_20240902140302/d7da6c8d19a44e2d94c0480dd5ab2665_001.png?Expires=1727849098&OSSAccessKeyId=LTAI5tMzZ1D4o1drkJN1TfCr&Signature=KWe3h6krodKWrKeLF7HA3EOJnHg%3D",
          "Start": 190,
          "Summary": "1. 今天开始学习2024年上半年信息信用项目管理课程。\n2. 立项管理是课程的第七章,重要程度高。\n3. 商务选择题通常占该章节考试总分的两分。\n4. 案例分析和论文写作之前也有考过。\n5. 论文写作的考核概率较低,不是每次考试必有。",
          "End": 33678,
          "Id": 1
        },
        {
          "FileUrl": "https://prod-tingwu-paas-common-beijing.oss-cn-beijing.aliyuncs.com/tingwu/output/1897044919663278/d7da6c8d19a44e2d94c0480dd5ab2665/ppt_20240902140302/d7da6c8d19a44e2d94c0480dd5ab2665_002.png?Expires=1727849098&OSSAccessKeyId=LTAI5tMzZ1D4o1drkJN1TfCr&Signature=a4Vtv65JzD7FAv5DwbqFTivoAPQ%3D",
          "Start": 35030,
          "Summary": "1. 立项管理是科研工作的一部分,包括项目建议、立项申请、初步研究和详细研究等阶段。\n2. 论文撰写时,可以围绕立项管理的各个阶段来组织结构,例如:项目建议与立项申请 -> 项目可研究 -> 项目评估与决策。\n3. 在立项管理过程中,需考虑项目的可行性、必要性和效益性,这是通过初研和详研来完成的。\n4. 考试可能会涉及立项管理的具体知识点,如项目建议书的作用、可研的内容和技术经济分析等。\n5. 项目评估是立项管理的重要环节,包括对项目的财务、技术和社会效益进行综合评价。",
          "End": 281654,
          "Id": 2
        },
        ...
       ]
     }
  }
  • 部分思维导图-json样例:
json 复制代码
"MindMapSummary": [
        {
          "Title": "2024年上半年信息信用项目管理课程学习摘要",
          "Topic": [
            {
              "Title": "立项管理",
              "Topic": [
                {
                  "Title": "课程内容概览",
                  "Topic": [
                    {
                      "Title": "考题类型",
                      "Topic": [
                        {
                          "Title": "商务选择题:考两分",
                          "Topic": [
                            
                          ]
                        },
                        {
                          "Title": "案例分析:历史考题",
                          "Topic": [
                            
                          ]
                        },
                        {
                          "Title": "论文写作:历史考题",
                          "Topic": [
                            
                          ]
                        }
                      ]
                    },
                    ....

PPT生成

用到的库:pptx, requests

  • 注意事项:由于通义听悟接口返回的关键帧图片列表是存放在通义公有云上的URL链接,因此需要先利用requests将关键帧图片从云上下载下来
python 复制代码
from pptx import Presentation
import json
from pptx.util import Inches
import requests

prs = Presentation()

# 需要写代码:先从json中把图片列表提取出来
# 第一步:加载json
with open('ppt.json', 'r') as f:
    data = json.load(f)
    # print(data)
# 第二步:解析json,从中提取关键帧图片
L = data['PptExtraction']['KeyFrameList']
print(len(L))

for i in range(len(L)):
    img = L[i]['FileUrl']
    # print(img)

    # 将关键帧图片嵌入到PPT中
    # 获取幻灯片页
    slide = prs.slides.add_slide(prs.slide_layouts[0])
    prs.slide_height = Inches(9)  # 设置页面高度
    prs.slide_width = Inches(16)  # 设置页面宽度

    response = requests.get(img)
    with open("key_frame/" + str(i) + ".jpg", "wb") as file:
        file.write(response.content)

    # 图片文件路径
    image_path = "key_frame/" +  str(i)  + ".jpg"

    left = Inches(0.0) 
    top = Inches(0.0)
    # width = Inches(10.0)
    # height = Inches(6.0)
    width = Inches(16.0)
    height = Inches(9.0)
    slide.shapes.add_picture(image_path, left, top, width, height)

# 保存PPT
prs.save('your_presentation.pptx')
  • 效果如下:

思维导图生成

用到的库:xmind

  • 思路:思维导图本质是一颗多叉树,里面用到了递归--->在每一层递归层中同时包含了title和topic,先将title赋给当前节点,再对topic进行递归,扩充子主题
python 复制代码
import xmind
import json

# 递归
def add_topic(xw, data):
    title = data["Title"]
    topics = data["Topic"]

    # 创建主题
    topic = xw.addSubTopic()
    topic.setTitle(title)

    # 如果存在子主题,递归增加
    if topics:
        for t in topics:
            add_topic(topic, t)

if __name__ == "__main__":
     # 第一步:加载json
    with open('play_mindmap.json', 'r') as f:
        data = json.load(f)

    workbook = xmind.load('play.xmind')
    sheet = workbook.getPrimarySheet()
    sheet.setTitle("思维导图示例")
    # root node
    root = sheet.getRootTopic()
    root.setTitle("思维导图示例")

    for topic in data['Summarization']['MindMapSummary']:
        add_topic(root, topic)

    # add_topic(root, data['Summarization']['MindMapSummary'][0])
    xmind.save(workbook)
  • 效果如下:


相关推荐
4***99742 小时前
React音频处理案例
前端·react.js·音视频
TDengine (老段)3 小时前
TDengine 转换函数 TO_JSON 用户手册
android·大数据·数据库·json·时序数据库·tdengine·涛思数据
EasyCVR6 小时前
视频汇聚平台EasyCVR打造阳光药房远程可视化智慧监管体系
音视频
wow_DG7 小时前
【Python✨】VS Code 秒开 Python 类型检查:一招 mypy + settings.json 让你的 Bug 原地现形!
python·json·bug
别动哪条鱼7 小时前
MP4转AAC转换器C++
c++·ffmpeg·音视频·aac
大模型实验室Lab4AI8 小时前
从帧到世界:面向世界模型的长视频生成
音视频
aqi0013 小时前
FFmpeg开发笔记(九十一)基于Kotlin的Android直播开源框架RootEncoder
android·ffmpeg·kotlin·音视频·直播·流媒体
柳鲲鹏1 天前
OpenCV:文件视频防抖,python版
python·opencv·音视频
柳鲲鹏1 天前
OpenCV:实时视频防抖,python版(改进连续帧处理)
音视频
caiyueloveclamp1 天前
ChatPPT:AI PPT生成领域的“六边形战士“
人工智能·powerpoint·ai生成ppt·aippt·免费aippt