顶顶通语音识别使用说明

2023-11-11 09:45

本文主要是介绍顶顶通语音识别使用说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

顶顶通语音识别软件(asrproxy)是一个对接了多种语音识别接口的语音识别系统。可私有化部署(支持中文英文和方言等,支持一句话识别、实时流识别、多声道录音文件识别。

原理

asrproxy内嵌了阿里达摩院的开源语音识别工具包FunASR,后续我们也会使用自有的预料来增强模型,以后也会添加openai的开源模型whisper 。asrproxy也对接了主流的ASR云服务商,比如阿里云,科大讯飞,腾讯云,mrcp等。使用同一套接口就可以无缝切换各种ASR。

一句话识别接口和录音文件识别接口

识别参数放在http请求头里面,声音文件内容通过post发送,不需要编码发送原始文件就可以。

POST /asr HTTP/1.1
Host: 116.62.146.93:9990
User-Agent: Mozilla/5.0
Accept: */*
Cache-Control: max-age=0
Connection: close
id:test
samplerate: 8000
signature:605bef92414621abfca073ebc6ad7d3b
timestamp:1697505856
engine:shortsentence
Content-Length: 30240
声音数据

识别结果通过JSON返回。

HTTP/1.1 200 OK
Date: Tue, 17 Oct 2023 01:25:36 GMT
Server: www.ddrj.com
Content-Length: 35
Connection: Keep-Alive
Content-Type: text/plain
Pragma: no-cache
Cache-Control: private, max-age=0, no-cache{"code":"0","desc":"识别结果"}

请求参数说明

  • timestamp 时间戳和服务器误差只允许5分钟内

  • id asrproxy.json配置的用户id(asrproxy.json->short_sentence_asr->users)

  • signature 签名 md5(key+timestamp) 本例中key是test,md5(test1697505856)=605bef92414621abfca073ebc6ad7d3b。
    key配置位置:asrproxy.json->short_sentence_asr->users->id->key

  • engine 引擎类型 asrproxy.json->groups配置ASR引擎,默认配置是 shortsentence

  • hostwords 热词,多个热词用空格分开

  • datatype 数据类型,不设置默认是pcm类型

    1. pcm 原始的PCM数据,
    2. wav wav格式的数据
    3. mp3 mp3格式的数据
    4. url 通过URL获取文件
  • samplerate datatype是pcm时有效,声音采样频率,不设置默认是8000

  • sentence_time 是否需要输出句子时间,设置为true输出。

  • post内容

    • datatype是pcm、wav、mp3时是原始的声音数据

    • datatype是url的时候是josn格式的要识别的文件信息

      {
      "uuid":"唯一的ID,回调通知用",
      "callback_url":"识别结果回掉URL。",
      "file_url":"要识别文件的URL,支持本地文件的绝对路径和http文件",
      "ext":"wav|mp3|pcm"//http返回的数据类型,如果file_url是本地文件会根据文件后缀来识别文件类型
      }
      

响应参数说明

  • code 0 没错误 其他错误代码,如果有错误desc内容是错误信息
  • desc
    • 识别单声道文件时desc是字符串类型的识别结果。

    • 识别多声道文件时并且sentence_time设置为fasle,desc字符串数组类型[“第一声道的识别结果”,“第二声道的识别结果”]

    • sentence_time 设置为true,desc是二维数组

      • silence_duration 句子前面的静音时间,单位秒
      • begin_time 句子开始时间,单位秒
      • end_time 句子结束时间,单位秒
      • speech_rate 语速,单位为每分钟字数
        {"uuid": "","code": "0","desc": [[{"silence_duration": 1.36,"begin_time": 1.36,"end_time": 3.19,"speech_rate": 131.148,"text": "喂你好。"}, {"silence_duration": 0.74,"begin_time": 3.93,"end_time": 17.76,"speech_rate": 303.688,"text": "这边是百万医疗项目的客服哈。"}],[{"silence_duration": 1.36,"begin_time": 1.36,"end_time": 3.19,"speech_rate": 131.148,"text": "喂你好。"}, {"silence_duration": 0.74,"begin_time": 3.93,"end_time": 17.76,"speech_rate": 303.688,"text": "这边是百万医疗项目的客服哈。"
      }]
      ]
      }
      

测试方法

接口测试地址 http://demo.ddrj.com:9990/asr

浏览器直接上传文件测试地址 http://demo.ddrj.com:9990/test

可用curl命令测试,为了调过验证签名步骤,需要把asrproxy.json->short_sentence_asr->users->id(test)里面添加"not_validate_signature":true这个配置。

一句话识别测试

1.wav改成要识别的文件,如果识别的文件是mp3的,datatype:wav也要改成datatype:mp3

curl -H "id:test" -H "engine:shortsentence" -H "datatype:wav" -X POST --data-binary @1.wav  http://demo.ddrj.com:9990/asr

录音文件识别测试

curl -H "id:test" -H "engine:shortsentence" -H "datatype:url" -X POST -d "{\"ext\":\"mp3\",\"uuid\":\"name\",\"file_url\":\"http://demo.ddrj.com/t1.mp3\",\"callback_url\":\"http://demo.ddrj.com/ttsresult\"}" http://demo.ddrj.com:9990/asr

实时流识别接口

通过websocket连接上 ws://127.0.0.1:9988 ,发送一个请求头,然后发送二进制的声音流,结束识别发送字符串END结束识别。

引导头格式为 时间戳json的参数\0,注意\0是一个二禁制的0。

1699344741507{"callid":"07ca13d3-55cc-47ef-a591-ffaee83d0e0b","asr_mode":1,"hot_word":"","asr_params":{"group":"default"},"vad_min_active_time_ms":100,"vad_max_end_silence_time_ms":1000,"wait_speech_timeout_ms":5000,"max_speech_time_ms":60000,"samples_per_second":8000}\0

  • asr_mode: asr模式 0只第一句话 1 持续识别
  • hot_word: 热词 ,需要asr引擎支持
  • asr_params: asr参数,可用来选择asr引擎 {“group”:“default”}
  • vad_min_active_time_ms: 最小说话时间,需要ASR引擎支持
  • vad_max_end_silence_time_ms: 最大静音时间,需要ASR引擎支持
  • wait_speech_timeout_ms: 等待说话时间,需要ASR引擎支持
  • max_speech_time_ms: 最大识别时间,需要ASR引擎支持
  • samples_per_second: 声音频率 8000或者 16000

返回识别结果

【标记1个字节-识别结果】
标记字符含义
0:中间结果
1:句子结束,对于支持长时间识别的ASR才支持,用于断句。
F:识别结束,客户端已经发送了END
f:识别结束,客户端没有发送END,ASR检测到静音太长认为停止说话了。
E:ASR错误
标志是f/F/E的时候客户端要主动断开连接

测试页面

http://demo.ddrj.com/wsasr.html

配置

{"key":"asrproxy.license",  //授权文件路径"log":{"console_level":0, //输出控制台日志等级0-5(0:DEBUG, 1:INFO, 2:NOTICE, 3:WARNING, 4:CRIT, 5:CONSOLE)"file_level":0,    //输出到文件日志等级0-5(0:DEBUG, 1:INFO, 2:NOTICE, 3:WARNING, 4:CRIT, 5:CONSOLE)"file_maxsize":100, //文件大于多少M就自动创建新的日志文件。"file_number":10 //最大保留日志文件个数},"short_sentence_asr":{"listen_ip":"0.0.0.0","listen_port":9990,"bgasr_thread_count":null, //录音文件识别的ASR线程个数,如果不设置就是根据CPU个数自动设置。"users":{//用户ID,可以配置多个用户"test":{          "not_validate_signature":false,//是否禁用验证签名,改成true,就是不验证签名"key":"test",//用户KEY"ip":"*"  //*任意IP都可以访问,也可以限制可以访问的ip}}},"asr":{"listen_ip": "127.0.0.1","listen_port": 9988,"storage": "record", //asr录音目录,调用asr时,设置了asr_params.recordfilename才会录音。"acl":"*", //哪些IP可以访问,配置*任意IP都可以访问,多个IP用逗号隔开,如果不配置acl,通过127.0.0.1不需要配置在ACL里面也可以访问。"interface": {"funasr": {"type": "funasr","engine": "sentence", //一句话"enable_itn":true,  //数字转换成阿拉伯数字"model-dir": "model/paraformer-large"//模型目录},"funasr_realtime": {"type": "funasr","engine": "2pass",//offline:关闭实时识别 online:开启实时识别  2pass:混合2种模式,需要更多CPU。"enable_itn":true,  //数字转换成阿拉伯数字 "model-dir": "model/paraformer-large","online-model-dir": "model/paraformer-large-online","punc-dir": "model/punc-realtime","chunk-size":4800 } },"groups":{//实时识别使用的ASR"default":{ "mode":0,  //0:顺序使用,当使用数量等于count的时候切换下一个  1:循环使用"enable": //启用的那些ASR配置["funasr_realtime"]},//一句话识别和文件识别使用的ASR"shortsentence":{"mode":0,"enable":["funasr"]}}}
}

这篇关于顶顶通语音识别使用说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/389193

相关文章

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.