在这一部分,我们将对教程代码作一些改动,以将其作为一项网络服务加以运行。我在Python方面的经验颇为有限(主要在Raspberry Pi项目中使用过),所以如有不对的地方,添加请备注或提交拉取请求,以便我可以修正。
2.1将演示代码转变成一项服务
至此我们已经让TensorFlow Object API能够正常工作了,接下来我们就将它封装成一个可以调用的函数。我将演示代码复制到了一个名为object_detection_api.py 的新python文件中。你可以看到,我删除了很多没有用到或注释掉的行,以及用于将详细信息输出到控制台的部分(暂时删除)。
由于我们要将这些信息输出到网络上,因此最好将我们的输出结果封装成一个JSON对象为此,请务必向你导入的内容中添加一个importjso语句,然后再添加下面的命令:
接下来,我们要重复利用之前的代码创建一个get_objects函数:
在此函数中我们添加了一个图像输入参数和一个默认为0.5的阈值。其余内容都是在演示代码的基础上重构的。
现在我们再向此函数添加一些代码,以查询具体的值并将它们输出到一个JSON对象中:
这一次我们是使用对象类来创建一些初始元数据并将这些元数据添加到输出列表中。然后我们使用循环向此列表中添加对象数据。最后,将此列表转换成JSON并予以返回。
之后,我们来创建一个测试文件(这里要提醒自己:先做测试),以检查它是否调用了object_detection_test.py :
至此万事俱备,接下来就是运行了。
除了前面的控制台输出之外,你应该还会看到一个JSON字符串:
2.2添加一个网络服务器
我们已经有了函数 - 接下来我们就用它来打造一项网络服务。
先使用测试用的路由(路由)运行
我们有了一个可以轻松添加到网络服务的良好API。我发现使用Flask 是最简单的测试方法。我们来创建一个server.py ,然后执行一次快速测试:
现在,运行该服务器:
确保该服务正常工作
然后调用该网络服务就我自己的情况而言,我只是从主机运行了下面的命令(因为我的泊坞实例现在正在前台运行该服务器)。:
。json.tool将帮助你为输出结果设置格式你应该会看到下面的结果:
好了,接下来我们就要接受一个包含一个图片文件及其他一些参数的POST,使用真实路由运行了为此,需要在/测试路由函数下添加一个新的和/或图像路由:
这样就会从一个采用表单编码方式的POST中获取图片,并且可以选择指定一个阈值,然后将该图片传递给我们的object_detection_api。
我们来测试一下:
这时看到的结果应该与上面使用/测试路径时相同。继续测试,可以指定你任选的其他本地图像的路径。
让该服务在本地主机以外的位置也能正常工作