语音识别研究方向

人工智能96

远场语音识别
1)语音激活检测(VAD)

需求背景:在近场识别场景,比如使用语音输入法时,用户可以用手按着语音按键说话,结束之后松开,由于近场情况下信噪比(signal to noise ratio, SNR))比较高,信号清晰,简单算法也能做到有效可靠。 但远场识别场景下,用户不能用手接触设备,这时噪声比较大,SNR下降剧烈,必须使用VAD了。

2)语音唤醒 (voice trigger,VT)

需求背景:在近场识别时,用户可以点击按钮后直接说话,但是远场识别时,需要在VAD检测到人声之后,进行语音唤醒,相当于叫这个AI(机器人)的名字,引起ta的注意,比如苹果的"Hey Siri",Google的"OK Google",亚马逊Echo的"Alexa"等

3)麦克风阵列(Microphone Array)

需求背景:在会议室、户外、商场等各种复杂环境下,会有噪音、混响、人声干扰、回声等各种问题。特别是远场环境,要求拾音麦克风的灵敏度高,这样才能在较远的距离下获得有效的音频振幅,同时近场环境下又不能爆音(振幅超过最大量化精度)。另外,家庭环境中的墙壁反射形成的混响对语音质量也有不可忽视的影响。

语音增强(Speech Enhancement)
当语音信号被各种各样的噪声(包括语音)干扰甚至淹没后,从含噪声的语音信号中提取出纯净语音的过程。

声源定位(Source Localization)
使用麦克风阵列来计算目标说话人的角度和距离,从而实现对目标说话人的跟踪以及后续的语音定向拾取

去混响(Dereverberation):
声波在室内传播时,要被墙壁、天花板、地板等障碍物形成反射声,并和直达声形成叠加,这种现象称为混响。

车载语音识别难点


车内语音识别的难点很多,除了多人说话的干扰,还有胎噪、风噪,以及经常处于离线情况。 据说有的公司专门在做车内降噪,还有些公司想通过智能硬件来解决,至少目前好像还没有哪个产品解决好了这个问题,并且获得了用户的口碑称赞的。

Original: https://blog.csdn.net/cg_speech/article/details/120637265
Author: Digital-Twin
Title: 语音识别研究方向



相关阅读1

Title: dataframe 针对列条件赋值

针对单列条件:

#常规方式
import pandas as pd

df = pd.DataFrame({'one':['a', 'a', 'b', 'c'], 'two':[3,1,2,3], 'three':['C','B','C','A']})
print(df)

df.loc[df['two']==2, 'one']='x' #修改列"one"的值,推荐使用.loc
print(df)

df.one[df.two==2]='x'
print(df)
#函数方式
def fun(x):
    if x >= 30:
        return 1
    else:
        return 0

values= feature['values'].apply(lambda x: fun(x))
#若需要将改动赋值给原始的feature的列中的话,可以进行一次赋值
feature['values']=values
#或者直接一次修改后赋值。
feature['values']= feature['values'].apply(lambda x: fun(x))
import numpy as np
import pandas as pd

data = {'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou', 'Chongqing'],     'year': [2016,2016,2015,2017,2016, 2016],  'population': [2100, 2300, 1000, 700, 500, 500]}
frame = pd.DataFrame(data, columns = ['year', 'city', 'population', 'debt'])

# 使用apply函数, 如果city字段包含'ing'关键词,则'判断'这一列赋值为1,否则为0
frame['panduan'] = frame.city.apply(lambda x: 1 if 'ing' in x else 0)
print(frame)

针对多列的条件:

#常规方式
import pandas as pd

df = pd.DataFrame({'one':['a', 'a', 'b', 'c'], 'two':[3,1,2,3], 'three':['C','B','C','A']})
print(df)

df.loc[(df['two']==2) | (df['three']=='A'), 'one']='x'#推荐使用.loc
print(df)

df.loc[(df['two']==2) & (df['three']=='C'), 'one']='x'#推荐使用.loc
print(df)
import numpy as np
import pandas as pd

