背景與原理
前段時(shí)間公司項(xiàng)目用到了語(yǔ)音識(shí)別,圖像識(shí)別,視頻識(shí)別等,其實(shí)不能說(shuō)是識(shí)別,應(yīng)該說(shuō)是相似度對(duì)比吧,畢竟相似度對(duì)比還上升不了到識(shí)別哈,等以后有了更深的理解再來(lái)討論修改下!這次就當(dāng)做一個(gè)總結(jié)吧!
其實(shí)它的原理就是一個(gè)把需要的特征總結(jié)在一個(gè)指紋碼里面,進(jìn)行降維成指紋碼,假如個(gè)指紋碼一模一樣,那兩張圖片就想似了.下面有寫(xiě)怎么編譯成唯一標(biāo)識(shí),再用漢明距離計(jì)算兩個(gè)指紋碼的相似度.
圖像相似度算法:
圖片是采用phash算法,一共分為四步吧.
1.將圖片縮放到16*16大小,這是我們選擇的合適的大小,假如寬高不一樣,直接將其壓到16*16,去掉細(xì)節(jié),只保留宏觀;
2.圖片一共是16*16的,共256個(gè)像素,我們將圖片進(jìn)行灰度化,灰度化就是只有黑白灰三種,從白到黑,一共分了255層;
3.灰度化之后將圖片進(jìn)行DCT轉(zhuǎn)換(離散余弦變化),因?yàn)闉榱俗R(shí)別有的圖片旋轉(zhuǎn),這個(gè)DCT轉(zhuǎn)換是將圖片進(jìn)行了一種壓縮算法;
4.我們對(duì)這個(gè)算法進(jìn)行了優(yōu)化,因?yàn)橹笆怯?jì)算像素的均值,我們?yōu)榱烁鼫?zhǔn)確,我們?nèi)GB,rgb一共分為255個(gè)像素,我們將255個(gè)像素分為16段,如果像素大于0-16記為0,17到32記為1,直到255,這樣就得到255位的二進(jìn)制,這就是這張圖片的指紋碼.
得到唯一標(biāo)識(shí)的指紋碼之后怎么去計(jì)算像素度呢?
通過(guò)漢明距離比較兩個(gè)二進(jìn)制距離,如果距離小于<10的話,我們就判定兩張圖片相似.如果兩個(gè)指紋碼(二進(jìn)制)一模一樣,我們就判定兩個(gè)是一張圖片,或者類(lèi)似;
視頻相似度算法:
視頻的話我們是通過(guò)ffmpeg(ff am pig),它是一個(gè)專門(mén)處理視頻的框架,可以從視頻中按針提取圖片.然后就按照?qǐng)D片的相似度取對(duì)比了...