利用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)
  • 效果如下:


相关推荐
ai产品老杨几秒前
越界检测算法接入 AI 视频分析平台的流程与误报优化指南
人工智能·算法·音视频
数据狐(Datafox)38 分钟前
1688商品详情API技术解析与落地应用(含标准 JSON 示例)
java·数据库·json
阿图灵2 小时前
OpenCV 实用技巧三连:视频转图片、图片转视频、Pillow 与 OpenCV 互转
图像处理·python·opencv·计算机视觉·音视频·pillow
SEONIB_Explorer2 小时前
VEONIB 电商 UGC 视频自动化生产实战指南
人工智能·自动化·音视频·跨境电商·视频制作·veonib
美狐美颜SDK开放平台2 小时前
直播APP开发技术详解:视频美颜SDK在人脸识别、美型算法与渲染优化中的应用
人工智能·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
禹亮科技2 小时前
110㎡纵深长桌会议室音视频工程方案复盘|上海制药企业精装场景无改造亿联+耳目达落地实践
音视频·视频会议解决方案
deli00700715 小时前
JSON 树形查看器:粘贴即解析,折叠展开一目了然
前端·数据库·json·ai编程
lv__pf17 小时前
ajax的使用、json、jquery
ajax·json·jquery
乐橙开放平台18 小时前
养老 SaaS 笔记:setMessageCallback 事件桥接 + msgType 映射 P0/P1,先 ACK 再分流值班流
笔记·物联网·音视频·智能家居
H03111698518 小时前
关于当前主流知识库工具在分类整理学习资料场景下的选用参考
人工智能·信息可视化·音视频