点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

生活中我们不止一次地使用过直播,但从未想过如何通过编程实现。大家好,我们在这里向大家介绍如何使用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进行直播(附代码)相关推荐

  1. 答题卡识别任务--opencv python(附代码)

    答题卡识别 项目理论和源码来自唐宇迪opencv项目实战 记一篇python-opencv 完成答题卡识别 项目的学习笔记 输入一张特定格式的答题卡图片(答题卡中题目数量和选项个数是固定的),能够输出 ...

  2. 光流 | OpenCV中的Lucas-Kanade光流与稠密光流:基于Opencv+Python(附代码)

    ===================================================== github:https://github.com/MichaelBeechan CSDN: ...

  3. 计算机视觉与深度学习 | ORB特征提取:基于OpenCV+Python(附代码)

    ===================================================== github:https://github.com/MichaelBeechan CSDN: ...

  4. OpenCV霍夫变换的演示代码(附完整代码)

    OpenCV霍夫变换的演示代码 OpenCV霍夫变换的演示代码 OpenCV霍夫变换的演示代码 #include "opencv2/imgcodecs.hpp" #include ...

  5. 使用英伟达NeMo让你的文字会说话,零基础即可实现自然语音生成任务 | 附代码...

    语音合成技术可以将文字信息转换成标准流畅的语音且进行朗读,在公共服务.智慧交通.泛娱乐.智能硬件等领域具有广泛应用. 在第3期英伟达x量子位NLP公开课上,英伟达开发者社区经理分享了[使用NeMo让你 ...

  6. 换发型算法_【AI超级美发师】深度学习算法打造染发特效(附代码)

    原标题:[AI超级美发师]深度学习算法打造染发特效(附代码) 来源:OpenCV学堂 作者:胡耀武 [新智元导读]如今,在类似天天P图.美图秀秀等手机APP中,给指定照片或视频中的人物更换头发颜色已经 ...

  7. 最新 | 用深度强化学习打造不亏钱的交易机器人(附代码)

    今天,你AI了没? 关注:决策智能与机器学习,每天学点AI干货 --本文由<量化投资与机器学习>授权转载 在本文中,我们将创建深度强化学习agents,学习如何通过比特币交易赚钱.在本文中 ...

  8. 图像处理/计算机视觉/ python环境下如何用滤波器(/逆滤波/均值滤波/低通滤波/高通滤波)处理图片【附代码】

    计算机视觉滤波器实操 基础知识 一. 计算机视觉技术中常见的几种滤波器 二.滤波器相关知识 应用一:算术均值.几何均值.谐波逆谐波 一.问题分析 二.结果图 三.代码附录 应用二:维纳滤波,逆滤波 一 ...

  9. SLAM学习 | 单目相机标定(附代码实测可用)

    SLAM学习 | 单目相机标定(附代码实测可用) 1 针孔相机模型 2 张正友标定法 3 VS2013下配置openCV 4 标定过程与结果 5 经验总结与注意事项 概要: 这篇文章介绍如何解决做SL ...

  10. python有哪些代码_Python有哪些神一般的蜜汁操作?(附代码),

    Python有哪些神一般的蜜汁操作?(附代码), 有人说,"Python除了不会生孩子,Python从撩妹到装x,无所不能!什么都会!" 下载视频?我用Python; 玩跳一跳?我 ...

最新文章

  1. 真是祸从GPT-2口出,和AI聊会天,把别人隐私都给套出来了
  2. python 模拟微信浏览器请求_使用Chrome修改user agent模拟微信内置浏览器
  3. String Typing CodeForces - 954B
  4. 【收藏】Harbor私有仓库中如何彻底删除镜像释放存储空间:vmware/registry:2.6.2-photon进行垃圾回收
  5. WinXP下 扫雷程序逆向分析 --扫雷辅助(一)
  6. DataGridView数据更新至数据库-逐条更新
  7. 手机壁纸图片源码自动采集美图网
  8. UnicodeDecodeError(转)
  9. 如何在WPF 表格中嵌套按钮
  10. python资格认证_Python怎么实现在后端的自定义认证并且实现多条件登陆
  11. 数据库学习(Oracle)
  12. java流程图平行四边形_流程图图形标准含义
  13. 【Oracle】Oracle insert 语句用法
  14. WinEdit编辑器中中文乱码
  15. 西瓜皮18.6.27
  16. 谷歌开源的跨平台UI开发框架Flutter
  17. nova4android10,华为nova4支持NFC刷公交地铁吗 华为nova4有NFC功能吗
  18. 屁股坐久痛,用麻将当坐垫
  19. 51单片机K型热电偶温度采集及控制温控模块MAX6675热电偶LCD1602
  20. 复旦大学2018--2019学年第一学期(18级)高等代数I期末考试第七大题解答

热门文章

  1. 真相!30K拿到互联网大厂offer,网友:我服了!
  2. 如何学习SVM?怎么改进实现SVM算法程序?答案来了
  3. 优质中文NLP资源集合,做项目一定用得到!
  4. 20T数据、百万奖金,同济和武大摘得开放数据创新应用大赛桂冠!
  5. 学术 | DeepMind最新研究:使用更简单的环境就能检测AI是否安全
  6. java-jwt这个库没用过吧?
  7. zuul如果两个filter的order一样,是如何排序的?
  8. 如何设计 QQ、微信、微博、Github 等等,第三方账号登陆 ?(附表设计)
  9. 阿里巴巴的技术专家,是如何画好架构图的?
  10. 阿里大佬分享API网关在微服务架构中的应用