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