data = {'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou', 'Chongqing'],
       'year': [2016,2016,2015,2017,2016, 2016],
       'population': [2100, 2300, 1000, 700, 500, 500]}
frame = pd.DataFrame(data, columns = ['year', 'city', 'population', 'debt'])

def function(a, b):
    if 'ing' in a and b == 2016:
        return 1
    else:
        return 0

frame['test'] = frame.apply(lambda x: function(x.city, x.year), axis = 1)
print(frame)
def win_or_loss(df):
    cond_loss_1 = (df['gli_h'] < -80) & (df['sc_h'] > df['sc_g'])
    cond_loss_2 = (df['gli_g'] < -80) & (df['sc_h'] < df['sc_g'])
    cond_loss_3 = (df['gli_drew'] < -80) & (df['eur_h'] < df['eur_g']) & (df['sc_h'] < df['sc_g'])
    cond_loss_4 = (df['gli_drew'] < -80) & (df['eur_h'] > df['eur_g']) & (df['sc_h'] > df['sc_g'])
    cond_loss = cond_loss_1 | cond_loss_2 | cond_loss_3 | cond_loss_4
    #
    cond_win_1 = (df['gli_h'] < -80) & (df['sc_h'] < df['sc_g'])
    cond_win_2 = (df['gli_g'] < -80) & (df['sc_h'] > df['sc_g'])
    cond_win_3 = (df['gli_drew'] < -80) & (df['eur_h'] < df['eur_g']) & (df['sc_h'] > df['sc_g'])
    cond_win_4 = (df['gli_drew'] < -80) & (df['eur_h'] > df['eur_g']) & (df['sc_h'] < df['sc_g'])
    cond_win = cond_win_1 | cond_win_2 | cond_win_3 | cond_win_4
    #
    if cond_win:
        return 'win'
    elif cond_loss:
        return 'loss'
    else:
        return 'd'

def df_mark_win(df):
    cond_price = (df['price_h'] > 1.9) & (df['price_drew'] > 1.9) & (df['price_g'] > 1.9)
    cond_trd = (df['trade_h'] > 300000) | (df['trade_drew'] > 300000) | (df['trade_g'] > 300000)
    cond_bfidx = (df['index_h'] > 80) | (df['index_drew'] > 80) | (df['index_g'] > 80)
    cond_gli = (df['gli_h']<-80)>'gli_drew']<-80)>'gli_g']<-80)
    cond_hot = (df['hot_h'] > 80) | (df['hot_drew'] > 80) | (df['hot_g'] > 80)
    df_rst = df.loc[cond_price & cond_trd & cond_bfidx & cond_gli & cond_hot].copy()
    #用copy()避免在原df上操作避免报错
    df_rst['result'] = df_rst.apply(lambda x: win_or_loss(x), axis=1)
    return df_rst

Original: https://www.cnblogs.com/math98/p/10888893.html
Author: math98
Title: dataframe 针对列条件赋值

相关阅读2

Title: 目标检测之SSD:Single Shot MultiBox Detector

Single Shot MultiBox Detector论文学习

single shot指的是SSD算法属于one-stage方法,MultiBox说明SSD是多框预测。ssd和yolo都是一步式检测器,yolov1的一个缺点就是不擅长做小目标识别,ssd正好克服了这个问题,ssd的一个优势就是准确率高,但ssd512版本fps比yolo低。
语音识别研究方向

; 1.采用多尺度特征图用于检测

卷积神经网络一般是个金字塔结构,前宽后窄,所以在不同的阶段就可以得到一些比较大的特征图和一些比较小的特征图,思路和spp差不多。

一是SSD提取不同尺度的特征图来做检测,大尺度特征图(较靠前的特征图)用来检测小物体,小尺度特征图(较靠后的特征图,感受野大)用来检测大物体;
二是SSD采用了不同尺度和长宽比的先验框Anchor box,这个技巧新版本的yolov2也使用了。

语音识别研究方向

2.采用卷积进行检测

与Yolo最后采用全连接层不同,SSD直接采用卷积对不同的特征图来进行提取检测结果。

