手把手教你如何繪制自己的跳舞詞云圖~
回復(fù)“書籍”即可獲贈Python從入門到進(jìn)階共10本電子書
上次做了一個跳舞的詞云圖,大家感覺很不錯,都想學(xué)習(xí)一下做法,志斌今天就來跟大家分享一下如何制作跳舞的詞云圖。
01
下載視頻
首先我們要先準(zhǔn)備一個熱舞視頻,從哪里下載的都可以,我是用You-Get從B站上下載的,命令如下:
you-get url

you-get是第三方庫,需要讀者用pip進(jìn)行手動安裝,它的更多用法可以看看這篇文章下載全網(wǎng)音視頻資源的神器—You-get。
02
分割視頻
下載好視頻后,我們要對其進(jìn)行分割處理,將其變成一張一張的圖片,代碼如下:
import cv2
vc = cv2.VideoCapture(r'美女跳舞視頻.flv') # 讀取視頻文件
n = 1 # 計(jì)數(shù)
a, b = vc.read()
timeF = 10 # 視頻幀計(jì)數(shù)間隔頻率
num = 0
while a: # 循環(huán)讀取視頻幀
a, b = vc.read()
if (n % timeF == 0): # 每隔timeF幀進(jìn)行存儲操作
num += 1
cv2.imwrite(f'{num}.jpg',b) # 存儲為圖像
n += 1
cv2.waitKey(1)
vc.release()
讓我們來看看效果:

03
人物摳像
視頻現(xiàn)在已經(jīng)分割成一張一張的圖片了,我們要把人物給摳出來,這樣方便我們進(jìn)行詞云圖繪制。
這里我是借用的百度API進(jìn)行人物摳像,下面我們來看一下如何使用百度API。
首先,我們先打開百度AI界面,然后點(diǎn)擊控制臺。

跳轉(zhuǎn)到登陸界面后,輸入賬號密碼后,跳轉(zhuǎn)到管理界面,此時我們點(diǎn)擊人體分析。進(jìn)入到人體分析應(yīng)用界面。

然后創(chuàng)建一個應(yīng)用(如已創(chuàng)建好,就點(diǎn)擊管理應(yīng)用)。

創(chuàng)建好后,進(jìn)入到應(yīng)用列表中,記下來‘AppID’、‘API Key’、‘Secret Key’這三個參數(shù)的值。在后面對API進(jìn)行調(diào)用的時候需要用到這三個參數(shù)。

接下來,我們就可以開始調(diào)用API了,代碼如下:
""" 讀取圖片 """
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()image = get_file_content('example.jpg')
""" 調(diào)用人像分割 """
client.bodySeg(image);
""" 如果有可選參數(shù) """
options = {}
options["type"] = "labelmap"
""" 帶參數(shù)調(diào)用人像分割 """
client.bodySeg(image, options)
我們來看一下效果:

(來源:百度AI)
我們使用的代碼如下:
APP_ID = '你的APP_ID'
API_KEY = '你的API_KEY'
SECRET_KEY = '你的SECRET_KEY'
client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)
path = r'美女跳舞視頻'
img_files = os.listdir(r'img')
print(img_files)
for num in range(2, len(img_files) + 1):
img = f'img_{num}.jpg'
img_1 = cv2.imread(img)
height, width = img_1.shape[:2]
with open(img, 'rb') as fp:
img_info = fp.read()
seg_res = client.bodySeg(img_info)
labelmap = base64.b64decode(seg_res['labelmap'])
nparr = np.frombuffer(labelmap, np.uint8)
labelimg = cv2.imdecode(nparr, 1)
labelimg = cv2.resize(labelimg, (width, height), interpolation = cv2.INTER_NEAREST)
new_img = np.where(labelimg == 1, 255, labelimg)
mask_name = path + 'mask_{}.png'.format(num)
cv2.imwrite(mask_name,new_img)
讓我們來看看效果,感覺還不錯:

04
詞云繪制
現(xiàn)在人物也出來了,我們可以開始進(jìn)行詞云的繪制了,這里我們使用的是上次從抖音視頻上爬取下來的評論,讀者也可以替換成自己的評論,代碼如下:
for num in range(1,23):
with open("comment.txt", 'r') as f:
job_title_1 = f.read()
contents_cut_job_title = jieba.cut(job_title_1)
contents_list_job_title = " ".join(contents_cut_job_title)
img = f'mask_{num}.png'
mask = 255 - np.array(Image.open(img)) # 相互轉(zhuǎn)化
wc = WordCloud(stopwords=STOPWORDS.add("一個"), collocations=False,
background_color="white",
font_path=r"K:\msyh.ttc",
width=400, height=300, random_state=42,
mask=mask
)
wc.generate(contents_list_job_title)
wc.to_file(f"ciyun_{num}.png")
讓我們來看看效果:
05
合成視頻
詞云圖做好了,我們現(xiàn)在要將他們合成一個視頻,這樣就可以實(shí)現(xiàn)其跳舞的特效啦,代碼如下:
import cv2
video_address = 'tiaowu.mp4' # 輸出視頻的保存路徑
fps = 20 # 幀率,可以調(diào)整
img_size = (1080, 1920) # 圖片的大小
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V')
videoWriter = cv2.VideoWriter(video_address , fourcc, fps, img_size)
for num in range(1,23):
img_path = f'ciyun_{num}.png'
frame = cv2.resize(cv2.imread(img_path), img_size)
videoWriter.write(frame) # 合成視頻
videoWriter.release()
來看一下效果:

06
小結(jié)
1. 本文詳細(xì)介紹了如何制作一款跳舞的詞云圖,有興趣的讀者可以嘗試自己動手實(shí)驗(yàn)一下。
2. 本文繪制詞云圖的操作是最基本的,其實(shí)還可以更優(yōu),有興趣的讀者可以看看這篇文章基于微博評論的文本情感分析與關(guān)鍵詞提取的實(shí)戰(zhàn)案例~。
3. 讓詞云圖繪制在人像中,要讓PIL.Image與numpy.array之間進(jìn)行相互轉(zhuǎn)換。
4. 本文僅供學(xué)習(xí)參考,不做它用。

小伙伴們,快快用實(shí)踐一下吧!如果在學(xué)習(xí)過程中,有遇到任何問題,歡迎加我好友,我拉你進(jìn)Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。
-------------------?End?-------------------
往期精彩文章推薦:

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請?jiān)诤笈_回復(fù)【入群】
萬水千山總是情,點(diǎn)個【在看】行不行
/今日留言主題/
隨便說一兩句吧~
