这时候可能就有盆友好奇,这个粗糙的装置是如何做到快速检索梗图的?
那不妨一起来看看这个“Meme搜索引擎”是如何搭建的~
灵感来自iPhone图片识别
这是原图:
30 BLUE man41;? S4-5?’flew/ — V [IL ‘ . “,2; g” .’Sj /B”f;T”EArmDand [red] mvslmunlm: sawmills
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不仅仅靠梗图来传递,有时候还会有视频。
具体来说,小哥编写了一个小型微服务,通过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
— 完—
百度研究院、阿里达摩院、量子位智库
年度十大科技报告
总结2022,预见2023。来自百度研究院、阿里达摩院和量子位智库的年度十大科技报告均已发布, 点击下方图片即可跳转查看。
百度研究院
阿里达摩院
量子位智库
点这里 👇关注我,记得标星哦~
一键三连「分享」、「点赞」和「在看」
科技前沿进展日日相见 ~ 返回搜狐,查看更多