在人工智能的机器视觉中,视频的无线传输非常重要。对于利用WiFi进行“无线视频传输”这块,很多学者已经用Java、C++、VB等语言实现了。这些编程语言在网络通信方面已经非常成熟,但是在图像处理方面就显得有点力不从心了。而MATLAB是由美国Mathwokrs[1]公司发布的一款非常强大的数据处理软件,其不仅编程语言简洁易懂。最重要的是具有强大的图像处理的工具箱。这使得它在图像处理方面具有绝对的优势。但是MATLAB是单线程编程,不像Java那样可以多线程编程,这使得它在网络通信方面处于劣势。因此,目前国内很少有学者用MATLAB编程WiFi无线视频传输。

本文通过设计服务器和客户端的算法,克服了MATLAB单线程编程的缺点,利用外置USB摄像头,通过TCP/IP网络编程,实现了“无线视频传输”。

一、MATLAB环境下USB摄像头的启用

MATLAB不仅具有超强的科学计算与数据可视化的能力,其也有大量的操作硬件的工具箱。这使得在MATLAB环境下,大大简化了USB摄像头的编程。在MATLAB环境下。USB摄像头的启用分为以下几个步骤:1)USB摄像头参数的查询;2)视频输入对象的创建;3)图像的预览显示;4)获取视频图像;5)关闭视频对象。

1) USB摄像头参数的查询
由于不同厂家生产的USB摄像头规格参数不尽相同,因此在使用USB摄像头之前,必须先查询摄像头的规格参数才能对其进行编程。MATLAB的图像获取工具箱提供了imaqhwinfo函数来获取PC上安装的摄像头硬件信息。其输入格式可为:info=imaqhwinfo,返回的参数有适配器的种类、MATLAB的版本、工具箱的名称以及工具箱的版本。

若PC不止安装了一种适配器,则可以查询PC上安装的某个适配器的参数,其输入格式为:info=imaqhwinfo(‘AdaptorsName’),其中AdaptorsName为所要查询适配器的名称。返回的参数有适配器dll文件绝对路径、适配器dll文件版本、适配器名称、设备ID号以及设备信息。

2)视频输入对象的创建
在获取USB摄像头的图像信息之前,先要创建一个视频输入对象,其目的是将摄像头与软件相连接。MATLAB中有函数videoinput来创建一个视频输入对象,其调用格式为: obj=videoinput(‘AdaptorsName’, DeviceID, ’Format’),其中AdaptorsName为适配器的名称,DeviceID为设备ID号,Format为视频采集格式。

3)图像的预览显示
创建视频输入对象后,需要获取摄像头的图像信息并新建窗口显示。MATLAB中有函数 preview,其调用格式为:hImage=preview(obj, hImage),其中obj为视频输入对象,hImage为视频预览窗口对应的句柄。

4)获取视频图像
对于要做图像处理,就要获取视频图像。MATLAB有函数getsnapshot,其调用格式:frame = getsnapshot(obj),其中obj为视频输入对象,frame是H×W×N的矩阵(H为图像高度,W为图像宽度, N为索线个数)。此时得到的图像数据并不是我们常见的RGB格式的数据,而是YCbCr格式的。如果要得到RGB格式的图像数据,还需通过函数ycbcr2rgb转换,其调用格式为:ImageRGB=ycbcr2rgb(ImageYCB),其中ImageYCB是直接捕获得到的YCbCr格式的图像数据,ImageRGB为RGB格式的图像数据。

5)关闭视频对象
每个设备的硬件资源都是有限的,为了不影响其他程序调用硬件资源,在不用了硬件资源时应立即关闭硬件资源。MATLAB中有函数delete,其调用格式为:delete(obj),其中obj为视频输入对象。

二、基于MATLAB的TCP/IP通信

TCP/IP是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义[3]。与UDP通信协议比较,TCP通信协议更可靠,通信质量更高。MATLAB中有TCP/IP编程的工具箱,且MATLAB编程是单线程编程,较Java等多线程编程语言更容易理解,代码更简洁。

