
这是与人工智能实施有关的系列博文的一部分。如果你对故事的背景或如何进行感兴趣。
在前几周,我们探讨了如何使用SerpApi的Google Images Scraper API自动创建自己的图像数据集,并使用这些图像自动训练一个网络,使用简单的命令对象传递给FastAPI。本周我们将通过使用Couchbase作为存储服务器来改进数据库的创建方法,并将展示如何从给定的子集中获取一个随机元素。
Couchbase配置
在这个项目中,我们将需要Couchbase社区服务器,以及Couchbase的Python SDK。你可以在Couchbase文档中找到相关信息。
在本教程中,我们将使用CouchBase 7.1.0版本,用于Debian 11。
你可以从这个链接访问它
一旦你安装了它,从服务器目的地(在我的例子中是http://kagermanov:8091)定义用户名和密码,你会看到这样的仪表盘。

这意味着你已经成功部署了服务器。
对于那些想在Linux上停止后台进程的人,你可以输入sudo systemctl stop couchbase-server来停止服务器。
前往左手菜单上的Buckets,从ADD BUCKET按钮添加一个名为images的新桶。
确保选择一个不会迫使你的本地系统陷入狂热的RAM量。I
现在,你需要通过Scopes & Collections按钮在这个桶中添加一个范围和集合。
添加一个名为image的作用域,并在其中添加一个名为labelled_image的集合。
下一步,前往playground,在那里你可以进行手动查询,并运行以下程序。
最后,确保你通过pip安装Couchbase Python SDK,并为我们的服务器设置好一切。
自动图像收集器
让我们在我们的项目中创建一个单独的文件,叫做add_couchbase.py。这将是add.py的重构版本,它可以自动收集带有某种查询的图片。
下面是对它的要求。
将它们分解为特定的用例。
让我们为要上传到Couchbase存储服务器的图片定义一个pydantic基本模型。
id将是图像的唯一uuid,以便将来手动调用。
classification是给SerpApi引擎的查询。
base64将是图像的字符串表示,以便在训练会话中重新创建。
uri将代表我们获取图像的URL。
让我们在一个类中初始化我们的存储数据库。
下面是向存储服务器插入图像的函数,有一个唯一的ID。
doc在这个上下文中代表了我们将图片存储在其中并上传到Couchbase服务器的Document对象。
让我们有另一个函数,通过我们将生成的唯一密钥来调用图像。这个函数在本博文中不会被使用。
接下来,我们需要建立一个函数,帮助我们只上传唯一的图片。区别因素将是在一个分类范围内的唯一链接。
这个函数接收链接,即图片的链接,和cs,即图片的分类器。如果在我们的存储中不存在相同链接的图像,它将返回无。我们不查询整个数据库的唯一性的原因很简单。首先,从长远来看,这并不高效。第二,同样的图片可以有不同的分类。想象一下,苹果公司的标志。它也是苹果,是一种水果。如果我们在苹果标志和黑莓标志之间进行分类,如果图像只在苹果分类中,那么模型就有可能无法解释。这种方法可能会产生难以察觉的不同分类的重复图像,但从长远来看,它将被证明是有用的。
下面是一个例子,我们知道Couchbase服务器中已经存在以下手动查询。
现在我们已经解决了唯一性的问题,让我们把注意力集中在一个给定的查询的随机性上。这一部分也不会在这篇博文中使用,而是为了将来的目的。该函数将给出一个分类子集中的图像数量。它对于确定最大数量范围内的随机数很有用。
这里是另一个查询存储服务器中橙色图像大小的例子。
现在,让我们定义一个函数,为我们随机地挑选一个数字。为此,我们将在我们要输入的查询范围之外定义一个随机整数。但我们将用之前构建的函数来定义这个随机整数。
下面是一个使用随机数37的查询例子,它在0和103之间(从104张橙子的图片中)。
我们现在有了本周和下周博文所需的一切。让我们重新定义我们已经定义过的东西。为我们传递给终端的查询对象建立一个pydantic模型。
同样,这里提到的API密钥是你对SerpApi的唯一API密钥。它可以通过Api Key页面访问。
这里是对下载类的重新定义。我们可以省略一些部分以保持唯一性,并添加新的部分如数据库对象。
SerpApi的谷歌图片API实现的功能没有变化。然而,让我再次重申一个惊人的事实。如果你正在搜索的查询被缓存了,你可以免费得到它。
让我们定义另一个函数,用于下载和图片,并将其作为一个Document对象返回。
接下来,我们定义一个函数来插入我们从前面的函数中得到的Document对象。我们在这个函数中也检查链接的唯一性以减少重复。
在这里,我们可以遍历所有从SerpApi的Google Images Scraper API收集到的链接,并将它们上传到我们的Couchbase存储服务器。
现在我们已经准备好了一切,让我们在main.py中定义add_couchbase.py函数。
收集图片并将其分类存储
让我们把我们所做的一切付诸实践。用下面的命令运行服务器。
然后前往localhost:8000/docs,尝试使用/add_to_db/端点,请求主体如下。
如果你观察终端,你会发现更新数据库的过程正在实时进行。
如果我们在数据库完成之前就对其进行查询,我们可以看到带有分类标签Mango的条目正在被更新。下面是它的命令。
它已经在数据库中添加了67张独特的图片,我们可以在未来几周内用来训练我们的网络。
结论
与其他存储数据库相比,像Couchbase这样的N1QL数据库具有快速的响应时间。在这方面,我认为在采取任何进一步行动之前,重构这一部分是必不可少的步骤。这个实现将为我们提供速度和可扩展性,我们希望在未来一周的挑战中支持我们比较图像分类的不同方法。这对一些功能的异步处理也很重要,比如插入图像而不是用操作系统来命名它们。
我很感谢用户的关注,以及SerpApi的杰出人士的所有支持。在接下来的几周里,我们将探索利用异步处理和循环程序来降低动作的响应时间。如果您对这些教程感兴趣,请随时注册SerpApi博客,或在您找到我们的媒体上关注我们。您的支持是制作此类教程的主要因素。
原文发表于 https://serpapi.com 于2022年6月15日。
使用Couchbase、FastAPI和SerpApi创建N1QL标记的图像数据库最初发表在Medium上的Dev Genius,人们通过强调和回应这个故事来继续对话。