调用百度语音AI实现语音的识别和合成

#coding:utf-8

## 先去ffmpeg官网下载(https://ffmpeg.zeranoe.com/builds/),好了之后解压缩,配一下环境变量

## 打开cmd,运行命令,安装如下的包
## pip install baidu-aip
## pip install pydub
## pip install PyAudio
## pip install Wave

""" 调用百度语音api """
from aip import AipSpeech
APP_ID = " "
API_KEY = " "
SECRET_KEY = " "
client = AipSpeech(APP_ID,API_KEY,SECRET_KEY)

def speech_synthesis(text, filepath):
    """ 语音合成:文字转语音 """
    result = client.synthesis(text, 'zh', 1, {
        'vol': 5,
        'spd': 5,
        'pit': 5,
        'per': 0,
    })
    if not isinstance(result, dict):
        with open (filepath , 'wb') as file: file.write(result)

def play_speech(filepath):
    import os
    os.system("ffplay %s"%(filepath))

# def play_speech(filepath):
    # """ 播放语音 """
    # import pyaudio
    # import wave
    # wf = wave.open(filepath, 'rb') #二进制只读方式打开wav文件
    # p = pyaudio.PyAudio()
    # stream=p.open(format=p.get_format_from_width(wf.getsampwidth()),channels=wf.getnchannels(),rate=wf.getframerate(),output=True)
    # stream = p.open(format=pyaudio.paInt16,
                    # channels=1,
                    # rate=16000,
                    # output=True) #打开数据流
    # data = wf.readframes(1024) #读取数据
    # while data != '': #播放
        # stream.write(data)
        # data = wf.readframes(1024)
    # stream.stop_stream()
    # stream.close()
    # p.terminate()

# def Conversion_sampling_rate(filepath, newfilepath):
    # """ 转换采样率 """
    # from pydub import AudioSegment
    # setframefp = AudioSegment.from_file(filepath)
    # setframefp.set_frame_rate(16000)
    # setframefp.export(newfilepath, format='wav')

def wav_to_pcm(wav_file):
    """ wav文件转为16k pcm文件 """
    import os
    pcm_file = "%s.pcm" %(wav_file.split(".")[0])
    os.system("ffmpeg -y  -i %s  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s"%(wav_file,pcm_file))
    return pcm_file

