OpenAI Whisper 语音转文本实验

news2024/11/21 0:31:50

           为了实现语音方式与大语言模型的对话,需要使用语音识别(Voice2Text)和语音输出(Text2Voice)。感觉这项技术已比较成熟了,国内也有许多的机构开发这项技术,但是像寻找一个方便测试的技术居然还不容易。Google 墙了,微软需要注册,而国内的资料很少,最后选择了OpenAI 的Whisper。

 Whisper 简介

        Whisper是OpenAI于2022年12月发布的语音处理系统。它以英语为主,支持99种语言,包括中文。

   提供了从tiny到large,从小到大的五种规格模型,适合不同场景。

Large 模型有2.88G,Basic 模型大约几百M。测试下来,Large 模型比较慢,Basic比较快。

Whisper 安装

pip install   openai-whisper

安装 ffmpeg

 whisper 要使用ffmpeg 程序,在windows 的PowerShell 下安装的方式:

choco install ffmpeg

其它一些模块的安装

测试的语音文件

在网络上找中文的语音文件好像不太容易,不是收费,就是文不对题,在github 上找了一个英文的语音样文件。

audio-samples.github.io

 Whisper 语音转文本

import whisper
print("Start....")
whisper_model = whisper.load_model("large")
print("Begine...")
result = whisper_model.transcribe("E:/yao2024/sample-0.wav",language='en')
print(", ".join([i["text"] for i in result["segments"] if i is not None]))

程序运行时要下载相关的模型数据,花费一段时间 

Langchain 语音助手

        Langchain 有语音助手链,它使用pyttsx3speech_recognition库分别将文本转换为语音和语音转换为文本。

speech_recognition

是一个语音识别引擎,它可以调用多个语音识别的API ,其中包括:

  • CMU Sphinx (works offline)

  • Google Speech Recognition

  • Google Cloud Speech API

  • Wit.ai

  • Microsoft Azure Speech

  • Microsoft Bing Voice Recognition (Deprecated)

  • Houndify API

  • IBM Speech to Text

  • Snowboy Hotword Detection (works offline)

  • Tensorflow

  • Vosk API (works offline)

  • OpenAI whisper (works offline)

  • Whisper API

 我们选择了OpenAI_whisper 离线方式。

实验程序

pyttsx3 的实验

import pyttsx3
#语音播放 
pyttsx3.speak("How are you?")
pyttsx3.speak("I am fine, thank you")
pyttsx3.speak("太行,王屋二山,方七百里,高万仞,本在冀州之南,河阳之北。")

对话程序

import  speech_recognition  as sr
import pyttsx3
from langchain.chat_models import ErnieBotChat
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferWindowMemory
llm= ErnieBotChat(model_name='ERNIE-Bot', #ERNIE-Bot
                    ernie_client_id='FAiHIjSQqH5gAhET3sHNTkiH',
                    ernie_client_secret='wlIBmWY4d2Zvrs0GyQbT3JeTXV6kdub4',
                    temperature=0.75,
                    )
template = """Assistant is a large language model trained by OpenAI.
Assistant is designed to be able to assist with a wide range of tasks, from answering simple questions to providing in-depth explanations and discussions on a wide range of topics. As a language model, Assistant is able to generate human-like text based on the input it receives, allowing it to engage in natural-sounding conversations and provide responses that are coherent and relevant to the topic at hand.
Assistant is constantly learning and improving, and its capabilities are constantly evolving. It is able to process and understand large amounts of text, and can use this knowledge to provide accurate and informative responses to a wide range of questions. Additionally, Assistant is able to generate its own text based on the input it receives, allowing it to engage in discussions and provide explanations and descriptions on a wide range of topics.
Overall, Assistant is a powerful tool that can help with a wide range of tasks and provide valuable insights and information on a wide range of topics. Whether you need help with a specific question or just want to have a conversation about a particular topic, Assistant is here to assist.
Assistant is aware that human input is being transcribed from audio and as such there may be some errors in the transcription. It will attempt to account for some words being swapped with similar-sounding words or phrases. Assistant will also keep responses concise, because human attention spans are more limited over the audio channel since it takes time to listen to a response.
{history}
Human: {human_input}
Assistant:"""
prompt = PromptTemplate(
    input_variables=["history", "human_input"],
    template=template
)
chatgpt_chain = LLMChain(
    llm=llm,
    prompt=prompt,
    verbose=True,
    memory=ConversationBufferWindowMemory(k=2),
)

engine = pyttsx3.init()


