python的webrtc库如何实现语音端点检测 科大讯飞输入法PC体验版下载:语音+手写+

2018-03-05 出处:网络 整理:zhishizhan.net

延伸:科大讯飞输入法PC体验版下载:语音+手写+键盘

描述:... • 首款“云计算”智能语音输入法  • 语音流式识别,边说边识别  • 语音端点智能检测手写  • 键盘上直接手写,同一界面多种输入  • 笔画顺序随意组合,结果照样准确  • 竖屏叠写,长句手写一气呵成  • 横屏连写,写完左边写右边键盘  • 拼音/英文/字母独立面板  • 底部滑动切换键盘  • 九宫格式表情、标...

现在基于云端语义库的聊天机器人层出不穷,其中最著名的当属amazon的 Alexa/Echo 智能音箱.

国内如雨后春笋般出现了各种搭载语音聊天的智能音箱(如前几天在知乎上广告的若琪机器人)和各类智能机器人产品.国内语音服务提供商主要面对中文语音服务,由于语音不像图像有分辨率等等较为客观的指标,很多时候凭主观判断,所以较难判断各家语音识别和合成技术的好坏.但是我个人认为,国内的中文语音服务和国外的英文语音服务,在某些方面已经有超越的趋势.

通常搭建机器人聊天系统主要包括以下三个方面:

语音转文字(ASR/STT)

语义内容(NLU/NLP)

文字转语音(TTS)

语音转文字(ASR/STT)

在将语音传给云端API之前,是本地前端的语音采集,这部分主要包括如下几个方面:

麦克风降噪

声源定位

回声消除

唤醒词

语音端点检测

音频格式压缩

python 端点检测

由于实际应用中,单纯依靠能量检测特征检测等方法很难判断人声说话的起始点,所以市面上大多数的语音产品都是使用唤醒词判断语音起始.另外加上声音回路,还可以做语音打断.这样的交互方式可能有些傻,每次必须喊一下 唤醒词 才能继续聊天.这种方式聊多了,个人感觉会嘴巴疼:-O .现在github上有snowboy唤醒词的开源库,大家可以登录snowboy官网训练自己的唤醒词模型.

Kitt-AI : Snowboy

Sensory : Sensory

考虑到用唤醒词嘴巴会累,所以大致调研了一下,Python拥有丰富的库,直接import就能食用.这种方式容易受强噪声干扰,适合一个人在家玩玩.

pyaudio: pip install pyaudio 可以从设备节点读取原始音频流数据,音频编码是PCM格式;

webrtcvad: pip install webrtcvad 检测判断一组语音数据是否为空语音;

当检测到持续时间长度 T1 vad检测都有语音活动,可以判定为语音起始;

当检测到持续时间长度 T2 vad检测都没有有语音活动,可以判定为语音结束;

完整程序代码可以从我的github下载

程序很简单,相信看一会儿就明白了

'''

Requirements:

+ pyaudio - `pip install pyaudio`

+ py-webrtcvad - `pip install webrtcvad`

'''

import webrtcvad

import collections

import sys

import signal

import pyaudio

from array import array

from struct import pack

import wave

import time

FORMAT = pyaudio.paInt16

CHANNELS = 1

RATE = 16000

CHUNK_DURATION_MS = 30 # supports 10, 20 and 30 (ms)

PADDING_DURATION_MS = 1500 # 1 sec jugement

CHUNK_SIZE = int(RATE CHUNK_DURATION_MS / 1000) # chunk to read

CHUNK_BYTES = CHUNK_SIZE 2 # 16bit = 2 bytes, PCM

NUM_PADDING_CHUNKS = int(PADDING_DURATION_MS / CHUNK_DURATION_MS)

# NUM_WINDOW_CHUNKS = int

(240 / CHUNK_DURATION_MS)

NUM_WINDOW_CHUNKS = int

(400 / CHUNK_DURATION_MS) # 400 ms/ 30ms ge

NUM_WINDOW_CHUNKS_END = NUM_WINDOW_CHUNKS 2