在MATLAB编程中,TCP/IP通信编程可以分为创建TCP通信对象、开启TCP通信、发送/接收数据流、关闭TCP通信对象四个步骤。对于创建TCP通信对象,MATLAB中有函数tcpip。作为服务器,创建TCP对象的调用格式为TCPobj=tcpip(‘0.0.0.0’, com, ‘NetworkRole’, ‘server’),其中’0.0.0.0’表示本地IP地址,com表示端口号,'server’表示该对象作为服务器。作为客户端,创建TCP对象的调用格式为TCPobj=tcpip(IP, com,),其中IP为所要连接的服务器的IP地址,com为所要连接的服务器的端口号。对于开启TCP通信,MATLAB中有函数fopen,其调用格式为fopen(TCPobj),其中TCPobj为TCP通信对象。在作为服务器时,该代码被执行后一直停留在此代码处,直到有客户端连接到该服务器CPU才被释放。在作为客户端时,若此客户端能正常连接到服务器,程序则正常进行,否则程序报错。对于发送/接收数据流,MATLAB中有fread函数和fwrite函数,其调用格式分别为fread(TCPobj,num)和fwrite(TCPobj,Data),其中TCPobj为TCP通信对象,num为要接收数据流的个数,Data为要发送的数据流。对于关闭TCP通信对象,MATLAB中有fclose函数,其调用格式为fclose(TCPobj),其中TCPobj为TCP通信对象。

利用MATLAB编程,可以制作一个与远程服务器通信的具有GUI界面的客户端。对于局域网的通信,服务器和客户端一定要连接相同的路由器,否则服务器和客户端无法建立联系,更无法通信。

三、服务器与客户端的算法设计

因为MATLAB语言不像Java语言那样存在真正意义上的多线程编程,所以MATLAB要想设计出一个流畅的网络通信的程序必定少不了一些合适的算法。本节结合前两节的内容,重点讲述服务器和客户端的设计算法。本文的设计是以服务器为接收视频端,客户端为发送视频端。

1、服务器算法设计
本文设计的服务器是作为视频接收端,接收客户端发送的视频数据流,并显示。其具体算法为:
1)GUI界面初始化。服务器的GUI界面包括一个视频显示区,一个开启/关闭服务器按钮,一个开启/关闭接收按钮以及一个查询本机IP按钮。
2)开启服务器监听。开启/关闭服务器按钮设有回调函数,该函数在此按钮被按下时才被执行。当该按钮被按下奇数次时,服务器便进入监听状态,直到被客户端连接才跳出监听状态。
3)判断是否有客户端连接。服务器进入监听状态后便一直等待客户端连接,如没有客户端连接,则一直在等待,否则跳出监听状态执行下一步。
4)进入等待接收视频数据。当服务器被客户端连接后,便可以按下开启/关闭接收按钮,使程序进入等待接收视频数据的循环。
5)判断缓存区数据量是否等于一张图片的数据量。当程序进入等待接收视频数据的循环时,便一直判断缓存区数据量是否等于一张图片的数据量。若缓存区数据量等于一张图片的数据量则执行下一步接收数据,否则继续循环等待接收。此处的“一张图片的数据量”与USB摄像头的图片大小有关。
6)接收视频数据并显示。读取出缓存区的数据流,转换成图像数据并显示。
7)判断是否停止接收。接收完一轮数据后,若此时按下了开启/关闭接收按钮,便停止了接收数据,程序结束,否则回到步骤4),重复接收数据。
该服务器设计的算法流程图如下图所示:

2 客户端算法设计
本设计的客户端作为视频发送端,将外置USB摄像头捕获到的图像发送到所连接上的服务器,其具体算法如下:
1)GUI界面初始化。客户端的GUI界面和服务器差不多,也包括一个视频显示区,一个连接/断开服务器按钮以及一个开启/关闭发送按钮。
2)连接服务器。按下奇数次连接/断开服务器按钮会先后弹出输入两个对话框,只要分别输入服务器的IP地址和网络端口号,点击“确认”便可以连接正在监听的服务器。若成功连接服务器程序便可以继续进行,否则会报错。
3)开启USB摄像头并预览显示。按下奇数次开启/关闭发送按钮,便可以开启USB摄像头,并可以在视频显示区看到摄像头录的视频。
4)捕获视频图像。从视频流中每隔一定时间捕获一张图片作为要发送的图像数据。
5)发送视频图像。将捕获到的图像数据转成可以发送的一维数据流,然后将数据流发送到服务器。
6)判断是否停止发送。发送完完一张图片的数据后,若此时按下了开启/关闭发送按钮,便停止了发送数据,程序结束,否则回到步骤4),重复发送数据。
该客户端设计的算法流程图如下图所示:

