可搜索标签的随机动漫图片api

发布于 2020-12-19  31 次阅读


上篇文章中给大家演示了如何通过对象存储以及cdn加速随机图片api的访问,随着图片数量的增加,如何获得自己想要类型的随机图片便成为了一个难题。 本期文章给大家分享一下如何利用AI以及云数据库建立图片标签索引,赋予随即图片api搜索的能力。

动漫图片多标签识别

图片搜索依赖于众多的图片标签,所以我们首要目标便是给我们的动漫图片打上标签。我这里采用的是DeepDanbooru的预训练模型,该模型是在包含300万张动漫图片以及8000个标签的数据集上训练而成的,大家可以访问作者提供的demo网站,上传自己的图片查看效果。

我们先试试看输入一张saber的图片会有什么效果

DeepDanbooru demo网站

可以发现这个模型准确的辨认出了图片中的人物角色,不仅如此,图片中各种元素也被一一识别,该模型还提供了图片暴露程度的置信度,方便我们过滤不良图片。

通过此模型,我们便可以实现图片的多标签分类,为我们之后进行图片搜索提供了有利的工具。

将图片数据存入云数据库

上篇文章中我们采用的是本地php文件实现api,我们可以直接将图片数据存入本地数据库。而本文中的api采用的是腾讯云云函数,由于没有固定的存储空间,我们只能通过云数据库来进行数据的存储,由于不想浪费自己服务器的带宽,最后我选用了腾讯云的mysql云数据库,通过私人虚拟网络,可以将云函数与数据库放置于同一内网下,降低数据传输延迟。

对于单一的图片,我选择了图片的长宽,图片大小以及通过DeepDanbooru识别出的标签作为图片的元数据,而对于图片的名称,则采用了图片哈希来进行区分。为什么要采用图片哈希而不是图片md5值呢?因为md5值并不能检测出相同内容但是不同大小的图片,而图片哈希则相当于是图片的指纹,不管你大小以及色调如何变化,相同的图片还是具有相同的图片哈希值,由此实现了图片去重。图片哈希可以通过python的hashlib库进行计算。

动漫图片数据库内容

云函数随机图片api以及图片搜索

腾讯云的云函数支持python,nodejs等语言作为后端,通过集成响应,可以进行页面重定向以及文本图片显示,以及获得访问链接中的query parameters,由此我们可以很方便的编写代码而不用担心web服务器的配置。而随机图片api也可以非常容易的通过云函数实现。

由于DeepDanbooru识别出来的标签都是英文的,对于我们使用中文的并不是非常友好,对此我并没有发现有什么好的办法可以将中文搜索词准确的转换为英文,因为大多数动漫术语都并不好翻译,手动翻译工作量也非常大,8000个标签估计得花1个月左右。目前我暂时的解决办法是通过deepdanbooru的标签wiki页面获得tag的日文翻译,然后在云函数数据库查找逻辑中利用qqai翻译接口实现中文转英文,以及中文转日文,将得到的英文以及日文与识别出的标签以及标签的日文翻译进行对比,从而增加查找的准确性。

最后想给大家分享一下我自己实现的随机图片api,目前数据库中的图片数量大概是1700+,图片存储采用的是腾讯云的对象存储cos以及cdn加速。具体的api用法我会放在下期文章进行详细讲解。


清醒了岂能再昏睡,觉知了岂能再愚昧,当华美的叶片落尽时,生命的脉络便曆曆可见。