Учебный отчет и практические занятия «Ant Teeth Black» на основе HUAWEI CLOUD AI

искусственный интеллект
Учебный отчет и практические занятия «Ant Teeth Black» на основе HUAWEI CLOUD AI

Это моя 3-я статья в начале работы

«Чёрные зубы муравья» Учебная запись и практическая практика


подготовка к учебе

1. Конфигурация среды:

  • 1.1 Фреймворк, используемый в данном случае: Pytorch-1.0.0

  • 1.2 Экспериментальные спецификации, используемые в этом случае: GPU: 1*p100 CPU: 8 ядер 64GiB Multi-Engine 1.0 (Python3, рекомендуется)

2. Запустите метод кода:

  • Нажмите треугольную кнопку запуска в строке меню в верхней части этой страницы или нажмите Ctrl+Enter, чтобы запустить код в каждом поле.

3. Описание вопросов

  • Этот практический случай относится к документу г-на Ху ЦиСсылка на статью
  • Эта практика будет использовать службу хранения объектов OBS, за которую будет взиматься небольшая плата.До 18 марта арендодатель предоставит бесплатный источник данных OBS для всех, чтобы загрузить и поэкспериментировать.
    • Время от времени я перестаю делиться ресурсами, потому что в моем пакете заканчиваются ресурсы.

4. Ссылки на ресурсы

  • 1. Адрес исходного кода

    //选择一个使用即可
    
    # 地址1 ,胡琦老师提供
    !git clone https://codehub.devcloud.cn-north-4.huaweicloud.com/ai-pome-free00001/first-order-model.git
    
    # 地址2, 博主Gitee链接
    !git clone https://gitee.com/JiegangWu/first-order-model.git
    
  • 2. Загрузка модели

    • Загрузите модели данных через AI Marketplace

      //下载地址    
      https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=00bc20c3-2a00-4231-bdfd-dfa3eb62a46d
      
    • Поделитесь и скачайте через файл OBS, предоставленный блогером

      //下载链接(随时可能失效)
      
      mox.file.copy_parallel('obs://lab-modelarts/lab01/first-order-motion-model-20210226T075740Z-001.zip' , 'first-order-motion-model.zip')
      mox.file.copy_parallel('obs://lab-modelarts/lab01/02.mp4' , '02.mp4')
      
      

Шаги

1. Создайте экспериментальную среду

  • Используйте ModelArts для создания экспериментальной среды
  • Создайте среду разработки

2. Загрузите исходный код

  • Загрузите экспериментальный исходный код (выберите один из двух способов)

3. Скачать модели и файлы

  • Скачать модели и файлы (выберите один из 2-х способов)

    import moxing as mox #引入包
    
  • распаковать файлы

    !unzip first-order-motion-model.zip
    
  • Позиция перемещения видео в шаблоне

    !mv 02.mp4 first-order-motion-model/
    

4. Подставьте переменные для запуска программы

  • Анализ кода исходного файла

    import imageio
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
    from skimage.transform import resize
    from IPython.display import HTML
    import warnings
    warnings.filterwarnings("ignore")
    
    # 此处替换为您的图片路径,图片最好为 256*256,这里默认为普京大帝
    #source_image_path = '/home/ma-user/work/first-order-motion-model/02.png'
    #source_image_path = '/home/ma-user/work/first-order-motion-model/05.png'
    source_image_path = '/home/ma-user/work/05.png'
    source_image = imageio.imread(source_image_path)
    
    # 此处可替换为您的视频路径,这里默认为“蚂蚁牙黑”
    #reader_path = '/home/ma-user/work/first-order-motion-model/02.mp4'
    reader_path = '/home/ma-user/work/02.mp4'
    reader = imageio.get_reader(reader_path)
    

    Изменение размера изображений и видео до 256x256

    source_image = resize(source_image, (256, 256))[..., :3]
    
    fps = reader.get_meta_data()['fps']
    driving_video = []
    try:
      for im in reader:
        driving_video.append(im)
    except RuntimeError:
      pass
    reader.close()
    
    driving_video = [resize(frame, (256, 256))[..., :3] for frame in driving_video]
    
    def display(source, driving, generated=None):
        fig = plt.figure(figsize=(8 + 4 * (generated is not None), 6))`
    
        ims = []
        for i in range(len(driving)):
            cols = [source]
            cols.append(driving[i])
            if generated is not None:
                cols.append(generated[i])
            im = plt.imshow(np.concatenate(cols, axis=1), animated=True)
            plt.axis('off')
            ims.append([im])
    
        ani = animation.ArtistAnimation(fig, ims, interval=50, repeat_delay=1000)
        plt.close()
        return ani
    HTML(display(source_image, driving_video).to_html5_video())
    
  • Заменить переменную поля файла

      source_image_path  #源图片地址  reader_path   #源视频地址  driving_video: 驱动视频,视频中人物的表情动作作为待迁移的对象。  source_image: 原始图片,视频中人物的表情动作将迁移到该原始图片中的人物上 。  relative: 指示程序中使用视频和图片中人物关键点的相对坐标还是绝对坐标,建议使用相对坐标,若使用绝对坐标,会导致迁移后人物扭曲变形。  adapt_scale: 根据关键点凸包自适应运动尺度。
    
  • модель конфигурации

    from demo import load_checkpointsgenerator, kp_detector = load_checkpoints(config_path='config/vox-256.yaml',                             checkpoint_path='/home/ma-user/work/first-order-motion-model/vox-cpk.pth.tar')  
    

5. Сгенерируйте результирующее видео 1 - без звука

  • блок кода видео

    from demo import make_animationfrom skimage import img_as_ubytepredictions = make_animation(source_image, driving_video, generator, kp_detector, relative=True)# 保存结果视频imageio.mimsave('../generated.mp4', [img_as_ubyte(frame) for frame in predictions], fps=fps)# 在 Notebook 根目录能找,/home/ma-user/work/HTML(display(source_image, driving_video, predictions).to_html5_video())
    

6. Сгенерируйте результирующее видео 2 — со звуком

  • Установить сторонние пакеты

    # 安装视频剪辑神器 moviepy!pip install moviepy
    
  • Синтезированное видео со звуком

    # 为生成的视频加上源视频声音from moviepy.editor import *videoclip_1 = VideoFileClip(reader_path)videoclip_2 = VideoFileClip("../generated.mp4")#提取音频audio_1 = videoclip_1.audio#复合音频videoclip_3 = videoclip_2.set_audio(audio_1)videoclip_3.write_videofile("../result.mp4", audio_codec="aac")
    

7. Создайте видео с водяными знаками

 还可以给视频加水印video = VideoFileClip("../result.mp4")# 水印图片请自行上传
 logo = (ImageClip("/home/ma-user/work/first-order-motion-model/water.png")        .set_duration(video.duration) # 水印持续时间        
 .resize(height=50) # 水印的高度,会等比缩放        
 .margin(right=0, top=0, opacity=1) # 水印边距和透明度        
 .set_pos(("left","top"))) # 水印的位置
 final = CompositeVideoClip([video, logo])final.write_videofile("../result_water.mp4", audio_codec="aac")
 final_reader = imageio.get_reader("../result_water.mp4")
 fps = final_reader.get_meta_data()['fps']
 result_water_video = []
 try:    
 for im in final_reader:        
 result_water_video.append(im)
 except RuntimeError:    
 passreader.close()
 result_water_video = [resize(frame, (256, 256))[..., :3] 
 for frame in result_water_video]HTML(display(source_image, driving_video, result_water_video).to_html5_video())```