Tensorflow object detection API 实现动态物体的实时识别 win10+python3.7+tensorflow2.0

在做项目的过程中需要实现物体实时识别的功能,因此上网找了很多材料。现有的一些博客都是基于tensorflow1的代码,然而tensorflow的GitHub上的源码及模型已经更新成tensorflow2的版本了,我改了一下代码上传到了我GitHub上,希望对大家有所帮助。

环境

Windows10, Anaconda3, VS2015, Python3.7, TensorFlow2.0, OpenCV4.1.1

环境搭建

1. 安装TensorFlow

由于我的代码是基于官方的源码改的,源码就是.ipynb文件,所以建议下载Anaconda3会方便一点。

#CPU版本的tf2.0的话可以直接这样安装,我用的就是这个
pip install tensorflow

#如果要安装特定版本,等号后面可以输入指定的版本号
pip install --upgrade tensorflow==1.9.0

#GPU版本的安装,需要系统配置 CUDA 和 cuDNN,我没安过。
pip install --upgrade tensorflow-gpu==1.9.0

过程中可能会提示“pip”不是内部或外部指令,说明要添加环境变量;“pip”找不到就重新安装一下pip并更新一下pip。

还有一些其他的包需要安装,比如numpy等。反正之后运行代码时,缺什么安什么就好。

pip install numpy

pip install opencv-python

pip install matplotlib

pip install pandas

pip install Pillow
2. 安装TensorFlow Object Detection API

接下来安装tensorflow的官方包,地址如下:API地址
解压后会出现一个models-master文件夹,我重命名为models文件夹了。
models

3.安装Protobuf及编译

protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。(源于百度百科)

简单来说就是把包里的Proto文件,编译生成Python文件。

下载windows版本的Protobuf,我下载的是
proto
(虽然我是64位机,但大家好像都下载的32位),解压后将bin文件夹中的protoc.exe放到C:\Windows中。

在上一步解压的models文件夹下的research目录下(比如我的D:\models\research)打开命令行窗口,输入:

#在models\research目录下
protoc object_detection/protos/*.proto --python_out=.

编译

4. 环境变量设置

在 ‘此电脑’-‘属性’- ‘高级系统设置’ -‘环境变量’-‘系统变量’ 中新建系统变量,变量名为‘PYTHONPATH’,变量值为models/、

models/research/ 及 models/research/slim 三个文件夹的完整目录(用分号隔开)效果如下图:
变量接下来测试一下API:

#在models/research目录下运行
python object_detection/builders/model_builder_test.py

若没有报错“ModuleNotFoundError: No module named ‘object_detection’”,说明成功添加环境变量。tf2.0已经弃用tf.contrib,可以不用在意下图这个报错。
环境配置

测试自带案例

在models/research/object_detection目录下运行jupyter notebook。
运行jupyter

下图是官方示例。
示例

运行该代码会得到识别出物体的图片,如下
dogs1
kite1
dogs2
kite2
代码用了两种不同的模型进行训练,得到结果。

运行到这一步说明环境搭建成功了,接下来可以利用tensorflow已有的模型实现动态物体的实时识别

总结一下,运行该代码时会遇到一些问题:
(1)运行pip install pycocotools时会遇到一些问题,因为pycocotools不支持Windows。

Unable to find vcvarsall.bat
error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ Build Tools”: http://landinghub.visualstudio.com/visual-cpp-build-tools

解决方法:缺少C++编译环境,下载VS2015或者单独下载C++的包。我是下载了VS2015解决的。(源于博客

windows下 cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp”
ModuleNotFoundError: No module named ‘pycocotools._mask’

解决办法:(源于博客philferriere的cocoapi

pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI

动态物体的实时识别

因为源码提供的是图片中的静态物体识别,我的项目要求实时识别动态的物体,网上已经有很多博主分享了代码,但是都是基于tensorflow1的实现。我本来想把自己的tensorflow版本改低一点来应用,又发现官方给的API的例程已经全改为tensorflow2的版本了,这样一来,我就必须自己改一改代码了。作者本人是Python的小白,所以希望对新入门的同学也有一点帮助吧。
我将代码放在了自己的GitHub上,希望大家多多指教。

1.代码运行

object_detection_realtime.ipynb文件下载到D:\models\research\object_detection(API模型下载的位置),在该目录下打开jupyter notebook
jupyter
注意:该代码的运行需要在完成前文所有步骤后才能运行,否则会缺少一些包的安装导致报错。

当弹出摄像头拍摄的实时画面的显示框时,说明运行成功,效果如下图。
rnn

2.代码分析

代码上已经有注释了,需要解释的就只有,选择不同的模型这一步。
modelsdetection model zoo选择合适的COCO-trained models,点击会弹出模型及其更新时间,这就是可更改的model_name.
model_name

相关参考资料

代码更改参考了以下文章及源码:
datitran的GitHub
第三章 利用TensorFlow Object Detection API实现摄像头实时物体检测

如果大家有什么问题的话,欢迎与我交流,谢谢!

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值