==========================================================================================================
写在前面:
从20201123接触ASR到现在,刚好1个月左右的时间,今天可以把ASR部分的内容写个完整的自动化测试总结贴,方便后续查阅。
1、最开始的需求是:提供3个供应商,需要对三个ASR供应商的结果进行测试,并从中选择1家性价比和识别结果比较好的引入到工作环节。
由于时间紧,任务重,可能只有1天时间就要给出结果,所以没有办法去使用自动化的形式去进行比较,所以就出来了V1.0纯手工测试和比较效果。
2、20201203又增加了两家ASR供应商,由于2个任务时间间隔有点大,而且也是一次性任务,所以第一次效果测试结束后,只是用python写了
简单的存储Excel操作,后续效果比对操作是在人工操作测试的,本次的任务也是“快急”,手头也有很多事情需要做,第2次也是人工完成,而且给出了
主观的评价分值。
3、从2次的测试结果看,都是半自动+半人工的形式,想着希望能有一种方式,能够自动的去完成ASR人工识别和测试结果,把人工给解放出来。
于是乎看了一些ASR语音转文字的评价标准和评价工具等,本来想写通过公式写一个评价算法,由于各种因素(可能比想象的要负责一些,增删改错位等)
所以最后综合考虑用HTK的HResults来实现。
所以基于此,从20201217开始,在上周搭建的python自动化测试接口框架的基础上,将读取人工结果-分析供应商ASR结果-结果转化为mlf文件-配置HResult对比-
测试结果汇总-存储Excel等信息进行完整的业务流操作进行全自动测试。
==========================================================================================================
调查和学习ASR语音转文字过程中,帮助比较多的一些信息已经汇总:
【AI模型测试】语音识别ASR的结果校对(帮助比较大)
【AI模型测试】语音转文字ASR的测试评价:HTK在windows下的配置说明
【AI模型测试】ASR语音转文字过程中遇到的问题和解决方案等
第0步:构思
1、搭建自动化测试框架
2、语音转文字的手动测试流程分析,提取自动化测试点,调查测试评价方法等
3、遇到的问题和解决方案,学习和成长
第1步:搭建自动化测试框架
既然想做接口自动化测试,那么首先手头没有自动化测试框架,所以需要搭建一个python的自动化测试框架,搜集学习网上的一些资料 ,加上自己javaUI自动化测试框架的经验借鉴。
python+logging(日志模块)+Webdriver(Pageobject页面后续用)+requests(请求模块)+HTMLReport(测试报告)+email(发送测试邮件)+ddt(Excel数据读取和写入等)+output(输出结果等)
等搭建python自动化测试框架。
通过分层分模块,来约束下各个模块下写的内容,这样方便扩展和维护等。
python的接口自动化测试框架和内容:(具体框架内容,回头有空写个自动化测试框架搭建的帖子汇总,该框架目前已经在团队里推广使用起来)
最开始先搭建的Python的UI自动化测试框架,然后在UI自动化测试框架基础上,进行增删改,形成接口自动化测试框架。
然后在接口自动化框架基础上,加上相关的ASR业务属性,以下为ASR的所有的版本迭代记录:
第2步:语音转文字自动化测试流程设计
测试流程:
1、视频MP4素材-》FFmpeg转换为wav文件-》将文件存储到testdata文件夹
2、封装微软、标贝、捷通、声智、云知声等供应商的ASR接口,存放到api文件夹
3、调用(2)封装的ASR供应商接口,对(1)语音wav文件进行识别,并将结果存储到Excel和txt文件
4、读取人工标准答案Excel文件,生成txt文件,对人工和ASR供应商生成的txt文件进行MLF处理,将文件转换为HResults需要的mlf格式
5、使用HResults对人工mlf-asr供应商mlf进行自动化比对,并将结果存储到txt和Excel文件中
6、汇总和分析结果,针对结果数据进行评价等后续操作
**遇到的问题
1、MP4文件转换为wav文件时,转换完的文件无法正常提取出文本
=》原因:转换完的格式和各供应商ASR接口需要的接口参数和码率等不一致,所以无法识别出真正的文本,就会返回随机错误的文字
2、
WER = (S + D + I ) / N = (S + D + I ) / (S + D + H )
- S 为替换的字数,常用缩写WS
- D 为删除的字数,常用缩写WD
- I 为插入的字数,常用缩写WI
-
H 为正确的字数,*是C,但我统一改用H
- N 为(S替换+ D删除+ H正确)的字数