30行Python代码打造一款简单的人工语音对话

 更新时间:2021年05月21日 11:14:11   作者:刘润森!  
使用gtts和speech_recognition实现简单的人工语音对话,通过将语音变成文本,然后文本变成语音,仅用30行代码,超级简单,对Python人工语音对话的实现过程及完整代码感兴趣的朋友一起看看吧

@Author:Runsen

1876年,亚历山大·格雷厄姆·贝尔(Alexander Graham Bell)发明了一种电报机,可以通过电线传输音频。托马斯·爱迪生(Thomas Edison)于1877年发明了留声机,这是第一台记录声音并播放声音的机器。

最早的语音识别软件之一是由Bells Labs在1952年编写的,只能识别数字。1985年,IBM发布了使用“隐马尔可夫模型”的软件,该软件可识别1000多个单词。

几年前,一个replace("?","")代码价值一个亿

如今,在Python中Tensorflow,Keras,Librosa,Kaldi和语音转文本API等多种工具使语音计算变得更加容易。

今天,我使用gtts和speech_recognition,教大家如何通过三十行代码,打造一款简单的人工语音对话。思路就是将语音变成文本,然后文本变成语音。

gtts

gtts是将文字转化为语音,但是需要在VPN下使用。这个因为要接谷歌服务器。

具体gtts的官方文档

下面,让我们看一段简单的的代码

from gtts import gTTS

def speak(audioString):
    print(audioString)
    tts = gTTS(text=audioString, lang='en')
    tts.save("audio.mp3")
    os.system("audio.mp3")
    
speak("Hi Runsen, what can I do for you?")

执行上面的代码,就可以生成一个mp3文件,播放就可以听到了Hi Runsen, what can I do for you?。这个MP3会自动弹出来的。

speech_recognition

speech_recognition用于执行语音识别的库,支持在线和离线的多个引擎和API。

speech_recognition具体官方文档

安装speech_recognition可以会出现错误,对此解决的方法是通过该网址安装对应的whl包

在官方文档中提供了具体的识别来自麦克风的语音输入的代码

下面就是 speech_recognition 用麦克风记录下你的话,这里我使用的是
recognize_google,speech_recognition 提供了很多的类似的接口。

import time
import speech_recognition as sr

# 录下来你讲的话
def recordAudio():
    # 用麦克风记录下你的话
    print("开始麦克风记录下你的话")
    r = sr.Recognizer()
    with sr.Microphone() as source:
        audio = r.listen(source)
    data = ""
    try:
        data = r.recognize_google(audio)
        print("You said: " + data)
    except sr.UnknownValueError:
        print("Google Speech Recognition could not understand audio")
    except sr.RequestError as e:
        print("Could not request results from Google Speech Recognition service; {0}".format(e))
    return data

if __name__ == '__main__':
    time.sleep(2)
    while True:
        data = recordAudio()
        print(data)

下面是我乱说的英语

对话

上面,我们实现了用麦克风记录下你的话,并且得到了对应的文本,那么下一步就是字符串的文本操作了,比如说how are you,那回答"I am fine”,然后将"I am fine”通过gtts是将文字转化为语音

# @Author:Runsen
# -*- coding: UTF-8 -*-
import speech_recognition as sr
from time import ctime
import time
import os
from gtts import gTTS


# 讲出来AI的话
def speak(audioString):
    print(audioString)
    tts = gTTS(text=audioString, lang='en')
    tts.save("audio.mp3")
    os.system("audio.mp3")


# 录下来你讲的话
def recordAudio():
    # 用麦克风记录下你的话
    r = sr.Recognizer()
    with sr.Microphone() as source:
        audio = r.listen(source)

    data = ""
    try:
        data = r.recognize_google(audio)
        print("You said: " + data)
    except sr.UnknownValueError:
        print("Google Speech Recognition could not understand audio")
    except sr.RequestError as e:
        print("Could not request results from Google Speech Recognition service; {0}".format(e))

    return data


# 自带的对话技能(逻辑代码:rules)
def jarvis():
    while True:
        data = recordAudio()
        print(data)
        if "how are you" in data:
            speak("I am fine")
        if "time" in data:
            speak(ctime())
        if "where is" in data:
            data = data.split(" ")
            location = data[2]
            speak("Hold on Runsen, I will show you where " + location + " is.")
            # 打开谷歌地址
            os.system("open -a Safari https://www.google.com/maps/place/" + location + "/&")

        if "bye" in data:
            speak("bye bye")
            break


if __name__ == '__main__':
    # 初始化
    time.sleep(2)
    speak("Hi Runsen, what can I do for you?")

    # 跑起
    jarvis()

当我说how are you?会弹出I am fine的mp3

当我说where is Chiana?会弹出Hold on Runsen, I will show you where China is.的MP3

同样也会弹出China的谷歌地图

本项目对应的Github

以上就是30行Python代码打造一款简单的人工语音对话的详细内容,更多关于Python人工语音对话的资料请关注脚本之家其它相关文章!

相关文章

  • 如何在Python 中获取单成员集合中的唯一元素

    如何在Python 中获取单成员集合中的唯一元素

    这篇文章主要介绍了如何在Python 中获取单成员集合中的唯一元素,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Python中用函数作为返回值和实现闭包的教程

    Python中用函数作为返回值和实现闭包的教程

    这篇文章主要介绍了Python中用函数作为返回值和实现闭包的教程,代码基于Python2.x版本,需要的朋友可以参考下
    2015-04-04
  • py3nvml实现GPU相关信息读取的案例分析

    py3nvml实现GPU相关信息读取的案例分析

    这篇文章主要介绍了py3nvml实现GPU相关信息读取,此时就可以考虑使用py3nvml这样的工具,针对于GPU任务执行的过程进行细化的分析,有助于提升GPU的利用率和程序执行的性能,需要的朋友可以参考下
    2022-01-01
  • python多线程互斥锁与死锁问题详解

    python多线程互斥锁与死锁问题详解

    大家好,本篇文章主要讲的是python多线程互斥锁与死锁问题详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Python调用Prometheus监控数据并计算

    Python调用Prometheus监控数据并计算

    Prometheus是一套开源监控系统和告警为一体,由go语言(golang)开发,是监控+报警+时间序列数据库的组合。本文将介绍Python如何调用Prometheus实现数据的监控与计算,需要的可以参考一下
    2021-12-12
  • 用Python编写一个简单的FUSE文件系统的教程

    用Python编写一个简单的FUSE文件系统的教程

    这篇文章主要介绍了用Python编写一个简单的FUSE文件系统的教程,对于数据的备份很有帮助,需要的朋友可以参考下
    2015-04-04
  • Pandas中多重索引技巧的实现

    Pandas中多重索引技巧的实现

    Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下
    2025-02-02
  • python将字符串列表转换为数值列表的几种方法

    python将字符串列表转换为数值列表的几种方法

    这篇文章主要介绍了python将字符串列表转换为数值列表的几种方法,包括使用map()和float()/int()、列表推导式、pandas库以及numpy库,每种方法都有其适用场景,如小型列表、灵活转换、处理复杂数据集和大规模数据计算等,需要的朋友可以参考下
    2025-04-04
  • Python3.5迭代器与生成器用法实例分析

    Python3.5迭代器与生成器用法实例分析

    这篇文章主要介绍了Python3.5迭代器与生成器用法,结合实例形式分析了Python3.5列表生成式、生成器、迭代器等相关原理与用法,需要的朋友可以参考下
    2019-04-04
  • python删除文本中行数标签的方法

    python删除文本中行数标签的方法

    这篇文章主要为大家详细介绍了python删除文本中行数标签的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论