0

0

基于paddlehub2.4.0: 让动态视频生成漫画书!【一键运行】

P粉084495128

P粉084495128

发布时间:2025-07-31 09:59:28

|

374人浏览过

|

来源于php中文网

原创

该项目基于PaddleHub2.4.0,实现动态视频转漫画书功能。以人民美术出版社版《水浒传》连环画为风格学习数据,借助其预训练模型,通过安装依赖、处理数据、图片转漫画、视频关键帧转漫画等步骤,抽取视频关键帧并转为漫画风格,为视频创作提供新形式,展现了AI在文化创意领域的潜力。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

基于paddlehub2.4.0: 让动态视频生成漫画书!【一键运行】 - php中文网

基于paddlehub2.4.0: 让动态视频生成漫画书!【一键运行】

基于paddlehub2.4.0: 让动态视频生成漫画书!【一键运行】 - php中文网        

 一. 项目背景

一键运行

在数字化时代,视频内容的创作与消费呈现出爆炸式增长,从个人Vlog到专业影视作品,无一不丰富着我们的视觉体验。然而,随着技术的进步和审美需求的多样化,用户对于视频内容的呈现形式提出了更高要求,渴望在保持原视频动态魅力的同时,探索更多创意与个性化的表达方式。漫画作为一种独特的艺术形式,以其夸张的表现手法、丰富的色彩运用和简洁的叙事风格,深受全球观众喜爱。因此,将动态视频转化为漫画风格,不仅能够为视频内容增添新的视觉维度,还能激发观众的无限想象,满足他们对创意内容的渴求。

基于这一背景,我们提出了“基于paddlehub2.4.0: 让动态视频生成漫画书”项目。该项目旨在利用PaddleHub这一强大的预训练模型管理工具,结合深度学习技术,实现将普通动态视频自动转化为具有漫画风格视频或漫画书的功能。PaddleHub作为百度飞桨(PaddlePaddle)的深度学习平台中的模型管理和迁移学习工具,提供了丰富的预训练模型,能够极大地降低开发门槛,加速模型部署和应用。特别是随着PaddleHub 2.4.0版本的发布,其在模型性能、易用性和扩展性方面均有了显著提升,为本项目提供了坚实的技术支撑。

基于paddlehub2.4.0: 让动态视频生成漫画书!【一键运行】 - php中文网        

 二. 数据来源

水浒传连环画,人民美术出版社版。png格式,压缩为index.zip,可以用于学习漫画风格。

基于paddlehub2.4.0: 让动态视频生成漫画书!【一键运行】 - php中文网        

 三. 技术原理

  • PaddleHub 是基于 PaddlePaddle 开发的预训练模型管理工具,可以借助预训练模型更便捷地开展迁移学习工作,旨在让 PaddlePaddle 生态下的开发者更便捷体验到大规模预训练模型的价值。

  • PaddleHub 目前的预训练模型覆盖了图像分类、目标检测、词法分析、Transformer、情感分析五大类别。未来会持续开放更多类型的深度学习模型,如语言模型、视频分类、图像生成等预训练模型。

    甲骨文AI协同平台
    甲骨文AI协同平台

    专门用于甲骨文研究的革命性平台

    下载

PaddleHub相关资料,请参考:PaddleHub

基于paddlehub2.4.0: 让动态视频生成漫画书!【一键运行】 - php中文网        

 四. 代码实现

 4.1. 安装依赖

In [ ]
# 安装 paddlehub!pip install paddlehub
!hub install stylepro_artistic
   

 4.2. 数据处理

In [3]
%%capture
!unzip  /home/aistudio/data/data93870/index.zip -d /home/aistudio/work/style
   
In [65]
#定义函数计算单通道的直方图的相似值,越小差异越大def calculate_delta(image1=False, image2=False):
    if type(image1)!=type(image2) :
        degree = [1e-10]    else:        # 灰度直方图算法
        # 计算单通道的直方图的相似值
        hist1 = cv2.calcHist([image1], [0], None, [256], [0.0, 255.0])
        hist2 = cv2.calcHist([image2], [0], None, [256], [0.0, 255.0])        # 计算直方图的重合度
        degree = 0
        for i in range(len(hist1)):            if hist1[i] != hist2[i]:
                degree = degree + \
                    (1 - abs(hist1[i] - hist2[i]) / max(hist1[i], hist2[i]))            else:
                degree = degree + 1
        degree = degree / len(hist1)        while type(degree)==type([]):
            degree=degree[0]
        degree=[degree]    return degree

