118  
查询码:00001135
语音识别库_artyom.js
作者: 郁冲冲 于 2020年02月26日 发布在分类 / 人防组 / 人防前端 下,并于 2020年02月26日 编辑
语音识别库

artyom如何运作

Artyom.js包含两个部分: 语音命令识别 语音合成 每个模块都是独立的,这意味着您可以只使用语音合成,反之亦然。

可以使用该artyom.window.js 文件 直接从浏览器使用Artyom,也可以使用该 文件与任何捆绑程序(如Webpack,Browserify等)一起使用artyom.js

在浏览器中或使用模块捆绑器,都将获得Artyom类,并且需要实例化它以使用其他方法:

// Using the /build/artyom.js file
// with ES6,TypeScript etc
import Artyom from 'artyom.js';

const Jarvis = new Artyom();

Jarvis.say("Hello World !");
或者,如果您正在浏览器中使用它:


<script src="artyom.window.js"></script>
<script>
    var Jarvis = new Artyom();

    Jarvis.say("Hello World !");
</script>

语音指令

语音命令功能是通过将给定文本(命令)与语音识别API中的转录文本进行匹配而创建的。 Artyom提供了一个包装器,用于使用 artyom.addCommands 方法(添加大量命令) artyom.on 仅添加几个命令 函数来保存命令。

var artyom = new Artyom();

artyom.addCommands([
    {
        indexes: ["Good morning"],
        action: function(i){
            console.log("Good morning Triggered");
        }
    },
    {
        indexes: ["Good night"],
        action: function(i){
            console.log("Good night Triggered");
        }
    }
]);

// Or the artisan mode to write less

artyom.on(["Good morning"]).then(function(i){
    console.log("Triggered");
});
添加了两个命令后,使用artyom.initialize方法继续进行命令识别的初始化(不要忘记将listen属性设置为true来开始识别):


var artyom = new Artyom();

artyom.initialize({
    lang:"en-GB",
    debug:true, // Show what recognizes in the Console
    listen:true, // Start listening after this
    speed:0.9, // Talk a little bit slow
    mode:"normal" // This parameter is not required as it will be normal by default
});
初始化之后,API将请求访问麦克风,并且命令识别将开始。 命令识别提供3种模式,您可以在初始化文档中检查。


语音的合成

Artyom提供了有用且紧凑的功能,可以轻松地合成文本。 artyom.say 函数最多接收2个参数,仅第一个参数是必需的(要合成的文本)。

var artyom = new Artyom();

artyom.say("A long text here",{
    onStart: function(){
        console.log("Talking ...");
    },
    onEnd: function(){
        console.log("I said all that i knew");
    }
});

使artyom很棒的原因是, 它将注意语音合成API令人讨厌的单词限制 您只需要担心如何提供要合成的文本。

现在就这些,阅读文档,尽情享受并创造一些很棒的东西!

使用要求

  • 网络连接

您需要使用webkitSpeechRecognition 对象 将语音转换为文本 ,因此,要发出语音命令,您将需要有效的Internet连接。

粘贴图片



  • Artyom仅在Google Chrome中有效

简而言之,要为您的用户提供Artyom的全面支持,他需要使用Google Chrome。 Artyom使用Web语音API,语音识别和语音合成。 Web Speech API使您可以将语音数据合并到Web应用程序中。 Web语音API有两个部分:语音合成(文本到语音)和语音识别(异步语音识别)。

  • 语音识别

为了处理语音命令,artyom依赖于webkitSpeechRecognition Window  对象。 仅在Google Chrome浏览器(Android和桌面版)中可用的 功能


  • 语音合成

为了合成文本,artyom使用speechSynthesis窗口的  对象。在许多设备上,此功能的可用性会有所不同。除适用于iOS的Safari浏览器外,它还适用于Google Chrome浏览器(桌面版和Android版)。

  • 关于命令对象

  命令是具有至少3个属性的文字对象:

物业名称
类型
描述
indexes
数组 具有所有可以触发命令的文本标识符的数组
smart
布尔值

为了正确处理命令,artyom需要知道命令是否使用通配符

如果确实如此,则将smart属性设置为true。

action
功能

当识别的文本与indexs属性数组中的任何provided文本标识符匹配时将触发的功能

根据命令的类型,此函数最多可以接收2个参数(作为第一个参数,是索引数组中匹配命令的索引;

如果它是智能的,则为第二个参数)。


例子:

var command = {
    indexes: ["Hello"],
    action: function(){
        alert("Hello, how are you ?");
    }
};

var artyom = new Artyom();

artyom.addCommands(command);

  • 添加命令组

您可以使用数组作为输入为artyom输入多个命令。 数组的每个项目都必须是一个命令:

var commands = [
    {
        indexes: ["Hello"],
        action: function(){
            alert("Hello, how are you ?");
        }
    },
    {
        indexes: ["Good night"],
        action: function(){
            alert("Hello, how are you ?");
        }
    },
    {
        indexes: ["Good morning"],
        action: function(){
            alert("Hello, how are you ?");
        }
    }
];

var artyom = new Artyom();

artyom.addCommands(commands);


  • 如何知道执行了哪句命令

