您的位置:首页 > 编程语言 > Python开发

利用python-opencv调用mjpg-stream视频流

2017-07-29 17:40 1916 查看
  由于最近在做一个只能设备,需要实时传输视频,并且要调用mjpg-stream视频流进行图像处理。为了研究如何调取这个视频流,小硕就在树莓派上做了这个实验

1.在树莓派安装 编译/运行 Mjpg-Streamer 网络摄像头(电脑在ubuntu下也可以),首先我们需要想办法提取图像安装依赖。

sudo apt-get install libv4l-dev libjpeg-dev
sudo apt-get install libjpeg62-dev


2.下载代码,并编译

**git clone https://github.com/jacksonliam/mjpg-streamer cd ~/mjpg-streamer/mjpg-streamer-experimental
sudo make clean all
git clone https://github.com/jacksonliam/mjpg-streamer cd ~/mjpg-streamer/mjpg-streamer-experimental
sudo make clean all**


3.然后就可以启动了

多个的时候
./mjpg_streamer -i 'input_uvc.so -d /dev/video0' -o 'output_http.so -p 8080 '
./mjpg_streamer -i 'input_uvc.so -d /dev/video1' -o 'output_http.so -p 8001 -w ./www1'


4.打开浏览器,输入你的IP

http://IP:8080/?action=snapshot


接下来你就可以在浏览器里看到摄像头的内容了。

接下来才是大家比较关心的问题了,如何调取这个mipg-stream流呢?由于小硕需要对采集到的图像做一些处理,于是我采用python-opencv来实现这个project.

至于怎么安装python,opencv等,我在上篇已经提过,我在这里不在赘述了。

import cv2
import urllib2
import numpy as np
import sys
host = "192.168.199.110:8300"#在这里记得修改IP,否则是无法调用的,刚刚浏览器输入的地址
if len(sys.argv)>1:
host = sys.argv[1]
hoststr = 'http://' + host + '/?action=stream'
print 'Streaming ' + hoststr

print 'Print Esc to quit'
stream=urllib2.urlopen(hoststr)
bytes=''
while True:
bytes+=stream.read(1024)
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:]
#flags = 1 for color image
i = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8),flags=1)
# print i.shape
cv2.imshow("xiaorun",i)
if cv2.waitKey(1) & 0xFF == ord('q'):
exit(0)


这样我们就可以利用opencv调用了远程摄像头了,方法简单实用,各位可以自行参考,如果有问题欢迎大家提问,小编邮箱1039463596@qq.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息