def sound_record(file_name):
    """ 录音 """
    import pyaudio
    import wave
    CHUNK = 1024
    FORMAT = pyaudio.paInt16
    CHANNELS = 1
    RATE = 16000
    RECORD_SECONDS = 3

    p = pyaudio.PyAudio()
    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)
    print("开始录音,请说话......")
    frames = []
    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
        data = stream.read(CHUNK)
        frames.append(data)
    print("录音结束!")
    stream.stop_stream()
    stream.close()
    p.terminate()

    wf = wave.open(file_name, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(b''.join(frames))
    wf.close()

def speech_recognition(filepath):
    """ 语音识别:语音转文字 """
    with open(filepath, 'rb') as fp:speechfile = fp.read()
    result = client.asr(speechfile, 'pcm', 16000, {
        'dev_pid': 1536,
    })
    try:
        res_str = result.get("result")[0]
        print(res_str)
    except:
        res_str = "error"
        print("识别没有成功")
    return res_str

# 测试
# text = "世界很复杂百度更懂你"
# synthesisfilepath = "synthesisspeech.pcm"
# synthesisfilepath = "16k.pcm"
# speech_synthesis(text, synthesisfilepath)
# wav_file = pcm_to_wav(synthesisfilepath)
# play_speech(wav_file)

# recordfilepath = "recordspeech.wav"
# sound_record(recordfilepath)
# pcm_file = wav_to_pcm(recordfilepath)
# speech_recognition(pcm_file)

""" 控制面板 """
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
import os
class App:
    def __init__(self, master):
        self.master = master
        self.master.title("调用百度AI识别语音")
        self.master.geometry("500x400")
        self.buttonimg = PhotoImage(file= os.path.join(os.path.dirname(os.path.abspath(__file__)), 'luyin - small.gif'))
        self.initWidgets()

    def initWidgets(self):
        self.button = Button(self.master, text='开始录音', image=self.buttonimg, command=self.open_sound_record, height=100,width=100)
        self.button.pack(ipadx=5, ipady=5,  pady = 20)

        self.label = Label(self.master, text="语音识别结果:")
        self.label.place(x=100,y=400,anchor='nw')
        self.label.pack()

        self.text = Text(self.master, height=3, width=200)
        self.text.place(x=150,y=400,anchor='nw')
        self.text.pack()

    def open_sound_record(self):
        recordfilepath = "recordspeech.wav"
        sound_record(recordfilepath)
        pcm_file = wav_to_pcm(recordfilepath)
        res_str = speech_recognition(pcm_file)
        if res_str == "error":
            print(messagebox.showinfo("出错","没有成功识别语音!"))
        else:
            self.text.insert("insert", res_str)
            # text = "语音识别的结果是"+res_str
            # synthesisfilepath = "synthesisspeech.pcm"
            # speech_synthesis(text, synthesisfilepath)
            # play_speech(synthesisfilepath)

root = Tk()
App(root)
root.mainloop()

原文地址:https://www.cnblogs.com/yejifeng/p/11428936.html

时间: 2024-11-10 08:23:04

调用百度语音AI实现语音的识别和合成的相关文章

REST实战——调用百度语音的云服务

RESTful REST(REpresentation State Transfer)描述了一个架构样式的网络系统,比如说web应用程序.它首次出现在2000年Roy Thomas Fielding的博士论文中,他是 HTTP 规范的主要编写者之一.REST指的是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计,即具有REST风格就是RESTful.在REST中,以资源为核心,任何事物,只要具有被引用的必要,就是一个资源.每个资源必须至少有一个统一资源标识符,即URI,URI既是资

QT调用百度语音REST API实现语音合成

QT调用百度语音REST API实现语音合成 1.首先点击点击链接http://yuyin.baidu.com/docs/tts 点击access_token,获取access_token,里面有详细步骤,不再赘述 记下链接,等会在QT程序中会用到,tex后面跟要转换成语音的文字,tok后面是刚获得的access_token 2.打开Qt Creator,新建一个QWidget应用程序,绘制界面如下 3.获取语音按钮槽函数如下 void Widget::on_pushButton_clicked

c# 利用AForge和百度AI开发实时人脸识别

baiduAIFaceIdentify项目是C#语言,集成百度AI的SDK利用AForge开发的实时人脸识别的小demo,里边包含了人脸检测识别,人脸注册,人脸登录等功能 人脸实时检测识别功能 思路是利用AForge打开摄像头,通过摄像头获取到的图像显示在winform窗体中AForge的控件中,利用AForge控件中的NewFrame事件获取要显示的每一帧的图像,获取图像传输到百度AI平台进行人脸检测,并且将检测结果反馈到界面显示的图像中.在这个过程中有两个问题,获取图像上传到百度AI平台进行

基于HTK语音工具包进行孤立词识别的使用教程

选自:http://my.oschina.net/jamesju/blog/116151 1前言 最近一直在研究HTK语音识别工具包,前几天完成了工具包的安装编译和测试,这几天又按耐不住好奇,决定自己动手搞一搞,尝试一下用这个工具包,进行简单的孤立词识别,看了几天的文档,做了各种尝试,总算跌跌撞撞的实现了,把步骤记录下来,以后作为参考. 2孤立词识别系统 在本系统中我们将要实现三个词的识别系统,词汇集为:{brightness, channel,color}. 2.1搭建步骤 A:创建语料库,b

百度语音合成AI

注意:不要使用Dw编辑PHP代码,会因为编码问题出错!!<?php require_once 'AipSpeech.php'; // 你的 APPID AK SK const APP_ID = '112***00'; const API_KEY = '6EkSeI*****aFV4GjpB2q'; const SECRET_KEY = 'mSPm*******qayf81XSbYBxu'; $client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);

调用百度API进行文本纠错

毕设做的是文本纠错方面,然后今天进组见研究生导师 .老师对我做的东西蛮感兴趣.然后介绍自己现在做的一些项目,其中有个模块需要有用到文本纠错功能. 要求1:有多人同时在线编辑文档,然后文档功能有类似Word中的在疑似错误下标浪线,或者标记高亮,并且要推荐修改选项 要求2:语料数据的获取.处理以及完善 要求3:文章写完后要有生成keyword 根据老师所讲要查阅文献,以及已有项目来分析可行性,首先想到之前曾有同学调用百度API来进行文档的纠错,然后在这里试了一下. API描述 识别输入文本中有错误的

delphi调用百度语音识别REST API

delphi调用百度语音识别REST API-20160616-感谢 魔术猫 和 DelphiTeacher 兄的帮助解决了返回中文乱码的问题!-注:语音的录音格式目前只支持评测8k/16k采样率16bit位深的单声道语音 压缩格式支持:pcm(不压缩).wav.opus.speex.amr.x-flac var sUrl, sLan, cuid, apiKey, secretKey, token, sR: string;  response: TStringStream; Stream: TF

Android集成讯飞SDK实现语音拨号、语音导航、语音启动应用

转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui 科大讯飞语音SDK的语义分析还是挺强大的,可使我们的应用更加强大. 上篇博文介绍了讯飞SDK的一些简单功能: Android 使用讯飞语音SDK 今天来看看对语义分析结果JSON的解析并处理: 实现语音拨号 首先,我们看看"打电话给张三"这句话在服务器分析之后,传给我们的JSON是什么样的: { "semantic": { "slots": {

C# 10分钟完成百度图片提取文字(文字识别)——入门篇

现在图片文字识别已经很成熟了,比如qq长按图片,点击图片识别就可以识别图片的文字,将不认识的.文字数量大的.或者不能赋值的值进行二次可复制功能. 我们现在就基于百度Ai开放平台进行个人文字识别,demo使用的是C#控制台应用程序,后续有需要的可以嫁接到指定项目中使用,比如提供选择图片,点击识别, 获取返回的值.废话不多说,上干货: 总体为: 注册百度账号api,创建自己的应用: 创建vs控制台应用程序,引入动态链接库: 编写代码调试,效果图查看: 总结. 1.创建百度AI文字识别应用   在百度