START_OFFSET = int(NUM_WINDOW_CHUNKS CHUNK_DURATION_MS 0.5 RATE)

vad = webrtcvad.Vad

(1)

pa = pyaudio.PyAudio()

stream = pa.open(format=FORMAT,

channels=CHANNELS,

rate=RATE,

input=True,

start=False,

# input_device_index=2,

frames_per_buffer=CHUNK_SIZE)

got_a_sentence = False

leave = False

def handle_int(sig, chunk):

global leave, got_a_sentence

leave = True

got_a_sentence = True

def record_to_file(path, data, sample_width):

Records from the microphone and outputs the resulting data to 'path'

# sample_width, data = record()

data = pack('' + ('h' len(data)), data)

wf = wave.open(path, 'wb')

wf.setnchannels

(1)

wf.setsampwidth(sample_width)

wf.setframerate(RATE)

wf.writeframes(data)

wf.close()

def normalize(snd_data):

Average the volume out

MAXIMUM = 32767 # 16384

times = float(MAXIMUM) / max(abs(i) for i in snd_data)

r = array('h')

for i in snd_data:

r.append(int(i times))

return r

signal.signal(signal.SIGINT, handle_int)

while not leave:

ring_buffer = collections.deque(maxlen=NUM_PADDING_CHUNKS)

triggered = False

voiced_frames = []

ring_buffer_flags = [0] NUM_WINDOW_CHUNKS

ring_buffer_index = 0

ring_buffer_flags_end = [0] NUM_WINDOW_CHUNKS_END

ring_buffer_index_end = 0

buffer_in = ''

# WangS

raw_data = array('h')

index = 0

start_point = 0

StartTime = time.time()

print( recording: )

stream.start_stream()

while not got_a_sentence and not leave:

chunk = stream.read(CHUNK_SIZE)

# add WangS

raw_data.extend(array('h', chunk))

index += CHUNK_SIZE

TimeUse = time.time() - StartTime

active = vad.is_speech(chunk, RATE)

sys.stdout.write('1' if active else '_')

ring_buffer_flags[ring_buffer_index] = 1 if active else 0

ring_buffer_index += 1

ring_buffer_index %= NUM_WINDOW_CHUNKS

ring_buffer_flags_end[ring_buffer_index_end] = 1 if active else 0

ring_buffer_index_end += 1

ring_buffer_index_end %= NUM_WINDOW_CHUNKS_END

# start point detection

if not triggered:

ring_buffer.append(chunk)

num_voiced = sum(ring_buffer_flags)

if num_voiced 0.8 NUM_WINDOW_CHUNKS:

sys.stdout.write(' Open ')

triggered = True

start_point = index - CHUNK_SIZE 20 # start point

# voiced_frames.extend(ring_buffer)

ring_buffer.clear()

# end point detection

else:

# voiced_frames.append(chunk)

ring_buffer.append(chunk)

num_unvoiced = NUM_WINDOW_CHUNKS_END - sum(ring_buffer_flags_end)

if num_unvoiced 0.90 NUM_WINDOW_CHUNKS_END or TimeUse 10:

sys.stdout.write(' Close ')

triggered = False

got_a_sentence = True

sys.stdout.flush()

sys.stdout.write('\n')

# data = b''.join(voiced_frames)

stream.stop_stream()

print( done recording)

got_a_sentence = False

# write to file

raw_data.reverse()

for index in range(start_point):

raw_data.pop()

raw_data.reverse()

raw_data = normalize(raw_data)

record_to_file(recording.wav, raw_data, 2)

leave = True

stream.close()

程序运行方式sudo python vad.py

分享给小伙伴们:

相关推荐

科大讯飞输入法PC体验版:语音+手写+键盘主题:科大讯飞输入法PC体验版:语音+手写+键盘

描述:... • 首款“云计算”智能语音输入法  • 语音流式识别,边说边识别  • 语音端点智能检测手写  • 键盘上直接手写,同一界面多种输入  • 笔画顺序随意组合,结果照样准确  • 竖屏叠写,长句手写一气呵成  • 横屏连写,写完左边写右边键盘  • 拼音/英文/字母面板  • 底部滑动切换键盘  • 九宫格式表情、标...

