梗圖搜索神器來(lái)了!還能搜視頻,網(wǎng)友:找了六年的梗圖兩分鐘解決
小眾文化的梗圖也能搜到
Pine 發(fā)自 凹非寺
量子位 | 公眾號(hào) QbitAI
重度互聯(lián)網(wǎng)愛(ài)好者們福利來(lái)了!
你是否遇到過(guò)這種情況:一個(gè)梗圖尋遍全網(wǎng)都還沒(méi)找到。
現(xiàn)在外網(wǎng)一位小哥搞出了一個(gè)互聯(lián)網(wǎng)規(guī)模的Meme搜索引擎,庫(kù)里有近兩千萬(wàn)個(gè)梗圖,涵蓋各種小眾文化。
檢索關(guān)鍵詞,或者上傳相似圖片,結(jié)果就能秒出!
若遇到Meme庫(kù)里沒(méi)有的梗圖,還可共享上傳。
網(wǎng)友六年都沒(méi)找到的梗圖,在這個(gè)小哥的網(wǎng)站上2分鐘就找到了。
然鵝這樣一個(gè)秒秒鐘出梗圖的背后的裝置確實(shí)醬嬸兒的:
(這不會(huì)有點(diǎn)太簡(jiǎn)陋了吧)
這時(shí)候可能就有盆友好奇,這個(gè)粗糙的裝置是如何做到快速檢索梗圖的?
那不妨一起來(lái)看看這個(gè)“Meme搜索引擎”是如何搭建的~
靈感來(lái)自iPhone圖片識(shí)別
要編寫(xiě)一個(gè)Meme搜索引擎,最重要也是最先面臨的一個(gè)問(wèn)題就是:如何準(zhǔn)確識(shí)別梗圖中的文字信息?
用專業(yè)一點(diǎn)的話來(lái)講就是:如何擁有一個(gè)可伸縮的OCR(光學(xué)字符識(shí)別 )?
OCR的解決方案倒是有現(xiàn)成的,不過(guò)現(xiàn)有的要么就是遇到比較抽象的梗圖識(shí)別效果不太好,要么就是太貴。
舉個(gè)簡(jiǎn)單的栗子
,比如說(shuō)用Tesseract OCR來(lái)提取圖像中的文字,測(cè)試時(shí),只能用非常標(biāo)準(zhǔn)的字體和配色方案識(shí)別Meme圖,不然的話就會(huì)出現(xiàn)下面這種情況。
這是原圖:
這是識(shí)別出來(lái)的文字:
30 BLUE man41;? S4-5?’?ew/ — V [IL ‘ . “,2; g” .’Sj /B”f;T”EArmDand [red] mvslmunlm: sawmills
emmmmmm
不過(guò)靈感很快就來(lái)了,小哥偶然間在iPhone給別人發(fā)一個(gè)驗(yàn)證碼圖片時(shí)。
這是驗(yàn)證碼圖片:
這是復(fù)制過(guò)來(lái)的文字:
并且iPhone的這個(gè)功能已經(jīng)在iOS Vision框架中公開(kāi)了,可伸縮OCR的問(wèn)題這不就有解決辦法了嘛~
不過(guò)關(guān)于Vision框架目前還沒(méi)有現(xiàn)成的開(kāi)源代碼插件,只能自己寫(xiě)了,具體代碼小哥目前還沒(méi)公布。
BUT,小哥還是總結(jié)了一下自己寫(xiě)代碼時(shí)的方法經(jīng)驗(yàn),而且是針對(duì)一個(gè)從未用Swift寫(xiě)過(guò)任何正經(jīng)東西的小白:
- 遇事不決Google之
- Github上逆向工程各種Swift回購(gòu)協(xié)議
- 請(qǐng)教懂iOS的朋友解決Xcode問(wèn)題
……
最終東拼西湊,搞出了一個(gè)可行的解決方案:iOS Vision OCR服務(wù)器,僅在一部iPhone上就能運(yùn)行。
識(shí)別文字信息這趴搞定了,接下來(lái)就輪到搜索環(huán)節(jié)了,相較于上一趴,這部分就簡(jiǎn)單多了。
小哥用的是ElasticSearch(已開(kāi)源)和Postgres。
ElasticSearch擁有多節(jié)點(diǎn)能夠有效避免故障的發(fā)生,并且能夠在保證速度的情況下容納數(shù)百萬(wàn)個(gè)Meme,不過(guò)這都是在犧牲了可靠性之后得到的。
而Postgres能夠保證搜索結(jié)果的可靠性,但在超過(guò)一百萬(wàn)張圖片的范圍時(shí),就會(huì)變得特別慢。
一個(gè)能保證速度,一個(gè)能保證質(zhì)量,那……
Done!
在這其中,小哥用到了PGSync,它是一件中間件,可以用于同步從Postgres到Elasticsearch/OpenSearch的數(shù)據(jù),具體的搜索流程如下:
到這里,整個(gè)搜索引擎的搭建已初見(jiàn)雛形,但還沒(méi)結(jié)束……
視頻Meme也能支持
因?yàn)镸eme不僅僅靠梗圖來(lái)傳遞,有時(shí)候還會(huì)有視頻。
這倒也簡(jiǎn)單,直接將視頻分割成截圖集,之后就能像普通的Meme圖一樣被識(shí)別了。
具體來(lái)說(shuō),小哥編寫(xiě)了一個(gè)小型微服務(wù),通過(guò)ffmpeg(它可以執(zhí)行音頻和視頻多種格式的錄影、轉(zhuǎn)換、串流功能),從視頻中截取10個(gè)均勻間隔的圖片。
然后將截圖文件發(fā)送到iPhone OCR服務(wù),最終視頻文件中會(huì)有每個(gè)屏幕截圖OCR后的結(jié)果集。
不過(guò)擁有視頻檢索功能后,毫無(wú)疑問(wèn)OCR服務(wù)的負(fù)載就重了,一個(gè)視頻OCR的工作量幾乎是一般梗圖的10倍。
雖然說(shuō)OCR應(yīng)用服務(wù)器的速度很快,但也禁不住這樣薅,于是iOS OCR服務(wù)升級(jí)了(多加幾臺(tái)手機(jī)),于是最終的裝置就變開(kāi)頭圖中的那樣了。
最終具體的流程圖小哥也貼心地給出來(lái)了:
小哥的這個(gè)Meme搜索引擎出來(lái)之后,網(wǎng)友們也都直呼太棒了。
當(dāng)然也有網(wǎng)友給出了一些建議,認(rèn)為當(dāng)前的搜索引擎太文本化了,而很多Meme圖本身就沒(méi)多少文字,更多時(shí)候都是“意會(huì)”。
對(duì)此,小哥本人也作出了回應(yīng),稱之后還會(huì)繼續(xù)優(yōu)化搜索引擎:
考慮將圖像轉(zhuǎn)換為描述的文本……
不過(guò)值得一提的是,目前這個(gè)搜索引擎還不太支持中文,中文的梗圖搜索效果不是很好,但既然小哥已經(jīng)將構(gòu)建方法給出來(lái)了,就期待一波萬(wàn)能的網(wǎng)友吧。(手動(dòng)狗頭)
如果你對(duì)這個(gè)項(xiàng)目感興趣的話,可以戳下文鏈接~
傳送門(mén):
https://findthatmeme.com/
參考鏈接:
https://findthatmeme.com/blog/2023/01/08/image-stacks-and-iphone-racks-building-an-internet-scale-meme-search-engine-Qzrz7V6T.html