# 定义一个函数用于监听麦克风输入并进行处理
def listen():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print('校准中...')
        r.adjust_for_ambient_noise(source, duration=10)
        # 可选参数,用于调整麦克风灵敏度
       #  r.energy_threshold = 200
        r.pause_threshold=0.5
        print('好的,开始吧!')
        while (1):
            text = ''
            print('正在倾听...')
            try:
                audio = r.listen(source, timeout=10)
                print('识别中...')
                # 进行语音识别
                text = r.recognize_whisper(audio)
                print(text)
            except Exception as e:
                unrecognized_speech_text = f'抱歉,我没听清楚。错误信息: {e}s'
                text = unrecognized_speech_text
            print(text)
            # 使用语言模型生成对话回复
            response_text = chatgpt_chain.predict(human_input=text)
            print(response_text)
            # 使用语音合成引擎将回复转换为语音并播放
            engine.say(response_text)
            engine.runAndWait()


listen()

讲英文,回答英文,讲中文它会回答中文,但是识别同音字效果并不好。不知道如何提高同音字识别效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1674981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

根据后端返回下拉请求地址,前端动态请求拿到下拉数据渲染

完整代码如下&#xff1a; <template> <!-- 资源列表页 --> <div> <div> <i click"$router.go(-1)" style" color: #409eff; cursor: pointer; margin-right: 5px; font-size: 18px; " class"el-icon-back" ><…

C++ 关键字 :using

在 C 庞大语法体系中&#xff0c; using 关键字十分的灵活多用&#xff0c;它可不简单。 除了常规的引入命名空间之外&#xff0c;它还可用于引入枚举类型枚举器、定义常规类型别名、模板类型别名等。在定义常规类型别名方面与C语言中的typedef、#define与之相似&#xff0c;但…

jupyter notebook中调整图片大小

截屏 ctrl V 这个目前只能保证是截屏大小&#xff0c;改变不了&#xff0c;要么之久 把图形缩小后再截图 感觉很模糊 png文件导入 markdown 代码1 <img src"./1.png" width250 height200>markdown 代码2 <img src"./1.png" width938 height…

文献速递:多模态深度学习在医疗中的应用--多模式婴儿脑分割技术:模糊引导深度学习

Title 题目 Multimodal Infant Brain Segmentation by Fuzzy-informed Deep Learning 多模式婴儿脑分割技术&#xff1a;模糊引导深度学习 01 文献速递介绍 日益普及的非侵入式婴儿脑磁共振图像&#xff08;MRI&#xff09;为准确理解脑主要发展轨迹的动态性提供了机会&…

普中STM32F103ZET6开发板让DS0和DS1两个LED同时亮

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.运行效果 一.前言 在这套stm32教程中,只教学了如何亮DS0,而没有教学如何亮DS1。 二.代码 main.c #include "stm32f10x.h"void Syst

一篇文章告诉你聚类算法的作用和怎么用聚类算法!建议收藏!(下篇)

EM聚类 EM聚类 基于概率分布对数据进行建模&#xff0c;通过迭代的期望和最大化步骤来估计模型参数&#xff0c;并将数据分为不同的聚类。EM聚类通常用于处理混合分布的数据&#xff0c;其中每个聚类被建模为一个概率分布。 原理介绍 EM聚类的核心思想是将数据集中的每个样本…

二分答案(区间范围)

D. Jumping Through Segments 输入数据 4 5 1 5 3 4 5 6 8 10 0 1 3 0 2 0 1 0 3 3 3 8 10 18 6 11 4 10 20 0 5 15 17 2 2 输出范围 7 0 5 13#include<bits/stdc.h> #define int long long using namespace std; typedef pair<char,int>PII; const int N2e510;…

应急响应-Windows-挖矿病毒

随着虚拟货币市场的繁荣&#xff0c;挖矿病毒已成为网络安全领域一大挑战。该类病毒利用计算机资源进行加密货币的挖掘&#xff0c;给个人用户和企业网络带来了严重的安全风险。本文将针对挖矿病毒的应急响应和防范措施进行分析和总结。 一.判断挖矿病毒 服务器突然发现CPU资…

树莓派发送指令控制FPGA板子上的流水灯程序

文章目录 前言一、树莓派简介二、整体实现步骤三、树莓派设置四、树莓派串口代码五、Verilog代码5.1 串口接收模块5.2 流水灯模块 六、quartus引脚绑定七、 运行效果总结参考 前言 ​ 本次实验的目的是通过树莓派和FPGA之间的串口通信&#xff0c;控制FPGA开发板上的小灯。实验…

