精华内容
下载资源
问答
  • 尤其这两年人工智能-计算机视觉方向在安全生产、工业质检、智能硬件等应用场景中在广泛应用,这些应用场景往往对性能及数据安全有苛刻的要求,故而在边缘计算、移动终端、嵌入式终端的产品落地也随之进入白热化阶段...

    随着深度学习技术渗透入越来越多领域,人工智能在边缘侧的大规模应用被提上日程。尤其这两年人工智能-计算机视觉方向在安全生产、工业质检、智能硬件等应用场景中在广泛应用,这些应用场景往往对性能及数据安全有苛刻的要求,故而在边缘计算、移动终端、嵌入式终端的产品落地也随之进入白热化阶段。

    终端落地很重要的两个指标依旧是推理时间存储开销。网络模型压缩的需求越来越大,模型量化应运而生。本篇我们将探讨模型量化的概念原理、优缺点及EasyDL-EasyEdge模型量化的实现方法。

     

    什么是量化

    所谓量化,就是把模型参数从浮点数转换成整数的一种模型压缩技术。工业界量化一般指int8,8表示存储一个权重元素所需的位数。把fp32的值经过线性变换转换成int8,网络中耗时的卷积层计算就成了整数的计算,运算量将大大降低,int8 使用的比特数只有 fp32的25%,模型推理所占的内存也随之降低。

     

    为什么需要量化


    用我们最日常的边缘设备——手机来举个例子。

    目前的手机一般配备4G或6G内存来支持程序运行,即便部署相对较小的ResNet-50网络来对单张图片进行分类,运行一次就至少需要98M内存和3.8GFLOPs的计算量。而图像相关的应用程序通常需要实时处理摄像头接入的视频图像数据,这意味着至少30 FPS,那么除了内存容量和CPU计算的问题,还会存在内存带宽问题。模型在每次预测时都会使用模型的权重,因此,运行模型就需要3GB/s 的内存带宽。如果后台同时运行多个程序,甚至都可以明显感受到手机变得卡顿。并且,CPU的高速运行又会带来电池的飞速消耗。

     

    EasyDL-EasyEdge模型量化

    EasyDL-EasyEdge是百度推出的端计算模型生成和服务平台,可基于多种EasyDL或BML训练所得、或者用户本地上传的各类深度学习框架、网络结构的模型,快捷生成端计算模型及封装SDK,已经适配15种AI芯片与4大主流操作系统。EasyDL-EasyEdge后台在生成端计算模型过程中,会根据用户的选择进行模型的低比特量化操作,在不降低模型精度或者损失略微精度的前提下,减小模型的体积,提升模型的运行速度。

    EasyDL-EasyEdge量化从算法上可以分为训练后量化和量化训练,根据目标端模型的不同又可以分为PaddleSlim、OpenVINO、NNIE和TensorRT的量化

    量化是从r(fp32)到q(int8)的线性映射。

    r和q的关系如下:

    量化参数:

    •         缩放因子(scale):S

    •         偏移量(offset):Z

    如何确定缩放因子和偏移量的值?目前EasyDL-EasyEdge采用的方法有:

    •         abs_max: ±abs_max 映射为±127,偏移量Z恒为0(PaddleSlim量化)

    •         min_max: min映射为-127, max映射为127,偏移量需要计算(OpenVINO量化)

    abs_max映射说明示意图

    min_max映射说明示意图

     

    EasyDL-EasyEdge量化采用了训练后量化量化训练两种算法。

    •         训练后量化:固定权重值,将权重提前量化, 权重进行的是逐通道量化——以通道为单位,每个channel单独使用一组S和Z;使用少量校准数据,在校准过程中观察模型的行为来计算激活张量的比例因子和偏差。整个量化过程最快只需2分钟。

    量化训练:权重需要训练学习(Fine-Tune),采用量化训练得到的int8模型在效果上通常会比训练后量化的模型更好,但量化过程需要的时间也会稍微长一些。

    目前在EasyDL-EasyEdge的多种部署方式里均可以获取量化加速模型的服务。比如在本地部署里,选择通用小型设备获取ARM加速版本或选择服务器获取CPU加速版等等。

    在设备上使用量化后的模型,会发现设备功耗更低、推理更快。比如使用EasyDL经典版高精度分类模型,在通用 x86 CPU 上单张图片推理时间从 128ms 缩短至 30ms,高性能分类模型单张图片推理时间从 99ms 缩短至 15ms,性能大幅提升。

    x86 CPU版SDK量化前后性能数据对比表

     

    而整个生成量化模型的过程你都无需费神,只要交给EasyDL-EasyEdge!快来一起体验量化带来的变化吧!

    EasyDL零门槛AI开发平台与全功能AI开发平台BML也均集成了EasyEdge的全部服务,端到端实现从模型开发到模型量化,输出离线SDK的一站式开发流程,可便捷获取高精度高性能的离线服务。

     

    文章来源:https://ai.baidu.com/forum/topic/show/980958

    展开全文
  • 这款模板使用范围极广,不仅仅局限于一类型的企业,你只需要把图片和产品内容, 换成你的,颜色都可以修改,改完让你耳目一新的感觉! 自带最新的手机移动端,同一个后台,数据即时同步,简单适用! 原创设计、手工...
  • 企业产品宣传类CSS模板,这套模版为通用型,没有压缩密码,解压后直接套用,非常实用。
  • 将总提前期方差增加为决策变量, 并把赶工成本概念引入随机提前期波动(方差)压缩分析, 建立了循环取货下基于随机提前期波动压缩且含车载量约束的多供应商多产品库存模型, 讨论如何合理压缩生产和运输过程中的提前期...
  • 压缩包包含21套Axure模板,包括pdf文档和Axure原型,可供大家学习使用
  • 1.首先请将下载的安装包解压缩到本地 2.打开upload目录,找到index.html文件,用记事本打开,找到以下代码 网站首页 - 某某教育培训学校 修改网站的标题、关键字和描述 3.将解压并修改好的文件到服务器 4.打开...
  • 1 前言. 1 1.1 研究背景. 1 1.2 国内外发展概况.... 1.3 论文的主要研究内容....2 系统总体方案设计....2.1 系统总体框图....2.2 图像采集与编码模块方案介绍与...2.2.3 ARM+视频压缩芯片+视频采集芯片. 4 2.2.4 ARM+T26...

    1  前言. 1

    1.1 研究背景. 1

    1.2 国内外发展概况. 1

    1.3 论文的主要研究内容. 2

    2  系统总体方案设计. 3

    2.1 系统总体框图. 3

    2.2 图像采集与编码模块方案介绍与论证. 3

    2.2.1 DSP+视频采集芯片. 3

    2.2.2 DSP+ARM+视频采集芯片. 4

    2.2.3 ARM+视频压缩芯片+视频采集芯片. 4

    2.2.4 ARM+T264编码库或FFmpeg x264编码库. 4

    2.2.5 ARM+MJPG-streamer视频服务器. 5

    2.3 音频采集与编解码模块. 6

    2.3.1 音频采集与编码方案设计. 6

    2.3.2 音频编程接口选择. 6

    2.4 电力线载波通信模块. 6

    2.4.1 电力线载波通信方案设计. 6

    2.4.2 调制解调芯片选择. 7

    2.5 嵌入式平台介绍及环境搭建. 7

    2.5.1 硬件平台介绍. 7

    2.5.2 平台软件环境搭建. 9

    2.6 本章小结. 11

    3  视频采集与编解码设计. 12

    3.1 视频模块系统设计. 12

    3.1.1 视频概述. 12

    3.1.2 V4L2标准编程框架. 12

    3.1.3 视频模块系统框图. 12

    3.2 MJPG-streamer视频流服务器. 13

    3.3 MJPG-streamer的移植. 13

    3.3.1 JPEG库移植. 13

    3.3.2 MJPG-streamer移植. 14

    3.4 MJPG-streamer主程序处理流程. 15

    3.5 视频服务器登陆设计. 16

    3.5.1 Boa服务器概述. 16

    3.5.2 Boa服务器功能. 16

    3.5.3 Boa服务器移植. 16

    3.5.4 CGI简介. 17

    3.5.5 HTML简介. 18

    3.5.6 JavaScript简介. 19

    3.6 本章小结. 20

    4  音频采集与编解码设计. 21

    4.1 音频传输协议介绍. 21

    4.2 音频基础介绍. 21

    4.3 音频传输系统设计. 25

    4.3.1 音频模块系统框图. 25

    4.3.1 音频缓存区设计. 25

    4.4 本章小结. 26

    5  电力线载波通信设计. 27

    5.1 电力线通信技术概述. 27

    5.2 电力载波通信系统设计. 27

    5.3 通信模块设计. 31

    5.3.1 INT5500CS工作模式选择. 31

    5.3.2 以太网模块设计. 31

    5.3.3 用户接口协议. 32

    5.4 本章小结. 34

    6  样机系统功能测试. 35

    6.1 系统测试准备. 35

    6.1.1 音频测试. 35

    6.1.2 视频测试. 35

    6.1.2 电力线载波通信测试. 35

    6.2 系统测试. 35

    6.2.1 音频功能测试. 35

    6.2.2 视频功能测试. 36

    6.2.3 电力线载波通信功能测试. 38

    6.2.4 联机测试. 38

    6.3 总结与展望. 40

    参考文献. 41

    致  谢. 42

    附  录. 43 

     

     

    前言

     

    1.1 研究背景

    随着电力线通信(Power Line Communication)网络技术的发展以及音视频编解码技术的不断完善,使得音视频采集与传输系统深入到人们生活的方方面面。在公共安全领域,音视频监控系统是安全技术防范产业发展的重要基础,为相关人员处理突发事件提供直接证据;在家庭生活领域,音视频采集与传输系统可以方便户主实时监测家庭环境,同时也使得父母时刻关注婴儿成长变成可能;在科技发展与研究领域,使得人们可以在不进入恶劣环境的情况下采集环境音视频数据参数并且为科技研究提供资料。

    近几年PLC网络技术快速发展,传输带宽以及抗干扰的能力不断加强。由最初的FSK调制技术发展到如今流行的扩频技术与OFDM技术。传输带宽由几十Kbps到几百Mbps不等,部分小区已经开始PLC网络的试点,并且无需重新布线,随着关键技术的解决,电力线上网在逐步走进人们的生活。

    综上所述,本课题针对需求,提出了具体的解决方案,将音频、视频和电力载波通信结合在一起,具有良好的实用价值和研究价值。

    1.2 国内外发展概况

    21世纪以来,智能化建筑迅速发展,随着高科技电子产品的不断更新与完善,极大促进了技防产品市场的发展。中国安防产业与家庭环境监测技术迅速发展,随着科技进步,安防行业领域仍将不断扩大,目前已经发展到了视频监控、出入口控制、入侵报警、防爆安检等十几个大类。

    互联网技术已经渗透到人们生活的方方面面,同时随着各种新技术的大量涌现,作为一种崭新的技术,电力载波通信开始逐步走进人们的视野,该技术通过将载有数据信息的高频调制信号加载于电流,无需重新布线,利用已有的低压配电网络即可完成数据传输和信息交换。调制方式由最初的调频技术发展到如今流行的OFDM技术,传输带宽也随之达到几百Mbps,使得宽带电力线上网成为可能。电力载波通信技术已经成为国内外公司和科研单位研究的热点,而国外对电力载波通信的研究起步较早,并且制定了相应的协议规范,一些国家和地区已经开始尝试将电力线通信应用于室内组网和高速数据接入。将覆盖广泛的电力网用于网络通信,不仅无需建设新的通信网络、节约资源和成本,而且能充分发挥电力资源优势,实现电话、数据、视频和电力的有效结合,具有广阔的应用市场和前景。

    1.3 论文的主要研究内容

    嵌入式音视频采集与传输系统需要实现的主要内容是研究音视频编解码以及电力载波通信。本系统通过通用USB摄像头获取环境视频数据,搭建好的嵌入式服务器将采集到的数据进行编码压缩生成数据流,并通过网络传输至PC机,在终端显示图像数据。拾音器将采集到的音频数据组成RTP包发送至网络,在终端播放音频数据。为了深化本设计的实用性,采集到的数据首先通过OFDM调制进入到PLC网络,经过解调后发送至远端PC机。本次设计需要了解ARM体系基本架构,熟悉嵌入式Linux环境搭建过程;学习音视频编解码基本知识;学习流媒体相关知识;了解宽带电力线传输基本理论,熟悉国内外电力线网络发展概况;熟悉嵌入式网络服务器搭建的基本方法,了解网页制作等基本知识。

    2  系统总体方案设计

    2.1 系统总体框图

    本系统涉及到音视频采集、音视频编码、电力线载波通信、音视频解码和终端显示几大部分,如图2-1所示:

     

    图2-1  音视频采集与传输系统总体框图

     

    2.2 图像采集与编码模块方案介绍与论证

    2.2.1 DSP+视频采集芯片

    该方案属于硬件压缩,使用视频采集芯片完成图像A/D的转换,通过DSP芯片完成数字图像数据的存储和编码压缩,典型方案如图2-2所示:

     

    图2-2 视频采集与编码方案一

     

    2.2.2 DSP+ARM+视频采集芯片

    该方案属于硬件压缩,视频采集芯片完成模拟图像A/D的转换,DSP实现数字图像压缩编码,ARM实现系统控制和网络传输。该方案增加了嵌入式处理器,可以运行操作系统,增加了系统灵活性,典型方案如图2-3所示:

     

    图2-3  视频采集与编码方案二

     

    2.2.3 ARM+视频压缩芯片+视频采集芯片

    该方案属于硬件压缩,经过转化的数字视频流由专用编码芯片编码,ARM控制图像数据存储和传输,典型方案如图2-4所示:

     

    图2-4 视频采集与编码方案三

     

    2.2.4 ARM+T264编码库或FFmpeg x264编码库

    该方案属于软件压缩,ARM微处理器通过V4L接口从摄像头获取视频数据,调用编码库对数据编码,通过以太网传输,但T264编码库处理视频格式有限,灵活性较差。相比于T264编码库,FFmpeg x264功能强大,支持更加广泛。典型方案如图2-5所示:

     

     

    图2-5 视频采集与编码方案四

     

    2.2.5 ARM+MJPG-streamer视频服务器

    该方案属于软件压缩,开源工程MJPG-streamer是以TCP/IP协议为基础,结合v4l标准接口,实现的视频流服务器。它首先通过v4l标准接口采集图像数据,并将采集到的数据编码压缩后以流的形式传输至终端浏览器实时播放显示,该服务器也可以利用某些摄像头的硬件压缩功能来降低服务器CPU的软件开销,典型方案如图2-6所示:

     

    图2-6 视频采集与编码方案五

     

        相比于软件压缩,硬件压缩效率较高,尤其是方案三,灵活性以及编码效率都要比其他方案更具有实用价值。但本系统涉及研究内容较多,成本以及开发周期有限,因此采用方案五,经实验测试完全可以满足本次设计要求。

    2.3 音频采集与编解码模块

    2.3.1 音频采集与编码方案设计

    该部分设计需要实现音频数据的实时有效传输,发送端首先将拾音器采集到音频数据进行ADPCM编码,编码后的数字语音信号按RTP/UDP/IP等相关协议进行网络组包并将数据发送到局域网,接收方将接收到的语音信号实时解码播放。方案设计如图2-7所示:

     

    图2-7 音频采集与编码方案

     

    2.3.2 音频编程接口选择

    Linux系统为用户操作音频设备提供了统一的编程接口,在Linux系统中,先后出现了两种音频框架:OSS(Open Sound System)和ALSA(Advanced Linux Sound Architecture)。

    OSS可移植性好,但具有声卡独占问题,闭源;ALSA具有声卡共享的特性,兼容OSS接口,开源。2.6版本的Linux内核用ALSA代替了OSS。但为了兼容以前的程序,ALSA提供OSS模拟。

    综上所述,ALSA接口优点明显同时由于本次设计系统版本不支持OSS接口,因此采用ALSA接口。

    2.4 电力线载波通信模块

    2.4.1 电力线载波通信方案设计

    编码后的音视频数据首先经过调制进入电力线通信网络,接收端解调后传输至终端。方案设计如图2-8所示:

     

    图2-8 电力线载波通信方案

     

    2.4.2 调制解调芯片选择

       由于音视频数据量较大,使用FSK调制和扩频技术都不能满足要求,下面仅对OFDM调制芯片做对比选择,如表2-1所示:

       表2-1  芯片对比

    公司名称

    芯片

    芯片速率

    执行标准

    Intellon

    (目前已被高通收购)

    INT5200

    14Mbps

    HomePlug1.0

    INT5500

    85Mbps

    HomePlug1.0+

    INT6000

    200Mbps

    HomePlug1.0 AV

    Maxim

    MAX2986

    14Mbps

    HomePlug1.0

    Qualcomm Atheros

    QCA6410

    200Mbps

    HomePlug1.0 AV

     

    图像采集以320*240个像素点,每个像素点16位,每秒20帧为例,传输带宽大概需要23Mbit/s,设定本次设计压缩比为10:1,则视频传输所需带宽为2.3Mbit/s;语音采集以44KHz采样频率,每个采样点16位为例,传输带宽需要704Kbit/s。

    从通信速率角度来看以上芯片都可以满足本次设计要求,但考虑到电力线网络的复杂性且考虑到PLC通信芯片的传输距离与通信速率成反比关系,折中选择INT5500芯片。

    2.5 嵌入式平台介绍及环境搭建

    2.5.1 硬件平台介绍

    本次样机设计核心处理器选用三星公司的32位RISC微处理器S5PV210,该处理器基于ARMv7架构,CPU采用Cortex-A8内核,芯片运行主频高达1GHz。该芯片的组成如图2-9所示:

     

    图2-9 S5PV210结构框图

     

    网卡采用以太网芯片LAN9220设计,该芯片具有支持10/100Mbps、小型化、电压从1.8V到3.3V可变和CPU开销小等特点。该芯片支持内存缓冲同时具有与SRAM类似的高性能从接口,并且集成以太网数据链路层和物理层接口。LAN9220芯片连接电路如图2-10所示:

     

    图2-10 LAN9220连接电路图

     

    声卡采用支持AC97接口的WM9713芯片,该芯片内部集成AD、DA控制器和触摸屏处理的部分功能,芯片通过内部有64个寄存器进行配置。WM9713芯片连接电路如图2-11所示:

     

    图2-11 WM9713连接电路图

     

    2.5.2 平台软件环境搭建

    安装交叉编译器:

    1. 建立目录

    #mkdir –p/usr/local/arm

    2.  解压源码

    #tar jxvf arm-linux-gcc-4.3.2.bz2–C /usr/local/arm

    3. 修改环境变量

    #sudo vim ~/.bashrc (打开脚本并在最后加入下面这行)

    exportPATH=/usr/local/arm/4.3.2/bin:$PATH

    #source ~/.bashrc (重新启动脚本使环境变量设置立即生效)

    配置编译u-boot:

    1.  解压源码

    #tar zxvf unsp210_u-boot.tar.gz

    2. 进入解压后的文件目录中

    #cd unsp210_u-boot

    4.  编译前清除旧的配置文件

    #make distclean

    5.  生成新的配置文件

    #make unsp210_config

    6.  编译生成u-boot 可执行文件

    #make

    在当前目录下会生成一个u-boot.bin 的文件

    7.  将tools 目录下生成的mkimage 文件拷贝到/bin 目录中,后面用于制作u-boot 所需格式的内核

    #cp u-boot/tools/mkimage /bin

    配置编译内核:

    1.  解压源码

    #tar zxvf unsp210_linux_2.6.35.tar.gz

    2.  进入解压后的文件目录

    #cd unsp210_linux_2.6.35

    3.  清除旧的内核配置文件

    #make distclean

    4.  重命名内核配置文件

    #cp config_sunplusedu_20130604 .config

    5.  配置内核

    #make menuconfig

    6.  生成内核镜像文件

    #make 或make zImage

    在/arch/arm/boot 下会生成zImage 文件

    yaffs 根文件系统的制作:

    yaffs 格式的根文件系统是可读可写的文件系统,没有经过压缩

    1. 解压源码

    #tar zxvf rootfs_gtk.tar.gz

    1. 给mkyaffs2image 添加可执行权限

    #chmod +x mkyaffs2image

    1. 拷贝mkyaffs2image 文件到/bin 下

    #sudo cp mkyaffs2image /bin

    1. 生成根文件系统镜像

    #mkyaffs2image rootfs rootfs.yaffs

    镜像烧写方法

    1.  首先确保网线连接正确,电源线,串口线接触良好;

    2.  上电使用开发板平台进入U-boot 命令行模式;

    3.  输入命令:print 会有下面的提示信息:

     

    4.  根据PC机IP对开发平台进行IP设置"serverip(windows'sIP)" and "ipaddr(开发平台的IP)";

    5.  分别使用的命令是:setenv serverip172.20.223.XX(windows IP) 或10.221.X.XX(windows IP)

    setenv ipaddr 172.20.223.XX(开发板的IP)或10.221.X.XX(开发板的IP)

    6.  保存刚才对硬件平台的设置:使用命令进行设置:saveenv;

    7.  使用ping 命令查看PC机和A8平台的网络是否连通:(可在开发板上ping PC 机);

    #ping *.*.*.(windows 的IP 地址)

    8.  打开PC机端tftp服务器tftpd32.exe 文件,并将编译好的u-boot、内核镜像和文件系统拷贝到tftp服务器目录;

    9.  然后输入命令:update 会有下面的提示信息:

     

    10.如果烧写U-boot,可以输入命令:update boot u-boot.bin

    如果烧写kernel,可以输入命令:update kernel zImage

    如果烧写rootfs,可以输入命令:update yaffs rootfs.yaffs

    如果烧写三个镜像,可以输入命令:updateimage

    2.6 本章小结

    本章主要对系统实现方案进行了论证和选择,在视频编码部分主要对硬件和软件压缩的优缺点进行了比较和论证;在音频编码部分主要对相关协议接口进行了选择和论证;在电力线载波通信部分对相关芯片进行了比较和选择。最后详细介绍了嵌入式软件环境搭建的相关内容,本章确定了课题各模块的总体设计方案。

     

     

     

     

    视频采集与编解码设计

    3.1 视频模块系统设计

    3.1.1 视频概述

    视频是连续渐变的静态图像沿时间轴依次更换显示而形成的画面。根据视觉暂留原理,图像帧率变化超过24次/s时,人眼将无法辨别单幅的静态画面,此时就会产生平滑连续的视觉效果。其中帧率是指每秒播放静态画面的数量,单位是fps,帧率越高视频也会越流畅、越逼真,典型的帧率为24fps。

    3.1.2 V4L2标准编程框架

    目前,V4L2已经成为Linux内核中音视频的标准编程框架。通过V4L2编程框架,内核为应用程序提供了访问音、视频设备的统一接口。V4L2支持多种设备,其主要用于音频的采集,视频的输入及输出。在Linux中,一切设备都可以通过文件的方式来操作,而通过V4L2标准接口操作视频设备文件,如标准USB摄像头,就可以实现对硬件视频采集设备的访问和读写操作。

    V4L2编程步骤:

    1)  打开图像采集设备(open);

    2)  设置图像采集设备的相关参数(ioctl);

    3)  读图像采集设备(read、ioctl);

    4)  关闭图像采集设备(close)。

    3.1.3 视频模块系统框图

    视频采集模块涉及到图像采集、流媒体服务器、Boa服务器和网页终端设计相关内容。该模块具体工作过程如下:首先Boa服务器得到浏览器请求的密码验证信息并将该信息传递给CGI处理程序,CGI程序验证信息正确后回送信息实现监控页面跳转登录,然后流媒体服务器将USB摄像头采集到的图像数据进行编码处理后发送到客户端浏览器实时显示。视频模块系统框图如图3-1所示:

     

    图3-1 视频模块系统框图

     

    3.2 MJPG-streamer视频流服务器

    该开源视频流服务器可以从标准USB摄像头获取图像,并将图像数据编码后传输到终端显示。此服务器适合应用于基于IP协议的网络中,从摄像机中获取图像,并将编码后生成的JPEG格式的图像发送至终端浏览器播放显示,例如Firefox浏览器。该服务器来源于uvc_streamer,是专为在CPU和RAM上存在资源限制的嵌入式设备而开发的,兼容Linux-uvc的摄像机可以直接生成JPEG数据。

    该视频流服务器使用C语言进行开发,源代码结构清晰,采用模块化的设计方法,支持不同的硬件平台。用户可以根据产品需求,自行添加修改或选择所需模块。该视频流服务器最主要的组件是输入和输出组件,MJPG-streamer组件体系结构如图3-2所示:

     

    图3-2 MJPG-streamer组件体系结构图

     

    3.3 MJPG-streamer的移植

    3.3.1 JPEG库移植

    MJPG-streamer的移植需要jpeg库,因此首先移植jpeg库。

    1)解压源码包

    #tar xvf  jpegsrc.v8c.tar.gz

    2)配置源码

    #./configure--prefix=/home/edu/share/video/jpeg  --host=arm-linux

    #cd  jpeg-8c

    3)编译和安装

    #make

    #make install                                                         

    4)拷贝库到A8平台根文件系统中

    #cp  /home/edu/share/video/jpeg/lib/libjpeg.so.*   <A8>/lib  -rfa

    3.3.2 MJPG-streamer移植

    1)解压源码包

    #tar  xvf  mjpg-streamer-r63.tar.gz
    2)修改源码

    #cd  mjpg-streamer-r63

    修改plugins/input_uvc/Makfile

    修改

    CFLAGS +=-O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC


    CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC

    -I/home/edu/share/video/jpeg/include

    修改

    $(CC)$(CFLAGS) -ljpeg -o $@ input_ uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo

    $(CC)$(CFLAGS) -ljpeg -L/home/edu/share/jpeg/lib -o $@ input_uvc.c v4l2uvc.lo

    jpeg_utils.lodynctrl.lo

    3)编译

    #make CC=arm-linux-gcc

    4)复制应用程序和库到A8平台根文件系统中

    #mkdir  <A8>/usr/mjpg-streamer

    #cp  *.so <A8>/usr/mjpg-streamer/ -rfa

    #cp  mjpg-streamer <A8>/usr/mjpg-streamer/

    #cp  www   <A8>/usr/mjpg-streamer/  -rf

    5)进入MJPG-streamer目录在开发板运行

    注:必须先插入usb摄像头

    #./mjpg_streamer -i "./input_uvc.so -y -r 320*480" -o  "./output_http.so

    -w ./www"

    默认端口8080,默认设备/dev/video0,必须设置输出分辨率

    Input_screen.so

    6)在源码目录下有start.sh,这个脚本里有一些MJPG-streamer的使用方法及说明,

    可以执行start.sh脚本运行视频服务器,首先注释掉所有行,然后添加以下几行:

    export LD_LIBRARY_PATH="$(pwd)"

    WEBSERVER=.

    $WEBSERVER/mjpg_streamer-o  "$WEBSERVER/output_http.so -p8000 -w

    $WEBSERVER/www" -i"$WEBSERVER/input_uvc.so -y -r 320*480 -d /dev/video0"

    3.4 MJPG-streamer主程序处理流程

    主程序流程如图3-3所示:

     

    图3-3 MJPG-streamer主程序流程图

     

    3.5 视频服务器登陆设计

    3.5.1 Boa服务器概述

    Boa是一款可以运行在Linux下的服务器,具有源代码开放、小巧高效的特点。该服务器适合于对资源限制较高的嵌入式系统,作为一款单任务web服务器,Boa只能依次完成用户请求,但它可以为CGI程序创建进程来实现连接请求,通过这种方式可以较大节省系统资源。

    3.5.2 Boa服务器功能

    Boa服务器可以为网页终端提供数据交互,Boa的工作流程主要包括:

    1.由于Boa是一款基于TCP/IP协议的服务器,因此首先需要创建TCP网络套接字、绑定端口、启动侦听等过程,同时也需要对一些环境变量进行相应的初始化,之后循环等待接收客户端的连接请求;

    2、客户端浏览器发出连接请求,Boa网络服务器接收到请求;

    3、服务器通过CGI程序分析客户端请求,同时根据请求做出相应的处理,并向客户端发送相应的响应信息;

    4、完成客户端和服务器的数据交互,关闭相应的TCP套接字连接,释放相关资源。

    Boa服务器根据客户端请求方法的不同,做出不同的响应:

    1、当服务器检测到客户端浏览器的请求方法为HEAD时,则Boa服务器直接向客户端返回响应首部;

    2、当服务器检测到客户端浏览器的请求方法为GET时,则Boa服务器首先返回响应首部, 之后将读出的URL文件信息发送给浏览器;

    3、当服务器检测到客户端浏览器请求方法为POST时,则通过CGI程序处理Boa服务器接收到的表单信息,处理完表单信息后再通过Boa服务器将相关信息传送至浏览器,Boa服务器实现的过程和TCP/IP协议一致。

    3.5.3 Boa服务器移植

    1、编译boa程序

    (1) tar zxvf boa-0.94.13-src.tar.gz  解压

    (2) cd boa-0.94.13-src

    (3) cd ./src

    (4) ./configure

    (5) make clean

    (6) make

    2、修改配置文件boa.conf

    (1) 建立boa.conf目录, 并复制boa.conf到建立的目录下

    (2) 进入存放boa.conf的目录并修改其中的boa.conf文件

    (3) 修改Usernobody 为 User 0 ; 修改Groupnogroup 为 Group 0

    (4) 修改ErrorLog选项和AccessLog选项为:

    ErrorLog /home/boa/log/error_log

    AccessLog /home/boa/log/access_log

    (5) 设置html文件目录:DocumentRoot  /home/boa/www

    (6) 设置默认首页:DirectoryIndex homepage.html

    (7) 设置ScriptAlias选项为:

    ScriptAlias /cgi-bin/  /home/boa/www/cgi-bin/

    3、修改Makefile文件:

    将:

    CC = gcc

    CPP = gcc -E 

    改为:

    CC = arm-linux-gcc

    CPP = arm-linux-gcc -E

    Make clean;make即可。

    4、拷贝PC上/etc/mime.types文件到设置好的mime.types文件目录下

    3.5.4 CGI简介

    1)CGI概述

    CGI可以处理浏览器的输入请求,本设计中CGI程序运行在Boa服务器上,服务器将接收到的客户端请求传送给CGI程序进行处理,处理结束后,CGI程序又通过服务器将相关信息返回给客户端。CGI简单地讲是个运行在Web服务器上的程序,由浏览器的输入触发。 这个程序在客户端浏览器、服务器端其他应用程序和Boa服务器之间起到桥梁作用。 网络上很多工具例如搜索引擎、留言板、BBS等都是CGI程序。

    CGI是用来沟通HTML表单和服务器端程序的接口(interface)。如果一种语言支持标准输入和输出,可以设置环境变量,就可以实现CGI程序。

    2)CGI处理步骤

    1、通过Internet把用户请求送到服务器。

    2、服务器接收用户请求并交给CGI程序处理。

    3、CGI程序把处理结果传送给服务器。

    4、服务器把结果送回到用户。

    3)编写CGI

    C语言具有标准输入和输出,并且可以设置环境变量,因此本次设计可以使用C语言来实现CGI程序。

    1、CGI程序的输出:

    类似于Linux编程中的描述符重定向,本设计使用C语言编写的CGI程序的标准输出重定向到了客户端浏览器,因此在Boa服务器终端上不会输出任何内容。当Boa服务器接收到客户端请求时,CGI通过标准输出返回的信息就会直接显示在网页上,这也是CGI程序的一个基本原理。

    2、CGI程序第一行输出的内容必须指定Content-Type如:   

    "Content-Type:text/html",这个输出作为HTML的文件头。Boa服务器通过CGI向客户端传送文件时需要说明文件类型,CGI可以向客户端浏览器输出的类型包括:普通文本、HTML文本、图像和声音数据信息。 

    3、两个重要的CGI环境变量

    QUERY-STRING:GET方法。用来获得表单输入的数据。

    CONTENT-LENGTH:POST方法。用来获得输入数据的字节数。

    3.5.5 HTML简介

    1)HTML概述

    1、HTML是用来描述网页的语言;

    2、HTML是指超文本标记语言;

    3、HTML属于标记语言;

    4、标记语言是一套标记标签(markup tag);

    5、HTML使用标记标签来描述网页。

    2)HTML标签

    1、HTML标签是由尖括号包围的关键词,比如<html>

    2、HTML标签是通常是成对出现的比如<html></html>

    3、标签中的第一个标签是开始标签,第二个标签是结束标签

    4、开始和结束标签也被成为开放标签和闭合标签

    3)HTML文件

    1、HTML文件 = 网页,HTML文档被称为网页

    2、HTML文件描述网页

    3、HTML文件包含HTML标签和纯文本

    本次设计中浏览器通过标签解释Boa服务器传送的HTML文件,然后在网页上显示HTML内容。

    4)文件构成元素

    1、文本

    2、图像

    3、超链接

    超链接是网站的灵魂,是从一个网站指向另一个目的端的链接。

    4、表格

    表格是网页排版的灵魂,通过表格可以精确地控制各网页元素在网页中的位置。

    5、表单

    表单是用来搜集站点访问者的域集。站点访问者填写表单的方式是输入文本、单击单选按钮与复选框,以及从下拉菜单中选择选项等,表单数据会使用相应的程序进行处理。

    6、GIF动画

    动画是网页上最活跃的元素,通常制作优秀、创意出众的动画是吸引浏览者的最有效的方法。不过现在的网页往往不是缺乏动画,而是太多动画让人眼花潦乱,无心细看。

    7、Flash动画

    8、框架

    框架是网页的一种组织形式,将相互关联的多个网页的内容组织在一个浏览器窗口中显示。

    3.5.6 JavaScript简介

    JavaScript是一种基于对象的脚本语言,该脚本语言通过客户端浏览器内部的解释器解析为可执行格式,具有简单性、跨平台性、面向对象和动态性的特点。

    JavaScript脚本被设计用来向HTML 页面添加交互行为,是一种脚本语言(脚本语言是一种轻量级的编程语言),由数行可执行计算机代码组成,可以在HTML代码中实现。

    JavaScript在网页中使用有三种形式:

    4、直接在网页中添加脚本:

    <input type="button"οnclick=“alert(‘欢迎’);”value=“点击">;

    5、在script中插入脚本:

    <script type=“text/javascript”>

    //在这里编写JavaScript代码

    </script>

    6、链接脚本本件:

    <script type=“text/javascript”src=“文件名.js”></script>

    3.6 本章小结

    本章对视频采集与编解码进行了详细介绍,首先对视频基础知识作了简要介绍,然后详细介绍了视频流服务器和Boa服务器的搭建相关工作。由于本次设计图像数据直接在浏览器上进行显示,因此在章节最后对网页设计相关内容进行了详细介绍。 

     

    音频采集与编解码设计

    4.1 音频传输协议介绍

    本次设计需要将环境中采集到的语音数据传输到终端进行实时播放,虽然TCP协议能够确保IP数据的正确性,但TCP协议具有以下缺点:启动时需要“三次握手”建立连接、结束时需要“四次挥手”结束连接;当检测到数据出错或数据包丢失时,TCP将启动重传机制或拥塞控制机制;TCP报文头不能提供时间戳和编解码信息。因此,TCP/IP协议栈不适合实时语音数据传输。

    UDP协议取消了重传机制,是一种面向无连接的数据包方式,但UDP协议传输数据容易丢包,因此需要结合RTP与RTCP协议保证通信的正确性和实时性。

    流媒体传输协议RTP需要和RTCP协议配合使用才能保证数据的实时可靠传输。在RTP数据传输过程中,需要周期性传送RTCP包来保证传输质量,本设计中,每传输100个RTP包发送一次RTCP包。RTCP中包含相应控制验证信息和数据包的数量信息等,服务器或客户端可以根据RTCP包数据信息来动态控制传输速率。RTP与RTCP在网络层次中的位置如4-1图所示:

     

    图4-1 RTP与RTCP在网络层次中位置

     

    4.2 音频基础介绍

    数字语音设计中涉及到以下技术指标,即音频三要素:采样频率、采样位数和声道数。采样频率是指数字化时数据每秒的采样次数,根据采样定理,本设计采样频率设为44.1kHz;每个采样点幅度数据的二进制位数就是采样位数,本设计采样位数为16位;声道数是指录音或放音时硬件线路的数量,声道分为双声道和单声道,从人的主观感知上来说,双声道的音质和音色要优于单声道,但占用存储空间是单声道的二倍。

    声卡有一个硬件缓存区来保存记录下来的样本数据。音频采集过程中,当缓存区满时,声卡将产生一个中断,声卡驱动使用DMA将样本数据快速传送到应用程序缓存区;音频播放时,程序使用DMA将相应的缓存区数据传送到声卡的硬件缓存区中。

    周期和帧:一个周期(period)存储一些帧(frames)。每一帧包含时间上一个点所抓取的样本。对于立体声设备,一个帧会包含两个信道上的样本。一个缓存区分解成周期,然后是帧,最后是样本。数据关系如图4-2所示:

     

    图4-2 帧、周期和样本关系图

     

    音频ALSA接口设备文件为:/dev/snd/pcmC0D0c 用于录音的pcm0设备,/dev/snd/pcmC0D1c 用于录音的pcm1设备,/dev/snd/pcmC0D0p 用于播放的pcm0设备,

    /dev/snd/pcmC0D1p 用于播放的pcm1设备,/dev/snd/controlC0 用于声卡的控制,/dev/snd/timer定时器。音频alsa-lib是Linux的标准函数库,alsa-lib通过系统调用与内核进行数据交互。编程过程如下:

    1、打开录音或回放接口,获得PCM句柄:

    snd_pcm_open(&pcm_handle,"default", stream, 0);

    pcm_handle:

    音频设备句柄

    stream取值:

    回放:SND_PCM_STREAM_PLAYBACK

    录音:SND_PCM_STREAM_CAPTURE

    2、设置硬件参数,如采样位数,信道数和采样率:

    //以声卡默认参数初始化params结构体

    snd_pcm_hw_params_any(pcm_handle, params);

    //设置数据布局格式

    snd_pcm_hw_params_set_access(pcm_handle,params,

    SND_PCM_ACCESS_RW_INTERLEAVED);

    //设置采样率

    snd_pcm_hw_params_set_rate_near(pcm_handle,params,

    &sample_rate, &dir);

    //采样位数

    snd_pcm_hw_params_set_format(pcm_handle,params,

    SND_PCM_FORMAT_S16_LE);

    //通道数

    snd_pcm_hw_params_set_channels(pcm_handle,params,

    channels);

    //设定每周期获取数据帧数

    snd_pcm_hw_params_set_period_size_near(pcm_handle,

    params, period, &dir);

    ALSA接口结构框图如图4-3所示:

     

    图4-3 ALSA接口结构框图

     

    alsa_lib和utils的移植

    移植alsa接口需要做以下几方面的工作

    1、内核支持;

    2、alsa_lib移植;

    3、untils是工具集合,可以移植使用;

    4、asound移植。

    alsa_lib库的移植:

    1、配置环境变量:

    exportPREFIX=/usr/lib/alsa_lib

    mkdir$PREFIX

    2、解压并进入文件:

    tar xvfalsa-lib-1.0.27.2.tar.bz2

    cdalsa-lib-1.0.27.2

    3、配置编译:

    ./configure--host=arm-linux --prefix=$PREFIX --with-configdir=/etc/alsa/--with-plugindir=/usr/lib/alsa_lib --disable-python

    make

    sudo -s

    exportPATH=/usr/local/arm/4.3.2/bin:$PATH

    4、安装:

    makeinstall

    5、移植到A8硬件平台:

    将"/etc/alsa/"和"/usr/lib/alsa_lib"拷贝到A8平台相应目录下,设置额外链接库的路径:

    exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/alsa/alsa_lib/lib

    6、配置内核以支持alsa接口:

    7、建立音频接口链接:

    mkdir  /dev/snd

    ln -s/dev/pcmC0D0c  /dev/snd/pcmC0D0c

    ln -s /dev/pcmC0D1c  /dev/snd/pcmC0D1c

    ln -s/dev/pcmC0D0p  /dev/snd/pcmC0D0p

    ln -s/dev/pcmC0D1p  /dev/snd/pcmC0D1p

    ln -s/dev/controlC0 /dev/snd/controlC0

    ln -s/dev/timer  /dev/snd/timer

    工具集utils的移植:

    1、解压源码:

    tar xvfalsa-utils-1.0.27.2.tar.bz2

    2、配置编译:

    cdalsa-utils-1.0.27.2

    ./configure--host=arm-linux --prefix=$PREFIX --with-alsa-inc-prefix=$PREFIX/include   --with-alsa-prefix=$PREFIX/lib  --disable-alsamixer --disable-xmlto

    make

    sudo –s

    3、安装:

    makeinstall

    4、A8硬件平台设置:

    #修改A8平台环境变量,LD_LIBRARY_PATH库的额外链接路径,PATH可执行程序自动搜寻路径,注意根据自己的库还有可执行的aplay在开发板的路径去设置

    exportPATH=$PATH:/usr/local/arm/gtk_dfb/sbin:/usr/alsa/alsa_lib/lib/bin

    aplay 文件名

    4.3 音频传输系统设计

    4.3.1 音频模块系统框图

    系统要实现两个不同硬件平台的实时语音通信,采用多线程技术实现语音的采集、传输和播放。语音采集端,线程将拾音器采集到的数据编码和组包后发送到PLC网络;语音接收端使用一个线程实时接收音频流并记录相应的RTCP反馈信息,另一个线程定时从相应缓冲区中提取数据并解码播放。具体实现框图如图4-4所示:

     

    图4-4 音频传输系统框图

     

    4.3.1 音频缓存区设计

    由于语音传输过程中会发生抖动,因此需要定义语音缓存。为了提高语音传输的实时性,发送端需要将语音缓存中的数据及时发送到网络中,由于UDP协议以太网数据包中最大存储数据1472字节,因此缓冲区需小于1472字节,本次设计缓冲区采用640字节。

    4.4 本章小结

    本章对音频采集与编解码进行了详细介绍,首先对音频和流媒体等基础知识作了简要介绍,然后详细介绍了ALSA接口库文件移植以及编程步骤,最后详细介绍了音频编解码模块代码设计流程以及数据传输过程。 

     

    电力线载波通信设计

    5.1 电力线通信技术概述

    电力载波通信是应用于电力系统的一种通信方式,将载有信息的射频信号以电流的形式加载到电力线上进行传输。

    正交频分复用技术,即OFDM技术,采用不连续的多音调制技术,具有较强的抗干扰能力。作为一种多载波调制技术,OFDM技术可以将数据转化为相互独立的子数据流进行传输,可以更好的适应复杂的电力线通信环境。OFDM在PLC应用中有许多优势:抗多径时延、抗频率选择性衰落、传输速率高、频带利用率高和均衡技术简单等优点。

    本次设计的PLC网络使用HomePlug协议标准,该协议是由家庭插电联盟制定的网络通信协议标准,HomePlug协议具有以下主要特点:物理层协议和数据链路层协议紧密结合;物理层数据速率约为14Mbps;在线性条件下,发送器动态调节适配速率;采用OFDM技术;载波屏蔽并与其它电力线业务兼容,符合国际规范;MAC自动重发请求,保证可靠性;采用CSMA/CA技术,保证优先帧有序发送;具有MII兼容的可选接口。本次设计采用的HomePlug协议使用HomePlugMAC管理入口协议MME,该协议出现在INT5500CS的任意数据帧处理的过程中。

    5.2 电力载波通信系统设计

    本系统以INT5500CS芯片为核心进行设计,在数据采集端,摄像头或拾音器采集到的数据经过编码后通过以太网芯片的MII接口将发送至INT5500CS芯片,经过OFDM调制后由模拟前端芯片INT1200将数据耦合到电力线传输线路;在数据接收端,模拟前端耦合得到电力线上的射频信号并将数据传送至INT5500CS芯片解调,之后,音视频数据又通过以太网芯片传输到PC机解码显示或播放。通信系统框图如图5-1所示:

     

    图5-1 电力线载波通信系统框图

     

    本次电力线调制解调芯片采用Intellon公司的INT5500CS芯片,该芯片内核运行在1.8V,I/O口运行在3.3V,100引脚LQFP封装,Intellon公司通过提供可以和INT5500无缝连接的模拟前端芯片INT1200,实现了一个完整的电力线载波通信解决方案。该芯片具有以下特点:集成MII接口的单芯片电力线网络收发器,在电力线上高达85Mbps的数据传输速率,可以直接和英特龙模拟前端芯片INT1200连接,兼容协议HomePlug 1.0,支持QAM 256/64/16,DQPSK,DBPSK和ROBO调制方案,低功耗,在干扰环境下高可靠性的具有专利的信号处理技术:正交频分复用(OFDM),在恶劣信道条件下,智能信道适应吞吐量最大化,集成的服务质量特性(QoS),56位DES加密并具有安全电力线通信的密钥管理。INT5500CS引脚图如图5-2所示:

     

    图5-2 INT5500CS引脚图

     

    在主机配置模式下,INT5500的固件和配置在启动时通过外部主机下载到INT5500内;在独立的启动模式下,INT5500的固件和配置在启动时通过读外部串行闪存加载到INT5500内。INT5500CS芯片可以通过两种工作模式启动,一种是Host/DTE模式,在此模式下该芯片类似以太网的数据链路层芯片,通过标准MII接口与以太网物理层芯片连接;另一种是PHY模式,在此模式下该芯片类似以太网的物理层芯片,通过标准MII接口与以太网数据链路层芯片连接。MII接口包括一个数据和管理接口,数据接口用于INT5500CS与具有MII标准接口的以太网芯片传输数据,管理接口允许INT5500CS控制和监控以太网物理层芯片。MII接口传输和接收数据由四位组成,INT5500CS接收以太网PHY层的一个同步时钟,则MAC和PHY层传输一次四位数据,MII接口时序如图5-3所示:

     

    图5-3 MII接口时序图

     

    INT5500CS芯片必须与模拟前端芯片INT1200配合才能使用,通过AFE接口相互连接,INT1200内部集成ADC和DAC控制器,同时可以调节开关增益放大器的放大倍数,连接框图如图5-4所示:

     

     

    图5-4 INT5500CS与INT1200连接框图

     

    模拟前端接口时序如图5-5所示:

     

    图5-5 模拟前端接口时序图

     

    INT5500CS芯片包含两个内部存储块,分别是位于地址0x00010000处的128K字节的应用程序RAM和位于地址0x80000000处的96K字节的包缓冲。未被压缩的固件映像位于应用程序RAM中并且也在该RAM中运行,而包缓冲是一个输入输出数据的缓冲队列。INT5500内存的变更取决于它是否正在运行一个加载程序或MAC映像。当运行一个加载程序时,启动ROM位于地址0x00000000,应用程序RAM位于0x00010000;当运行一个MAC映像时,应用程序RAM位于地址0x00000000,包缓冲总是位于0x80000000。具体内存映射如图5-6所示:

     

    图5-6 数据存储映射图

     

    5.3 通信模块设计

    5.3.1 INT5500CS工作模式选择

    INT5500CS芯片工作模式的选择是通过外部引脚的高低电平来配置的。为了驱动模拟前端的AFE接口,ASC_EN引脚必须设为低电平;模式选择引脚设为低电平用于连接以太网PHY层芯片;时钟频率设为50MHz,即将ASC_CLK引脚拉低;选择从FLASH启动方式,INT5500需要一个1Mbit的串行闪存,该FLASH采用INT5500CS数据手册中指定的串行FLASH芯片来存储MAC地址和默认用户秘钥信息,并且这个串行设备只能是ST Micro STM25P10-A,一旦该闪存被初始化,非易失MME可以取出闪存中参数信息,该芯片通过标准SPI接口与INT5500CS芯片连接。具体配置如下表5-1所示:

    表5-1引脚配置

    管脚

    功能

    电平

    设置

    ASC_EN

    保留

    低电平

    设置为低

    ASC_DATA/MODE

    模式

    低电平

    Host/DTE模式

    高电平

    PHY模式

    ASC_CLK

    保留

    低电平

    设置为低

    ASC_PWRDWN/MAC_CLK

    时钟速度

    低电平

    50MHz

    高电平

    75MHz

    GPIO_6

    启动方式

    低电平

    FLASH启动

    高电平

    主机启动

     

    5.3.2 以太网模块设计

    为了和以太网接口RJ45连接,需要使用以太网控制芯片,本次设计采用美国Broadcom公司的AC101L芯片。该芯片是一款低功耗的10/100M物理层收发芯片,AC101L需要3.3V和2.5V两种电压,该芯片引脚如图5-7所示:

     

    图5-7 AC101L引脚图

     

    由于模式选择引脚设置为低电平,则INT5500CS芯片工作在主机模式下,类似于以太网的数据链路层芯片,与AC101L的连接图如下所示:

     

    图5-7 INT5500CS与AC101L连接图

     

    5.3.3 用户接口协议

    HomePlug MAC 管理入口MME出现在INT5500的任意帧处理过程中,INT5500CS芯片利用MAC管理在HomePlug 1.0.1规格书中指定帧格式。远程应答MME工作过程如下:

    1.  PTS发送一个数据帧到本地INT5500,包含设置远端站地址的DA,设置PTS地址的SA。附加MME的网络密钥,其EKS设为0,并且EK设置远程站DEK,远程应答MME和应答帧;

    2.  PTS的INT5500远程连接附加MME密钥,使用指定的EKS和EK加密结果帧并将帧数据发送到电力线上;

    3.  远程INT5500从电力线上收到相应数据帧,数据是被远程主机的DEK加密的;

    4.  通过INT5500返回一个远程应答MME到PTS,远程主机应答;

    5.  DUT INT5500转寄远程应答MME到电力线上,并使用NEK加密;

    6.  PTS INT5500收到远程应答MME并且转寄它到PTS;

    7.  远程主机发送封装应答帧到远程INT5500;

    8.  DUT INT5500正常执行应答帧,如果需要转寄数据帧到电力线上;

    9.  远程主机重复转寄远程应答MME上的数据帧;

    10.DUT INT5500继续正常重复执行应答帧;

    11.远程主机向DUT INT5500发送第二个应答帧;

    12.DUT INT5500执行第二个应答帧。

    13.重复11和12步骤,直到远程主机发送最后重复应答帧。

    14.DUT INT5500执行最后应答帧。

    数据传送过程如图5-8所示:

     

    图5-8 数据传送过程图

    5.4 本章小结

    本章对电力线载波通信模块的实现进行了详细介绍,首先对OFDM调制技术作了简要介绍,然后详细介绍了INT5500CS芯片的内部资源以及工作模式配置和编程协议接口相关内容,同时本章也对外围关键芯片做了简要介绍。 

     

    样机系统功能测试

    6.1 系统测试准备

    本设计主要分为音频、视频和电力线载波通信三部分,下面分别对各功能测试所需工具软件作简要介绍。

    6.1.1 音频测试

    所需工具:嵌入式A8硬件样机平台、拾音器、win7端Linux操作系统和网线;

    软件环境:搭建好的嵌入式Linux软件环境,A8硬件平台和PC端Linux需要安装ALSA

    接口库文件,支持声卡驱动。

    6.1.2 视频测试

    所需工具:嵌入式A8硬件样机平台、USB摄像头、win7端浏览器和网线;

    软件环境:主机端搭建好的嵌入式Linux软件环境,配置安装视频流服务器和Boa服务器,支持USB摄像头驱动;

    6.1.2 电力线载波通信测试

    所需工具:INT5500CS调制解调器硬件平台、插排、PC机、嵌入式A8硬件样机平台和网线;

    软件环境:PC端需要安装Intellon公司的PowerPacket Utility软件测试数据传输速率和通信质量相关信息。

    准备好以上软硬件环境就可以对本设计各模块进行功能测试。

    6.2 系统测试

    下面分别对音频、视频和电力线载波通信模块进行功能测试:

    6.2.1 音频功能测试

    使用网线和串口线连接A8样机平台和PC机,同时打开串口终端以便通过命令控制A8平台,将PC端IP地址和A8平台IP地址设在同一网段。

    通过串口命令进入A8平台相应文件目录,在命令行输入./arm -h 10.220.1.114(目的IP) –l,目的IP地址为PC端虚拟机中Linux操作系统的IP地址。进入PC端Linu操作系统相应目录,在命令行输入./x86  -l -h 10.220.1.123(目的ip),目的IP为A8平台Linux操作系统的IP地址。运行结果如图6-1和6-2所示:

     

    图6-1 PC端运行结果

     

     

    图6-1 A8平台运行结果

     

    将手机放在A8硬件平台附近并播放歌曲,在PC端(可以戴上耳机)就可以听到清晰的歌声;由于本次设计可以实现全双工通信,将手机放在PC机附近,也可以在A8平台听到清晰的歌声。通过测试,音频方案完全满足设计要求。

    6.2.2 视频功能测试

    使用网线和串口线连接A8样机平台和PC机,同时打开串口终端以便通过命令控制A8平台,将PC端IP地址和A8平台IP地址设在同一网段。

    通过串口命令进入A8平台相应文件目录,首先在命令行输入kill -9 76关闭系统自启动的Boa服务器,之后在命令行输入./image.sh运行shell脚本文件,此时视频流服务器和Boa服务器启动;打开PC机上的谷歌浏览器,在网址窗口输入服务器IP地址10.220.1.123,即为A8平台Linux操作系统的IP地址,点击回车后进入视频登陆界面,如图6-3所示:

     

    图6-3 视频登陆界面

     

    在用户窗口输入root,密码窗口输入111111,点击登陆后进入选择登陆界面,如图6-4所示:

     

    图6-4 选择登陆界面

     

    点击图像采集后进入视频显示终端页面,如图6-5所示:

     

    图6-5 视频实时显示页面

     

    通过测试,视频方案完全满足设计要求。

    6.2.3 电力线载波通信功能测试

    使用网线将调制解调器1与PC机连接,将调制解调器2与A8平台连接,同时将两个调制解调器插接在同一个插座上并打开PC端的PowerPacket Utility软件。稳定后可以观察到两个调制解调器的三个指示灯全亮,表示两个硬件通信正常,点击PowerPacket Utility软件上的Connect按钮,可以看到通信速率相关信息,如图6-6所示:

     

    图6-6  PowerPacket Utility软件测试效果

     

    由上图可知,本次测试与PC机相连接的调制解调器的MAC地址是00:26:75:37:D4:46,与A8平台相连接的调制解调器的MAC地址是00:26:75:45:10:16,通信速率高达85Mbps。通过以上测试,电力线载波通信方案完全满足设计要求。

    6.2.4 联机测试

    通过对三个模块的单独测试,各模块完全满足设计要求,下面对系统总体功能进行测试。

    编写A8平台GTK+界面显示代码,修改image.sh脚本文件,使用串口线、插座和网线连接PC机和A8硬件平台,打开串口调试终端,通过PowerPacket Utility软件测试网络连接。进入A8平台Linux操作系统相应目录,关闭系统自启动Boa服务器,在命令行输入./image.sh运行脚本文件,此时视频流服务器、Boa服务器和音频流服务器全部正常开启。在PC端打开谷歌浏览器,输入服务器IP地址,登陆进入视频显示页面;进入PC端Linux操作系统相应目录,在命令行输入./x86 –l –h 10.220.1.123,此时可以实现实时音频通信。

    网络连接情况如图6-7所示:

     

    图6-7  网络连接情况图

     

    由上图可知,系统网络连接正常。

    服务器登陆情况如图6-8所示:

     

    图6-8  网络服务器登陆图

     

    由上图可知,系统Boa服务器运行正常。

    视频流采集情况如图6-9所示:

     

    图6-9  视频显示页面

     

    由上图可知,视频流服务器运行正常,图像采集正常。

    音视频流采集情况如图6-10所示:

     

    图6-10  音视频播放与显示页面

     

    在A8硬件平台附近或PC机附近说话,可以在另一端听到相应声音;改变摄像头位置,可以看到网页端图像发生相应变化。经过以上测试,本次系统方案完全满足设计要求。

    6.3 总结与展望

    本章在开始部分介绍了测试前所需要的工具软件,接下来分别对音频、视频和电力线载波通信模块进行了功能测试,最后对系统进行了整体功能测试。

    经过测试,本系统按要求实现了所有功能。但由于时间以及成本的问题,仍有许多不足需要改进。在视频编码部分,由于采用软件压缩,增加了系统软件开销并且编码效率要比硬件压缩低;在音频编码部分,由于本次设计未对音频数据进行压缩处理,增加了传输所需带宽。为了增加设计的实用性,必将继续努力,不断学习新的知识和技能,不断完善本次设计。

    参考文献

    [1]  姚立斌. 低照度CMOS图像传感器技术[J]. ISSN, 2013.

    [2]  廖根为.监控录像系统中人像鉴定问题研究.[M].上海人民出版社,2010.

    [3]  杨宗德.吕光宏.刘雍.Linux高级程序设计.[M].人民邮电出版社,2012.

    [4]  韦东山.嵌入式Linux应用开发完全手册.[M].人民邮电出版社,2011.

    [5]  INT5500CS datasheet [Z]. Intellon Corp.

    [6]  IntellonCorporation.OFDM WhitePaper.[Z]. 2002.

    [7]  冯明. 网络视频监控业务发展浅析. 电信科学,2007(11).

    [8]  陈龙,陈层. 安全防范工程. 北京:中国电力出版社,2006.

    [9]  胡永红. 智能多路视频监控系统的设计. 微机发展,2001,1(2):75-76.

    [10]  施裕丰,陈坚,陈启转. 网络式多媒体监控系统. 计算机工程,2000.

    [11]  INT1200datasheet[Z].Intellon Corp.

    [12]  梁明等.高速电力线通信的关键技术[J].电工技术杂志.2004(4).

    [13]  陈文智.嵌入式系统开发原理与实践.清华大学出版社,2005.

    [14]  罗世伟.视频将监控系统原理及维护.北京:电子工业出版社,2007.

    [15]  张明,李芳.高速公路监控系统研究.商业经济,2009(9).

    [16]  林宇,郭凌云.Linux网络编程,人民邮电出版社.

    [17]  严俊,马小骏,顾冠群.RTP协议的研究与实现,计算机工程与应用,2000.

     

     

    展开全文
  • 液压圆锥破碎机在过去10 a中,随着制造商试图实现高效率破碎生产,液压圆锥破碎机研究重点已发生改变。...所以提出利用固定质量原则进行有效压缩比与实际压缩比之间的转换,得到更准确的破碎产品颗粒分布情况。
  • 低压技术,例如注射压缩,foaming和in-mould decorating已经被用于提高射出制加工过程的重要方法。 模具孔压力测量方法为模具样品提供了实际的解决方案。为满足低压制技术的专门需要, Kistler已经研发出一种...
  • 模型压缩之 BinaryNet

    万次阅读 2016-12-03 16:13:02
    1. 动机 深度学习在图像、语音、文本等领域都取得了巨大的成功,推动了一系列智能产品的落地。但深度模型存在着参数众多,训练和 inference 计算量大...为此,我们需要解决模型压缩的问题——将模型大小、内存占用...

    1. 动机

    深度学习在图像、语音、文本等领域都取得了巨大的成功,推动了一系列智能产品的落地。但深度模型存在着参数众多,训练和 inference 计算量大的不足。目前,基于深度学习的产品大多依靠服务器端运算能力的驱动,非常依赖良好的网络环境。

    很多时候,出于响应时间、服务稳定性和隐私方面的考虑,我们更希望将模型部署在本地(如智能手机上)。为此,我们需要解决模型压缩的问题——将模型大小、内存占用、功耗等降低到本地设备能够承受的范围之内。

    2. 方法

    神经网络具有分布式的特点——特征表征和计算都分散于各个层、各个参数。因此,神经网络在结构上天然具有冗余的特点。冗余是神经网络进行压缩的前提。

    压缩模型一般可以有几种常见的方法:

    2.1 使用小模型

    设计小模型

    可以直接将模型大小做为约束,在模型结构设计和选择时便加以考虑。对于全连接,使用 bottleneck 是一个有效的手段(如 LSTMP)。HighwayResNetDenseNet 等带有 skip connection 结构的模型也被用来设计窄而深的网络,从而减少模型整体参数量和计算量。对 CNN 网络,SqueezeNet 通过引入1 x 1的小卷积核、减少 feature map 数量等方法,在分类精度与 AlexNet 相当的前提下,将模型大小压缩在 1M 以内,而模型大小仅是 Alexnet 的50分之一。更新的还有 MobileNet、ShuffleNet 等。

    模型小型化

    一般而言,相比于小模型,大模型更容易通过训练得到更优的性能。那么,能否用一个较小的模型,“提炼”出训练好的大模型的知识能力,从而使得小模型在特定任务上,达到或接近大模型的精度?Knowledge Distilling(e.g. 12)便尝试解决这一问题。knowledge distilling 将大模型的输出做为 soft target 来训练小模型,达到知识“凝练“的效果。实验表明,distilling 方法在 MNIST 及声学建模等任务上有着很好的表现。

    2.2 利用稀疏性

    我们也可以通过在模型结构上引入稀疏性,从而达到减少模型参数量的效果。

    裁剪已有模型

    将训练好的模型进行裁剪的方法,至少可以追溯到90年代。 Optimal Brain DamageOptimal Brain Surgeon 通过一阶或二阶的梯度信息,删除不对性能影响不显著的连接,从而压缩模型规模。

    学习稀疏结构

    稀疏性也可以通过训练获得。更近的一系列工作(Deep compression: abcHashedNets)在控制模型性能的前提下,学习稀疏的模型结构,从而极大的压缩模型规模。

    2.3 降低运算精度

    不同传统的高性能计算,神经网络对计算精度的要求不高。目前,基本上所有神经网络都采用单精度浮点数进行训练(这在很大程度上决定着 GPU 的架构设计)。已经发布的 NVIDIA Pascal 架构的最大特色便是原生的支持半精度(half float)运算。在服务端,FPGA 等特殊硬件在许多数据中心得到广泛应用,多采用低精度(8 bit)的定点运算。

    参数量化

    除了使用低精度浮点运算(float32, float16)外,量化参数是另一种利用简化模型的有效方法。
    将参数量化有如下二个优势:
    * 减少模型大——将 32 或 16 位浮点数量化为 8 位甚至更少位的定点数,能够极大减少模型占用的空间;
    * 加速运算——相比于复杂的浮点运算,量化后的定点运算更容易利用特殊硬件(FPGA,ASIC)进行加速。

    上面提到的 Deep Compression 使用不同的位数量化网络。Lin 等的工作,在理论上讨论上,在不损失性能的前提下,CNN 的最优量化策略。此外,还有量化 CNNRNN 权值的相关工作。

    参数二值化

    量化的极限是二值化,即每一个参数只占用一个 bIt。本文讨论的正是这个种压缩模型的方法。

    3. BinaryNet

    BinaryNet [1] 研究对象是前馈网络(全连接结构或卷积结构)(这方法在 RNN 上并不成功 [4])。这里,我们更关心权值的二值化对 inference 的精度和速度的影响,而不关心模型的训练速度(量化梯度以加速模型训练的工作可以参见 [3])。

    前馈模型(卷积可以看成是一种特殊的全连接)可以用如下公式表示:

    xk=σ(Wkxk1)xk=σ(Wk⋅xk−1)

    其中,xkxk 为第kk 层的输入,WkWk 为第 kk 层的权值矩阵,σ()σ(⋅) 为非线性激活函数。由于 Batch Normalizaiton 的引入,偏置项 bb 成为冗余项,不再考虑。

    3.1. 二值化权值和激活

    首先,我们定义取符号操作:

    sign(x)={1 if x0,1 sign(x)={1 if x≥0,−1 其他

    在 BinaryNet 中,网络权值为 +1 或 -1,即可以用 1bit 表示,这一点与 BinaryConnect 相同。更进一步,BinaryNet 使用了输出为二值的激活函数,即:

    σ(x)=sign(x)σ(x)=sign(x)

    这样,除了第一层的输入为浮点数或多位定点数外,其他各层的输入都为 1 bit。

    3.2. 训练

    BinaryNet 二值化权值和激活的思路很容易理解,但关键在于,如何有效地训练网络这样一个二值网络。

    [1] 提出的解决方案是:权值和梯度在训练过程中保持全精度(full precison),也即,训练过程中,权重依然为浮点数,训练完成后,再将权值二值化,以用于 inference。

    权值

    在训练过程中,权值为 32 位的浮点数,且取值值限制在 [-1, 1] 之间,以保持网络的稳定性。为此,训练过程中,每次权值更新后,需要对权值 WW 的大小进行检查,W=max(min(1,W),1)W=max(min(1,W),−1)

    前向

    前向运算时,我们首先得到二值化的权值:Wkb=sign(Wk),k=1,,nWbk=sign(Wk),k=1,⋯,n
    然后,用 WkbWbk 代替 WkWk

    xk=σ(BN(Wkbxk1)=sign(BN(Wkbxk1))xk=σ(BN(Wbk⋅xk−1)=sign(BN(Wbk⋅xk−1))

    其中,BN()BN(⋅) 为 Batch Normalization 操作。

    后向

    根据误差反传算法(Backpropagation,BP),由于 sign()sign(⋅) 的导数(几乎)处处为零,因此,WW 通过 BP 得到的误差 ΔWΔW 为零 ,因此不能直接用来更新权值。为解决这个问题,[1] 采用 straight-through estimator(Section 1.3) 的方法,用 ΔWbΔWb 代替 ΔWΔW。这样,BinaryNet 就可以和序普通的实值网络一样,使用梯度下降法进行优化。
    另外,如果激活值(二值化之前)的绝对值大于1,相应的梯度也要置零,否则会影响训练效果。

    3.4. 性能

    模型精度

    BinaryNet 在 MNIST (MLP) ,CIFAR10、SVHN(CNN)上取得了不错的结果(表1第二列)。

    数据集 论文结果 squared hinge loss (同论文) xent loss
    MNIST (MLP) 0.96% 1.06% 1.02%
    CIFAR10 (CNN) 11.40% 11.92% 11.91%
    SVHN (CNN) 2.80% 2.94% 2.82%

    表 1 不同数据集上错误率

    压缩效果

    二值化网络在运算速度、内存占用、能耗上的优势是显而易见的,这也是我们对二值化感兴趣的原因。[1] 中给出了这方面的一些分析,具体可以参见 [1](Section 3),此处不再赘述。

    4. Source Code

    4.1 训练

    BinaryNet[1]的作者给出了 theanotorch 两个版本,两者之间略有不同。theano 采用确定性(deterministic)的二值化方式,而 torch 是随机化(stochastic)的二值化,并且 torch 版对 Batch Normalization 操作也进行了离散化处理。具体差异可以参见论文。

    根据文章 theano 版本的实现,我们有基于 Keras 的实现。这个版本利用了一个 trick ,实现了梯度的 straight-through estimator。

    理想情况下,theano 和 tensorflow 在做 Graph 优化时,应该能够优化掉这个 trick 带来的性能开销,但对于MLP, tensorflow 的后端明显比 theano 慢(~235s vs. ~195s),但不清楚是否是两者对 Graph 优化能力差异造成的。

    在 MNIST、CIFAR10 和 SVHN 数据集上,基本复现了文章的结果(见表1. 三、四列)

    与文章声称的不同,目标函数分别选择交叉熵(crossentropy, xent)与合叶损失(L2-SVM)时,在三个数据集上的性能几乎没有判别,甚至交叉熵还要略好一些。

    另外,感兴趣的读者可以参考基于 pytorch 的实现

    4.2 Inference

    正如上面介绍的,BinaryNet 的最大优点是可以 XNOR-计数 运算替代复杂的乘法-加法操作。[1] 给出了二值网络 inference 的基于 CUDA 的 GPU 参考实现。另外,还有基于 CPU 的实现(其基于 tensorflow 的训练代码有些小问题)。[2] 报告了基于 FPGA 的实现及加速效果。

    5. 结语

    • 在小型任务上,BinaryNet 完全有希望满足精度要求。目前手里没有真实应用的数据(如语音的静音检测),不能进一步验证可行性。
    • 至于 BinaryNet 在大型任务上的性能,从 [5][6] 报告的 ImageNet 准确率来看, 性能损失还是比较大的。更高的量化精度似是必须的[4][7]。
    • 此外,根据实验经验,BinaryNet 的训练不太稳定,需要较小的学习率,收敛速度明显慢于实值网络。

    References

    1. Courbariaux et al. Binarized Neural Networks: Training Neural Networks with Weights and Activations Constrained to +1 or −1.
    2. Umuroglu et al. FINN: A Framework for Fast, Scalable Binarized Neural Network Inference.
    3. Lin et al. Neural Networks with Few Multiplications.
    4. Ott et al. Recurrent Neural Networks With Limited Numerical Precision.
    5. Zhou et al. DoReFa-Net: Training Low Bitwidth Convolutional Neural Networks with Low Bitwidth Gradients.
    6. Rastegari et al. XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks.
    7. Hubara et al. Quantized Neural Networks: Training Neural Networks with Low Precision Weights and Activations.

    Further Readings

    展开全文
  • 互联网项目MRD模板

    2018-01-04 19:01:32
    – 技术方面(语音压缩技术不成熟,外资搜索引擎对中文理解不够深刻) – 运营方面(产业链偏下游,重实体,轻线上,造成瓜分线下旅行社利润,形成对立) – 用户方面(用户需要可替代产品尚未出现,需求明显) ...
  • jQuery DNA模板 简单而强大的无损javascript模板系统。 允许您轻松构建和有效管理UI代码(或让Web设计人员做到这一点而又不会破坏构建UI的javascript代码)。 目录 产品特点 ... 仅有2.5kB压缩Jav
  • 边做边改模型

    2015-12-03 20:13:00
     好吧,其实现在许多产品实际都是使用的“边做边改”模型来开发的,特别是很多小公司产品周期压缩的太短。在这种模型中,既没有规格说明,也没有经过设计,软件随着客户的需要一次又一次地不断被修改。  在这个...

    边做边改模型(Build-and-Fix Model)

      好吧,其实现在许多产品实际都是使用的“边做边改”模型来开发的,特别是很多小公司产品周期压缩的太短。在这种模型中,既没有规格说明,也没有经过设计,软件随着客户的需要一次又一次地不断被修改。

      在这个模型中,开发人员拿到项目立即根据需求编写程序,调试通过后生成软件的第一个版本。在提供给用户使用后,如果程序出现错误,或者用户提出新的要求,开发人员重新修改代码,直到用户和测试等等满意为止。

      这是一种类似作坊的开发方式,边做边改模型的优点毫无疑问就是前期出成效快。

      对编写逻辑不需要太严谨的小程序来说还可以对付得过去,但这种方法对任何规模的开发来说都是不能令人满意的,其主要问题在于:

      1) 缺少规划和设计环节,软件的结构随着不断的修改越来越糟,导致无法继续修改;

      2) 忽略需求环节,给软件开发带来很大的风险;

      3) 没有考虑测试和程序的可维护性,也没有任何文档,软件的维护十分困难。

    转载于:https://www.cnblogs.com/yinlg/p/5017477.html

    展开全文
  • 气压喷射:当产品是深腔薄片时,用压缩空气喷射是简单而有效的。 复合弹射:受产品形状的影响,大多数模具采用两种以上的脱模方法,为了达到理想的弹射效果,必须根据产品和模具结构来确定具体的形状,这里不作具体...
  • 今天我要说说社畜们最讨厌的屁屁踢江湖有这个一句名言干活的累死...”人在职场飘PPT几乎无处不在年终总结、产品介绍、述职汇报大多数人一遇到做PPT第一反应是找模板翻山越岭地找好几G的压缩大礼包好不容易从网盘下载...
  • 产品展示:自定义产品分类,上传产品图片,自动压缩产品图片、自定义产品内容页面等等! 文章发布:自定义文章类型 联系方式:自定义联系方式的内容! 留言系统:即反馈中心,用户收集用户反馈的信息,在后台把...
  • 低压技术,例如注射压缩,foaming和in-mould decorating已经被用于提高射出制加工过程的重要方法。 模具孔压力测量方法为模具样品提供了实际的解决方案。为满足低压制技术的专门需要, Kistler已经研发出一种...
  • 今天我要说说社畜们最讨厌的屁屁踢江湖有这个一句名言干活的累死...”人在职场飘PPT几乎无处不在年终总结、产品介绍、述职汇报大多数人一遇到做PPT第一反应是找模板翻山越岭地找好几G的压缩大礼包好不容易从网盘下载...
  • 大家都知道 BigQuery 作为 Google Cloud Platform 重要的数仓产品,主要聚焦于数据分析,技术来源于 Google 的 Dremel 、无索引、Severless 技术,支持动态调整计算与调整资源。 此外,BigQuery 的存储按照非压缩...
  • 产品展示:自定义产品分类,上传产品图片,自动压缩产品图片、自定义产品内容页面等等! 文章发布:自定义文章类型 联系方式:自定义联系方式的内容! 留言系统:即反馈中心,用户收集用户反馈的信息,在后台把邮箱...
  • 产品展示:自定义产品分类,上传产品图片,自动压缩产品图片、自定义产品内容页面等等! 文章发布:自定义文章类型 联系方式:自定义联系方式的内容! 留言系统:即反馈中心,用户收集用户反馈的信息,在后台...
  • 由本厂生产的充气橡胶芯,是由橡胶与纤维加强层硫化而制成的产品,具有很高的抗充张强度,弹性和气密性,充入压缩空气后,能代替原有的木模、竹、钢模,可以多次重复使用,是一种降低成本和加快施工进度的砼制品...
  • 一、弹簧的压缩量和计算 在一套冲压模具中,需要用到比较多的弹性材料,其中包括各种不同规格的弹簧、优力胶、氮气弹簧等,按照不同的需要选用不同的弹性材料。像折弯、冲孔一般用普通的扁线弹簧就可以了,比如棕色...
  • OSI参考模型的提出是为了解决不同厂商、不同结构的网络产品之间互连时遇到的不兼容性问题。但是该模型的复杂性阻碍了其在计算机网络领域的实际应用。与此对照,后面我们将要学习的TCP/IP参考模型,获得了非常广泛的...
  • 产品特点 使用Sass和PostCSS进行CSS转换 Webpack和BabelJavaScript捆绑 使用Stylelint和ESLint进行代码整理 源代码的缩减和优化 图像压缩与优化 带有SVG精灵的图标系统 实时重载开发服务器 文献资料 执照
  • GP215-3D数图.zip

    2020-08-28 21:40:18
    安川MOTOMAN机器人GP215实际1:1尺寸3d模型,可通过绘图软件打开,文件为压缩格式,名称06vx215-a00.asm_0.stp,被应用于液晶玻璃产品搬送过程使用
  • 数据库无冗余表完整备份,首页排版布局合理大气,动态加载样式精美,数据调用完整,内页多套样式模板页设计,整站模板代码书写规范,数据调用完整,功能齐全,适用于机械电子科技公司等产品展示类型网站使用;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 750
精华内容 300
关键字:

压缩模产品