记一次搭建一个 autodraw 后台的经历

Autodraw

前言

不知道小伙伴们玩过 Google 的 Autodraw 没,这是一款非常有趣的产品,只需要在画板上小小画几笔,它就会识别出你想画的是什么,然后就会根据你想画的提供对应预置好的涂鸦集,让你可以快速创作。最近试做一个 demo 的时候发现 google 的接口太慢了,没梯子有时候还访问不了,这怎么可以呢!于是乎做一个类似于 autodraw 的接口这个想法就出来了。

前期调研

首先先分析这个接口的输入输出分别是什么。
autodraw 接口请求体
先不管请求体是什么,先看看返回体。
autodraw 接口返回体
可以看到,接口这边不是直接返回图片链接,而是先识别涂鸦是什么,然后返回相应的关键词数组。因为之前有了解过 Quickdraw,它是一个快速识别涂鸦的神经网络。Google 向全球收集涂鸦数据,做成数据集然后进行训练,然后赋予了 Quickdraw 项目这一神奇的能力。果不其然,仔细查看 Quickdraw 项目可以发现它使用的是与 Autodraw 相同的接口。所以可以断定,Autodraw 只是利用 Quickdraw 的能力做了小小拓展。

搜刮资料

了解到构建一个比较完整的神经网络需要比较多机器学习的知识,但是自己对这一块并不熟悉(或者说从零开始学习训练一个模型需要比较长的时间,即使 Google 有最大的开源涂鸦数据集),就把目标定为找一个训练好的开源模型上,即把输入交给模型,模型输出结果,这边根据结果做相应处理。
然后了解到了 Kaggle 这一个平台。Kaggle 是一个数据建模和数据分析竞赛平台。企业和研究者可在其上发布数据,统计学者和数据挖掘专家可在其上进行竞赛以产生最好的模型(现在已经被 Google 收购)。
在上面搜索 Quickdraw,嘿嘿嘿。然后发现其实 kaggle 里面有举行过这样一个 challenge。
Quickdraw recognition challenge in Kaggle
然后找到竞赛第一名的答案。接下来的时间就是读懂它里面的代码了。作者在 Notebook 里面附上了训练以及测试用的代码。我们需要的是测试用的代码。

开始编码

挖坑势力登场
挖坑(因为这部分的心路历程比较复杂,是一段解读 python 代码、学习 panda 库里面的 DataFrame 数据结构以及学习用 flask 起一个 TensorFlow 模型服务器的过程)。

总结

最后的成品如下,只是一个简单的 demo。
Demo Screenshot
虽然是站在巨人的肩膀上做出来的一个东西,其中的 python 以及 tensorflow 也是没接触过的东西,东捣鼓西捣鼓也算是做出来了,也算是有一点点成就感,所以写这篇博客记录下。最后非常感谢模型的作者!

遇到问题时的参考链接