OpenAI 发布新款大型语言模型 GPT-4o,带大家了解最新ChatGPT动态。

OpenAI 发布新款大型语言模型 GPT-4o 昨日OpenAI 举办了一场线上活动&#xff0c;正式发布了其最新研发的 AI 模型 GPT-4o&#xff0c;并详细介绍了该模型的强大功能和未来发展规划。此次发布标志着 AI 技术的重大突破&#xff0c;为用户提供了更加便捷、高效的 AI 工具&#…

css多种布局方式

css多种布局方式 简介标准流布局&#xff08;主要依赖margin\padding&#xff09;浮动布局&#xff08;float&#xff09;定位布局&#xff08;position&#xff09;弹性布局&#xff08;flex&#xff09;网格布局&#xff08;grid&#xff09;多列布局&#xff08;column&…

【论文阅读】<YOLOP: You Only Look Once for PanopticDriving Perception>

Abstract 全视驾驶感知系统是自动驾驶的重要组成部分。一个高精度的实时感知系统可以帮助车辆在驾驶时做出合理的决策。我们提出了一个全视驾驶感知网络&#xff08;您只需寻找一次全视驾驶感知网络&#xff08;YOLOP&#xff09;&#xff09;&#xff0c;以同时执行交通目标检…

7.STL中string的一些超常用函数 (附习题)

目录 1.find 2.atoi 3.to_string 4.getline 【leetcode 习题】 387.字符串中的第一个唯一字符 125. 验证回文串 1.find 1.查找第一次出现的目标字符串&#xff1a;说明&#xff1a;如果查找成功则输出查找到的第一个位置&#xff0c;否则返回-1&#xff1b; s1.find(s2…

嗨动PDF编辑器怎么删除pdf空白页?教程来啦!

嗨动PDF编辑器怎么删除pdf空白页&#xff1f;在日常的工作和学习中&#xff0c;PDF文件因其跨平台兼容性和稳定性而备受青睐。然而&#xff0c;在编辑PDF文件时&#xff0c;我们往往会遇到一些令人头疼的问题&#xff0c;其中最常见的就是空白页。空白页不仅浪费了宝贵的存储空…

ESP32-S3+86盒线控器方案,含开发时问题技术解答

随着智能家居产品越来越多&#xff0c;线控器应用也加大&#xff0c;86盒线控器跟智能吹风机联动&#xff0c;跟中央空调联动&#xff0c;下面讲下ESP32-S386盒线控器方案在开发中遇到的问题。 一、ESP32-S386盒线控器方案&#xff1a; 1、无需网关&#xff0c;可以直接连家里…

零基础10 天入门 Web3之第3天

10 天入门 Web3之第3天 什么是以太坊&#xff0c;以太坊能做什么&#xff1f;Web3 是互联网的下一代&#xff0c;它将使人们拥有自己的数据并控制自己的在线体验。Web3 基于区块链技术&#xff0c;该技术为安全、透明和可信的交易提供支持。我准备做一个 10 天的学习计划&…

Linux系统运行级别

Linux系统运行级别&#xff1a;linux系统共有7个运行级别&#xff0c;不同的级别运行的程序和功能都是不一样的而linux系统默认是运行在一个标准级别上&#xff0c;系统运行级别文件/etc/inittab 运行级别0&#xff1a;所有进程被终止&#xff0c;机器将有序的停止&#xff0c;…

SpringBootWeb 篇-深入了解请求响应(服务端接收不同类型的请求参数的方式)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 请求响应概述 1.1 简单参数 1.2 实体参数 2.3 数组集合参数 2.4 日期参数 2.5 json 参数 2.6 路径参数 3.0 完整代码 1.0 请求响应概述 当客户端发送不同的请求参…

【专利】一种日志快速分析方法、设备、存储介质

公开号CN116560938A申请号CN202310311478.5申请日2023.03.28 是我在超音速人工智能科技股份有限公司(833753) 职务作品&#xff0c;第一发明人是董事长夫妇&#xff0c;第二发明人是我。 ** 注意** &#xff1a; 内容比较多&#xff0c;还有流程图、界面等。请到 专利指定页面…

30-10y国债利差反转的必要条件

国君宏观表示&#xff0c;30-10y期限利差定价本质上是私人部门主动加杠杆的预期&#xff0c;央行购债与资本市场的正向反馈是可以期待的一种场景&#xff0c;而企业部门的被动加杠杆须以可持续的需求动能与盈利预期作为前提。 要点&#xff1a; 期限利差的本质&#xff1a;对长…