用Python獲取可能是全網最全的傑尼龜表情包(第一彈)

斐波那契小李發表於2020-04-06

傑尼龜系列表情包在廣大網友之間傳遞快樂,紅極一時。我想是傑尼龜可愛的外表以及憨憨的形態,圓圓的臉蛋大大的眼睛,且其經常在劇中擺出各式誇張表情,因而被廣大網友製成各式各樣的表情包,並且深受沙雕網友的喜愛。

file

正好,我也是這沙雕網友大軍中的一員,通過各種渠道收集了一些傑尼龜的表情包。但,我想要更多,只有擁有沙雕表情包最多的人才能在鬥圖中立於不敗之地,於是便有了用Python獲取可能是全網最全的傑尼龜表情包這一系列。本系列旨在獲取更多更多的傑尼龜表情包,傳遞更多歡樂。!

全系列一共三彈,每一彈都運用Python作為程式語言,主要涉及網路爬蟲、資料影像處理以及機器學習這幾個應用領域,今天便是這第一彈!

file

爬取視訊

如何獲得更多的傑尼龜表情包?

這些流傳的表情包無非就是擷取自動畫片《精靈寶可夢》,然後有選擇性地縮放或是剪下圖片,再對應圖片加上相關的文字。因此按照這個邏輯,我們需要首先在這視訊上做文章。

作為第一代御三家的一員,傑尼龜主要活躍在《精靈寶可夢》的第一部無印篇,因而我們僅需要考慮第一部的視訊,而這第一部中,不乏一些傑尼龜專集。

直接下載這第一部的視訊費時費力,恰好B站有up主上傳了所有含傑尼龜的集數合集,這裡偷個小懶,我直接採用了@Henryhaohao寫得非常棒的B站視訊爬蟲將該專輯合集的所有視訊下載到本地。

file

視訊切割

既然已經將所有視訊下載,接下來便可以利用openCV將每個視訊切割為圖片。這裡fps便是幀率,意為每一秒重新整理的圖片數量,frames則是一整段視訊中總的圖片數量。

def vedio_to_pic(path):

    vedio_path=os.listdir(path)
    count=0
    for vedio in vedio_path: 
        videoCapture=cv2.VideoCapture()
        videoCapture.open(os.path.join(path,vedio,vedio+'.flv'))
        fps=videoCapture.get(cv2.CAP_PROP_FPS)
        frames = videoCapture.get(cv2.CAP_PROP_FRAME_COUNT)       
        print("fps=",fps,"frames=",frames)
        for i in range(int(frames)):
            ret,frame=videoCapture.read()
            if ret:
                if i%int(fps/5)==0:        
                    cv2.imwrite("pic/jieni{}_{}.jpg".format(count+1,i),frame)
        count+=1複製程式碼

這裡每一幀僅儲存1/5的圖片,因為每一幀內的圖片較為相似,幀內所有圖片獲取存在較大的冗餘。

file

至此,我們便擁有了海量可能包含傑尼龜的圖片,下一彈便來講講如何使用機器學習來幫助我們篩選那些包含傑尼龜的圖片!

相關文章