图像堆栈和iPhone机架-梗图搜索神器构建互联网级Meme搜索引擎

任何花了大量时间在互联网上的人都知道模因用法在网络话语中的流行程度。寻找新的最新发生的迷因并与不同的朋友分享分享幽默的团体是我长期以来喜欢的消遣。工作在科技和信息安全领域给我带来了意外的收获“终端在线”的朋友群,他们都是这样做的。

然而,对于大多数模因来说,都有一种讽刺的双重性:它们的生态位越高它们往往越有趣。一些最好的迷因只是我的朋友小组之间的笑话,或来自令人难以置信的利基InfoSec行业。

这提出了一个极为常见的问题:我永远找不到合适的位置当我最需要他们的时候,我想送他们一些模因。中间转换,一时的精神迷因总是不可能找到的。滚动通过手机中保存的数百幅图像进行搜索效率不高事实证明,所以我决定尝试更好地解决这个问题。

一种OCR实现

之前编写迷因搜索引擎的尝试最终导致了一个核心阻塞问题:缺乏可伸缩的OCR。所有现有解决方案要么是极不善于识别扭曲和高度变异大多数迷因的文本,或是昂贵得令人望而却步。

例如,Tesseract公司光学字符识别是免费的从图像中提取文本的开源库。使用此测试时它可以用非常标准的字体和颜色方案:

image6

示例easy-to-OCR meme,Tesseract结果:我应该感觉到打盹醒来后神清气爽,但我最终感觉这

然而,模因的重新组合、水印和重新共享使其格式化除标准之外的任何内容。以下面的迷因为例:

image2

