Python实现简易局域网视频聊天工具

本文介绍了如何使用Python和OpenCV、Pyaudio实现一个简易的局域网视频聊天工具,支持语音和视频通信,以及画质、停顿参数调整,兼容IPv6。文章详细讲解了环境配置、代码实现、实验原理和步骤,包括数据的压缩处理。源代码可在GitHub上获取。
摘要由CSDN通过智能技术生成

         基于实验楼限免课程:

Python实现简易局域网视频聊天工具

         试验操作系统为Ubuntu14.04,OpenCV版本为2.4.13.1,源代码可以在https://github.com/Forec/lan-ichat上获取。软件初衷是为了在IPV6协议网络中节省聊天流量。

         内容简介:

                   1.实现简易视频通信工具,并能实现语音通话 2.通信质量 ,如画质、停顿等参数可以调节  3.支持IPV6

         知识点:

                   1.Python基于Opencv对摄像头信息的捕获和压缩

                   2.Python关于线程和socket通信的基础技巧(数据的压缩处理为重点)

                   3.Python基于Pyaudio对语音信息的捕获和压缩

期间遇到的问题:

         1.执行wgethttps://labfile.oss.aliyuncs.com/courses/672/2.4.13-binary.tar.gz操作时,遇到证书问题

         2.进入到python后回不去了(小白笨笨哒),http://blog.csdn.net/langzi7758521/article/details/51163009在这里找到了解法

即quit()/exit()/ctrl+d退出。。之前一直尝试cd ../cd ~无果

         3.import cv2时出现问题:failed to initialize libdc1394,百度后http://stackoverflow.com/questions/12689304/ctypes-error-libdc1394-error-failed-to-initialize-libdc1394中找到解法。

         4.最后仍是无法查看CV2的版本,原因是无法打出更长的下划线。。无语无奈

无法下载链接中的文件,于是通过实验楼中的火狐浏览器直接下载后,复制到Opencv文件夹下,进行下一步操作成功。

 

过程理解:

         1.更新实验楼中一些基本库

         2.新建OpenCV文件夹,下载作者已编译好的包,完成环境配置的准备工作

 

 

Python实现简易局域网视频聊天工具

一、课程介绍

1.课程来源

课程使用的操作系统为 Ubuntu 14.04OpenCV版本为OpenCV 2.4.13.1,你可以在这里查看该版本 OpenCV 的文档。

你可以在我的 Github 上找到 Windows 系统和 Linux 系统对应的源代码,此教程对应的版本是 v0.2。目前我正在开发的版本是 v0.3,新版本将允许使用不同IP协议的主机通信,并且范围不再局限于局域网内。这个工具最初是为了通过IPv6节省聊天工具使用的流量而开发的。

2.内容简介

  • 课程实验实现简易的视频通信工具
  • 在视频通信的基础上加入语音
  • 用户可以选择通信的质量,即画质、停顿等参数
  • 支持IPv6

3.课程知识点

本课程项目完成过程中将学习:

  • Python 基于 OpenCV 对摄像头信息的捕获和压缩
  • Python 关于 线程 和 socket 通信的一些基础技巧
  • Python 基于 PyAudio 对语音信息的捕获和压缩

其中将重点介绍 socket 传输过程中对数据的压缩和处理。

二、实验环境

  • 本实验需要先在实验平台安装 OpenCV ,需下载依赖的库、源代码并编译安装。安装过程建议按照教程给出的步骤,或者你可以参考官方文档中 Linux 环境下的安装步骤,但 有些选项需要变更。安装过程所需时间会比较长,这期间你可以先阅读接下来的教程,在大致了解代码原理后再亲自编写尝试。
  • 我提供了一个编译好的2.4.13-binary.tar.gz包,你可以通过下面的命令下载并安装,节省了编译的时间,但仍需要安装依赖库的过程,整个环境配置过程大约20~30分钟,根据当前机器速度决定。

·        $ sudo apt-get update

·        $ sudo apt-get install build-essentiallibgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev cmakepython-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-devlibopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-devlibxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-commontexlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-devlibswscale-dev python-pyaudio

·        $ cd ~

