作者:Chad Hart(原文链接)
翻译:刘通
原标题:Computer Vision on the Web with WebRTC and TensorFlow
TensorFlow是现在最受欢迎的机器学习框架。TensorFlow的一大优点就是很多库都在积极的维护和更新。我最喜欢的一个就是TensorFlow Object Detection API(对象检测API)。TensorFlow Object Detection API可以在图像中识别并且显示出多个物体。它预先训练了将近1000个物体类别,并且提供各种预先训练的模型,让你在速度和准确性之间做出选择。
本篇教程非常好,但是所有事情都依靠于使用你需要自己加入文件夹的图像。我真的很想把这点加入到实时的WebRTC流中以实现在网页端的实时机器视觉。我找不到关于这些的任何例子或者教程,所以我就打算自己来写一篇。对于从事RTC的人来说,这是一篇如何使用TensorFlow来处理WebRTC数据流的快速教程。对于从事TensorFlow的人来说,这是一个如何将WebRTC加入你项目的简单介绍。WebRTC开发人员需要习惯使用Python。TensorFlow的开发人员需要习惯网页交互和一些JavaScript的内容。
对于WebRTC或者TensorFlow,这篇教程都不适合作为入门指导—因为你应该看过很多关于TensorFlow入门,WebRTC入门或者任何相关的入门指南。
告诉我是怎么做的
如果你只是想快速参考一下,或者懒得阅读全文,那么这是一个简单快速的方法来着手。你需要安装Docker。加载命令提示符,然后键入:
docker run -it -p 5000:5000 chadhart/tensorflow-object-detection:runserver
然后将你的浏览器跳转到http://localhost:5000/local,然后接受摄像头请求,你就可以看到像这样的场景:
架构
让我们从一个基础的体系结构开始,这个结构使用Flask Web服务器和TensorFlow物体检测API在本地将本地网络摄像头的视频流从WebRTC的getUserMedia发送到Python服务器。我设定的如下图所示:
Flask将为浏览器提供html和JavaScript文件。getUserMedia.js将抓取本地视频流。然后objDetect.js将使用HTTP POST方法将图像发送给TensorFlow物体检测API,该API将返回它所看到的对象(它称之为类)以及它们在图像中的位置。我们将吧细节包装在一个JSON对象中,并将其发送回objDetect.js,以便我们可以显示我们所看到的框和标签。
安装程序和先决条件
在我们开始之前,需要安装TensorFlow和物体检测API。
使用Docker轻松设置
我已经在OSX,Windows 10和Raspbian(不容易)这几个系统上做过几次了。有很多版本的依赖关系,并且要想不出什么问题的话真的是很难。我建议使用Docker来避免这些头疼的事。你需要学如何使用docker,但是你有可能已经掌握了这些,而且这个时间比尝试构建正确版本的Protobuf更短。TensorFlow项目维护了一些官方的Docker镜像,像tensorflow/tensorflow。
我们可以使用我为这篇文章创建的镜像。从命令行执行以下操作:
git clone https://github.com/webrtcHacks/tfObjWebrtc.git
cd tfObjWebrtc
docker run -it -p 5000:5000 –name tf-webrtchacks -v $(pwd):/code chadhart/tensorflow-object-detection:webrtchacks
注意docker run中的$(pwd)只在Linux以及Windows Powershell中才能运行。在Windows 10中在指令行中用%cd%。
现在运行:
python setup.py install
这会使用最新的TensorFlow docker镜像,并将端口主机上的端口5000连接到端口5000,将容器命名为tf-webrtchacks,将本地目录映射到容器中的新/code目录,将其设为我们工作的默认目录,并在开始之前运行命令行交互的bash。
困难的方法
如果你想从头开始,你需要安装TensorFlow,它有很多自己的依赖项,比如Python。TensorFlow项目在这里有各种平台的指南:https://www.tensorflow.org/install/。物体检测API也有它自己的安装教程。一旦你做到这步之后,做这些:
git clone https://github.com/webrtcHacks/tfObjWebrtc.git
cd tfObjWebrtc
docker run -it -p 5000:5000 –name tf-webrtchacks -v $(pwd):/code chadhart/tensorflow-object-detection:webrtchacks
这应该会安装所有的Python依赖项,复制适当的TensorFlow对象API文件,并且安装Protobufs。如果这不能正常工作,我建议检查setup.py并且手动运行这些命令来解决问题。