热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

语音识别,文本转语音,语音转文本

1.语音合成.百度AipSpeech:synthesis():1:与合成语音的文本.2.语言.3.客户端类型,14.option{语音合成参数}:

 

1. 语音合成.
	百度AipSpeech:
	synthesis():
		1: 与合成语音的文本.
		2. 语言.
		3. 客户端类型,1 
		4.option{语音合成参数}: pit 声调  spd 语速 vol 音量 per cosplay 合成语音角色.
		
2. 语音识别
	百度 AipSpeech
		 asr():
			1. 音频文件流 
			2. 音频文件格式(pcm)
			3. 音频采样率(16000, 8k/16k)
			4. option{识别语种}: dev_pid :1537  包含简单英文的普通话识别. 
		
		录音文件基本上没有直接pcm格式,需要对音频文件进行转换.
		ffmpeg:FFmpeg公司.涉及audio 处理的基本上都用它了.
		通过os.system(FFmpeg_cmdstr)得到新的pcm文件.
		

 

1.  百度注册账号.

 

案例1 .文本转语音

from aip import AipSpeech
from aip import AipNlp
from uuid import uuid4
import setting
import os

APP_ID = "11562884"
API_KEY = "9iOLKP9VCo4nsEf3N8dcOUmT"
SECRET_KEY = "aW0kwOHFbHrQely6bcmGTzU49t2jOYdL"

baidu_client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
baidu_nlp = AipNlp(APP_ID, API_KEY, SECRET_KEY)

#.1 文本转语音.
def text2audio(text):

    file_name = f"{uuid4()}.mp3"
    print("filename:%s"%file_name)
    file_path = os.path.join(setting.AUDIO_FILE_PATH, file_name)
    print("file_path:%s" %(file_path))
    res = baidu_client.synthesis(text, "zh", 1, {
        "vol": 5,
        "pit": 7,
        "spd": 4,
        "per": 4
    })

    if type(res) == dict:
        return res

    with open(file_path, "wb") as f:
        f.write(res)

    return file_name

print(text2audio("强哥威武"))

打印结果:

filename:86375f56-f42d-447a-9bcc-829d370ff805.mp3
file_path:audio\86375f56-f42d-447a-9bcc-829d370ff805.mp3
86375f56-f42d-447a-9bcc-829d370ff805.mp3

 

案例2.语音转文本.

def audio2text(file_name):
    file_pcm_path =os.path.join(setting.AUDIO_FILE_PATH,file_name)
    cmd_str =f"ffmpeg -y -i {file_pcm_path} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {file_pcm_path}.pcm"
    os.system(cmd_str)

    with open(f"{file_pcm_path}","rb") as f :
        audio_context =f.read()

    res =baidu_client.asr(audio_context,"pcm",16000,{"dev_pid": 1537})

    if res.get('err_no'):
        return res

    return res.get("result")[0]

print(audio2text("qiang.wma"))

 

案例3. 语音识别 NLP 

#.3 语音识别
def my_nlp(text):
    if baidu_nlp.simnet("你今年几岁了 ",text).get("score")>=0.72:
        print(baidu_nlp.simnet("你今年几岁了 ",text).get("score"))
        return "我今年73岁了,不然84岁也行"

    if baidu_nlp.simnet("你叫什么名字",text).get("score")>=0.72:
        return "我的名字叫做小嘿嘿"

    if baidu_nlp.simnet("你在哪里学习",text).get("score")>=0.72:
        return "我在学习python"


print(my_nlp('你多大了'))  #结果:我今年73岁了,不然84岁也行

print(my_nlp("你的名字是")) #结果:我的名字叫做小嘿嘿

  

代码总结 :

from aip import AipSpeech
from aip import AipNlp
from uuid import uuid4
import setting
import os

APP_ID = "11562884"
API_KEY = "9iOLKP9VCo4nsEf3N8dcOUmT"
SECRET_KEY = "aW0kwOHFbHrQely6bcmGTzU49t2jOYdL"

baidu_client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
baidu_nlp = AipNlp(APP_ID, API_KEY, SECRET_KEY)

#.1 文本转语音.
def text2audio(text):

    file_name = f"{uuid4()}.mp3"
    print("filename:%s"%file_name)
    file_path = os.path.join(setting.AUDIO_FILE_PATH, file_name)
    print("file_path:%s" %(file_path))
    res = baidu_client.synthesis(text, "zh", 1, {
        "vol": 5,
        "pit": 7,
        "spd": 4,
        "per": 4
    })

    if type(res) == dict:
        return res

    with open(file_path, "wb") as f:
        f.write(res)

    return file_name
#
# print(text2audio("强哥威武"))



#.2 语音转文本.
def audio2text(file_name):
    file_pcm_path =os.path.join(setting.AUDIO_FILE_PATH,file_name)
    cmd_str =f"ffmpeg -y -i {file_pcm_path} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {file_pcm_path}.pcm"
    os.system(cmd_str)

    with open(f"{file_pcm_path}","rb") as f :
        audio_context =f.read()

    res =baidu_client.asr(audio_context,"pcm",16000,{"dev_pid": 1537})

    if res.get('err_no'):
        return res

    return res.get("result")[0]
#
print(audio2text("qiang.wma"))


#.3 语音识别
def my_nlp(text):
    if baidu_nlp.simnet("你今年几岁了 ",text).get("score")>=0.72:
        print(baidu_nlp.simnet("你今年几岁了 ",text).get("score"))
        return "我今年73岁了,不然84岁也行"

    if baidu_nlp.simnet("你叫什么名字",text).get("score")>=0.72:
        return "我的名字叫做小嘿嘿"

    if baidu_nlp.simnet("你在哪里学习",text).get("score")>=0.72:
        return "我在学习python"


print(my_nlp('你多大了'))  #结果:我今年73岁了,不然84岁也行

print(my_nlp("你的名字是")) #结果:我的名字叫做小嘿嘿
View Code

 

 

send_file 与audio标签.

py文件

from  flask  import Flask,request,send_file
import setting
import os

app =Flask(__name__)



@app.route("/getfile/")
def get_file(file_name):

    audio_file =os.path.join(setting.AUDIO_FILE_PATH,file_name)

    return send_file(audio_file)


if __name__ =="__main__":
    app.run()

 

html文件

"en">

    "UTF-8">
    




 

 


推荐阅读
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 在分析Android的Audio系统时,我们对mpAudioPolicy->get_input进行了详细探讨,发现其背后涉及的机制相当复杂。本文将详细介绍这一过程及其背后的实现细节。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 深入解析C#中app.config文件的配置与修改方法
    在C#开发过程中,经常需要对系统的配置文件进行读写操作,如系统初始化参数的修改或运行时参数的更新。本文将详细介绍如何在C#中正确配置和修改app.config文件,包括其结构、常见用法以及最佳实践。此外,还将探讨exe.config文件的生成机制及其在不同环境下的应用,帮助开发者更好地管理和维护应用程序的配置信息。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文详细介绍了如何在Unity中实现一个简单的广告牌着色器,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 本文详细介绍了如何在 Android 应用中获取系统的版本号,包括具体的应用场景和实现步骤。 ... [详细]
  • Java能否直接通过HTTP将字节流绕过HEAP写入SD卡? ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
author-avatar
先进的山楂4l4_519
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有