如果您使用对许多单词有反应的命令,则可以检索在动作函数中说出的哪个单词:




var artyom = new Artyom();

artyom.addCommands({
    indexes: ["Good morning","Good night", "Hello"],
    action: function(i){
        if(i == 2){
            // You said Hello
        }else if(i == 1){
            // You said Good night
        }else if(i == 0){
            // You said Good morning
        }
    }
});

  • 使用智能命令


智能命令是语音命令,其内容可能具有可变和可获得的值。您可以通过*在命令中使用星号字符()获得可更改的值,并将其作为操作回调中的第二个参数返回。请注意,smart命令的属性需要设置为true。

例如,您可以创建一个命令,使artyom在您说出以下内容后重复您说的所有内容"repeat after me":


var artyom = new Artyom();

artyom.addCommands({
    //The smart property of the command needs to be true
    smart:true,
    indexes: ["Repeat after me *"],
    action: function(i, wildcard){
        // Speak alterable value
        artyom.say(wildcard);
    }
});

// Then use the initialize function 
// ..
// And proceed to say "Repeat after me, make a sandwich"
// Then artyom should say "make me a sandwich"
此外,为了使命令更加智能,并假设您知道如何使用它们,可以在命令中添加正则表达式,只要它很聪明即可。 只需将正则表达式添加为索引数组的一项即可:


粘贴图片

var artyom = new Artyom();

artyom.addCommands({
    //The smart property of the command needs to be true
    smart:true,
    indexes: [/Good Morning/i, new RegExp("Good Afternoon", "i")],
    action: function(i){
        artyom.say("Hey, are alright? You never say hello.");
    }
});

  • 清洁垃圾收集

要清理垃圾回收,请确保没有任何SpeechUtterance待处理(在的上一次执行时执行artyom.say ):

let artyom = new Artyom();

// The clear command needs to be executed 
// always in the last artyom.say function
artyom.say("Hello , this is a long text 1 .");
artyom.say("Hello , this is a long text 2.");
artyom.say("Hello , this is a long text 3.");
artyom.say("Hello , this is a long text 4.");
artyom.say("Hello , this is a long text 5.");
artyom.say("Hello , this is a long text 6.");
artyom.say("Hello , this is a long text 7.");
artyom.say("Hello , this is a long text. Now i'll clean the garbage collection.",{
    onEnd: function(){
        var totalObjectsInCollection = artyom.getGarbageCollection().length;
        // Clear now that there are no more text to say.
        artyom.clearGarbageCollection();
        alert("The garbage collection has been cleaned. "+totalObjectsInCollection+" Items found. Now there are " + artyom.getGarbageCollection().length);
    }
});
  • 为什么需要清理垃圾收集器

如果您将artyom用于简单的事情,则无需执行此操作。 但是,如果您合成了许多文本(50K个字符),那么该文本将由artyom.say函数处理,最终可能会产生超过20K(可能会有所不同)的巨大数组进行清洁,因为讲完文字后,它不再重要了。

要了解代码,请参见以下代码段:

// Remember that SpeechSynthesis is an experimental API
// Therefore, there are many unsolved bugs originally

// @INSTRUCTION 1
// This will add 1 item to the garbage collection
artyom.say("This is a semi long text that will be spoken",{
    onEnd: function(){
        // If it is executed here , the intruction 2 will be never executed
        // Because you just cleaned all the existent SpeechSynthesisObjects
        // This is safe only if is executed in the onEnd callback and you're
        // sure that no more artyom.say functions will be executed after this instruction
        artyom.clearGarbageCollection();
    }
});

artyom.say("What's up",{
    onEnd: function(){
        console.log("You may see this text in the console.");
    }
});

artyom.say("I'm trying to do something here. Please shut up your mouth.",{
    onEnd: function(){
        console.log("Probably this not ...");
    }
});

// More instructions ...
artyom.say("Hello, this other text that will be spoken",{
    onEnd: function(){
        console.log("You may see this text in the console but sometimes don't");
    }
});
请记住,您只能在onEnd 最后一次artyom.say 执行 回调中 清除垃圾回收




  • 设备

属性 类型 描述
isMobile
布尔型
如果实际设备不是台式机或笔记本电脑,则返回true
isChrome
布尔型
如果实际的浏览器是Google Chrome,则返回true

如果要验证浏览器是否为chrome并向用户发出警告(或在artyom无法强制发出声音的移动设备中),可以使用它:

let artyom = new Artyom();

// Verify if artyom is supported
window.onload = function(){
    if(artyom.Device.isChrome){
        if(!artyom.Device.isMobile){
            alert("Artyom can talk and obey commands in this browser, however the voice will be the default voice of the device. Cannot force language here.");
        }else{
            // Everything okay ! , use artyom normally here !
        }
    }else{
        alert("Artyom only works with The Google Chrome Browser !");
    }
};

更多指令请移步https://docs.ourcodeworld.com/projects/artyom-js/documentation/getting-started/introduction








 推荐知识

 历史版本

修改日期 修改人 备注
2020-02-26 16:47:30[当前版本] 郁冲冲 1.1.0

 附件

附件类型

PNGPNG

知识分享平台 -V 4.8.7 -wcp