plt.subplot(1, 4, 1) 
img1 = load_comic_photo('/home/aistudio/work/style/06/0012.png')
plt.imshow(  cv2.cvtColor( img1 ,cv2.COLOR_BGR2RGB) )
plt.axis('off')
plt.subplot(1, 4, 2)  
img2 = load_comic_photo('/home/aistudio/work/style/05/0013.png')
plt.imshow(  cv2.cvtColor( img2 ,cv2.COLOR_BGR2RGB) )
plt.axis('off')
plt.subplot(1, 4, 3)  
img3 = load_comic_photo('/home/aistudio/work/style/05/0014.png')
plt.imshow(  cv2.cvtColor( img3 ,cv2.COLOR_BGR2RGB) )
plt.axis('off')
plt.subplot(1, 4, 4)  
img4 = load_comic_photo('/home/aistudio/work/style/05/0015.png')
plt.imshow(  cv2.cvtColor( img4 ,cv2.COLOR_BGR2RGB) )
plt.axis('off')
plt.tight_layout()  # 自动调整子图参数  plt.show()
       
               

 4.3. 图片转漫画

In [66]
import paddlehub as hub#图片转为漫画stylepro_artistic = hub.Module(name="stylepro_artistic") #加载预训练模型def get_cartoon_img(src_img_data):
    result = stylepro_artistic.style_transfer(
        images=[{            'content': src_img_data ,            'styles': [load_comic_photo('/home/aistudio/work/style/05/0013.png')
                ,load_comic_photo('/home/aistudio/work/style/07/0015.png')
            ]
        }]
        )
    t = result[0]['data']
    t = cv2.cvtColor( t,cv2.COLOR_RGB2GRAY) # 先要转换为灰度图片
    t = cv2.medianBlur(t,3)    return t
       
[2024-09-06 21:17:28,641] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object
       

 4.4. 视频关键帧转漫画

In [51]
## 将视频转换为图片,抽取关键帧import osimport cv2#显示图片def showimg(img, isgray=False):
  plt.axis("off")  if isgray == True:
    plt.imshow(img, cmap='gray')  else: 
    plt.imshow(img)
  plt.show()def get_video_key_frame(video_src,frame_path='',show_key_frame=False,show_comic_key_frame=False):
    if frame_path and not os.path.exists(frame_path):
        os.mkdir(frame_path)    if frame_path and not os.path.exists(frame_path+'results/'):
        frame_path_ = frame_path+'results/'
        os.mkdir(frame_path_)
    vc = cv2.VideoCapture(video_src)
    i_imp =-1000 #上一次保存的帧号
    (frame_last,delta_last) =(False,0)#上一帧图、上一帧的差异指数
    if vc.isOpened():
        rval, frame = vc.read()    else:
        rval = False

    i = 0 #当前帧号
    while rval:
        rval, frame = vc.read()        if  rval:
            delta = calculate_delta(frame_last, frame )[0] # 计算差异程度
            pct = abs(delta - delta_last)/(delta+0.000001) #差异程度的变化量
            if pct>0.2 and i-i_imp>10: #差异程度变化很大,且间隔半秒以上
                if show_key_frame:                    None
                if frame_path:
                    cv2.imwrite(frame_path+'img_{}.jpg'.format(i), frame)                if show_comic_key_frame:
                    frame_cartoon = get_cartoon_img(frame)                    if frame_path:
                        cv2.imwrite(frame_path+'results/'+'img_{}.jpg'.format(i), frame_cartoon)
                i_imp = i
            (frame_last,delta_last) = ( frame , delta )
            i += 1
   
In [52]
video = 'work/shipin.mp4'frame_path = 'work/mov/picture/'# 抽取关键帧get_video_key_frame(video,frame_path,show_key_frame=True,show_comic_key_frame=False)# 关键帧转为漫画get_video_key_frame(video,frame_path,show_key_frame=False,show_comic_key_frame=True)
   

 4.5. 结果展示

In [57]
!mv /home/aistudio/work/mov/picture/results /home/aistudio/work/movdef sort_images(img_folder):  
    """按文件名中的数字排序图片"""  
    # 使用glob匹配所有jpg图片  
    img_paths = [os.path.join(img_folder, img) for img in os.listdir(img_folder) if img.endswith('.jpg')]  
    # 按文件名中的数字排序  
    img_paths.sort(key=lambda x: int(os.path.splitext(os.path.basename(x))[0].split('_')[1]))  
    return img_paths  


