使用OpenCV进行直播(附代码)
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
生活中我们不止一次地使用过直播,但从未想过如何通过编程实现。大家好,我们在这里向大家介绍如何使用OpenCV和python的套接字编程。今天,我们将借助OpenCV和socket编程创建一个实时流媒体应用程序,我们将从头开始为服务器和客户端开发代码。
什么是OpenCV?
Opencv是一个计算机视觉库。该库具有多种功能,因此我们可以使用网络摄像头和编程来处理图像和视频。
什么是socket编程?
简单地说,socket编程意味着使用TCP或UDP等互联网协议在端口上的两个或多个服务器之间进行通信。关于socket和OpenCV的更多信息,我们将在代码中讨论。
开发一个服务器
在服务器上,当客户端连接到服务器时,应用程序将以端口号和IP地址运行,然后服务器接收数据并将其转换为流。在运行代码之前,请确保你们已经下载了python中的以下库:
pip install packagename
opencv-python,numpy,pickle
import cv2, socket, numpy, pickle
s=socket.socket(socket.AF_INET , socket.SOCK_DGRAM)
ip="192.168.1.5"
port=6666
s.bind((ip,port))
在上面的代码中,我们已经为项目导入了所需的库。"s"变量将存储socket的地址,socket.AF_INET用于表示套接字使用ipv4。socket.sock_DGRAM表示UDP协议,代表用户数据报协议。有时使用它是有风险的,因为假设我们的数据包没有发送给用户,它不会告诉我们,所以我们有数据丢失的风险,而不是它易于使用。我们也可以使用TCP,但这会使我们的代码有点复杂,因此对于basic,我们使用UDP。
"ip"变量包含计算机的ip地址,"port"编号包含运行进程的端口。你们可以根据自己的选择提供任何端口号,因为它只是一个正在运行并暴露于世界的进程。s.bind()函数将绑定"ip"和"端口"号,并将其转换为套接字。简单地说,就是元组。
while True:x=s.recvfrom(1000000)clientip = x[1][0]data=x[0]print(data)data=pickle.loads(data)print(type(data))data = cv2.imdecode(data, cv2.IMREAD_COLOR)cv2.imshow('server', data) #to open imageif cv2.waitKey(10) == 13:break
cv2.destroyAllWindows()
上述函数将从客户端接收数据,并将数据临时存储到"x"变量中。在"clientip"中,我们使用通过切片数组检索的数据存储了客户端的IP地址,数据变量将保存数据。现在,我们将使用函数imdecode对数据变量中接收的数据进行解码,imshow函数将显示一个流窗口。cv2.waitkey(10)将每隔10毫秒单击/收集数据,直到你们按enter键并输入数字13。按enter键时,destroyAllWindows()将关闭应用程序。
配置客户端
现在,当我们将客户端连接到给定的服务器IP和端口号时,它们之间的通信开始。
import cv2, socket, pickle, os
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 10000000)
serverip="192.168.1.5"
serverport=6666
这里,我们首先导入了socket和OpenCV所需的库,"s"存储socket的地址。AF_INET表示IP系列v4和socket.SOCK_DGRAM此关键字用于UDP协议,第三行将创建一个缓冲区大小,以便我们可以存储数据缓冲区以连续传输数据。"serveip"和"serverport"保存服务器的IP地址和端口号。
cap = cv2.VideoCapture(0)
while True: ret,photo = cap.read() cv2.imshow('streaming', photo) ret, buffer = cv2.imencode(".jpg", photo,[int(cv2.IMWRITE_JPEG_QUALITY),30]) x_as_bytes = pickle.dumps(buffer) s.sendto(x_as_bytes,(serverip , serverport)) if cv2.waitKey(10) == 13: break
cv2.destroyAllWindows()
cap.release()
视频捕获(0)存储功能地址和用于存储网络摄像头的"0"。ret存储返回值和照片,并存储cap.read()的输出。此函数将读取图像。imshow将显示流媒体窗口。缓冲区变量将存储流媒体的数据并将其提供给服务器,这个函数将把数据转储到一个变量中,发送到一个函数将绑定IP和端口号的数据,以便我们可以发送它。waitkey将每隔10毫秒收集一次数据,直到我们按enter键,输入代码为13。destroyAllWindows()将销毁windows,cap.release()将关闭相机。
本文GITHUB代码链接:
https://github.com/abhikesare9/live-streaming-with-opencv
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
使用OpenCV进行直播(附代码)相关推荐
- 答题卡识别任务--opencv python(附代码)
答题卡识别 项目理论和源码来自唐宇迪opencv项目实战 记一篇python-opencv 完成答题卡识别 项目的学习笔记 输入一张特定格式的答题卡图片(答题卡中题目数量和选项个数是固定的),能够输出 ...
- 光流 | OpenCV中的Lucas-Kanade光流与稠密光流:基于Opencv+Python(附代码)
===================================================== github:https://github.com/MichaelBeechan CSDN: ...
- 计算机视觉与深度学习 | ORB特征提取:基于OpenCV+Python(附代码)
===================================================== github:https://github.com/MichaelBeechan CSDN: ...
- OpenCV霍夫变换的演示代码(附完整代码)
OpenCV霍夫变换的演示代码 OpenCV霍夫变换的演示代码 OpenCV霍夫变换的演示代码 #include "opencv2/imgcodecs.hpp" #include ...
- 使用英伟达NeMo让你的文字会说话,零基础即可实现自然语音生成任务 | 附代码...
语音合成技术可以将文字信息转换成标准流畅的语音且进行朗读,在公共服务.智慧交通.泛娱乐.智能硬件等领域具有广泛应用. 在第3期英伟达x量子位NLP公开课上,英伟达开发者社区经理分享了[使用NeMo让你 ...
- 换发型算法_【AI超级美发师】深度学习算法打造染发特效(附代码)
原标题:[AI超级美发师]深度学习算法打造染发特效(附代码) 来源:OpenCV学堂 作者:胡耀武 [新智元导读]如今,在类似天天P图.美图秀秀等手机APP中,给指定照片或视频中的人物更换头发颜色已经 ...
- 最新 | 用深度强化学习打造不亏钱的交易机器人(附代码)
今天,你AI了没? 关注:决策智能与机器学习,每天学点AI干货 --本文由<量化投资与机器学习>授权转载 在本文中,我们将创建深度强化学习agents,学习如何通过比特币交易赚钱.在本文中 ...
- 图像处理/计算机视觉/ python环境下如何用滤波器(/逆滤波/均值滤波/低通滤波/高通滤波)处理图片【附代码】
计算机视觉滤波器实操 基础知识 一. 计算机视觉技术中常见的几种滤波器 二.滤波器相关知识 应用一:算术均值.几何均值.谐波逆谐波 一.问题分析 二.结果图 三.代码附录 应用二:维纳滤波,逆滤波 一 ...
- SLAM学习 | 单目相机标定(附代码实测可用)
SLAM学习 | 单目相机标定(附代码实测可用) 1 针孔相机模型 2 张正友标定法 3 VS2013下配置openCV 4 标定过程与结果 5 经验总结与注意事项 概要: 这篇文章介绍如何解决做SL ...
- python有哪些代码_Python有哪些神一般的蜜汁操作?(附代码),
Python有哪些神一般的蜜汁操作?(附代码), 有人说,"Python除了不会生孩子,Python从撩妹到装x,无所不能!什么都会!" 下载视频?我用Python; 玩跳一跳?我 ...
最新文章
- 真是祸从GPT-2口出,和AI聊会天,把别人隐私都给套出来了
- python 模拟微信浏览器请求_使用Chrome修改user agent模拟微信内置浏览器
- String Typing CodeForces - 954B
- 【收藏】Harbor私有仓库中如何彻底删除镜像释放存储空间:vmware/registry:2.6.2-photon进行垃圾回收
- WinXP下 扫雷程序逆向分析 --扫雷辅助(一)
- DataGridView数据更新至数据库-逐条更新
- 手机壁纸图片源码自动采集美图网
- UnicodeDecodeError(转)
- 如何在WPF 表格中嵌套按钮
- python资格认证_Python怎么实现在后端的自定义认证并且实现多条件登陆
- 数据库学习(Oracle)
- java流程图平行四边形_流程图图形标准含义
- 【Oracle】Oracle insert 语句用法
- WinEdit编辑器中中文乱码
- 西瓜皮18.6.27
- 谷歌开源的跨平台UI开发框架Flutter
- nova4android10,华为nova4支持NFC刷公交地铁吗 华为nova4有NFC功能吗
- 屁股坐久痛,用麻将当坐垫
- 51单片机K型热电偶温度采集及控制温控模块MAX6675热电偶LCD1602
- 复旦大学2018--2019学年第一学期(18级)高等代数I期末考试第七大题解答