实现两台机器之间传输摄像头画面。其中服务端拍摄画面并传输,客户端接收再显示。

传输方法用了之前的socket传输图片。视频就是连续的图片。摄像头画面的采集使用opencv。

1,服务端:

#!/usr/bin/env python
# -*- coding=utf-8 -*-import socket
import numpy as np
import urllib
import cv2 as cv
import threading
import timeprint('this is Server')cap = cv.VideoCapture(0)
cap.set(cv.CAP_PROP_FRAME_WIDTH, 260)
cap.set(cv.CAP_PROP_FRAME_HEIGHT, 200)def socket_service():try:s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 防止socket server重启后端口被占用(socket.error: [Errno 98] Address already in use)s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)#s.bind(('127.0.0.1', 6666))s.bind(('192.168.203.134', 6666))#这个是服务端机器的ips.listen(10)except socket.error as msg:print (msg)sys.exit(1)print ('Waiting connection...')while True:conn, addr = s.accept()t = threading.Thread(target=deal_data, args=(conn, addr))t.start()def deal_data(conn, addr):print ('Accept new connection from {0}'.format(addr))while True:# get a frameret, frame = cap.read()# '.jpg'表示把当前图片img按照jpg格式编码,按照不同格式编码的结果不一样img_encode = cv.imencode('.jpg', frame)[1] data_encode = np.array(img_encode)str_encode = data_encode.tostring()encode_len = str(len(str_encode))print('img size : %s'%encode_len)try:conn.send(str_encode)#发送图片的encode码except Exception as e:print(e)time.sleep(0.1)conn.close()socket_service()

2,客户端:

#!/usr/bin/env python
# -*- coding=utf-8 -*-import socket
import numpy as np
import urllib
import cv2
import threading
import timedef socket_client():try:s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect(('192.168.203.134', 6666))#连接服务端except socket.error as msg:print (msg)sys.exit(1)#c_sock, c_addr =s.accept()print('this is Client')while True:try:receive_encode = s.recv(77777)#接收的字节数 最大值 2147483647 (31位的二进制)nparr = np.fromstring(receive_encode, dtype='uint8')img_decode = cv2.imdecode(nparr, cv2.IMREAD_COLOR)cv2.imshow("Client_show", img_decode)cv2.waitKey(1)except Exception as e:print(e)socket_client()

效果图:

注:

这次在之前的基础上加了try语句,避免偶然的故障导致程序退出。错误提示不太懂。个人理解是,传输建立的时候可能会有些问题,之后传输的过程中也可能会有小概率的错误,表现出来的可能就是画面卡顿,但并不是致命影响。

python socket传输摄像头画面相关推荐

  1. python远程调用摄像头_Python设置Socket代理及实现远程摄像头控制的例子

    为python设置socket代理首先,你得下载SocksiPy这个.解压出来之后里面会有一个socks.py文件.然后你可以把这个文件复制到python安装目录里面的Lib\site-package ...

  2. python linux usb摄像头,树莓派用python中的OpenCV输出USB摄像头画面

    本文实例为大家分享了python OpenCV来表示USB摄像头画面的具体代码,供大家参考,具体内容如下 确认Python版本 $ python Python 2.7.13 (default, Jan ...

  3. python socket sendto sendall_网络通信 Python Socket UDP Select

    前言 工作中遇到各种各样的网络通信.有MQTT和CoAP这样的物联网应用层协议,也有各种自定义的TCP或UDP协议.使用各种不同的计算机语言和框架开发网络通信,例如Java的Netty框架,C语言原始 ...

  4. python socket清空接受区_原始Python服务器

    之前我的Python教程中有人留言,表示只学Python没有用,必须学会一个框架(比如Django和web.py)才能找到工作.而我的想法是,掌握一个类似于框架的高级工具是有用的,但是基础的东西可以让 ...

  5. python socket编程_Python学习记录-socket编程

    1. OSI七层模型详解 2. Python socket 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答 ...

  6. python/socket编程之粘包

    python/socket编程之粘包 粘包 只有TCP有粘包现象,UDP永远不会粘包. 首先需要掌握一个socket收发消息的原理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 发 ...

  7. PYTHON SOCKET编程简介

    原文地址: PYTHON SOCKET编程详细介绍 Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 Socke ...

  8. python+opencv打开摄像头、拍摄指定次数的照片_python+openCV调用摄像头拍摄和处理图片的实现...

    在深度学习过程中想做手势识别相关应用,需要大量采集手势图片进行训练,作为一个懒人当然希望飞快的连续采集图片并且采集到的图片就已经被处理成统一格式的啦..于是使用python+openCV调用摄像头,在 ...

  9. python网络编程讲解_详解Python Socket网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

最新文章

  1. Nature调查:读博难,在中国读博难上加难
  2. ip地址检查正则表达式 兼容ipv4,ipv6
  3. 23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter
  4. 网页文字对齐(CSS)
  5. 如何删除链表的最后一个节点_面试:删除链表的节点
  6. oracle 数据统计收集,Oracle 10g收集数据库统计信息
  7. LeetCode:砖墙【554】
  8. Android中BitmapFactory.Options详解
  9. kubernetes NodeIP、PodIP、ClusterIP的区别和联系
  10. 商标注册计算机软件app属于第几类,软件商标属于第几类?
  11. 第6章 歌手详情页开发
  12. Line营销机器人2019版
  13. 多台树莓派配置自组织网络,batman-adv开源项目具体配置过程
  14. uniapp小程序获取手机号、获取用户信息
  15. mysql故障应急_Mysql错误:紧急救助!!!
  16. 海尔员工论坛最热帖:张瑞敏致创客的一封信
  17. 数据备份与重复数据删除
  18. 硬件基础之变频器逆变器
  19. 动力环境监控系统论文_机房动力环境监控系统研究综述
  20. UltraISO制作启动盘及提取U盘为ISO镜像

热门文章

  1. linux下迅雷替代方案-linux下载工具
  2. behave java_BDD模式-Python behave的简单使用
  3. linux卡住freeze解决办法
  4. 为什么要使用freeze 命令迁移模块
  5. linux笔记本两块显示屏,戴尔双屏笔电新专利曝光:一台笔记本两块可拆卸屏!...
  6. Leaflet 官方教程-Non-geographical maps 非地理地图
  7. 电脑高手应用技巧荟萃(电脑知识二十六)
  8. java 键盘录入猜数,生成一个1-100之间的随机数,用户键盘录入猜数字
  9. CSS transition巧妙运用实现动态列表的效果
  10. 高性能Web应用打造攻略:扩展过程中20个最大的绊脚石