3.设置先验框

SSD借鉴了Faster R-CNN中anchor box的理念,将 feature map 切分为一个个格子feature map cell,对于每一个格子,设置的一系列固定大小的 default box(先验框) ,预测的bounding boxes(边界框)是以这些先验框为基准的,在一定程度上节约了时间。
第一部分是各个类别的置信度或者评分,SSD将背景也当做了一个特殊的类别,如果检测目标共有c 个类别,SSD其实需要预测 c+1 个置信度值,第一个置信度指的是不含目标或者属于背景的评分,这个是和yolov1不一样的。所以当第一个类别置信度最高时,表示边界框中并不包含目标。
第二部分就是边界框的location,包含4个值x,y,w,h分别表示边界框的中心坐标以及宽高,这个和yolo一样 。
每一个bb预测c个类别置信度和4个收缩量 offset(真实预测值其实是边界框相对于先验框的转换值然后就带入了四个伸缩量),每个单元设置k个先验框,特征图是mn的话就需要,就要计算mn(c+4)k次卷积
第三部分default box的 scale(大小、是一种归一化于输入尺度的面积)和 aspect ratio(横纵比)规定:
scale:语音识别研究方向

语音识别研究方向
smin是0.2,表示最底层的scale是0.2;smax是0.9,表示最高层的scale是0.9。这就保证了sk是在0.2-0.9的范围内的
aspect ratio :一共有5种{1,2,3,1/2,1/3}
所以default box 的宽的计算公式为:语音识别研究方向
高:语音识别研究方向
宽和高的乘积是 scale 的平方

; 4.正负样本

将 prior box 和 grount truth box 按照IOU(本论文叫做JaccardOverlap)进行匹配,匹配成功则这个 prior box 就是 positive example(正样本),如果匹配不上,就是 negative example(负样本),显然这样产生的负样本的数量要远远多于正样本。做了难例挖掘hard nevigating mining:将所有的匹配不上的 负样本 按照分类 loss 进行排序,选择最高的 num_sel 个 prior box 序号集合作为最终的负样本集。这里就可以利用 num_sel 来控制最后正、负样本的比例在 1:3 左右。
语音识别研究方向

5.网络结构

语音识别研究方向
SSD采用VGG16作为基础模型,然后在VGG16的基础上新增了卷积层来获得更多的特征图以用于多尺度检测的。其中VGG16中的Conv4_3层将作为用于检测的第一个特征图
Conv4_3 得到的feature map大小为3838:3838*4 = 5776,用它作为用于检测的第一个特征图,从后面新增的卷积层中提取Conv7,Conv8_2,Conv9_2,Conv10_2,Conv11_2作为检测所用的特征图,加上Conv4_3层,共提取了6个特征图,其大小分别是 38、19、10、5、3、1,越来越小的前面适合小目标,后面适合大目标。不同特征图单元cell设置的先验框数目不同,对于先验框的尺度,其遵守一个线性递增规则:随着特征图大小降低,先验框尺度线性增加。
最后得到8731个prior box边界框(可以认为 default box 是抽象类,而 prior box 是具体实例,这里用到的 default box 和 Faster RCNN中的 Anchor 很像),这是一个相当庞大的数字,所以SSD采样量还是比较大的,是密集采用,因此在map上直接秒杀yolo,当然耗时也越大。别看获取的 prior box 一共有8732个,那么可能分别有10、20个 prior box 能分别与这个 ground truth box 匹配上,匹配成功的将会作为正样本参与分类和回归训练,而未能匹配的则只会参加分类(负样本)训练。

; 6.Atrous Algorithm(Dilated Convolution膨胀卷积、空洞卷积)

atrous algorithm可以在减小卷积步长的同时扩大feature map的大小,即同等情况下,通过这个操作,我们可以获得一个更大的feature map,而实验表明,大的feature map会提升检测的性能。yolov3中也使用了。
语音识别研究方向
语音识别研究方向

7.损失函数

