python3从网络摄像机解析mjpeg http流的示例


Posted in Python onNovember 13, 2020

前言

网络摄像头的视频流解析直接使用通过http的Mjpeg是具有边界帧信息的multipart / x-mixed-replace,而jpeg数据只是以二进制形式发送。因此,实际上不需要关心HTTP协议标头。所有jpeg帧均以marker开头,0xff 0xd8并以结尾0xff 0xd9。因此,上面的代码从http流中提取了此类帧,并将其一一解码。像下面

...(http)
0xff 0xd8   --|
[jpeg data]   |--this part is extracted and decoded
0xff 0xd9   --|
...(http)
0xff 0xd8   --|
[jpeg data]   |--this part is extracted and decoded
0xff 0xd9   --|
...(http)

如果图像的获取是从tcp网络中传输到本地进行解析需要对bytes类型数据进行解码

在使用OpenCV直接调用网络摄像头时可能会出现

Cam not found

这时候就需要下面这种办法

代码: 
帧解析

import cv2
cap = cv2.VideoCapture('http://localhost:8080/frame.mjpg')
 
while True:
 ret, frame = cap.read()
 print(frame)
 if ret == True:
  cv2.imshow('Video', frame)
 
  if cv2.waitKey(1) == 27:
   exit(0)

视频流解析

import cv2
import requests
import numpy as np
 
r = requests.get('http://192.168.1.xx/mjpeg.cgi', auth=('user', 'password'), stream=True)
if(r.status_code == 200):
  bytes = bytes()
  for chunk in r.iter_content(chunk_size=1024):
    bytes += chunk
    a = bytes.find(b'\xff\xd8')
    b = bytes.find(b'\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)
else:
  print("Received unexpected status code {}".format(r.status_code))

以上就是python3从网络摄像机解析mjpeg http流的示例的详细内容,更多关于python 解析mjpeg http流的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python打印scrapy蜘蛛抓取树结构的方法
Apr 08 Python
Python 高级专用类方法的实例详解
Sep 11 Python
python生成ppt的方法
Jun 07 Python
python 多线程重启方法
Feb 18 Python
解决django后台样式丢失,css资源加载失败的问题
Jun 11 Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 Python
python实现淘宝购物系统
Oct 25 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 Python
Django数据结果集序列化并展示实现过程
Apr 22 Python
Pytorch mask-rcnn 实现细节分享
Jun 24 Python
python在CMD界面读取excel所有数据的示例
Sep 28 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 Python
python+flask编写一个简单的登录接口
Nov 13 #Python
jupyter notebook快速入门及使用详解
Nov 13 #Python
Python中pass的作用与使用教程
Nov 13 #Python
python入门教程之基本算术运算符
Nov 13 #Python
python“静态”变量、实例变量与本地变量的声明示例
Nov 13 #Python
Python和Bash结合在一起的方法
Nov 13 #Python
python小技巧——将变量保存在本地及读取
Nov 13 #Python
You might like
php快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
php获取随机数组列表的方法
2014/11/13 PHP
php商品对比功能代码分享
2015/09/24 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
jquery实用代码片段集合
2010/08/12 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
jQuery easyui datagrid动态查询数据实例讲解
2013/02/26 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
JavaScript基础篇(6)之函数表达式闭包
2015/12/11 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
vuex实现像调用模板方法一样调用Mutations方法
2019/11/06 Javascript
小程序api实现promise封装过程解析
2019/11/21 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
Python中的CURL PycURL使用例子
2014/06/01 Python
python读取excel指定列数据并写入到新的excel方法
2018/07/10 Python
Python爬虫实现验证码登录代码实例
2019/05/10 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
2017/07/11 HTML / CSS
前厅部经理岗位职责范文
2014/02/04 职场文书
协议书模板
2014/04/23 职场文书
计算机科学技术自荐信
2014/06/12 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
2015年员工工作总结范文
2015/04/08 职场文书