IoT: Win10+Tensorflow+OpenCV+IPCamera 实时视频物体检测


环境配置

Python3.5

既然是windows下用python,那就不要作死自己弄环境了,直接用anaconda,有条件的还可以把自己的GPU给用起来。
windows(win10)+anacondaGPU版tensorflow安装以及一些常见问题的解决
新建一个python3.5的环境,命名py35

tensorflow 1.2

打开Anaconda Prompt,进入新建的py35环境下:

activate py35

安装tensorflow(这是CPU版,GPU版去看上面那个教程)

conda install tensorflow

OpenCV3

在这里原文建议用的是OpenCV3.0,因为

OpenCV 3.1 might crash on OSX after a while, so that’s why I had to switch to version 3.0. See open issue and solution here.

在OSX上会有bug,但是我们这用的是windows。。win居然还有这种日子

用conda安装opencv,打开Anaconda Prompt:

conda install --channel https://conda.anaconda.org/menpo opencv3

conda自动匹配的是opencv3.1
直接安装

如果下载速度感人,在Anaconda Prompt里把下载源设置为国内地址

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

如果下载速度还是感人,去Unofficial Windows Binaries for Python Extension Packages下载对应的opencv版本whl文件。在这个网站上对应python3.5d的只有OpenCV3.3,经过亲测,对于这个例子来说没啥影响。
下载opencv_python-3.3.0-cp35-cp35m-win_amd64.whl完毕后,用Anaconda Prompt进入到whl文件所在的目录:

pip install opencv_python-3.3.0-cp35-cp35m-win_amd64.whl

matplotlib

conda install matplotlib

PIL

python3.5已经没有以前常用的PIL,转而用pillow代替

conda install pillow

Object detector 程序测试

下载github上的源码
用Anaconda Prompt进入到源码所在目录,运行object_detection_app.py

python object_detection_app.py

正常来说就会启动识别程序了。程序会打开一个窗口,摄像头的图像会实时显示,相关目标会用框框出来。

这个原文给的代码demo识别类别有限,到现在为止我只测出来几种不多的类别。


设置网络摄像头

这里用智能手机自带的摄像头来充当网络摄像头(貌似发现了家中淘汰的智能手机发光发热的机会)

下载网络摄像头APP

我用的是我的华为m2, 在官方的应用市场里找到了最上方的那款“IP摄像头”

打开之后的界面如上方右图所示,有很多摄像头参数可以自己调节。调完参数后菜单拉倒最下方,点“开启服务器”,网络摄像头功能就开始正常工作了

这个网络摄像头是针对同一局域网内的设备的,所以进行接下来的实验的电脑必须和网络摄像头,也就是智能手机处于同一局域网内(所以如果用智能手机当网络摄像头,就只能连无线网络了)

获取网络摄像头地址

点击“开启服务器”之后,在电脑的网页浏览器内输入摄像头app给你的局域网ip和端口(默认是8080),就可以进入网络摄像头的接待界面

但是我们在用python程序调用摄像头时是不需要这个交互界面的,我们需要的是纯粹的视频:右键点击视频区域–在新选项卡中打开,最后获得了网络摄像头的地址http://192.168.1.100:8080/video(我的地址,不同的环境可能有所不同)与图像

至此网络摄像头就配置完成了,这个图像可以被python程序直接调用

python 调用网络摄像头

利用opencv可以直接调用并输出摄像头获得的图像:

# -*- coding: utf-8 -*-
import cv2
cv2.namedWindow("webcam test")
cam_url='http://192.168.1.100:8080/video'
vc=cv2.VideoCapture(cam_url)
if vc.isOpened(): rval, frame = vc.read()
else:rval = Falsewhile rval:
#    frame=cv2.resize(frame,(100,100)) 调节输出图像的大小cv2.imshow("webcam test", frame)rval, frame = vc.read()key = cv2.waitKey(20)if key == 27: # exit on ESCbreak

如果一切顺利,程序运行后系统会自动开启一个名叫”webcam test”的显示窗口,显示的内容正是你智能手机摄像头拍摄到的画面

到这里已经实现了“监控”的功能了,接下来要做的就是把监控和物体探测结合起来

监控 + 物体探测

这就需要改一下先前那个Github项目中的代码了,只需要改object_detection_app.py中的一些关于opencv语句即可
object_detection_app.py

... ...
if __name__ == '__main__':... ...input_q = Queue(maxsize=args.queue_size)output_q = Queue(maxsize=args.queue_size)pool = Pool(args.num_workers, worker, (input_q, output_q))# webcameracam_url='http://192.168.1.100:8080/video'video_capture=cv2.VideoCapture(cam_url)#video_capture = WebcamVideoStream(src=args.video_source,#                                 width=args.width,#                                height=args.height).start()fps = FPS().start()t_start = time.time()out = Nonewhile True:  # fps._numFrames < 120if time.time()-t_start > 2: # 因为识别速度和视频帧率相差过大,为了使输出图像与摄像头输入保持同步,所以每两秒输出一次识别结果。该参数可以根据计算性能加以调整t_start = time.time()_,frame = video_capture.read()frame=cv2.resize(frame,(int(args.width),int(args.height)))input_q.put(frame)t = time.time()out = output_q.get()cv2.imshow('Video', out)fps.update()print('[INFO] elapsed time: {:.2f}'.format(time.time() - t))else:  _,frame = video_capture.read()if out is not None:cv2.imshow("Video", out)else:cv2.imshow("Video", frame)if cv2.waitKey(1) & 0xFF == ord('q'):break... ...