和Faster RCNN的基本一样,由分类和回归两部分组成,回归部分的loss是希望预测的box和prior box的差距尽可能跟ground truth和prior box的差距接近,这样预测的box就能尽量和ground truth一样。总损失是置信度损失和位置损失的加权和
语音识别研究方向
位置损失,其采用Smooth L1 loss语音识别研究方向
下面四个公式就是反编码公式
语音识别研究方向
置信度误差,其采用softmax loss
语音识别研究方向

; 8.数据扩增

为了使模型对各种输入目标大小和形状更鲁棒,每张训练图像都是通过以下选项之一进行随机采样的:1.直接使用整个原始输入图像。
2.采样一个patch(就是feature map 上裁下来一部分,使得与目标之间的最小Jaccard overlap重叠为0.1,0.3,0.5,0.7或0.9。
3.水平翻转:以0.5的概率进行水平翻转
4.光度失真: Some improvements on deep convolutional neural network based image classification中提出的

9.性能评估

语音识别研究方向
ssd支持两种规模的输入:300、512。SSD与Faster R-CNN有同样的准确度,并且与Yolo具有同样较快地检测速度。
语音识别研究方向

语音识别研究方向
采用多尺度的特征图用于检测也是至关重要的,在ssd中混合的多尺度特征混合提取方式是比较好的一种
参考文献:

Single Shot MultiBox Detector论文翻译【修改】 - GrPhoenix - 博客园

(13条消息) SSD:Single Shot MultiBox Detector_u013087645的专栏-CSDN博客

(13条消息) SSD论文笔记_chenghaoy的博客-CSDN博客_ssd论文

Single Shot MultiBox Detector论文翻译——中英文对照 - 简书

目标检测|SSD原理与实现 - 知乎

(13条消息) SSD学习小结_sinat_33454180的博客-CSDN博客

(13条消息) SSD学习总结_aift的专栏-CSDN博客

五、SSD原理(Single Shot MultiBox Detector) - keepgoing18 - 博客园

(13条消息) 论文阅读:SSD: Single Shot MultiBox Detector_Simon's Blog-CSDN博客_ssd论文原文

很值得看的深度学习笔记(七)SSD 论文阅读笔记 - xuanyuyt - 博客园

(13条消息) 目标检测常见的框架_gaotihong的博客-CSDN博客_目标检测框架

动手学深度学习

Original: https://blog.csdn.net/qq_41950533/article/details/123433208
Author: Diros1g
Title: 目标检测之SSD:Single Shot MultiBox Detector

相关阅读3

Title: 如何开发短信通知和语音功能医院信息系统(HIS系统)

助力医疗行业信息化建设

医疗行业的各种信息化系统,需要同单位内部人员、病患进行各种信息通知、交互,以期提升系统的运行效率,为医疗机构创造更大的价值。

语音识别研究方向

短信/语音在医疗领域各场景的应用

短信/语音通知,可广泛应用于医疗领域的内部管理、患者服务等各种应用场景

更多场景请查看短信语音HIS系统解决方案

预约挂号

医院】尊敬的,您已成功预约,时间,请于预约当日携带准时到达*就诊!

医院】尊敬的,您好!因临时停诊需取消您的预约,给您带来不便深感抱歉。欢迎您预约其他专家门诊。未尽事宜请致电预约专线:8*799 (预约热线服务时间8:00-17:00)

医院】尊敬的, 您的取号密码为。请您于前往***就诊。就诊时请携带本人身份证、取号密码、病历本前往取号就诊,超过时间后,本次预约失效。

医院】尊敬的 先生,已成功为您预约到,请以预约当日携带预约单提前分钟到放射科按预约单上的说明办理检查手续,如有不能及时前往,请联系家庭医生:,电话:***。

订单提醒

医院】尊敬的,您已成功取消 *的门诊挂号。

医院】尊敬的先生/女士,您好,您已成功挂号 ***。

医院】医生您好,*患者的咨询订单由于医生超时未接诊,订单已被系统自动取消。

医院】抱歉,您提交的处方,由于*,已做退款处理,退款将在三日内返还

*医院】您有一个新的患者咨询服务订单,请及时登陆市人民医院医务端处理。

医院】您有一个新的患者咨询服务订单,请及时登陆*医院医务APP处理。

接入短信功能后可能遇到的问题

医疗机构在使用短信的过程中,因为以下一些因素,可能会导致用户接收短信不畅:

客户退订或投诉过服务;
用户手机信号不稳定;
用户是携号转网号码;
短信通道拥堵;
用户手机客户端拦截。
为了应对这些情况,可使用医疗行业短信、语音通知解决方案,确保用户能正常收到短信。该方案的主要优势有:

自动侦测每条短信的发送状态,如遇失败,系统自动换通道重发;
可开启短信+语音双呼功能,如短信二次尝试失败,系统可自动切换为语音呼叫;
无需额外开发,只需要在短信平台进行配置,即可拥有失败重发、语音双呼的功能。
医疗信息系统短信/语音通知解决方案的系统流程图:

短信语音测试API地址详情请查看短信医疗行业短信、语音通知解决方案

语音识别研究方向
————————————————

PHP对接验证码短信接口DEMO示例
本文为您提供了PHP语言版本的验证码短信接口对接DEMO示例

账户注册:请通过该地址开通账户注册 - 用户中心

/开启SESSION
session_start();

header("Content-type:text/html; charset=UTF-8");

//请求数据到短信接口,检查环境是否 开启 curl init。
function Post($curlPost,$url){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_NOBODY, true);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
        $return_str = curl_exec($curl);
        curl_close($curl);
        return $return_str;
}