·        $ mkdir OpenCV && cd OpenCV

·        $ wgethttps://labfile.oss.aliyuncs.com/courses/672/2.4.13-binary.tar.gz

·        $ tar -zxvf 2.4.13-binary.tar.gz

·        $ cdopencv-2.4.13

·        $ cd build

·        $ sudo make install

  • 如果你想体验编译的整个过程,我也提供了一个一键安装的脚本文件,你可以通过下面的命令尝试。这个过程会非常漫长,期间可能还需要你做一定的交互确认工作。

·        $ cd ~

·        $ sudo apt-get update

·        $ wgethttps://labfile.oss.aliyuncs.com/courses/672/opencv.sh

·        $ sudo chmod 777 opencv.sh

·        $ ./opencv.sh

  • 如果你觉得有必要亲自尝试一下安装的每一步,可以按照下面的命令逐条输入执行,在实验楼的环境中大概需要两个小时。

·        $ sudo apt-get update

·        $ sudo apt-get install build-essentiallibgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev cmakepython-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-devlibopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-devlibx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extralibv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-devpython-pyaudio

·        $ wgethttps://github.com/Itseez/opencv/archive/2.4.13.zip

·        $ unzip 2.4.13.zip

·        $ cd 2.4.13

·        $ mkdir release && cd release

·        $ cmake -D WITH_TBB=ON -DBUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -DINSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_GTK=ON -DWITH_OPENGL=ON ..

·        $ sudo make

·        $ sudo make install

·        $ sudo gedit/etc/ld.so.conf.d/opencv.conf  

·        $ 输入 /usr/local/lib,按 Ctrl + X 退出,退出时询问是否保存,按 Y 确认。

·        $ sudo ldconfig -v

·        $ sudo gedit /etc/bash.bashrc

·        $ 在文件末尾加入

·        $ PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

·        export PKG_CONFIG_PATH

·         Ctrl + X 退出,按 Y 确认保存。

  • 检验配置是否成功。

·        $ python

·        >>> import cv2

·        >>> cv2.__version__

·        '2.4.13'

三、实验原理

实验实现了简易的视频通信工具,基于 OpenCV PyAudio,使用 TCP 协议通信,通信双方建立双向 CS 连接,双方均维护一个客户端和一个服务器端。在捕获视频信息后,根据用户指定的参数对画面做压缩并传输。

四、实验步骤

通过以下命令可下载项目源码,作为参照对比完成下面详细步骤的学习。

wgethttps://labfile.oss.aliyuncs.com/courses/672/ichat.zip

unzip ichat.zip

1.实现双向 C/S 连接

先为双方的通信设计 Server 类和 Client类,两个类均继承threading.Thread,只需要分别实现 __init____del__run方法,之后对象调用.start()方法即可在独立线程中执行run方法中的内容。首先Client类需要存储远端的IP

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python简易局域网聊天工具通常是一个简单的网络应用程序,利用Python的socket库和多线程或多进程技术来实现在同一局域网内的文本通信。常见的做法包括创建一个服务器端应用接收消息,然后转发给其他连接的客户端。 以下是一个基本的步骤: 1. **设置服务器**:使用`socket.socket()`创建套接字,并绑定到一个本地地址(如 `('localhost', 9000)`)。监听连接请求,当客户端连接时,为每个新连接开启一个新的线程或进程。 ```python import socket from threading import Thread server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('localhost', 9000)) server.listen() ``` 2. **处理客户端连接**:接受新连接并创建一个子线程或子进程来处理客户端的消息发送和接收。 3. **数据传输**:用循环读取客户端发送的数据,解析后广播给所有连接的客户端;同时将接收到的数据转发给相应的客户端。 4. **用户交互界面**:如果是在GUI环境中,可以使用Tkinter等库提供简单的用户界面,如输入框和显示区域,以便用户输入和查看消息。 ```python def handle_client(client_socket): while True: data = client_socket.recv(1024) if not data: break # 客户端断开连接 broadcast(data, client_socket) # 发送广播 def broadcast(data, exclude_socket=None): for client in clients: if client != exclude_socket: client.sendall(data) # 主程序中添加新的客户端连接到clients列表 ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值