写字机器人开发之:python opencv linux下合作操作摄像头

原创
2015/12/07 10:05
阅读数 3K

设想

之前使用C#控制摄像头的,现在厌烦了windows,决定转移到linux下玩耍。感觉能够python语言特有的好入手,正好替代C#,选择了deepin2014.3作为试验平台。现在的设想是第一步实现在自己电脑上对视频的采集,第二步实现视频传输。慢慢来吧。本文大致思路如下:

  • 安装手机ipcam软件
  • 安装opencv
  • 在opencv里用python读取摄像头内容

安装手机ipcam软件

好多人家里面都有废弃的一些安卓手机,我就是其中一位。网上搜索到**沈垚**的一个作品:ip摄像头,成功安装在老安卓手机上。

看着提示,在同一局域网下,电脑firefox访问软件提供的地址:http://192.168.1.104:8081/,输入账号密码均为admin

更多详细内容见:http://www.haban.cn/

安装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出来的。这就完成了安装,教训是先到相关版本说明书上找,不要急着看别人的博客。

参考网页:http://docs.opencv.org/3.0.0/d7/d9f/tutorial_linux_install.html

使用说明略,只记载命令。详细内容见上面参考网页。

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

cd ~/<my_working_directory>
git clone https://github.com/Itseez/opencv.git

cd ~/opencv
mkdir build
cd build

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

make

sudo make install

python操作摄像头

下面是opencv跟python的配合了,这个可以说再次遇到了寻求帮助的方法问题。一是百度,二是看软件自带帮助。百度了很多opencv python的博客,都不适合。后来无奈中发现opencv安装文件夹里有sample/×××(各种语言下的示例)。试着运行,竟然都可以运行了。加上曾经有点python的基础,先学学这些示例代码,然后继续往下进行。

其实用必应搜索英文的资料也不错,谷歌用不了,尝试百度和必应搜索。

参考网页:

打开*./opencv/samples/python2文件夹,新建一个ipcam.py*文件,

输入如下内容:

#!/usr/bin/env python

'''
Usage:
------
    ipcam.py
Keys:
-----
    ESC   - exit
'''

# Python 2/3 compatibility
from __future__ import print_function
import sys
PY3 = sys.version_info[0] == 3

if PY3:
    xrange = range

import cv2
import urllib 
import numpy as np

print(__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://admin:admin@192.168.1.104:8081/video') 其中格式为'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的,百度可以查看他们对应的数值。

用法

<path to ipcam.py>/ipcam.py

则可以看出照片啦。

问题:

展开阅读全文
打赏
1
6 收藏
分享
加载中
不避风云博主
IP 摄像头下载地址更新。 http://app.mi.com/detail/59398
2016/05/19 15:46
回复
举报
不避风云博主
https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
2016/05/18 15:45
回复
举报
不避风云博主
http://my.oschina.net/u/198124/blog/86362 讲述如何变异ffmpeg的
2016/01/22 16:45
回复
举报
不避风云博主
上面安装有误,ffmpeg需要配置共享的,上面落掉了
2015/12/13 13:12
回复
举报
不避风云博主
官网例子:https://github.com/Itseez/opencv/blob/master/samples/python2/houghlines.py

和本文的源码可以合并。其中官网例子可以写成一个函数,内src作为输入参数,是本文中的i变量。就是那个imdecode的结果。测试可否检测出线条来。
2015/12/12 19:44
回复
举报
更多评论
打赏
5 评论
6 收藏
1
分享
返回顶部
顶部