//将 xml数据转换为数组格式。
function xml_to_array($xml){
    $reg = "/]*>([\\x00-\\xFF]*)/";
    if(preg_match_all($reg, $xml, $matches)){
        $count = count($matches[0]);
        for($i = 0; $i < $count; $i++){
        $subxml= $matches[2][$i];
        $key = $matches[1][$i];
            if(preg_match( $reg, $subxml )){
                $arr[$key] = xml_to_array( $subxml );
            }else{
                $arr[$key] = $subxml;
            }
        }
    }
    return $arr;
}

//random() 函数返回随机整数。
function random($length = 6 , $numeric = 0) {
    PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000);
    if($numeric) {
        $hash = sprintf('%0'.$length.'d', mt_rand(0, pow(10, $length) - 1));
    } else {
        $hash = '';
        $chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789abcdefghjkmnpqrstuvwxyz';
        $max = strlen($chars) - 1;
        for($i = 0; $i < $length; $i++) {
            $hash .= $chars[mt_rand(0, $max)];
        }
    }
    return $hash;
}
//短信接口地址
$target = "http://106.ihuyi.com/webservice/sms.php?method=Submit";
//获取手机号
$mobile = $_POST['mobile'];
//获取验证码
$send_code = $_POST['send_code'];
//生成的随机数
$mobile_code = random(4,1);
if(empty($mobile)){
    exit('手机号码不能为空');
}
//防用户恶意请求
if(empty($_SESSION['send_code']) or $send_code!=$_SESSION['send_code']){
    exit('请求超时,请刷新页面后重试');
}

$post_data = "account=用户名&password=密码&mobile=".$mobile."&content=".rawurlencode("您的验证码是:".$mobile_code."。请不要把验证码泄露给其他人。");
//查看用户名 登录用户中心->验证码通知短信>产品总览->API接口信息->APIID
//查看密码 登录用户中心->验证码通知短信>产品总览->API接口信息->APIKEY
$gets =  xml_to_array(Post($post_data, $target));
if($gets['SubmitResult']['code']==2){
    $_SESSION['mobile'] = $mobile;
    $_SESSION['mobile_code'] = $mobile_code;
}
echo $gets['SubmitResult']['msg'];

欢迎大家反馈哦,获取API接口:医疗短信平台_医院短信提醒_挂号预约就诊短信发送-互亿无线

Original: https://blog.csdn.net/m0_61684517/article/details/122156901
Author: 苍穹破天
Title: 如何开发短信通知和语音功能医院信息系统(HIS系统)