如何用声音来控IE浏览器主题:如何用声音来控IE浏览器

描述:...算机的来做。通过搜索很快找到了解决方。使用Microsoft Speech SDK+Python+PythonWin。虽然微软的语音识别引擎已经很强大了,但是要用它来字幕还有很长的路要走。字幕做不成了,不过用它来控浏览器还是错错有余的。发现使用语音功能作IE浏览器还是非常方便,只要设置好语句,IE浏览器就可以自动进行相关的作。下面是我已经实现的一些功能。(=符号前面是你要说...

Python模拟登陆实现码 回调函数的意义以及python实现实例 AS3与JS之间的简单自主题:Python模拟登陆实现码 回调函数的意义以及python实现实例 AS3与JS之间的简单自

描述:...点而已。opener = urllib2.build_opener(handler)。然后我们就可以正常的使用opener来访问网络了。小例实现的功能是模拟登录到理工的。码如下:# coding:UTF-8import urllib,urllib2,cookielibfilename = r'F:\pachong\gaoqing\dlutcookie.txt'# show cookie and save to localcookie = cookielib.MozillaCookieJar()handler = urllib2.HTTPCookieProcessor(cookie)opener = urllib2.build_opener(handler)# 记得使用urllib模块进行参数的encodep...

使用ctop在命令行中检测Linux容器能主题:使用ctop在命令行中检测Linux容器能

描述:...进行评估。基于所的数据,它可以尝试推测下层的容器技术。ctop也有助于在低内存环境中检测出谁在消耗大量的内存。功能ctop的一些功能如下: 收集CPU、内存和块输入输出的度量值 收集与拥有者、容器技术和任务统计相关的 通过任意栏对排序 以树状视图显示 折叠/展开cgroup树 选择并cgroup/容器 选择显示数据新的时间窗口 暂停新数据 检测基于system...

回调函数的意义以及python实现实例 AS3与JS之间的简单自定义参数通讯主题:回调函数的意义以及python实现实例 AS3与JS之间的简单自定义参数通讯

描述:...树,一是比较慢,二是比较耗内存,而SAX流式读取XML,比较快,占用内存少,但需要实现回调函数(handler)。当时就犯了病,被一个不是很知道的名词引起了兴趣--回调函数,后搜索学了一下,感觉需要写个什么来一下顺便加深映象,此处引用了不少各位神的经验,篇幅所限就不一一感谢了。回调函数(callback),百科的解释是这样的:回调函数就...

flash基础教程:逐帧动画、形变动画、运动动画概念及别介绍主题:flash基础教程:逐帧动画、形变动画、运动动画概念及别介绍

描述:...更改每一个连续帧在舞台上的内容来建立的动画。形状补间动画——是在两个关键帧端点之间,通过改变基本图形的形状或色变化,并由程序自动创建中间过程的形状变化而实现的动画。运动补间动画——是在两个关键帧端点之间,通过改变舞台上实例的位置、大小、旋转角度、色变化等等属,并由程序自动创建中间过程的运动变化而实现的动画。2. ...

搞笑图片

python分割语音端点检测_python的webrtc库如何实现语音端点检测 科大讯飞输入法PC体验版下载:语音+手写+...相关推荐

  1. python 判断图片中物体位置_Python 10行代码搞定图片中物体检测

    使用Python, 如何编程实现图片中的物体检测[也叫对象检测/object detection]? 怎么知道图像中有哪些物体? 或许您想要计算图像中苹果的数量? 在这篇文章中,我将向您展示如何使用P ...

  2. python的自带数据集_Python的Sklearn库中的数据集

    一.Sklearn介绍 scikit-learn是Python语言开发的机器学习库,一般简称为sklearn,目前算是通用机器学习算法库中实现得比较完善的库了.其完善之处不仅在于实现的算法多,还包括大 ...

  3. python get方法列表参数_python中requests库get方法带参数请求

    起因是想爬五等分的花嫁的漫画.这是其中的一个坑 先上代码 data={ 'cid':567464, 'page':, 'key':'', 'language':1, 'gtk':6, '_cid':5 ...

  4. python时间函数详解_Python:Numpy库基础分析——详解datetime类型的处理

    原标题:Python:Numpy库基础分析--详解datetime类型的处理 Python:Numpy库基础分析--详解datetime类型的处理 关于时间的处理,Python中自带的处理时间的模块就 ...

  5. python turtle画滑稽表情_python使用turtle库绘制奥运五环

    python使用turtle库绘制奥运五环 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令 ...

  6. android l 百度输入法,百度手机输入法Android5.1版—离线语音更省流量

    近日,百度手机输入法发布了全新安卓5.1版,主打离线语音.粤语语音.智能英文.英文单词手写.全新皮肤等功能,获得了不少用户的好评.据了解,百度手机输入法安卓5.1版在原5.0版简约风格的基础上更加专注 ...

  7. python数学公式识别_LaTeX_OCR_PRO数学公式识别增强版:中英文手写印刷公式、支持初级符号推导...

    LaTeX_OCR_PRO 数学公式识别,增强:中文公式.手写公式 Seq2Seq + Attention + Beam Search.结构如下: 1. 搭建环境 python3.5 + tensor ...

  8. python怎么实现打开摄像头_python开启摄像头以及深度学习实现目标检测方法

    最近想做实时目标检测,需要用到python开启摄像头,我手上只有两个uvc免驱的摄像头,性能一般.利用python开启摄像头费了一番功夫,主要原因是我的摄像头都不能用cv2的VideCapture打开 ...

  9. python视频行人检测_python+opencv3.4.0 实现HOG+SVM行人检测的示例代码

    参照opencv官网例程写了一个基于python的行人检测程序,实现了和自带检测器基本一致的检测效果. opencv版本:3.4.0 训练集和opencv官方用了同一个,可以从http://pasca ...

最新文章

  1. 如果你现在学Android---学习使用Kotlin进行Android开发
  2. 杭十四计算机教室,杭十四中学生做了个图书馆智能机器人
  3. 钱穆的中学读书事(作者王国华)
  4. python读取nc文件并转换成csv_Python提取netCDF数据并转换为csv文件
  5. 活水亭观书有感其一_如何将iPad置于“信息亭”模式,将其限制为单个应用程序...
  6. 简单工程验收单表格_中铁超大型工程项目-123个精细化管理手册配套表格附件,超全...
  7. python抢货程序_Python自动化xpath实现自动抢票抢货代码示例
  8. Linux学习资源汇总
  9. 【英语学习】【Level 07】U02 Live Work L2 A place to call my home
  10. 【LeetCode 剑指offer刷题】字符串题12:Valid Palindrome(回文词系列)
  11. Java数据类型处理判断
  12. s:TextInput优化
  13. spring-第十一篇之SpEL表达式
  14. 【好玩的代码雨(附源代码)】
  15. 太极团队首发:iOS 8.3完美越狱工具发布
  16. 零基础入门微信小程序开发 (2020 版)
  17. CDA备考学习学习笔记——基础知识篇(一)
  18. 【HUSTOJ】1050: 字符图形6-星号倒三角
  19. 用Python下载xkcd图片
  20. 关于智能家居,一篇绝对中立的详细指南及各类问题解答

热门文章

  1. 计算机考研 电路,2016年西安电子科技大学计算机学院电路与信号系统之电路考研复试题库...
  2. 欧几里得及拓展欧几里得
  3. 买入资产还是买入负债+穷爸爸富爸爸
  4. 分位数回归的r语言代码
  5. 插件竟能如此丝滑!甚至还能查快递??
  6. 迄今为止最好的 Windows,更新四月版 17134 系统
  7. 计算机毕业设计JAVA家具销售管理系统mybatis+源码+调试部署+系统+数据库+lw
  8. 解决ubuntu启动在紫色界面冻结
  9. 如何禁用自动创建复制拓扑知识一致性检查器(MSKB)
  10. 朱赟的技术管理课笔记