<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python制作詞云視頻,通過詞云圖來看小姐姐跳舞

          共 6736字,需瀏覽 14分鐘

           ·

          2021-12-11 05:31

          本文用 python 做了一個(gè)詞云圖視頻,視頻左半部分是小姐姐跳舞視頻,右半部分是根據(jù)動(dòng)作生成的的詞云視頻,看一下效果

          制作過程分為以下幾個(gè)部分

          1,視頻下載

          首先需要下載一個(gè)小姐姐跳舞的視頻,這里我用的是 you-get 工具,可借助 Python 的 pip 命令進(jìn)行安裝

          pip?install?you-get

          you-get 支持下載平臺包括:Youtube、Blili、TED、騰訊、優(yōu)酷、愛奇藝(涵蓋所有視頻平臺下載鏈接),

          以 youtube 視頻為例,you-get 下載命令

          you-get?-o?~/Videos(存放視頻路徑)?-O?zoo.webm(視頻命名)?'https://www.youtube.com/watch?v=jNQXAC9IVRw'

          這里通過 os 模塊來實(shí)現(xiàn) you-get 下載命令,使用時(shí)傳入三個(gè)參數(shù)即可:1,視頻鏈接,2,要存放視頻的文件路徑;3,視頻命名;

          def?download(video_url,save_path,video_name):
          ???'''
          ???youget?下載視頻
          ???:param?video_url:視頻鏈接
          ???:param?save_path:?保存路徑
          ???:param?video_name:?視頻命名
          ???:return:
          ???'
          ''

          ???cmd?=?'you-get?-o?{}?-O?{}?{}'.format(save_path,video_name,video_url)
          ???res?=?os.popen(cmd,)
          ???res.encoding?=?'utf-8'
          ???print(res.read())#?打印輸出

          關(guān)于 you-get 更多用法, 可參考官網(wǎng),里面關(guān)于用法介紹的非常詳細(xì):

          https://you-get.org/#getting-started

          2,B 站彈幕下載;

          做詞云圖需要有文本數(shù)據(jù)支持,這里選取 B 站彈幕為素材;關(guān)于 B 站視頻彈幕下載方式,這里一個(gè)快捷方法,用 requests 訪問指定視頻的 API 接口,就能得到該視頻下的全部彈幕

          http://comment.bilibili.com/{cid}.xml?#?cid?為B站視頻的cid?編號

          但 API 接口的構(gòu)造,需要知道視頻的 cid 編號

          B站視頻 cid 編號獲取方式:F12打開開發(fā)者模式->NetWork->XHR->v2?cid=.... 鏈接 ,該網(wǎng)頁鏈接中有一個(gè)”cid=一串?dāng)?shù)字“ 的字符串,其中等號后面的連續(xù)數(shù)字就是該視頻的 cid 編號

          以上面視頻為例,291424805 就是這個(gè)視頻的 cid 編號,

          有了 cid 之后,通過 requests 請求 API 接口,就能獲取到里面的彈幕數(shù)據(jù)

          http://comment.bilibili.com/291424805.xml
          def?download_danmu():
          ????'''彈幕下載并存儲'''
          ????cid?=?'141367679'#?video_id
          ????url?=?'http://comment.bilibili.com/{}.xml'.format(cid)

          ????f?=?open('danmu.txt','w+',encoding='utf-8')?#打開?txt?文件
          ????res?=?requests.get(url)
          ????res.encoding?=?'utf-8'
          ????soup?=?BeautifulSoup(res.text,'lxml')
          ????items?=?soup.find_all('d')#?找到?d?標(biāo)簽

          ????for?item?in?items:
          ????????text?=?item.text
          ????????print('---------------------------------'*10)
          ????????print(text)

          ????????seg_list?=?jieba.cut(text,cut_all?=True)#?對字符串進(jìn)行分詞處理,方便后面制作詞云圖
          ????????for?j?in?seg_list:
          ????????????print(j)
          ????????????f.write(j)
          ????????????f.write('\n')
          ????f.close()

          3,視頻切幀,人像分割

          下載到視頻之后,先把視頻拆分成一幀一幀圖像;

          vc?=?cv2.VideoCapture(video_path)
          ????c?=0
          ????if?vc.isOpened():
          ????????rval,frame?=?vc.read()#?讀取視頻幀
          ????else:
          ????????rval=False

          ????while?rval:
          ????????rval,frame?=?vc.read()#?讀取每一視頻幀,并保存至圖片中

          ????????cv2.imwrite(os.path.join(Pic_path,'{}.jpg'.format(c)),frame)
          ????????c?+=?1
          ????????print('第?{}?張圖片存放成功!'.format(c))

          對每一幀中的小姐姐進(jìn)行識別提取,也就是人像分割,這里借助了百度 API 接口,

          APP_ID?=?"23633750"
          ????API_KEY?=?'uqnHjMZfChbDHvPqWgjeZHCR'
          ????SECRET_KEY?=?'************************************'

          ????client?=?AipBodyAnalysis(APP_ID,?API_KEY,?SECRET_KEY)
          ????#?文件夾
          ????jpg_file?=?os.listdir(jpg_path)
          ????#?要保存的文件夾
          ????for?i?in?jpg_file:
          ????????open_file?=?os.path.join(jpg_path,i)
          ????????save_file?=?os.path.join(save_path,i)
          ????????if?not?os.path.exists(save_file):#文件不存在時(shí),進(jìn)行下步操作
          ????????????img?=?cv2.imread(open_file)??#?獲取圖像尺寸
          ????????????height,?width,?_?=?img.shape
          ????????????if?crop_path:#?若Crop_path?不為?None,則不進(jìn)行裁剪
          ????????????????crop_file?=?os.path.join(crop_path,i)
          ????????????????img?=?img[100:-1,300:-400]?#圖片太大,對圖像進(jìn)行裁剪里面參數(shù)根據(jù)自己情況設(shè)定
          ????????????????cv2.imwrite(crop_file,img)
          ????????????????image=?get_file_content(crop_file)
          ????????????else:

          ????????????????image?=?get_file_content(open_file)

          ????????????res?=?client.bodySeg(image)#調(diào)用百度API?對人像進(jìn)行分割
          ????????????labelmap?=?base64.b64decode(res['labelmap'])
          ????????????labelimg?=?np.frombuffer(labelmap,np.uint8)#?轉(zhuǎn)化為np數(shù)組?0-255
          ????????????labelimg?=?cv2.imdecode(labelimg,1)
          ????????????labelimg?=?cv2.resize(labelimg,(width,height),interpolation=cv2.INTER_NEAREST)
          ????????????img_new?=?np.where(labelimg==1,255,labelimg)#?將?1?轉(zhuǎn)化為?255
          ????????????cv2.imwrite(save_file,img_new)
          ????????????print(save_file,'save?successfully')

          將含有人像的圖像轉(zhuǎn)化為二值化圖像,前景為人物,其余部分為背景

          API 使用之前需要用自己賬號在百度智能云平臺創(chuàng)建一個(gè) 人體分析 應(yīng)用,里面需要三個(gè)參數(shù):ID、AK、SK

          關(guān)于百度 API 使用方法,可參考官方文檔資料

          4,對分割后的圖像制作詞云圖

          根據(jù)步驟 3 中得到了小姐姐 人像 Mask,

          借助 wordcloud 詞云庫和采集到的彈幕信息,對每一張二值化圖像繪制詞云圖(在制作之前,請確保每一張都是二值化圖像,全部為黑色像素圖像需要剔除)

          word_list?=?[]
          ????with?open('danmu.txt',encoding='utf-8')?as?f:
          ????????con?=?f.read().split('\n')#?讀取txt文本詞云文本
          ????????for?i?in?con:
          ????????????if?re.findall('[\u4e00-\u9fa5]+',?str(i),?re.S):?#去除無中文的詞頻
          ????????????????word_list.append(i)

          ????for?i?in?os.listdir(mask_path):
          ????????open_file?=?os.path.join(mask_path,i)
          ????????save_file?=?os.path.join(cloud_path,i)

          ????????if?not?os.path.exists(save_file):
          ????????????#?隨機(jī)索引前?start?頻率詞
          ????????????start?=?random.randint(0,?15)
          ????????????word_counts?=?collections.Counter(word_list)
          ????????????word_counts?=?dict(word_counts.most_common()[start:])
          ????????????background?=?255-?np.array(Image.open(open_file))

          ????????????wc?=WordCloud(
          ????????????????background_color='black',
          ????????????????max_words=500,
          ????????????????mask=background,
          ????????????????mode?=?'RGB',
          ????????????????font_path?="D:/Data/fonts/HGXK_CNKI.ttf",#?設(shè)置字體路徑,用于設(shè)置中文,

          ????????????).generate_from_frequencies(word_counts)
          ????????????wc.to_file(save_file)
          ????????????print(save_file,'Save?Sucessfully!')

          5,圖片拼接,合成視頻

          詞云圖全部生成完畢之后,如果一張一張圖像看肯定沒意思,如果把處理后的詞云圖合成視頻會(huì)更酷一點(diǎn)!

          為了視頻前后對比效果這里我多加了一個(gè)步驟,在合并之前先對原圖和詞云圖進(jìn)行拼接,合成效果如下:

          ?num_list?=?[int(str(i).split('.')[0])?for?i?in?os.listdir(origin_path)]
          ????fps?=?24#?視頻幀率,越大越流暢
          ????height,width,_=cv2.imread(os.path.join(origin_path,'{}.jpg'.format(num_list[0]))).shape?#?視頻高度和寬度
          ????width?=?width*2
          ????#?創(chuàng)建一個(gè)寫入操作;
          ????video_writer?=?cv2.VideoWriter(video_path,cv2.VideoWriter_fourcc(*'mp4v'),fps,(width,height))

          ????for?i?in?sorted(num_list):
          ????????i?=?'{}.jpg'.format(i)
          ????????ori_jpg?=?os.path.join(origin_path,str(i))
          ????????word_jpg?=?os.path.join(wordart_path,str(i))
          ????????#?com_jpg?=?os.path.join(Composite_path,str(i))
          ????????ori_arr?=?cv2.imread(ori_jpg)
          ????????word_arr?=?cv2.imread(word_jpg)

          ????????#?利用?Numpy?進(jìn)行拼接
          ????????com_arr?=?np.hstack((ori_arr,word_arr))
          ????????#?cv2.imwrite(com_jpg,com_arr)#?合成圖保存
          ????????video_writer.write(com_arr)?#?將每一幀畫面寫入視頻流中
          ????????print("{}?Save?Sucessfully---------".format(ori_jpg))

          再加上背景音樂,視頻又能提升一個(gè)檔次~

          最后

          獲取代碼,在微信后臺回復(fù)關(guān)鍵字 小助手,找他領(lǐng)取,暗號:小姐姐詞云,即可獲取相關(guān)鏈接

          關(guān)于視頻中的素材,特此聲明

          彈幕取自B站 Up 主 半佛仙人《【半佛】你知道奶茶加盟到底有多坑人嗎?》


          小姐姐跳舞視頻取自Youtube Channel?Lilifilm Official 《LILI's FILM #3 - LISA Dance Performance Video》

          最后,感謝大家的閱讀,我們下期見!



          推薦閱讀:

          入門:?最全的零基礎(chǔ)學(xué)Python的問題? |?零基礎(chǔ)學(xué)了8個(gè)月的Python??|?實(shí)戰(zhàn)項(xiàng)目?|學(xué)Python就是這條捷徑


          干貨:爬取豆瓣短評,電影《后來的我們》?|?38年NBA最佳球員分析?|? ?從萬眾期待到口碑撲街!唐探3令人失望? |?笑看新倚天屠龍記?|?燈謎答題王?|用Python做個(gè)海量小姐姐素描圖?|碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影


          趣味:彈球游戲? |?九宮格? |?漂亮的花?|?兩百行Python《天天酷跑》游戲!


          AI:?會(huì)做詩的機(jī)器人?|?給圖片上色?|?預(yù)測收入?|?碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影


          小工具:?Pdf轉(zhuǎn)Word,輕松搞定表格和水?。?/a>?|?一鍵把html網(wǎng)頁保存為pdf!|??再見PDF提取收費(fèi)!?|?用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換?|?制作一款釘釘?shù)蛢r(jià)機(jī)票提示器!?|60行代碼做了一個(gè)語音壁紙切換器天天看小姐姐!


          年度爆款文案


          點(diǎn)閱讀原文,看200個(gè)Python案例!

          瀏覽 71
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  哦美草逼视频 | 奇米影视第四色7777 | 国产一区二区久久 | 91成人在线电影 | 九热精品在线观看 |