四、实验测试结果

根据上文的算法,用MATLAB语言分别编写出服务器和客户端的GUI界面,如图6和图7所示。

图6为服务器GUI界面图,界面的上部分的图像位置为视频显示区,用于显示接收到的视频,下面三个分别为开启/关闭服务器按钮、开启/关闭接收按钮和查询本机IP按钮。图7为客户端GUI界面图,界面的上部分的图像位置也是视频显示区,用于预览显示USB摄像头视频,下面两个分别为连接/断开服务器按钮和开启/关闭发送按钮。

图8为视频传输现场测试图。最左边发绿光的是USB摄像头,左边的笔记本电脑作为发送视频的客户端,右边的台式电脑作为接收视频的服务器。视频的流畅度为5帧/秒,较为流畅。

参考文献
[1] Math Works, Lnc. Late-Breaking News for the 5.2 Product Family[M]. 1998: 3-9.
[2] 曹海燕,秦文华,周崇波.MATLAB环境下摄像头的启动方法综述[J].电子技术,2015.
[3] 冯先成,李德骏. 计算机网络及应用[M]. 武汉市:华中科技大学出版社, 2011.07
[4] 刘殿金,魏兵.基于Matlab和TCP/IP的测试系统开发及应用[J].信息与网络工程,2016.
[5] 徐斌,陈丽.基于Matlab GUI的照度测量仿真平台[J].光电子技术,2017.

作者:岚膺麒钿
日期:2020.4.1
咨询QQ:2498317094(加QQ时要注明是干什么的)

完整的代码在百度云中:https://pan.baidu.com/s/15emPl70FYceuiiKLikJknQ 提取码:9ucz

基于MATLAB的无线视频传输相关推荐

  1. 无线电能传输 wpt 磁耦合谐振 过零检测 matlab simulink仿真 pwm MOSFET,过零检测模块 基于二极管整流的无线电能传输设计

    无线电能传输 wpt 磁耦合谐振 过零检测 matlab simulink仿真 pwm MOSFET,过零检测模块 基于二极管整流的无线电能传输设计 基于同步整流的无线电能传输设计(含过零比较) 两个 ...

  2. 嵌入式linux无线显示器,基于嵌入式Linux的无线视频传输终端的设计与实现

    摘要: 近年来,多媒体技术与网络技术的迅速发展,以视频为主的多媒体通信成为时代的主题,受到人们越来越多的关注.同时,随着高速无线通信的发展,多媒体和无线通信这两个领域技术相互交叉,产生了新的技术--无 ...

  3. 基于NS-2的网络视频传输仿真平台的建立

    基于NS-2的网络视频传输仿真平台的建立   ----网络视频传输仿真平台的建立 摘 要 随着Internet和多媒体技术的迅猛发展, Internet已逐步从单一的数据传送网向数据.语音.图像等多媒 ...

  4. 基于内容的自适应视频传输算法及其应用

    本文内容来自LiveVideoStack线上分享第四季第二期,由湖北经济学院副教授,胡胜红博士为大家介绍如何基于内容分析技术,从用户需求角度标注视频流重要性级别,构建自适应流传输策略,实现语义级QoE ...

  5. matlab多径信道模型,基于matlab的无线多径信道建模与仿真分析

    基于matlab的无线多径信道建模与仿真分析 基于MATLAB的无线多径信道建模与仿真分析 摘 要:对于无线通信, 衰落是影响系统性能的重要因素, 而不同形式的衰落对于信号产生的影响 也不相同.本文在 ...

  6. [转]步入成熟的无线视频应用 英特尔WiDi无线视频传输研究

    当高清电视普及后,有很多用户都在纠结这样一个问题:笔记本连接高清电视看高清电影虽然效果很爽,但相当麻烦!需要连线不说,还得不断跑到电视面前过去进行播放.暂停或停止操作,很累! 而经历了数代发展的英特尔 ...

  7. 无线电能传输 wpt 磁耦合谐振 过零检测 基于二极管整流的无线电能传输设计 基于同步整流的无线电能传输设计

    无线电能传输 wpt 磁耦合谐振 过零检测 matlab simulink仿真 pwm MOSFET,过零检测模块 基于二极管整流的无线电能传输设计 基于同步整流的无线电能传输设计(含过零比较) 两个 ...

  8. matlab搭建多径模型,基于MATLAB的无线多径信道建模与仿真分析.docx

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab 基于MATLAB的无线多径信道建模与仿真分析.do ...

  9. 基于matlab的2ask频带传输系统仿真与性能分析,基于MATLAB的2ASK频带传输系统仿真与性能分析汇总...

    基于MATLAB的ASK频带传输统仿真与性能 分析 学生姓名:xxx 指导老师:xx 摘要本课程设计主要运用MATLAB集成环境下的Simulink仿真平台进行ASK频带传输系统仿真,并把运行仿真结果 ...

  10. 【CV/Matlab系列】基于matlab GUI的视频监控界面

    DATE: 2020.10.18 updated at 2022.04.23: 界面上增加报警提示功能 文章目录 1.前言 2.视频监控界面 2.1.初始化界面 2.2.人脸检测和计数功能 2.3.监 ...

