前面有一篇博客说到了讯飞输入法,支持语音输入,也支持电脑内部音源输入,详细参考: 【实时语音转文本】PC端实时语音转文本(麦克风外音&系统内部音源)

但是它只是作为一个工具来使用,如果我们想自己做一些好玩的东西,比如通过语音来控制电脑做一些自动化的操作等,我们先要收集语音转换为文本,然后再通过解析文本来操作平台,那我们就需要获取到语音识别的内容,通过讯飞输入法这种就不能办到了,这时候我们需要使用API来处理,通过对比国内外一些大厂的智能语音API,发现还是Google的API更加【智能】,更加【听得懂人话】。

说明:因为是使用了Google的API,所以需要具备一定的网络环境,需要能访问Google。

官方文档: Cloud Speech-to-Text>文档>准备工作

根据官方文档一步步设置就行了,这里简单说明以下流程:

  • 设置Google Cloud 项目
  • 确保有一个结算账号关联到该项目
  • 启用 Speech-to-Text API
  • 创建新的服务账号
  • 创建JSON密钥
  • 设置身份验证环境变量

语音文件转文本Python示例

准备python环境安装依赖:

  • google-cloud-speech==2.16.2
  • pyaudio==0.2.12
  • six==1.16.0
if __name__ == "__main__" : # Imports the Google Cloud client library from google . cloud import speech import os os . environ [ "http_proxy" ] = "http://127.0.0.1:7890" os . environ [ "https_proxy" ] = "http://127.0.0.1:7890" os . environ [ 'GOOGLE_APPLICATION_CREDENTIALS' ] = "xxxxx.json" # Instantiates a client client = speech . SpeechClient ( ) # The name of the audio file to transcribe gcs_uri = "gs://cloud-samples-data/speech/brooklyn_bridge.raw" audio = speech . RecognitionAudio ( uri = gcs_uri ) config = speech . RecognitionConfig ( encoding = speech . RecognitionConfig . AudioEncoding . LINEAR16 , sample_rate_hertz = 16000 , language_code = "en-US" , # Detects speech in the audio file response = client . recognize ( config = config , audio = audio ) for result in response . results : print ( "Transcript: {}" . format ( result . alternatives [ 0 ] . transcript ) )

控制台输出:
在这里插入图片描述

麦克风语音转文本Python示例

准备python环境安装依赖:

  • google-cloud-speech==2.16.2
  • pyaudio==0.2.12
  • six==1.16.0