运行方法没变

效果

完工

可以带着小手机到处逛了


参考资料

关于anaconda3下安装opencv3
opencv调用网络摄像头
OpenCV获取IP摄像头视频
Building a Real-Time Object Recognition App with Tensorflow and OpenCV

IoT: Win10+Tensorflow+OpenCV+IPCamera 实时视频物体检测相关推荐

  1. 利用opencv进行移动物体检测

    进行运动物体检测就是将动态的前景从静态的背景中分离出来.将当前画面与假设是静态背景进行比较发现有明显的变化的区域,就可以认为该区域出现移动的物体.在实际情况中由于光照阴影等因素干扰比较大,通过像素直接 ...

  2. JAVA物体运动检测_基于OpenCv的运动物体检测算法

    #include #include #include #include int main( int argc, char** argv ) //声明IplImage指针 IplImage* pFram ...

  3. tensorflow移植到Android端,实现物体检测自动拍照

    tensorflow移植到Android端实现物体检测 一. 说明 1. tensorflow是什么: 是谷歌基于DistBelief进行研发的第二代人工智能学习系统. 2. 为什么要使用tensor ...

  4. 机器视觉实用工具集NO.10——使用深度学习模型(yolo3)实现物体检测工具

    目录 前言 opencv+YOLO3实现物体检测 python源码 前言 OpenCV 3.3版本之后提供了对主流深度学习主干网络框架的加载支持.opencv给我们提供了一个应用成熟深度学习模型的便捷 ...

  5. 【opencv有趣应用】基于MobileNet + SSD的物体检测

    今天学习使用另外的模型进行物体检测 当前目标检测的算法有很多,如rcnn系列.yolo系列和ssd,前端网络如vgg.AlexNet.SqueezeNet,一种常用的方法是将前端网络设为MobileN ...

  6. 深度学习 + OpenCV,Python实现实时视频目标检测

    选自PyimageSearch 机器之心编译 参与:路雪.李泽南 使用 OpenCV 和 Python 对实时视频流进行深度学习目标检测是非常简单的,我们只需要组合一些合适的代码,接入实时视频,随后加 ...

  7. OpenCV之feature2d 模块. 2D特征框架(2)特征描述 使用FLANN进行特征点匹配 使用二维特征点(Features2D)和单映射(Homography)寻找已知物体 平面物体检测

    特征描述 目标 在本教程中,我们将涉及: 使用 DescriptorExtractor 接口来寻找关键点对应的特征向量. 特别地: 使用 SurfDescriptorExtractor 以及它的函数  ...

  8. Google发布新的TensorFlow物体检测API

    \\ Google发布TensorFlow物体检测API,帮助开发人员和研究人员识别图片中的物体.Google专注于提高API的易用性和性能,新的模型于6月16号发布,在基准测试中表现出良好的性能,并 ...

  9. python数据挖掘视频_python+opencv实时视频目标检测

    python+opencv实时视频目标检测 opencv环境 1.访问Python Extension Packages for Windows,下载python对应版本的opencv. 比如小编下载 ...

最新文章

  1. coding制品库持续集成php项目,基于 CODING 轻松搞定持续集成
  2. springboot通过Intellij指定端口
  3. [Leetcode][第415题][JAVA][字符串相加][双指针]
  4. 计算机 电工学简明教程,电工学简明教程复习要点
  5. VB循环For的一点启示
  6. [Swift]LeetCode1044. 最长重复子串 | Longest Duplicate Substring
  7. 成立十个月,融资五个亿,创新奇智完成超4亿人民币A轮和A+轮融资
  8. oracle设置禁用外键,oracle禁用表外键
  9. 中文python笔记
  10. 联想Y9000P-2022款踩坑指南 加装固态和内存 win10系统安装
  11. iOS 16横竖屏切换适配
  12. i春秋——“百度杯”CTF比赛 十月场——Vld(Vulcan Logic Dumper 、php opcode、sql 报错注入)...
  13. 病毒制作实践小记:运行关机、蓝屏炸弹、进程关闭、拓展名病毒
  14. 拖拉机(寒假每日一题 4)
  15. Super-Resolution Mapping of Impervious Surfaces from Remotely Sensed Imagery with Points-of-Interest
  16. containsAll的用法
  17. 前端浏览器常见兼容性问题及解决方案
  18. Android 如何实现气泡选择动画,食堂大妈看完都会了
  19. 【微信小游戏】排行榜概念篇
  20. 变速外挂案例及原理分析

热门文章

  1. 润乾——鼠标滑过改变行背景色
  2. hugeng007_demo03_
  3. ffmpeg最后释放的时候,出现的各种崩溃
  4. Python网络编程(03)----单任务和多任务(1)
  5. python selenium unittest_python+selenium+unittest UI自动化
  6. GG有这个提醒怎么办 合并外部 JavaScript 尽量减少 DNS 查询次数 由同一网址提供资源...
  7. 红米k20pro短接9008_小米、红米全系列短接点拆机进入9008模式刷机图解方法
  8. 东南大学蒙纳士学院计算机qq群,2016东南大学-蒙纳士大学调剂复试经验及笔试题目分享...
  9. 西乡竖坐司法与止政互动机制
  10. 用服务器监控手机位置,云服务器监控手机