Tesseract声明此迷因的OCR-ed文本是:30蓝色41人;?S4-5英寸flew/-V\[IL'.“,2;g”.'Sj/B“f;T”EArmD和[red\]mvslmunlm:锯木厂这与实际文本相差甚远人类可以分辨。似乎我的选择要么是昂贵的云OCR服务,或像这样性能较差的解决方案。

然而,一天晚上,当我试图发送某人是我iPhone上的老派CAPTCHA图像示例:

image9

在上一代中意外选择模糊文本reCAPTCHA图像。

令我惊讶的是,iOS非常高兴地强调CAPTCHA图像的故意填充和扭曲文本。甚至更多令人惊讶的是,它完美地解码了文本:

image1

粘贴复制的reCAPTCHA文本。

如果它对故意混淆的文本图像做得很好,那么它会如何它符合大多数模因的各种形式?测试后我手机中保存的一堆迷因上的OCR,答案似乎是“非常好”。

更好的是,在快速搜索后,我发现这个功能是在iOS中暴露愿景框架.这意味着该OCR可以以定制iOS的形式完全自动化应用程序。最后,似乎有一个可扩展的OCR解决方案来解决这个问题我一直在面对!

数百万Meme的廉价可扩展OCR

虽然我写了很多代码,但我从来没有写过任何严肃的东西在Swift或Objective C中,我找不到任何愿景框架的插件阿帕奇科尔多瓦,所以我不能只写JavaScript中的应用程序。看起来是时候咬了用Swift编写OCR iOS服务器。

通过结合激烈的谷歌搜索的力量,对各种Github上的快速回购,以及偶尔对我的iOS提出的Xcode问题朋友,我能够拼凑出一个可行的解决方案:

image5

在iPhone上运行的非常基本的iOS Vision OCR服务器。

我在Macbook上的初步速度测试相当慢。然而,有一次我将该应用程序部署到实际的iPhone上,OCR的速度极快有希望(可能是因为愿景框架使用通用分组).然后,我能够对数千张图像执行极其精确的OCR很快,即使是像第二代SE这样的廉价iPhone型号。

总的来说,API服务器构建在GCD Web服务器运行得相当好,但确实出现了轻微的内存泄漏。之后被OCR-ed的20K-40K图像应用程序通常会崩溃,这是一个相当大的烦恼。再次,我对斯威夫特的熟悉程度不相上下用一个金毛猎犬对金融,因此调试这个问题被证明相当棘手。在调查了更多“黑客”选项后,我意识到我可以利用“引导访问”在iOS上到应用程序崩溃时自动重启。这基本上起作用了作为守护程序,以确保OCR服务器继续为请求提供服务还可以防止其他未知的崩溃,因为损坏的图像会停止管道。

使用ElasticSearch进行全文搜索

现在,通过一种方法从所有模因图像中正确提取文本现在的问题是如何快速搜索大量文本。使用进行初始测试Postgres全文搜索事实证明,索引功能在任何规模上都非常慢超过一百万个映像,即使分配了适当的硬件资源。

我决定放弃弹性搜索这是一次尝试,因为它基本上是专门为这个问题定制的。之后文档阅读、早期测试和阅读实际使用中的博客帖子关于它,我得出了一些关于实现它以供我使用的结论案例:

  • ElasticSearch非常需要RAM和系统资源尤其是在运行多个节点时。具有多个节点允许故障恢复能力当它们发生时,这在任何分布式系统中都很常见。
  • 我可以在一个单节点集群,因为对于ElasticSearch通常的规模来说,即使是数百万个迷因的组合文本也还不够大。这将具有成本效益,但当然是以可靠性为代价的。
  • 由于我正在使用Postgres处理模因的其余结构化数据(例如上下文、源代码等),因此将模因文本存储在ElasticSearch中会使“单一真相来源“范式。根据以往的经验,必须确保两个来源的真相一致,这可能是极端复杂和令人头痛的根源。
  • 经过搜索,我发现我可以利用PGSync(PGSync)自动将选中的Postgres列同步到ElasticSearch。这似乎是一个很好的折衷方案,可以在单节点配置中保持单一真相来源(Postgres)并经济高效地运行ElasticSearch。如果有任何数据丢失,我可以取消ElasticSearch,而PGSync将允许我轻松重建文本搜索索引。
  • ElasticSearch具有大量的文本搜索可配置性和完整的REST API,使我能够轻松地将其集成到我的服务中。

我的最终设计如下:

image8

下面是最终实施的极随机图。

使用生成的数据集进行的测试表明,它的扩展性非常好,甚至可以在不到一秒钟的时间内搜索数百万个迷因在相对温和的硬件上。在撰写本文时,我能够索引和搜索大约1700万个共享模因的文本只有6个内核和16GB RAM的Linode实例。这样可以节省成本相对较低,如果您打算这样做,这对于次要项目很重要让它们运行任意时间。

视频Memes、ffmpeg和OCR

事实证明,模因并不仅仅是图像。现在有很多模因视频以及音频曲目。这无疑是由于移动网络的改进允许快速交付更大的文件。在某些情况下,像GIF,视频甚至更好,因为它们有很多更好的压缩,因此尺寸可以小得多。

为了索引这种类型的模因,视频必须被切碎变成一组屏幕截图,然后像常规一样OCRed模因。为了解决这个问题,我编写了一个小型微服务以下内容:

  • 获取输入视频文件。
  • 使用ffmpeg(通过库),拉出视频中的十个等距截图.
  • 将屏幕截图文件发送到iPhone OCR服务。
  • 在对视频文件中的每个屏幕快照进行OCRing后返回结果集。

将iPhone OCR服务升级为OCR群集

毫无疑问,这增加了OCR服务的负载明显地。对于每一个视频迷因来说,它基本上是10倍的工作量进行OCR。尽管OCR应用服务器的速度很快,但这还是成为了一个主要问题瓶颈,我最终选择将iOS OCR服务升级为集群:

image7

别担心,有一个风扇让他们保持凉爽。

由于使用了许多iPhone,此设置看起来相当昂贵。然而,有一些事情对我有利,使我受益匪浅比您预期的便宜:

  • 由于这些专用于通过iOS Vision API,我可以使用旧的(和便宜的)iPhone型号,例如iPhone SE(第二代).
  • 我的优点是不在乎屏幕裂纹、划痕和其他外观问题,这会进一步降低成本。
  • 更好的是,我甚至不想把它们用作手机,所以即使是iPhoneIMEI被禁止或者锁定在不受欢迎的网络上,对我来说非常好。

考虑到所有这些因素,我找到了iPhone价格便宜得多。例如,这里有一个清单符合我的标准,价格实惠:

image4

这部手机可能只卖了40美元,因为它被锁定在了不受欢迎的美国承运人(板球),因此大多数人都不想成为坚持下去。

这些成本与云OCR服务相比如何?GCP的Cloud Vision API每向您收取1.50美元千幅图像光学字符识别。这意味着使用这种自制的解决方案,我们可以抵消iPhone的成本大约27K张图像之后。当然,也许GCP的OCR服务要好得多就质量而言,但在我的测试中,结果似乎与这个用例。尝试以数十种规模使用云API数以百万计的OCR请求和成本对于这个项目。

密切关注eBay拍卖会我买了任何一款iPhone如此低廉的利率。使用我在house,我配置它作为Nginx负载平衡器来传播在iPhone上均匀发送请求。添加一些网络,以及便宜的风扇可以让一切保持凉爽,我有一个可以工作的OCR集群可以轻松应对更大的需求。

最终(复杂)架构

image3

最终的架构看起来与上图类似。虽然由于我的优化,确实有一些额外的复杂性就成本而言,更便宜的基础设施将使我能够运行这一边项目时间更长。

总的来说,这是一个有趣的项目,附带的好处是有大量个人效用。我学到了很多关于各种主题的知识,包括ElasticSearch配置、iOS应用程序开发,以及机器学习。在以后的帖子中,我希望详细介绍一些我为它构建的其他功能,包括:

  • “按图像搜索”/“图像相似性”搜索数百万模因。
  • NSFW模因的自动检测和标记。
  • 构建抓取基础设施,以实际索引所有模因。

如果你想试试,请访问网站https://findthatmeme.com网站让我知道你的想法!

原创文章,作者:校长,如若转载,请注明出处:https://www.yundongfang.com/Yun208569.html

(0)
打赏 微信扫一扫不于多少! 微信扫一扫不于多少! 支付宝扫一扫礼轻情意重 支付宝扫一扫礼轻情意重
上一篇 2023年1月20日 下午12:01
下一篇 2023年1月26日

相关推荐

  • 如何安装 iOS 17.4.1 修订版更新

    如何安装 iOS 17.4.1 修订版更新 Apple 推出了其最新的软件补丁 iOS 17.4.1 修订版,它引起了相当大的讨论,尤其是其独特的安装要求。如果您热衷于使设备保持最…

    2024年3月29日
  • 您可能不知道的 10 个隐藏的 iPhone 功能

    您可能不知道的 10 个隐藏的 iPhone 功能 在本文中,我们有一个来自 Proper Honest Tech 的精彩视频,向我们展示了您可能不知道的一系列 iPhone 功能…

    2024年3月28日
  • iOS 18 主屏幕自定义细节揭晓

    iOS 18 主屏幕自定义细节揭晓 随着 2024 年全球开发者大会 (WWDC) 的临近,科技界对 iPhone 创新领域的下一步充满期待。在备受期待的更新中,iOS 18 脱颖…

    2024年3月26日
  • 苹果的 iOS 18 新功能泄露

    苹果的 iOS 18 新功能泄露 在日益增长的期待和兴奋中,技术爱好者和苹果爱好者正坐在座位的边缘,热切地等待着iOS 18的发布。据传,这个备受期待的版本将在 WWDC 2024…

    2024年3月17日
  • iPhone 16 Pro 设计细节揭晓

    iPhone 16 Pro 设计细节揭晓 随着科技界充满期待,最近的泄密事件揭示了即将推出的 iPhone 16 Pro 的期望。下面来自ZONEofTECH的视频为我们提供了有关…

    2024年3月17日
  • 修复锁屏音乐在iPhone上不起作用的11种方法

    Apple 允许您与 iPhone 锁屏交互以自定义其背景、小部件和时钟外观。当 iPhone 上有音频播放时,iOS 会显示一个音乐小组件,其中显示专辑封面以及与当前播放的音频相…

    2024年3月5日 苹果Apple
  • 在iPhone上删除重复联系人的2种方法

    如果您长期是 iPhone 用户,那么您的 iPhone 可能积累了多个联系人,其中可能有一些重复的联系人。幸运的是,Apple 允许您合并重复的联系人,以便它们不会多次出现在搜索…

    2024年3月5日 苹果Apple
  • 从iPhone锁屏中删除小部件的4种方法

    通过锁定屏幕上的小组件,您可以快速查看您热衷的应用或事件的状态。在没有可用空间的情况下,您必须删除当前处于活动状态的小部件才能添加新小部件。不管是什么原因,你都可以轻松地摆脱锁屏上…

    2024年3月5日 苹果Apple
  • 如何在iPhone上关闭闹钟

    iPhone 具有本机时钟应用程序,您可以使用它轻松设置任意数量的闹钟,以便在一天中多次使用。该应用程序允许您配置闹钟时间、提示音、重复频率,以及您是否希望使用贪睡选项来延迟它们。…

    2024年3月5日 苹果Apple
  • 如何在iPhone上的Messages应用程序上共享和管理位置

    多年来,iPhone 上的位置共享有所改进。Apple 提供了多种方法来控制谁可以查看您的实时位置以及查看时长。因此,以下是您需要了解的有关 iPhone 上的位置共享以及如何利用…

    2024年3月5日 苹果Apple
  • 如何在 iPhone 上为 Apple Music 启用和自定义交叉淡入淡出

    Apple Music 提供在 iPhone 上播放歌曲时使用交叉淡入淡出的功能。这有助于无缝平滑轨道之间的过渡,这在收听多个轨道时非常有用。该功能可以确保您在从一个曲目切换到另一…

    2024年3月5日 苹果Apple
  • 如何在iPhone上删除壁纸

    对于我们中的许多人来说,壁纸对于我们的手机的外观和脱颖而出至关重要。无论您将什么设置为当前壁纸,您都可能希望丢弃不再使用的壁纸,以便为更多壁纸腾出空间。 在下面的帖子中,我们将帮助…

    2024年3月5日 苹果Apple
  • 如何在 iPhone 上为某人创建联系人海报

    Apple 允许您根据自己的审美偏好为自己创建海报,每次您致电同样拥有 iPhone 的联系人时,它都会显示出来。此外,您可以为保存在联系人列表中的人员设置海报。这样,您可以为没有…

    2024年3月4日 苹果Apple
  • 如何在iPhone上的列表之间拖放联系人

    Apple 的联系人应用程序提供了将联系人从一个联系人列表拖放到另一个联系人列表的功能。这样可以轻松访问和管理您的联系人列表,而无需第三方应用程序或多步骤过程。以下是开始使用设备的…

    2024年3月4日
  • 如何在iPhone上导出所有联系人

    iOS 上的 Apple 联系人应用程序提供了导出保存在 iPhone 上的所有联系人的功能。当您使用“通讯录”应用导出多个联系人时,iOS 会创建一个 .VCF 文件,可用于在其…

    2024年3月4日 苹果Apple
  • 如何在iPhone上更改文件扩展名

    iOS 上的 Apple Files 应用程序允许您重命名保存在 iPhone 上的不同文件的文件扩展名。虽然通常不应更改文件扩展名,但此功能可能有助于使文件与某些应用兼容或有意隐…

    2024年3月4日 苹果Apple
  • 如何在iPhone上禁用隐藏和最近删除的照片的Face ID或Touch ID

    Apple 的照片应用程序提供了将照片锁定在“隐藏”和“最近删除”相册中的功能,以帮助您保护它们不被窥探。这为您可能出现在这些相册中的敏感照片和视频增加了一层额外的保护,因为它们被…

    2024年3月4日 苹果Apple
  • 如何在iPhone上的照片应用程序中复制编辑

    Apple 的照片应用程序提供了一种将您在图像中所做的编辑复制到其他图像的方法。这样做相当简单,该功能还允许您一次对多张图像进行编辑。 在这篇文章中,我们将如何使用 iPhone …

    2024年3月4日 苹果Apple
  • 如何防止侧边按钮在iPhone上结束通话

    Apple 可方便地使用侧边按钮在 iPhone 上结束通话。然而,有时这可能会成为一个麻烦制造者,而不是方便,因为当意外按下侧面按钮时,您最终可能会无意中挂断某人的电话。 如果您…

    2024年3月4日 苹果Apple
  • 在iPhone上删除空相册的2种方法

    iOS 上的 Apple 照片应用程序有一种简单的方法来管理和组织图片,方法是将它们添加到不同的相册中。您可以创建自定义相册,按日期或上下文组织它们,甚至可以根据照片中的主题进行策…

    2024年3月4日 苹果Apple
  • 在 iPhone 上使图片更清晰的 6 种方法

    Apple 最近的 iPhone 可以通过清晰的细节、饱和度和亮度来捕捉回忆。但有时,您可能会遇到一些问题,这些问题可能会导致图像看起来不那么清晰。尽管 iPhone 相机上的自动…

    2024年3月4日 苹果Apple
  • 修复 iPhone 上无法正常工作的 10 种方法

    Apple 提供了多种方法来改善您的工作流程和效率,iOS 中的 Focus 功能就是其中之一。Focus 允许用户为不同的日程安排创建自定义例程,这样他们就可以在忙碌时避免应用程…

    2024年3月4日 工具软件
  • 如何在iPhone上编辑多张照片的元数据

    当您在 iPhone 上拍摄照片和视频时,Apple 会自动将位置和其他元数据附加到它们上,以便于整理。有时您可能希望修改捕获的图像中的信息,如果您想在多个项目上编辑此信息,则可以…

    2024年3月4日 苹果Apple
  • 在 iPhone 上锁定应用程序的 6 种方法

    锁定应用程序的功能为您的设备提供了额外的安全层,尤其是在与您的朋友或家人共享设备时。尽管 Apple 没有提供锁定应用程序的简单方法,但您可以使用其他方法来锁定 iPhone 上的…

    2024年3月4日 苹果Apple
  • 如何使用 Siri 关闭 iPhone

    Apple 提供了使用 Siri 上的语音命令关闭 iPhone 的功能。这样,您就不必手动按住手机上的音量调高和侧面按钮来每次都重新启动手机。 在这篇文章中,我们将解释如何使用 …

    2024年3月4日