#!/usr/bin/env python
from __future__ import division
import re
import sys
from google.cloud import speech
import pyaudio
from six.moves import queue
import os
os.environ["http_proxy"] = "http://127.0.0.1:7890"
os.environ["https_proxy"] = "http://127.0.0.1:7890"
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "xxxx.json"
# Audio recording parameters
RATE = 16000
CHUNK = int(RATE / 10)  # 100ms
class MicrophoneStream(object):
    """Opens a recording stream as a generator yielding the audio chunks."""
    def __init__(self, rate, chunk):
        self._rate = rate
        self._chunk = chunk
        # Create a thread-safe buffer of audio data
        self._buff = queue.Queue()
        self.closed = True
    def __enter__(self):
        self._audio_interface = pyaudio.PyAudio()
        self._audio_stream = self._audio_interface.open(
            format=pyaudio.paInt16,
            # The API currently only supports 1-channel (mono) audio
            # https://goo.gl/z757pE
            channels=1,
            rate=self._rate,
            input=True,
            frames_per_buffer=self._chunk,
            # Run the audio stream asynchronously to fill the buffer object.
            # This is necessary so that the input device's buffer doesn't
            # overflow while the calling thread makes network requests, etc.
            stream_callback=self._fill_buffer,
        self.closed = False
        return self
    def __exit__(self, type, value, traceback):
        self._audio_stream.stop_stream()
        self._audio_stream.close()
        self.closed = True
        # Signal the generator to terminate so that the client's
        # streaming_recognize method will not block the process termination.
        self._buff.put(None)
        self._audio_interface.terminate()
    def _fill_buffer(self, in_data, frame_count, time_info, status_flags):
        """Continuously collect data from the audio stream, into the buffer."""
        self._buff.put(in_data)
        return None, pyaudio.paContinue
    def generator(self):
        while not self.closed:
            # Use a blocking get() to ensure there's at least one chunk of
            # data, and stop iteration if the chunk is None, indicating the
            # end of the audio stream.
            chunk = self._buff.get()
            if chunk is None:
                return
            data = [chunk]
            # Now consume whatever other data's still buffered.
            while True:
                try:
                    chunk = self._buff.get(block=False)
                    if chunk is None:
                        return
                    data.append(chunk)
                except queue.Empty:
                    break
            yield b"".join(data)
def listen_print_loop(responses):
    """Iterates through server responses and prints them.
    The responses passed is a generator that will block until a response
    is provided by the server.
    Each response may contain multiple results, and each result may contain
    multiple alternatives; for details, see https://goo.gl/tjCPAU.  Here we
    print only the transcription for the top alternative of the top result.
    In this case, responses are provided for interim results as well. If the
    response is an interim one, print a line feed at the end of it, to allow
    the next result to overwrite it, until the response is a final one. For the
    final one, print a newline to preserve the finalized transcription.
    num_chars_printed = 0
    for response in responses:
        if not response.results:
            continue
        # The `results` list is consecutive. For streaming, we only care about
        # the first result being considered, since once it's `is_final`, it
        # moves on to considering the next utterance.
        result = response.results[0]
        if not result.alternatives:
            continue
        # Display the transcription of the top alternative.
        transcript = result.alternatives[0].transcript
        # Display interim results, but with a carriage return at the end of the
        # line, so subsequent lines will overwrite them.
        # If the previous result was longer than this one, we need to print
        # some extra spaces to overwrite the previous result
        overwrite_chars = " " * (num_chars_printed - len(transcript))
        if not result.is_final:
            sys.stdout.write(transcript + overwrite_chars + "\r")
            sys.stdout.flush()
            num_chars_printed = len(transcript)
        else:
            print(transcript + overwrite_chars)
            # Exit recognition if any of the transcribed phrases could be
            # one of our keywords.
            if re.search(r"\b(exit|quit)\b", transcript, re.I):
                print("Exiting..")
                break
            num_chars_printed = 0
def main():
    # See http://g.co/cloud/speech/docs/languages
    # for a list of supported languages.
    language_code = "zh"  # a BCP-47 language tag
    client = speech.SpeechClient()
    config = speech.RecognitionConfig(
        encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
        sample_rate_hertz=RATE,
        language_code=language_code,
    streaming_config = speech.StreamingRecognitionConfig(
        config=config, interim_results=True
    with MicrophoneStream(RATE, CHUNK) as stream:
        audio_generator = stream.generator()
        requests = (
            speech.StreamingRecognizeRequest(audio_content=content)
            for content in audio_generator
        responses = client.streaming_recognize(streaming_config, requests)
        # Now, put the transcription responses to use.
        listen_print_loop(responses)
if __name__ == "__main__":
    main()

通过麦克风语音会实时转为文本输出,如果需要再对结果进行处理,可以在listen_print_loop方法中修改。

以上代码是在官网的示例基础上做了修改:

其他官方示例

Google Cloud 官方示例

Speech-to-Text 示例

电脑内部语音

同样可以将麦克风设置为系统音源,这样就可以实时将电脑内的视频、语音转为文本,做个实时字幕工具也是不错的。具体操作方法参考【实时语音转文本】PC端实时语音转文本(麦克风外音&系统内部音源),只需要做一点点设置就行了。

Speech2Text 在这里使用ffmpeg / flac / Google和ruby的功能是一个简单的界面,可以将语音换为文本。 在本文的帮助下,使用来自Google的新的未记录语音API: / 我们能够在Ruby中提供一个非常简单的API,以将简单的音频解码为文本GoogleAPI尚未公开,因此可能会更改。 它似乎也非常脆弱,因为它多次返回500,因此该库具有内置的重试代码-对于较大的音频文件,可能会在检索成功结果之前返回10多个失败… 似乎API也只喜欢较小的音频文件,因此有一个内置的分块器,使我们可以将音频分成较小的块。 将此行添加到您的应用程序的Gemfile中: gem 'speech2text' 然后执行: $ bundle 或将其自己安装为: $ gem install speech2text 您还必须在本地计算机上安装ffmpeg
实时录制音频 使用Google Cloud Speech to Text API录制实时音频 该脚本为Google Cloud Speech to Text API提出的60时限限制提供了一种解决方法。 该脚本在使用API​​录缓冲区中的“音频块”之前,先将音频/麦克风输入移到缓冲区中。 这样,当现有的API客户端返回超时错误时,它将被简单地重新初始化,新客户端将继续从缓冲区录音频。 不要忘记使用GCP credentails JSON文件路径配置环境变量GOOGLE_APPLICATION_CREDENTIALS export GOOGLE_APPLICATION
音频到文本换器 这是使用Google Cloud Speech To Text API和Amazon Transcribe API进行音频到文本换的实现。 由于Google Speech To Text API对音频长度的限制,该应用程序使用Amazon Transcribe API来实现音频长度大于1分钟,而小于1分钟的音频则使用Google API处理。 克隆仓库: git clone https://github.com/aniekanoffiong/speech-to-text.git 将目录更改为文件夹: cd speech-to-text 安装依赖项: npm install 在此处获取必要的身份验证/授权凭证: Google Cloud语音文本API- Amazon Transcribe API-注册/登录帐户 在提供的配置文件中添加凭证。 GCP:c
Google Cloud Speech API是由谷歌云平台提供的,利用机器学习技术将语音换为文字的服务。这个API能识别超过80种语言和语言变体,包括中文、日语、英语甚至广东话。这次,我总结了使用Google Cloud Speech API的基本流程。 花5秒钟试用Cloud Speech API吧 在Cloud Speech API概览页,我们可以体验将语音换为文字的效果。只需要选择一种...
创建一个新项目或单击一个现有项目。 到“ API和身份验证> API”部分,然后打开以下API(您可能需要启用计费才能使用这些服务):Google Cloud Speech API 导航对API&auth >凭证,然后: 如果要使用新的服务帐户密钥,请单击创建凭证,然后选择服务帐户密钥。 创建帐户密钥后,系统将提示您下载库用于验证请求的JSON密钥文件。 如果要为现有服务帐户生成新的服务帐户密钥,请单击“生成新的JSON密钥”并下载JSON密钥文件。 https://cloud.google.com/speech-to-text https://cloud.google.com/text-to-speech google 账号 双币visa信用卡 注册google账号 访问https://cloud.google.com/speech-to-text,点击免费试用,跳到信息补全。此处需要完善个人信息和绑定 同步识别(REST 和 gRPC)将音频数据发送到 Speech-to-Text API,对该数据执行识别,并在所有音频处理完毕后返回结果。同步识别请求仅限于持续时间不超过 1 分钟的音频数据。 异步识别(REST 和 gRPC)将音频数据发送到 Speech-to-Text API 并启动长时间运行的操作。使用此操作,您可以定期轮询识别... 1. 打开https://console.cloud.google.com 2. 首先要注册google账号,有gmail就可以直接用; 3. 使用云平台服务需要填写一些信息,其中绑定信用卡是关键,最好使用VISA卡。当然google的说法是确定非机器人操作,并不会扣款;  二、新建工程 初次进入时会要求新建工程,如无特殊要求使用默认名称也可以。 三、生成密钥 在调用云...
Speech-to-Text-WaveNet:使用DeepMind的WaveNet进行的端到端句子级英语语音识别 基于DeepMind WaveNet的语音识别的张量。 (此后) 尽管和已经使用tensorflow实现了WaveNet,但它们并未实现语音识别。 这就是为什么我们决定自己实施。 Deepmind最近的一些论文很难复制。 该文件还省略了有关实施的具体细节,我们不得不以自己的方式填补空白。 这里有一些重要的注意事项。 首先,尽管本文将TIMIT数据集用于语音识别实验,但我们使用了免费的VTCK数据集。 其次,论文在膨胀的卷积层之后添加了一个平均池层,以进行下采样。 我们从wav文件中提取了 ,并删除了最终的平均池层,因为原始设置无法在我们的TitanX GPU上运行。 第三,由于TIMIT数据集具有音素标签,因此本文使用两个损失项(音素分类和下一个音素预测)对模型进行
使用Recorder.js的Google Speech to text REST API实现: Google语音文本API与Recorder.js库一起使用。它将从麦克风获取音频,并将音频数据传递到Google API Explorer API(REST API)。我们已经使用Recorder js库通过麦克风记录音频并将其存储到浏览器中内存数据库,称为“ Blob”数据,为音频格式。录制完成后还会显示录制列表。 由于Google API接受base64字符串格式的内容数据。现在,我们已将blob数据换为base64格式,并将发送到api。要使用REST api示例,也可以使用Google API资源管理器测试API。 兼容性说明: 它将适用于所有最新的浏览器,例如Chrome(版本47+) 注意:请务必在#### https:协议下运行项目,因为它不允许在安全通道中传递来自麦克
浏览器分析B站直播的直播源地址0. 前言1. 直播源查找2. 浏览器请求过程分析及思路3. 模拟实现4. 整合播放器5. 总结 0. 前言 之前只知道B站是点播的,很多up主可以上传自己的视频,也没看过B站的直播,现在来抓一下它的直播源。我们依然从浏览器分析,授人以鱼不如授人以渔,教大家如何去爬取直播源,就算失效了也不怕。 1. 直播源查找 打开其中一个直播间,F12先查看地址是否是请求的页面带入的,搜索发现没有(m3u8/flv),那么就是ajax来的了: 来检查下ajax,发现第一个ajax返回了地
浏览器抓取真实直播源地址0. 前言1. 直播源查找2. 浏览器请求过程分析及思路3. 模拟实现4. 整合播放器5. 全部源码6. 【附】真实源地址 网上搜索各种平台的直播源地址都是满天飞,但是经常会有失效的时候,因为官方也会定期的升级系统修改各种参数或链接让直播源不能永久,所以敝人一直崇尚的是授人以鱼不如授人以渔,与其给直播源别人,不如教大家如何去爬取直播源,就算失效了也不怕。 0. 前言 继虎牙直播后,网上说斗鱼的直播源是最难抓的,哦? 在抓取之前,需要了解视频直播源的分类和区别,可以自行了解hls,f
浏览器抓取真实直播源地址(纯前端JS解析源码) 网上搜索各种平台的直播源地址都是满天飞,但是经常会有失效的时候,因为官方也会定期的升级系统修改各种参数或链接让直播源不能永久,所以敝人一直崇尚的是 授人以鱼不如授人以渔,与其给直播源别人,不如教大家如何去爬取直播源,就算失效了也不怕。 0. 前言 本人业余时间喜欢用虎牙看直播,所以第一个便是想到如何抓取虎牙的直播源。 在抓取之前,需要了解视频直播源的分类和区别,可以自行了解hls,flv,m3u8等知识。 Tips: 本教程只是教大家如何利用前端调试技巧和
Google Speech API 是一种强大的语音识别服务,可以将说话换成文本。下面是实现 Speech To Text 的步骤: 1. 在 Google Cloud Platform 上创建一个项目并启用 Google Speech API。 2. 安装 Google Cloud SDK 并设置您的项目。 3. 使用 Cloud SDK 中的 gcloud 命令行工具或 API 客户端库调用 Google Speech API。 4. 将音频文件传输到 Google Speech API,使用 REST API 或 gRPC API。 5. 获取识别结果并将其换为文本格式。 请注意,使用 Google Speech API 可能需要付费。您可以查看 Google Cloud Platform 的定价表以获取更多信息。