MMS: Facebook一口气发布4000+种开源TTS/ASR模型
太震撼了,真的4000+多种,开源模型可以下载。比上介绍的开源还多。难道现在大的趋势,又加了一个多吗!
通过人工智能保护世界语言多样性
支持我们的国语,粤语,吴语….,
这里直接使用wrapper: https://github.com/abdeladim-s/easymms
先直接上例子自己试试
https://dl.fbaipublicfiles.com/mms/misc/language_coverage_mms.html
我们的“大规模多语言语音人工智能”研究模型可以识别超过4,000种口头语言,比以往任何已知技术多40倍。
这些模型将文本到语音和语音到文本技术从大约100种语言扩展到1,100多种。
这种技术可以用于人们所选择的语言的虚拟现实和增强现实应用中,也可以理解每个人的声音。
世界上很多语面临消失的危险,而当前的语音识别和生成技术的限制只会加速这一趋势。我们希望使人们更容易获取信息和使用设备,使用他们所选择的语言,今天我们宣布了一系列人工智能模型,可以帮助他们做到这一点。
多语音(MMS)模型将从大约100种语言扩展到1,100多种语言的文本到语音和语音到文本技术,并且还可以识别超过4,000种口头语言,比以前多了40倍。
语音技术也有许多用途,从虚拟和增强现实技术到消息服务,可以用人们所选择的语言,并且可以理解每个人的声音。
我们正在开源我们的模型和代码,以便研究社区中的其他人可以建立在我们的工作基础上,并帮助保护世界上的语言,拉近世界之间的距离。
收集数千种语言的音频数据是我们面临的第一个挑战,因为目前最大的语音数据集最多只涵盖100种语言。为了克服这个问题,我们转向宗教文本,比如《圣经》,这些文本已经被翻译成许多不同的语言,并且这些翻译已经被广泛研究,用于文本翻译研究。
这些翻译具有公开可用的人们用不同语言朗读这些文本的音频记录。作为MMS项目的一部分,我们创建了一个包含超过1,100种语言的新约读物的数据集,每种语言平均提供了32小时的数据。
通过考虑其他宗教读物的无标签录音,我们将可用语言的数量增加到了4,000多种。虽然这些数据来自特定领域,通常由男性朗读,但我们的分析显示,我们的模型对男性和女性的声音表现相当好。而且,尽管音频记录的内容是宗教内容,但我们的分析显示这不会让模型产生更多的宗教性语言。
在未来,我们希望扩大MMS的覆盖范围,以支持更多的语言,并解决现有语音技术常常难以处理的方言的挑战。
变电站61850模型MMS开发总结
目录
1 智能变电站为什么非要用61850协议… 1
2 变电站通信架构… 1
3 61850协议… 1
4 libiec61850开源库… 2
5 从0开始创建MMS模型SERVER. 3
6 结束语… 5
在电力网络高速发展的过去这些年,我国兴建了大批智能变电站,而智能变电站的核心就是信息系统的标准化、统一化,以减少使用电缆和通过移动领域的劳动力把项目执行时间降至最低,由国际电工组织主编的IEC61850通信标准符合信息标准化的特点,且具有国际通用性,在智能变电站中大量推广(不排除个别站仍然使用104协议)。IEC61850规范化了系统和工程管理、功能描述及设备模型、通信要求、通信一致性要求等,对变电站内一次侧、二次侧的生产控制和信息管理有详尽的技术规范要求。
变电站中对系统进行了站控层、间隔层和过程层分层管理,在不同层级的61850通信模型也不一样,一般站控层使用MMS(Manufacturing Message Specification)、过程层与间隔层使用SV(Sampled Value Transmission IED设备采样值报文)和GOOSE(Generic Object Oriented Substation Event 面向通用对象的变电站事件报文,IED设备间通用报文),如下图所示。
协议实现介绍
IEC61850标准中规范了描述一次系统主接线的 SSD(Substation Specification Description 变电站主接线描述)文件、一次主接线图纸和二次系统的 SCD(Substation Configuration Description 变电站配置描述)文件、二次网络中的 MMS 报文、GOOSE 报文、SV 报文、ICD(IED Capacity Description 设备功能描述文件)以及CID(IED Configured Description IED 设备的配置描述),其中CID文件只是SCD文件的子集(CID内容可以在SCD中找到),CID文件就是IED设备创建的抽象模型,也是设备制造厂家需要向变电站提供的配置文件。
IED抽象模型ICD
SCD和ICD都是基于SCL(Substation Configuration Language)语言的XML文件,ICD只是SCD的子集,站控层在收到IED设备上报的数据和通过查询SCD表可以知道上报数据的物理意义。ICD文件中的内容简单介绍如下图(xml中的标签太多,太复杂,不做详细介绍)。
libiec61850是github开源免费的c代码库,支持ICD文件的动态和静态生成,模型c代码转换,MMS(server和client)/SV/GOOSE消息报告,各种线程、网络socket封包,以及丰富的api接口可调用、丰富的example可参考, readme详细说明了在windows和linux平台生成可执行文件的具体方法。总之,很好很强大,谁用谁知道!
我们用c做一个完整windows10平台61850中MMS服务器端静态模型程序。
案例分析:某站变压器A相安装了电压测量IED装置,要求实时上传当前电压值指站端平台,此时控制室有厂家的数据集中器(服务器),由集中器统一上报电压值,那么厂家需要为安装的电压监测装置创建模型ICD,并将模型编译进服务器后端程序,站端得到ICD后可以查询服务器实时更新的电压值信息。
开发前环境准备(我的环境)
libiec61850源代码下载,https://github.com/mz-automation/libiec61850,放在本地D盘根目录,并在libiec61850根目录下创建一个build文件夹;
JRE安装,我的版本是10.0.1,
https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html ;
VS2015安装,更高版本的VS需要改CMake的命令,可自行查询;
CMake安装,用于将源码生成VS工程,我的版本是3.16.2,https://cmake.org/download/,安装完成后运行cmd命令窗口,进入D盘的libiec61850文件夹中的build文件夹,输入命令cmake -G \”Visual Studio 14 2015 Win64\” ..,在build文件夹中生成VS2015的工程(注意命令后面的..不要漏掉了),用VS打开此工程就可以查看、编译所有源码了;
安装IEDScout,作为Client连接Server使用,官方提供有测试版本,我的版本是4.20,https://www.omicronenergy.com.cn/products/iedscout/;
安装XMLSpy,编辑ICD使用,https://www.altova.com/xmlspy-xml-editor;
创建模型
常用创建ICD的工具为XMLSpy,结合案例分析,我们创建1个与相别无关的测量逻辑节点,ICD文件命名为TestModel.icd,如下图所示,MMXN01即为监测A相电压的逻辑节点。
编译模型
拷贝ICD文件至文件夹D:\\libiec61850-1.4\\tools\\model_generator中,启动cmd窗口,进入上述文件夹目录,执行命令java -jar genmodel.jar TestModel.icd,会生成static_model.c和static_model.h两个文件,本例子是基于源码中的server_example_simple例子更改的,所以需要将static_model.c和static_model.h拷贝到server_example_simple的工程文件夹中,并将D:\\libiec61850-1.4\\build\\src\\Debug里面的iec61850.dll拷贝至server_example_simple的debug文件夹中。好了,环境都配好了,开始编写业务代码!
模型SERVER端编业务代码
修改server_sample_simple.c文件中的代码,实现每间隔5秒更新一次电压值和时间,代码如下图所示。
编写完代码后,执行VS的build,找到exe启动server,启动后就是个黑框,什么都没有,接下来我们通过ICD去连接server,获取数据。
SERVER模型连接测试
双击我们的TestModel.icd文件,默认会使用IEDScout打开,点击Browser中的Online,连接成功后点击ReadAll,就可以看到读回来的数据了,Over!
61850在未来绝对是在线监测系统必备的通信协议,不带61850的系统被称为“黑户”,领导检查时系统会被“切掉”,导致监测中断,国网对数据的实时监测不断提高要求,数据进内网是厂家必须具备的基本功能。
libIEC61850:编译MMS服务端
近期用北京微自恒通提供的61850 SDK构建本地Server端,由于没有任何61850方面的基础,恶补了一下。说实话,提供的方案可用,但是说明文档实在太过粗略,对新手未免不太友好。
在使用微自恒通公司的SDK构建了基本的Server端模型、流程代码骨架之后,我就考虑用libIEC也做下类似的事情,顺便加深对于61850的理解,此处作为手账记录吧。
按照惯例,先交代一下背景:
libIEC官网:libIEC61850 / lib60870 | open source libraries for IEC 61850 and IEC 60870-5-101/104
我们后续使用的代码也在此处下载。
libIEC版本:1.5.0
操作系统:Ubuntu 16.04 x64(虚拟机)
首先,下载libIEC61850 1.5.0的代码,并解压到~/code/目录下。
进入code/libiec61850-1.5.0目录,看到完整的目录结构,处于“短平快”的策略,我在examples目录下找到了两个例子作为熟悉的跳板:
/server_example_simple
/server_example_dynamic
前者包含CID模型定义、CID模型到.C/.件的生成,个人感觉这个demo的对初学者来说意义比较大,一定要好好利用这个。因为我们后期一定会采用这样的流程来作为整体结构:1)CID模型文件定义;
2)将CID模型文件编译成static_model.h/static_model.c;
3)在其他文件中引用static_model.c/static_model.h中自动生成的LD/LN/DO/DA(设备/节点/数据对象/数据属性)。
> cd server_example_simple
> make model
该步骤过后,当前目录中应该已经生成了static_model.h/static_model.c文件。
> make
> sudo ./server_example_simple
和微自恒通SDK不同的是,libIEC的Server端不需要配置本机IP地址以及端口号,IP应该是全部放开,端口默认102.
在本地可以使用IEDScout连接Server端IP地址,可以看到Server的模型目录结构。
当然,此处的数据更新还没有,而server_example_dynamic给我们提供了一个简单的例子。
但是server_example_dynamic不好的地方是所有的LD/LN/DO/DA都是在主程序.C文件中动态定义的,而不是通过CID模型文件定义。server_example_dynamic.文件中模型定义部分略去不谈(其实和CID文件定义,然后编译CID文件生成.C文件是一样的意思),动态赋值的只和主函数中如下代码相关:
float val = 0.f;
while (running) {
IedServer_lockDataModel(iedServer);
IedServer_updateUTCTimeAttributeValue(iedServer, temperatureTimestamp, Hal_getTimeInMs());
IedServer_updateFloatAttributeValue(iedServer, temperatureValue, val);
IedServer_unlockDataModel(iedServer);
val += 0.1f;
Thread_sleep(100);
}
IedServer_updateUTCTimeAttributeValue是更新时间的函数,
IedServer_updateFloatAttributeValue是更新MX(测量值FLOAT32)的函数,
只需要把对应static_model.c文件中的DA地址传进去就可以了,这样的话,基本的流程代码结构就比较完整了,后续我们把模拟量、回调函数什么的加上,提高程序的异步处理能力。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。