利用Tensorflow构建图像识别简单Web应用

Tensorflow官方有一个CNN图像识别的本地应用Demo 原始链接,现在对这个应用做简单的修改和封装生成一个Web应用,用于演示图像识别效果。

修改官方的classify_image脚本程序

官方的这个demo脚本模块化做的不是很好,为了将这段脚本实现的业务逻辑(图像识别)封装进Web服务端,我们需要对脚本进行修改。

  1. 配置模块
    首先,因为tf.app.flags.FLAGS这个模块不兼容tornado框架,所以用一个简单的config类将其替换。

  2. 模型下载模块
    由于国内特殊的网络环境,启动时下载模型文件的功能没有实际意义(反而会阻塞程序),这里将其去掉,所有应用所需文件改为默认直接加载本地路径。

  3. 类和对象的引用
    将所有的直接引用模块全局类对象的代码改为通过函数参数引用,代码风格尽量向函数式靠拢。

  4. 本地测试的入口由tf.app.run()改为run_inference_on_image(), 测试图片的路径在if name == "main"下修改,避免更改模块代码。

搭建Tornado图片上传应用

  1. 图片上传功能
    利用class UploadHandler(tornado.web.RequestHandler)实现了上传文件的命名和本地存储

  2. 图片识别
    利用run_inference_on_image函数实现对图像的识别

  3. 识别命名翻译
    因为tensorflow模型内置的图像类别名为英文,这里调用百度翻译API将英文名自动译成中文。

别的不多说了,上代码:
Github链接

启动命令:
python upload.py