【专用名词的离线语音识别在2024年底的解决方法调查-会议签到的补充】

语音识别在会议点名中的使用

概要

提示:这里可以添加技术概要

这里只实现一个方面,每个android会议设备都可通过语音发送参会者姓名,自动转换成文字添加到人员名单.

语音采集和发送,是通路.

识别是核心.目前的模型和模块都是针对通用语言的,在这里不合适,我只要适合的名字,并且容易添加新的名字.

最后能接受自主调节.

听得懂指令. 看似需要AI支持了,难搞.

解决问题的过程

不行的一些参考

. https://alphacephei.com/vosk/lm

这是vosk的调整,明显还不支持中文

https://github.com/Uberi/speech_recognition/blob/master/reference/pocketsphinx.rst#installing-other-languages

这是pocketsphinx在speechrecognition中的表示,看似可以调整,但是难度有点太大了.

如同vosp中说的端到端,复杂程度大,但是通用性好.可是我只想加个词典,居然这么难的吗.

可以的一个package

`提示: pocketsphinx 5.0.3

这里 pypy:https://pypi.org/project/SpeechRecognition/

原理就用里面的离线库 spinx

准备中文库

这里的中文库从:

https://jaist.dl.sourceforge.net/project/cmusphinx/Acoustic and Language Models/Mandarin/cmusphinx-zh-cn-5.2.tar.gz?viasf=1

来源

https://sourceforge.net/projects/cmusphinx/files/Acoustic and Language Models/Mandarin/

它可以搭配 /SpeechRecognition/ 中的sphinx使用,然而 pocketsphinx却不行.

然后借鉴这里https://blog.csdn.net/Zbreakzhong/article/details/109127837

对中文单词进行编码

将cmusphinx-zh-cn-5.2.tar.解压后放入

,\Lib\site-packages\speech_recognition\pocketsphinx-data\zh-CN

仿照 en-US,为个别文件和文件夹命名.

然后就可以更改根目录下dic文件

演示

bash 复制代码
段*栓 d uan4 h ong2 sh uan1
石*阳 sh ix2 x iang4  ii ang2
张*嘉 zh ang1 s ai4 j ia1

准备好后

python 复制代码
 import speech_recognition as sr

# 创建Recognizer对象
r = sr.Recognizer()

# 从音频文件中识别语音
def recognize_speech_from_file(file_path):
    with sr.AudioFile(file_path) as source:
        audio = r.record(source)  # 读取音频文件
        try:
            text = r.recognize_sphinx(audio, language='zh-CN')  # 使用Google语音识别引擎识别语音
            return text
        except sr.UnknownValueError:
            print("无法识别音频")
        except sr.RequestError as e:
            print("无法连接到Google语音识别服务:{0}".format(e))

# 从麦克风实时录制并识别语音
def recognize_speech_from_microphone():
    with sr.Microphone() as source:
        print("请开始说话...")
        audio = r.listen(source)  # 实时录制音频
        try:
            text = r.recognize_sphinx(audio, language='zh-CN')  # 使用Google语音识别引擎识别语音
            return text
        except sr.UnknownValueError:
            print("无法识别音频")
        except sr.RequestError as e:
            print("无法连接到Google语音识别服务:{0}".format(e))

# 调用函数进行语音识别
file_text = recognize_speech_from_file('audio.wav')
print("音频文件识别结果:", file_text)

mic_text = recognize_speech_from_microphone()
print("麦克风实时识别结果:", mic_text)

自定义词语的拼音转换

使用pypinyin,由于一开始想,也许可以听得懂拼音.只是字错.所以想用听来的字,转成拼音, 比对字典文字的拼音. 写了一上午后发现,拼音是听不懂的. 错误率的一半以上...但是这部分代码,可以借给生成 spinx的单词注音用.

目前来看 y, ii, w,uu, shi 是shix,需要一些这样的调节,其他都是一样的.另外取消了多音字的处理.

python 复制代码
from pypinyin import pinyin, lazy_pinyin, Style
def name2py(name,duoyin=True):
   return  pinyin(name, heteronym=duoyin,style=Style.TONE3)
#names内容一行一个人名,转换成, dic的注音版
def getnames():
with open("names.txt", 'r',encoding ='utf-8') as nf:
    lines=[ln.strip() for ln in nf.readlines()]
  return lines
pinyin('中乐', heteronym=True,style=Style.TONE3)    



nms=getnames()
pys=list(map(name2py,nms))
 
#test=[['gao1', 'gao4'], ['lei2', 'lei4']]
#tar=[['gao1'],['lei2']]
#r=find1py(tar,test) 
def find1py(onepy,oneitem):
    
    if len(onepy)!=len(oneitem):
        return False
        
    for (i,j) in zip(onepy,oneitem):
        if i[0][-1].isdigit():
            i=i[0][:-1]
        print(j)
        print("i in "+i)

        if ','.join(j).find(i)==-1:
          return False
    return True         
        
def godo(name,pys=pys,nms=nms):
    target = name2py(name,duoyin=False)
    for i,item in  enumerate(pys):
        print(item)
        if  find1py(target,item):
           return nms[i]
    return None
def writedic():
   with open('zh.dic.txt','w') as wf:
      for i in nms[:30]:
         final=pinyin(i, heteronym=False,style=Style.INITIALS)
         rt=name2py(i,False)
         toget=i+" "
         
         for init ,r in zip(final,rt):
             r=r[0].replace("zhi","zhix").replace("chi","chix").replace("shi","shix")
             
             r= r.replace(init[0],'')
             r=r.replace('w','uu ').replace('y','ii ')
             
             toget+=fr"{init[0]} {r} "
         print (toget[:-1])
          

#r=godo("含风",pys,nms)
 
writedic() 
    
 

遗留的问题

忙音和部分语音会出现串位不知道为啥,有时候说一个人会出来两个

还有就是网络接口的调节, 接受语音提供反馈,vosp自身有这个功能. 目前用的没有.

遗留在问题很大继续调查

词汇在10个以上时已经不知道怎么识别了。所以看了一下其它。

https://cloud.tencent.com/document/product/1093/38416

这是腾讯在方案,关于热词的接口,最多20个。

这是一个深度学习的方案sherpa-ncnn

https://blog.csdn.net/lstef/article/details/139680825

我现在需要知道怎么搭建和训练模型。还需要一大堆语音数据去训练。

小结

提示:这里可以添加总结

虽然已经结束了初步测试,但是还有性能和调优和网络化服务的需求.

相关推荐
UR的出不克10 分钟前
基于Stacking集成学习的乙型肝炎预测模型:从数据到部署的完整实践
人工智能·机器学习·集成学习
归去来?17 分钟前
记录一次从https接口提取25G大文件csv并落表的经历
大数据·数据仓库·hive·python·网络协议·5g·https
喵手18 分钟前
Python爬虫零基础入门【第三章:Requests 静态爬取入门·第1节】你的第一个爬虫:抓取页面并保存 HTML!
爬虫·python·爬虫实战·python爬虫工程化实战·requests静态爬取·抓取网页并保存html·零基础入门python爬虫
喵手20 分钟前
Python爬虫零基础入门【第三章:Requests 静态爬取入门·第2节】伪装与会话:Headers、Session、Cookie(合规使用)!
爬虫·python·python爬虫实战·python爬虫工程化实战·requests静态爬取·伪装与会话·零基础python爬虫入门
AI营销先锋1 小时前
2026 年度深度报告跨境GEO服务商TOP3榜单原圈科技领跑AI营销,破解增长难题
人工智能
小白学大数据1 小时前
绕过拼多多 App 反抓包机制的综合逆向解决方案
开发语言·爬虫·python·自动化
使者大牙1 小时前
【单点知识】 Python装饰器介绍
开发语言·数据库·python
地理探险家1 小时前
【YOLOv8 农业实战】11 组大豆 + 棉花深度学习数据集分享|附格式转换 + 加载代码
人工智能·深度学习·yolo·计算机视觉·目标跟踪·农业·大豆
Jackson@ML1 小时前
2026最新版Sublime Text 4安装使用指南
java·python·编辑器·sublime text
我不是8神1 小时前
字节跳动 Eino 框架(Golang+AI)知识点全面总结
开发语言·人工智能·golang