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

重磅干货,第一时间送达

一、简介

在本文中,我们要构建的是视频聊天,但话音通道使用的OpenCV和Python中的Socket。流程:

  • 创建用于一对一通信的 TCP 套接字。

  • 从相机中获取实时流。

  • 对双工通道使用多线程。

OpenCV是使用Python进行图像和视频处理的库,它做任何与图像和视频相关的事情:裁剪、编辑、创建图像和制作视频。Socket是一种低级网络接口,用于连接网络上的两个节点以进行通信,线程是用于在python中创建多线程程序的库。

二、步骤

首先,我们将使用以下代码使用Socket库创建TCP Socket:

  • 将协议设置为 TCP,将地址族设置为 IPv4 地址族。

# tcp and ipv4 address family
tcp = socket.SOCK_STREAM
afm = socket.AF_INET
  • 使用 TCP 和 AFM 变量创建Socket。

# creating socket
sa = socket.socket(afm,tcp)
sb = socket.socket(afm,tcp)

sa和sb是创建用于在两个节点之间进行通信的Socket。我们也可以使用单个Socket来实现相同的目的。

  • 绑定IP地址和端口号。

sa.bind((usera_ip,usera_port))
  • 开始监听Socket。

sa.listen()
  • 开始接受来自节点的连接。

session, addr = sa.accept()

sa.accept()用于接受来自其他节点的连接请求。session存储会话数据并使用它来发送和接收请求,而addr用于存储接收节点的地址。

  • 将此节点连接到另一个节点。

sb.connect((usera_ip,2001))

然后,我们需要设计复杂的接收和发送来接收和发送视频。

receive()函数包括使用以下代码块接收视频帧的无限循环。

session.recv(buff_size)用于从节点接收字节数组,np.frombuffer()用于存储与所述字节回numpy的arraay np.uint8数据类型的存储的0〜255然后,将范围内值cv2.imdecode(image_arr,cv2.IMREAD_COLOR)被用于使用cv2.IMREAD_COLOR参数将图像解码回彩色图像。

如果图像为空且数据类型为Nonetype,则程序将通过或使用cv2.imshow(image_name, image)连续显示帧,并使用cv2.waitKey(10)使帧等待 10 毫秒并退出。cv2.destroyAllWindows()用于完全销毁图像窗口并使用os._exit(0)退出线程。

send()函数包括使用以下代码块发送视频帧的无限循环。

cv2.VideoCapture(0)用于访问摄像头,并且可以使用作为参数传递的数字来更改摄像头。capture存储相机访问方法,如read()来自相机的输入或release()是相机。

capture.read()返回两个变量,第一个作为布尔值,要么是照片,要么是真假,第二个是照片。然后,如果ret为True,则使用imencode('.jpg',photo)对图像进行编码,并返回两个变量和第二个变量作为编码数组,并使用.tobytes转换为字节,该字节可以通过Socket发送。

sendall(byte_encoded_array)通过Socket发送所有数据并将数据发送到目标节点,直到所有数据成功发送到目标节点。

我们需要使用thread.Thread(target=func)创建用于同时接收和发送视频的线程,目标为send()和receive()为单独的线程提供函数。

项目链接:
https://github.com/Launchpad5682/summer_training_21/tree/main/task_3

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

