還在用絲襪哥(Swagger)做API文檔?快來看看這款幫你減少百分之九十工作量的開源工具!
789
2025-03-31
前言
最近幾天,某音和朋友圈都在秀“螞蟻牙黑”,加上特效和魔性的音樂紛紛被人模仿!這里,看了胡琦大大的教程之后,咱用 ModelArts 來制作實踐跑一遍,我將重新從頭到尾,簡單操作實現生成“螞蟻牙黑“魔性洗腦小視頻。
整體流程
步驟一
創建桶,并將數據集導入到自己的OBS桶中
步驟二
進入ModelArts的控制臺,找到開發環境->NoteBook,然后新建一個NoteBook,名稱:任意;設置參數:python3;資源池:公共資源池;類型:GPU存儲;配置:云硬盤EVS;規格:[限時免費]體驗規格GPU版。
步驟三
新建Pytorch 1.0的.ipynb文件,利用 Moxing 拷貝文件到 JupyterLab,然后進行解壓
步驟四
準備工作完成之后,切換到first-order-model目錄,然后將?source_image_path中的路徑替換為”素材臉”所在的路徑,臉的照片可以直接通過 Notebook 的文件上傳功能上傳。當然您還可以將默認的“螞蟻牙黑”視頻替換為您自定義的視頻,格式為 mp4。
步驟五
保存結果視頻,然后下載安裝剪輯神器軟件moviepy,然后導入音頻,最后加以合成到出成result.mp4
步驟六
最后,可以上傳任意圖片做水印,生成加水印后的視頻,自此,單人版的”螞蟻牙黑“全部完成
步驟一
首先,創建一個新的桶并命名。
然后創建一個文件夾data,用來存放AI Gallery胡琦大大提供的數據集,然后點擊確認下載。(數據集-:點擊?https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=00bc20c3-2a00-4231-bdfd-dfa3eb62a46d?)
耐心等待2分鐘左右,就會顯示下載完成。
步驟二
登陸ModelArts控制臺?https://console.huaweicloud.com/modelarts/?region=cn-north-4&locale=zh-cn#/dashboard
然后選擇開發環境->Notebook->創建Notebook
名稱:任意
設置參數:python3
資源池:公共資源池
類型:GPU
存儲配置:云硬盤EVS
規格:[限時免費]體驗規格GPU版
最后再確認一下參數
步驟三
新建Pytorch 1.0的.ipynb文件,利用 Moxing 拷貝文件到 JupyterLab,然后進行解壓
簡單測試一下是否可以運行代碼
利用 Moxing 拷貝文件到 JupyterLab
將之前下載到 OBS 中的模型和素材通過 Moxing 拷貝過來,此處注意替換為您的 OBS 路徑。02.mp4是“螞蟻呀嘿”的模版視頻,
# 用 Moxing 下載文件 import moxing as mox # 此處需要替換您的 OBS 地址 mox.file.copy_parallel('obs://mayiyahei88/data/first-order-motion-model/first-order-motion-model-20210226T075740Z-001.zip' , 'first-order-motion-model.zip') mox.file.copy_parallel('obs://mayiyahei88/data/first-order-motion-model/02.mp4' , '02.mp4')
# 解壓 !unzip first-order-motion-model.zip # 模版視頻 !mv 02.mp4 first-order-motion-model/
步驟四
準備工作完成之后,切換到first-order-model目錄,然后將?source_image_path中的路徑替換為”您的臉”所在的路徑,臉的照片可以直接通過 Notebook 的文件上傳功能上傳。
當然您還可以將默認的“螞蟻牙黑”視頻替換為您自定義的視頻,格式為 mp4。一路執行可以查看到合成前的預覽。
cd first-order-model
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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?=?imageio.imread(source_image_path)
#?此處可替換為您的視頻路徑,這里默認為“螞蟻牙黑”
reader_path?=?'/home/ma-user/work/first-order-motion-model/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.()
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)
if?generated?is?not?None:
cols.append(generated)
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.()
return?ani
HTML(display(source_image,?driving_video).to_html5_video())
步驟五
保存結果視頻
from demo import load_checkpoints generator, kp_detector = load_checkpoints(config_path='config/vox-256.yaml', checkpoint_path='/home/ma-user/work/first-order-motion-model/vox-cpk.pth.tar')
from demo import make_animation from skimage import img_as_ubyte predictions = 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())
給視頻配音,安裝剪輯合成軟件
# 安裝視頻剪輯神器 moviepy !pip install moviepy
小tips:當*號變成了步驟數字代碼才執行完畢了
為視頻添加螞蟻牙黑背景音樂
# 為生成的視頻加上源視頻聲音 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")
步驟六
給視頻添加水印
# 還可以給視頻加水印 video = VideoFileClip("../result.mp4") # 水印圖片請自行上傳 logo = (ImageClip("/home/ma-user/work/first-order-motion-model/hw.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: pass reader.() 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())
自此,單人版的螞蟻牙黑全程已經跑完了。
注意
本實驗到此完成,需要請大家注意:
示例中我們建議大家選擇的都是免費規格,如果大家開通了套餐或者有代金券的,可以嘗試使用付費規格獲得更好的體驗,但記得及時關閉相應服務哦!
Tips:實驗結束后請及時停止在線服務,不然在線服務會持續收費有可能導致欠費,致使華為云賬號被凍結而影響使用。 我們在在線服務管理頁面單擊對應服務列表后的"停止"按鈕即可停止本在線服務。
總結
OBS的路徑很重要,填錯了會下載不了數據集
臉部圖片和視頻存放的路徑要與代碼填寫的路徑一致,不然報錯not found
找不到result.mp4的原因是當前的路徑是在根目錄,而../relust.mp4就會報錯找不到,你在/home/ma-user/work/first-order-motion-model路徑下,切換才會正常。
展望
這次的螞蟻牙黑只實現了單人版的動效,多人版同屏的還有待研究,大家一起研究看看吧!!!!
AI開發平臺ModelArts 視頻
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。