设想
之前使用C#控制摄像头的,现在厌烦了windows,决定转移到linux下玩耍。感觉能够python语言特有的好入手,正好替代C#,选择了deepin2014.3作为试验平台。现在的设想是第一步实现在自己电脑上对视频的采集,第二步实现视频传输。慢慢来吧。本文大致思路如下:
- 安装手机ipcam软件
- 安装opencv
- 在opencv里用python读取摄像头内容
安装手机ipcam软件
好多人家里面都有废弃的一些安卓手机,我就是其中一位。网上搜索到****的一个作品:,成功安装在老安卓手机上。
看着提示,在同一局域网下,电脑firefox访问软件提供的地址:,输入账号密码均为admin
更多详细内容见:
安装opencv 3.X
前车之鉴,安装opencv需要ffmpeg和gstream之类的。想要使用Python,还需要安装Python,一般Deepin Linux默认安装了Python,包括2.7和3.4版本等,看具体情况。这里跳过Python的安装。
安装ffmpeg
sudo apt-get install ffmpeg
安装gstreamer
由于不知道具体需要那些gstreamer版本,就把他们都安装了。
sudo apt-get install gstreamer1.0*
按教程安装 opencv 3.X版本
准备好这两个软件,下面是安装opencv了,面临寻求帮助的方法问题:一是先百度,一是从软件自身网站找。先百度的(谷歌打不开网页,没办法),网上好多人的博客重复来重复去,很多都是老版本的,不适合最新版本不说,还有很多错误,描述不清楚的,偷工减料的描述,太不负责任了,生怕别人看懂。从软件自身的网站找,一步一步的介绍先安装所需软件。虽然这个网页也是百度linux opencv install出来的。这就完成了安装,教训是先到相关版本说明书上找,不要急着看别人的博客。
参考网页:
使用说明略,只记载命令。详细内容见上面参考网页。
sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devsudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-devcd ~/git clone https://github.com/Itseez/opencv.gitcd ~/opencvmkdir buildcd buildcmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..makesudo make install
python操作摄像头
下面是opencv跟python的配合了,这个可以说再次遇到了寻求帮助的方法问题。一是百度,二是看软件自带帮助。百度了很多opencv python的博客,都不适合。后来无奈中发现opencv安装文件夹里有sample/×××(各种语言下的示例)。试着运行,竟然都可以运行了。加上曾经有点python的基础,先学学这些示例代码,然后继续往下进行。
其实用必应搜索英文的资料也不错,谷歌用不了,尝试百度和必应搜索。
参考网页:
- 还有大量网页,不再列举
打开*./opencv/samples/python2文件夹,新建一个ipcam.py*文件,
输入如下内容:
#!/usr/bin/env python'''Usage:------ ipcam.pyKeys:----- ESC - exit'''# Python 2/3 compatibilityfrom __future__ import print_functionimport sysPY3 = sys.version_info[0] == 3if PY3: xrange = rangeimport cv2import urllib import numpy as npprint(__doc__)stream=urllib.urlopen('http://admin:admin@192.168.1.104:8081/video')bytes=''while True: bytes+=stream.read(16384) a = bytes.find('\xff\xd8') b = bytes.find('\xff\xd9') if a!=-1 and b!=-1: jpg = bytes[a:b+2] bytes= bytes[b+2:] i = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR) cv2.imshow('i',i) if cv2.waitKey(1) ==27: exit(0)
程序说明:
- stream=urllib.urlopen('') 其中格式为'http://<username>:<password>@<ipaddress>:<port>/video'。 这个video为查看网页源码 <img id="imgvideo" class="img-thumbnail" src="/video" />得出来。
- i = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR) 其中
cv2.IMREAD_COLOR
是试出来的,原文的cv2.CV_LOAD_IMAGE_COLOR
经百度,发现不合适,后来改为1
,又改为cv2.IMREAD_COLOR
的,百度可以查看他们对应的数值。
用法
/ipcam.py
则可以看出照片啦。