文档章节

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

不避风云
 不避风云
发布于 2015/12/07 10:05
字数 1043
阅读 1394
收藏 6

设想

之前使用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

则可以看出照片啦。

问题:

© 著作权归作者所有

共有 人打赏支持
不避风云
粉丝 24
博文 93
码字总数 70725
作品 0
闵行
程序员
私信 提问
加载中

评论(5)

不避风云
不避风云
IP 摄像头下载地址更新。 http://app.mi.com/detail/59398
不避风云
不避风云
https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
不避风云
不避风云
http://my.oschina.net/u/198124/blog/86362 讲述如何变异ffmpeg的
不避风云
不避风云
上面安装有误,ffmpeg需要配置共享的,上面落掉了
不避风云
不避风云
官网例子:https://github.com/Itseez/opencv/blob/master/samples/python2/houghlines.py

和本文的源码可以合并。其中官网例子可以写成一个函数,内src作为输入参数,是本文中的i变量。就是那个imdecode的结果。测试可否检测出线条来。
python opencv linux下合作操作摄像头

设想: 之前使用C#控制摄像头的,现在厌烦了windows,决定转移到linux下玩耍。感觉能够python语言特有的好入手,正好替代C#,选择了deepin2014.1作为试验品。现在的设想是第一步实现在自己电...

不避风云
2014/09/13
0
28
基于OpenCV和Python的文件操作——捕获摄像头的帧,在窗口显示图像,在窗口显示摄像头帧和视频文件的读/写

0 写在前面 这篇博客主要参考资料为《OpenCV 3计算机视觉Python语言实现》(Learning OpenCV 3 Computer Vison with Python)。 因为之前用Faster R-CNN做过一个红绿灯检测的小实践,但是Git...

learning_tortosie
2018/04/12
0
0
在Python中使用OpenCV进行人脸检测

OpenCV是如今最流行的计算机视觉库,而我们今天就是要学习如何安装使用OpenCV,以及如何去访问我们的摄像头。然后我们一起来看看写一个人脸检测程序是如何地简单,简单到只需要几行代码。 在...

煎鱼不可能有BUG
2018/05/17
0
0
OpenCV-Python(1)在Python中使用OpenCV进行人脸检测

OpenCV是如今最流行的计算机视觉库,而我们今天就是要学习如何安装使用OpenCV,以及如何去访问我们的摄像头。然后我们一起来看看写一个人脸检测程序是如何地简单,简单到只需要几行代码。 在...

煎鱼不可能有BUG
2018/05/23
0
0
子豪兄教你在树莓派上安装OpenCV

子豪兄教你在树莓派上安装OpenCV 本文介绍了如何在树莓派上安装分别运行在Python2和Python3的OpenCV。 运行在Python2上的OpenCV安装非常简单,几行命令即可搞定。运行在Python3上的OpenCV安装...

同济子豪兄
2018/10/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。

import java.util.Stack; public class Solution { public boolean IsPopOrder(int [] pushA,int [] popA) { if(pushA.length==0||popA.length==0) return false; Stack......

南桥北木
10分钟前
0
0
互联网浪潮下,Java程序员如何追赶技术革新的脚步?

一:时代背景 身处互联网行业的我们一直处在变革的最前端,受到行业发展浪潮的洗礼,不停歇地追赶着技术革新的脚步。特别是近几年来, 互联网架构不断演化,经历了从集中式架构到分布式架构,...

老道士
17分钟前
0
0
flink系列(9)-flink启动流程分析

连续写了几天的flink StreamGraph的代码,今天闲来说一下flink的启动

yiduwangkai
30分钟前
0
0
取变量的地址赋值给另一个变量,C通过,C++编译出错

取变量的地址赋值给另一个变量,C通过。正常运行,C++编译出错。 代码如下: #include <stdio.h>int main(int argc, char *argv[]){int x = 3;int *p = &x;int y = p;/*c ...

SamXIAO
今天
1
0
利用隐写术实施攻击

尽管隐写术是一种低频攻击途径,但网络犯罪分子已经开始利用它结合社交媒体的普遍性和快速传播性来传递恶意有效负载。 低调但有效的隐写技术虽然是旧把戏,但将代码隐藏在看似正常的图像中,...

Linux就该这么学
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部