python编写的语音识别+机器人对话+文字播报一体

1.语音识别
这里用到了百度api的语音识别,目前开源的语音识别成文字的效果都很差,百度api的语音识别效果还可以。
在这里插入图片描述
2.机器人对话,这里用到了青云客机器人对话,通过爬虫获取对话的内容,机器人对话效果一般,没有图灵机器人灵活,但是目前免费,这个是很好的优点。
在这里插入图片描述
3.文字播报
文字转成mp3格式的音频保存,然后使用pygame播放出保存的mp3格式的语音
在这里插入图片描述
4.完整代码呈现

from aip import AipSpeech
import pyaudio
import pygame
import ffmpy
import time
import wave
import os
import requests
import json
import pyttsx3

# BaiduAPI
APP_ID = '你的id'
API_KEY = '你的key'
SECRET_KEY = '你的SECRET_KEY'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

e = pyttsx3.init()
e.runAndWait()

while True:
    # 语音识别
    CHUNK = 1024
    FORMAT = pyaudio.paInt16
    CHANNELS = 2
    RATE = 16000
    RECORD_SECONDS = 2
    WAVE_OUTPUT_FILENAME = "input.wav"
    try:
        p = pyaudio.PyAudio()

        stream = p.open(format=FORMAT,
                        channels=CHANNELS,
                        rate=RATE,
                        input=True,
                        frames_per_buffer=CHUNK)
    except:
        print("请插上录音设备!!!")
        exit()
    print("开始录音,请说话......")
    time.sleep(1)
    frames = []

    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
        data = stream.read(CHUNK)
        frames.append(data)

    print("AI:让我听听你在说什么.....")

    stream.stop_stream()
    stream.close()
    p.terminate()

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

    # FFmpeg调用
    ff = ffmpy.FFmpeg(
        executable='F:\\ffmpeg\\bin\\ffmpeg.exe',  # 不同电脑路径需要修改
        inputs={'input.wav': None},
        outputs={'output.pcm': '-f s16le -ar 16000 -ac 1 -acodec pcm_s16le -y'}
    )
    ff.run()


    # 创建函数 读取文件
    def get_file_content(filePath):
        with open(filePath, 'rb') as fp:
            return fp.read()


    # 删除.wav文件
    path = 'input.wav'
    if os.path.exists(path):
        os.remove(path)

    # 识别本地文件 语音转文字
    result_dict = client.asr(get_file_content('output.pcm'), 'pcm', 16000, {
        'dev_pid': 1537,
    })
    result_list = result_dict['result']
    user_PO = result_list[0]  # 转换后的字符串存入PO

    print("你说: %s" % user_PO)
    a = user_PO
    if "再见。" in a:
        e.say("再见")
        e.runAndWait()
        print("再见")
        exit()
    else:
        r = requests.get('http://api.qingyunke.com/api.php?key=free&appid=0&msg=' + a)
        v = json.loads(r.content)
        user_P1 = v['content']
        print("菲菲:" + v['content'])
        # AI回答转语音
        # e.say(user_P1)
        result = client.synthesis(user_P1, 'zh', 1, {
            'vol': 5, 'per': 4
        })
        if not isinstance(result, dict):
            with open('audio.mp3', 'wb') as f:
                f.write(result)


        # 自定义函数,用于播放mp3音频
        def play_mp3(file):
            pygame.mixer.init()
            pygame.mixer.music.load(file)
            pygame.mixer.music.play()
            while pygame.mixer.music.get_busy():
                time.sleep(1)
            pygame.mixer.music.stop()
            pygame.mixer.quit()


        play_mp3('audio.mp3')
        e.runAndWait()

  • 0
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧鼎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值