如何使用OpenCV和Socket进行视频聊天?相关推荐

  1. 使用JS+socket.io+WebRTC+nodejs+express搭建一个简易版远程视频聊天

    目录 WebRTC 代码原理及流程 源码:git@gitee.com:DieHunter/myCode.git仓库:myCode/videoSteam 前端 先附上HTML和CSS 完整的socket ...

  2. python语言视频-Python语言之Python3 实现简易局域网视频聊天工具

    本文主要向大家介绍了Python语言之Python3 实现简易局域网视频聊天工具,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 操作系统为 Ubuntu 16.04,OpenCV ...

  3. Python3 实现简易局域网视频聊天工具

    Python3 实现简易局域网视频聊天工具 1.环境 操作系统为 Ubuntu 16.04 python 3.5 opencv-python 3.4.1.15 numpy 1.14.5 PyAudio ...

  4. 5分钟快速打造WebRTC视频聊天转

    原文地址: 5分钟快速打造WebRTC视频聊天 百度一下WebRTC,我想也是一堆.本以为用这位朋友( 搭建WebRtc环境 )的SkyRTC-demo 就可以一马平川的实现聊天,结果折腾了半天,文本 ...

  5. 计算机视觉——利用openCV与Socket结合进行远程摄像头实时视频传输并保存图片数据

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.TCP协议通信步骤 二.代码实现 1.客户端 2.服务端 三.IP设置方法 四.效果演示 前言 本文的内容是利用o ...

  6. 在ubuntu上实现基于webrtc的多人在线视频聊天服务

    最近研究webrtc视频直播技术,网上找了些教程最终都不太能顺利跑起来的,可能是文章写的比较老,使用的一些开源组件已经更新了,有些配置已经不太一样了,所以按照以前的步骤会有问题.折腾了一阵终于跑起来了 ...

  7. 使用React,TypeScript和Socket.io构建聊天应用

    This is going to be a thorough step-by-step guide for building a single page chat application using ...

  8. 基于Trtc的内贸站视频聊天服务

    基于Trtc的内贸站视频聊天服务分享 说到视频聊天,大家第一个想到的是啥,QQ! 其实最早的视频聊天工具应该是 : Netmeeting(我能找到的最早聊天工具) Netmeeting是Windows ...

  9. 【webrtc0419 点对点视频聊天功能】

    通过WebRtc搭建了自己的网站,实现了点对点视频聊天功能. 点对点视频聊天界面videoRoom.js源码 "use strict"var url = location.href ...

最新文章

  1. Java反射到底慢在哪?
  2. python使用matplotlib可视化包含倒影的柱状图(bar plot with shadow)、配置rcParams坐标轴正确显示负号(-)
  3. 浅析响应式网站建设的注意要点
  4. 说一下自己对于 Linux 哲学的理解
  5. 火狐浏览器工具栏/折叠菜单怎么设置?火狐浏览器工具栏/折叠菜单定制教程
  6. C++笔记-函数参数使用void *的野路子
  7. Entity Framework 6 Code First的简单使用和更新数据库结构
  8. 中继链路,以太网通道,DHCP配置
  9. EL表达式用法---查询博客
  10. python2020个税_2020年你会算个人所得税吗?没关系,python脚本帮助你!
  11. 交叉路口红绿灯控制程序linux,西门子PLC编程实例详解|十字路口交通灯自动控制系统...
  12. busybox内置tftpd服务器配置
  13. WPS怎么设置显示文章目录
  14. python读取fits第三方库_python-astropy.io.fits从具有多个HDU的大型fits文件中读取行
  15. #使用SAS进行变量筛选、模型诊断、多元线性回归分析 #
  16. CF736 D1 格点图,皮克定理
  17. 整理GitHub近期热门开源后台管理系统
  18. 手把手教你iPhone 3G手机软件开发
  19. 互联网应用:不以抄袭为耻,但以抄袭为常
  20. IoT技术概览(postscapes)

热门文章

  1. 阿里团队最新实践:如何解决大规模分类问题?
  2. 全球股市巨震,如何用深度学习预测股价?
  3. 一个接口同时支持 form 表单、form-data、json 的优雅写法
  4. 流量治理神器-Sentinel的限流模式,选单机还是集群?
  5. Grafana 7.0 发布:改进的界面、新的插件平台和可视化等
  6. 你真的会写单例模式吗?
  7. 公司的API接口被刷了,那是因为你没这样做
  8. 主宰这个世界的10种算法
  9. 我用2年时间从财务到数据分析师!
  10. 基于深度学习的文本分类应用!