img_list_1 = sort_images("/home/aistudio/work/mov/picture")
img_list_2 = sort_images("/home/aistudio/work/mov/results")print("img_list_1:",img_list_1)print("img_list_2:",img_list_2)
       
img_list_1: ['/home/aistudio/work/mov/picture/img_1.jpg', '/home/aistudio/work/mov/picture/img_121.jpg', '/home/aistudio/work/mov/picture/img_253.jpg', '/home/aistudio/work/mov/picture/img_393.jpg', '/home/aistudio/work/mov/picture/img_476.jpg', '/home/aistudio/work/mov/picture/img_540.jpg', '/home/aistudio/work/mov/picture/img_764.jpg', '/home/aistudio/work/mov/picture/img_850.jpg', '/home/aistudio/work/mov/picture/img_885.jpg', '/home/aistudio/work/mov/picture/img_904.jpg', '/home/aistudio/work/mov/picture/img_929.jpg', '/home/aistudio/work/mov/picture/img_990.jpg', '/home/aistudio/work/mov/picture/img_1002.jpg', '/home/aistudio/work/mov/picture/img_1037.jpg', '/home/aistudio/work/mov/picture/img_1106.jpg', '/home/aistudio/work/mov/picture/img_1121.jpg', '/home/aistudio/work/mov/picture/img_1145.jpg', '/home/aistudio/work/mov/picture/img_1162.jpg']
img_list_2: ['/home/aistudio/work/mov/results/img_1.jpg', '/home/aistudio/work/mov/results/img_121.jpg', '/home/aistudio/work/mov/results/img_253.jpg', '/home/aistudio/work/mov/results/img_393.jpg', '/home/aistudio/work/mov/results/img_476.jpg', '/home/aistudio/work/mov/results/img_540.jpg', '/home/aistudio/work/mov/results/img_764.jpg', '/home/aistudio/work/mov/results/img_850.jpg', '/home/aistudio/work/mov/results/img_885.jpg', '/home/aistudio/work/mov/results/img_904.jpg', '/home/aistudio/work/mov/results/img_929.jpg', '/home/aistudio/work/mov/results/img_990.jpg', '/home/aistudio/work/mov/results/img_1002.jpg', '/home/aistudio/work/mov/results/img_1037.jpg', '/home/aistudio/work/mov/results/img_1106.jpg', '/home/aistudio/work/mov/results/img_1121.jpg', '/home/aistudio/work/mov/results/img_1145.jpg', '/home/aistudio/work/mov/results/img_1162.jpg']
       
In [64]
import cv2  
import matplotlib.pyplot as plt  

for i in range(len(img_list_1)):    # 读取图片  
    image1 = cv2.imread(img_list_1[i])  # 替换为你的图片路径  
    image2 = cv2.imread(img_list_2[i])  # 替换为你的图片路径  
    
    image1_rgb = cv2.cvtColor(image1, cv2.COLOR_BGR2RGB)  
    image2_rgb = cv2.cvtColor(image2, cv2.COLOR_BGR2RGB)  
    
    # 使用matplotlib显示图片  
    fig, axes = plt.subplots(1, 2, figsize=(10, 5))  # 创建一个1行2列的图形  

    axes[0].imshow(image1_rgb)  # 显示第一张图片  
    axes[0].axis('off')  # 关闭坐标轴  
    
    axes[1].imshow(image2_rgb)  # 显示第二张图片  
    axes[1].axis('off')  # 关闭坐标轴  
    plt.show()
       
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
基于paddlehub2.4.0: 让动态视频生成漫画书!【一键运行】 - php中文网        

 五. 总结

  • 本项目成功利用PaddleHub 2.4.0的深度学习技术,实现了动态视频到漫画风格视频的自动化转换,为视频内容创作带来了全新的表现形式,展现了AI技术在文化创意领域的巨大潜力。

  • 通过漫画风格的视频生成,极大地丰富了用户的视觉体验,使视频内容更加生动有趣,满足了用户对创意内容的多样化需求,提升了用户满意度。

  • 本项目为AI技术在文化创意产业的应用提供了有力支持,展示了AI技术在提升内容创作效率、丰富内容表现形式方面的巨大价值,为行业带来了新的增长点和发展机遇。

基于paddlehub2.4.0: 让动态视频生成漫画书!【一键运行】 - php中文网        

相关文章

漫画合集
漫画合集

漫画合集汇集了丰富的热门漫画资源,海内外流量爆款的这里都有,最新最热的漫画资源第一时间奉上,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

30

2025.12.13

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

52

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

54

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

35

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

15

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

125

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

138

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.9万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

ASP 教程
ASP 教程

共34课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号