最新文章

  1. nginx 配置并发数限制
  2. 矩阵理论及其应用_有限元分析ansys理论与应用视频第三课 绪论:直接法矩阵求解...
  3. 基于TensorFlow开发人脸识别
  4. VMware Workstation 12新建虚拟机
  5. 【各种信噪比联系与区别详解】实信号、复信号Es、N0、符号信噪比EsN0、带内信噪比、比特信噪比EbN0、SNR的含义及关系详解
  6. 前端学习(1697):前端系列javascript之原型
  7. 采购模板html5,蓝色的采购信息管理系统手机界面wap模板
  8. python搭建selenium_自动化测试之路3-selenium3+python3环境搭建
  9. #研发解决方案#共享能力的数屏
  10. Can you find it(HDU-5478)
  11. keepalived mysql双主架构图_MySQL数据库架构和同步复制流程
  12. Codeforces Round #772 (Div. 2) D. Infinite Set (动态规划+思维)
  13. ubuntu 截屏_零基础学习树莓派_更新+截屏+休眠
  14. 推荐一款超好用的vue的markdown 编辑器
  15. 职称计算机 将计算机broad_1下的e盘映射为k盘网络驱动器,职称计算机考试(网络基础)试题及答案操作..doc...
  16. 利用MEGA做序列比对
  17. React 实现 PDF 文件在线预览 - 手把手教你写 React PDF 预览功能
  18. 搞写商业计划书的要点
  19. 微信小程序不能使用本地图片当背景图片的解决方法
  20. 超微服务器如何查看服务器信息,超微服务器

热门文章

  1. Html数组下标访问帧,javaScript array(数组)使用字符串作为数组下标的方法
  2. cmd窗口命令行上移下移_微软新版命令行界面:Windows Termina...
  3. 【CSDN最全java项目实战500篇】练手/项目经验/毕设刚需
  4. CSDN重推软件下载频道 软件发布又有新阵地
  5. 100个2022实用微信小程序源码分享
  6. 编程软件哪个比较好用?
  7. 手机在线编程软件Anycodes
  8. BulkRen文件批量改名工具的一点点使用心得
  9. 【组合数学】递推方程 ( 有重根下递推方程通解结构 | 线性无关解 | 有重根下的通解 | 有重根下的递推方程求解示例 | 递推方程公式解法总结 ) ★
  10. 大学计算机一级准考证打印,河海大学计算机等级考试准考证打印入口