用pyaudio做一个声控打开浏览器的小程序

声控打开浏览器思路很简单:通过麦克风录音产生一个音频文件-->通过调用百度大脑的api识别音频文件中的语音并返回字符串-->通过对字符串的处理使浏览器做出反应

通过麦克风录音并产生wav文件:


CHUNK = 1024
FORMAT = pyaudio.paInt16
RATE = 8000 //一般8000的采样率能识别出人说的话
CHANNELS = 1
record_second = 5 //先设定好几个重要的待处理参数
def record_wav(to_dir=None):
    if to_dir == None:
        to_dir=‘./‘

    pa = pyaudio.PyAudio()   //产生pyaudio对象

    stream = pa.open(format=FORMAT,
                     channels = CHANNELS,
                     rate = RATE,
                     input=True,
                     frames_per_buffer = CHUNK)//初始化流

    sava_buffer = []

    for i in range(0,int(RATE/CHUNK*record_second)):
        audio_data = stream.read(CHUNK)
        sava_buffer.append(audio_data)//将音频文件写入列表

    stream.stop_stream()
    stream.close()
    pa.terminate()

    file_name = datetime.now().strftime("%Y-%m-%d_%H_%M_%S")+‘.wav‘

    file_path = to_dir+file_name//创建保存文件目录

    wf = wave.open(file_path,‘wb‘)
    wf.setframerate(RATE)
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(pa.get_sample_size(FORMAT))
    wf.writeframes(b‘‘.join(sava_buffer))        //写入文件

    wf.close()

    return file_path

调用百度大脑api:

def baiduys(object):
    VOICE_RATE = 8000
    WAVE_FILE = object
    USER_ID = ‘joker‘
    WAVE_TYPE = ‘wav‘

    baidu_server = ‘https://openapi.baidu.com/oauth/2.0/token?‘
    grant_type = ‘client_credentials‘

  //以下两行需要自己去申请百度开发者账号以获取
    client_id=‘‘
    client_secret = ‘‘

    url = baidu_server+‘grant_type=‘+grant_type+‘&client_id=‘+client_id+‘&client_secret=‘+client_secret  //以上操作均为生成一个用来请求token的url

    res = urllib.request.urlopen(url).read()

    data = json.loads(res)//将json转换为字典

    token = data[‘access_token‘]

    with open(WAVE_FILE,‘rb‘) as f://打开wav音频文件
        fe = f.read()
        speech =  base64.b64encode(fe)
        speech1 = speech.decode(‘utf-8‘)

        size = os.path.getsize(WAVE_FILE)

     //将字典转换为json用来传输
        update = json.dumps({"format":WAVE_TYPE,"rate":VOICE_RATE,"channel":1,‘token‘:token,‘cuid‘:USER_ID,‘speech‘:speech1,‘len‘:size})

        update1 = update.encode(‘utf-8‘)

        headers = {‘Content-Type‘:‘application/json‘}

        url = ‘https://vop.baidu.com/server_api‘

        req = urllib.request.Request(url,update1,headers)

        r= urllib.request.urlopen(req)//通过上传语音文件以获得识别内容

        t= r.read()

        ans =json.loads(t) //获得的内容仍是json

        if ans[‘err_msg‘]==‘success.‘:
            result = ans[‘result‘][0].encode(‘utf-8‘)

            if result!=‘‘:
                return result.decode(‘utf-8‘)
            else:
                print(u‘不存在文件0‘)
        else:
            print(u‘错误‘)

处理字符串并作出反应:

def text_open_browser(text):
    url = ""
    if text:
        if len(re.split(u"谷歌",text))>1 or len(re.split(‘google‘,text))>1:
            url = ‘https://www.google.com‘
        elif len(re.split(u‘百度‘,text))>1 or len(re.split(‘baidu‘,text))>1:
            url = ‘https://www.baidu.com‘
    if text != "":
        webbrowser.open_new_tab(url)
    else:
        print(‘no‘)

就是一个简单的关键词检索并用webbrowser模块根据关键词所匹配的网址打开浏览器。。。。

完整代码:

import base64
from datetime import datetime
import json
import os
import urllib.request

import wave
import webbrowser

import pyaudio
import re

CHUNK = 1024
FORMAT = pyaudio.paInt16
RATE = 8000
CHANNELS = 1
record_second = 5
def record_wav(to_dir=None):
    if to_dir == None:
        to_dir=‘./‘

    pa = pyaudio.PyAudio()

    stream = pa.open(format=FORMAT,
                     channels = CHANNELS,
                     rate = RATE,
                     input=True,
                     frames_per_buffer = CHUNK)

    sava_buffer = []

    for i in range(0,int(RATE/CHUNK*record_second)):
        audio_data = stream.read(CHUNK)
        sava_buffer.append(audio_data)

    stream.stop_stream()
    stream.close()
    pa.terminate()

    file_name = datetime.now().strftime("%Y-%m-%d_%H_%M_%S")+‘.wav‘

    file_path = to_dir+file_name

    wf = wave.open(file_path,‘wb‘)
    wf.setframerate(RATE)
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(pa.get_sample_size(FORMAT))
    wf.writeframes(b‘‘.join(sava_buffer))

    wf.close()

    return file_path

def text_open_browser(text):
    url = ""
    if text:
        if len(re.split(u"谷歌",text))>1 or len(re.split(‘google‘,text))>1:
            url = ‘https://www.google.com‘
        elif len(re.split(u‘百度‘,text))>1 or len(re.split(‘baidu‘,text))>1:
            url = ‘https://www.baidu.com‘
    if text != "":
        webbrowser.open_new_tab(url)
    else:
        print(‘no‘)

def baiduys(object):
    VOICE_RATE = 8000
    WAVE_FILE = object
    USER_ID = ‘joker‘
    WAVE_TYPE = ‘wav‘

    baidu_server = ‘https://openapi.baidu.com/oauth/2.0/token?‘
    grant_type = ‘client_credentials‘
    client_id=‘‘
    client_secret = ‘‘

    url = baidu_server+‘grant_type=‘+grant_type+‘&client_id=‘+client_id+‘&client_secret=‘+client_secret

    res = urllib.request.urlopen(url).read()

    data = json.loads(res)

    token = data[‘access_token‘]

    with open(WAVE_FILE,‘rb‘) as f:
        fe = f.read()
        speech =  base64.b64encode(fe)
        speech1 = speech.decode(‘utf-8‘)

        size = os.path.getsize(WAVE_FILE)

        update = json.dumps({"format":WAVE_TYPE,"rate":VOICE_RATE,"channel":1,‘token‘:token,‘cuid‘:USER_ID,‘speech‘:speech1,‘len‘:size})

        update1 = update.encode(‘utf-8‘)

        headers = {‘Content-Type‘:‘application/json‘}

        url = ‘https://vop.baidu.com/server_api‘

        req = urllib.request.Request(url,update1,headers)

        r= urllib.request.urlopen(req)

        t= r.read()

        ans =json.loads(t)

        if ans[‘err_msg‘]==‘success.‘:
            result = ans[‘result‘][0].encode(‘utf-8‘)

            if result!=‘‘:
                return result.decode(‘utf-8‘)
            else:
                print(u‘不存在文件0‘)
        else:
            print(u‘错误‘)

if __name__ ==‘__main__‘:
    to_dir = ‘./‘
    file_path = record_wav(to_dir)
    file_path1 = ‘C:\\Users\eexf\PycharmProjects\mcc‘+file_path

    text = baiduys(file_path1)
    print(text)

    text_open_browser(text)

时间: 2025-01-13 04:28:40

用pyaudio做一个声控打开浏览器的小程序的相关文章

python(三)一个文件读写操作的小程序

我们要实现一个文件读写操作的小程序 首先我们有一个文件 我们要以"============"为界限,每一个角色分割成一个独立的txt文件,按照分割线走的话是分成 xiaoNa_1.txt xiaoBing_1.txt xiaoNa_2.txt xiaoBing_2.txt 这样格式的四个文件 下面上代码: #定义一个保存文件的函数 def save_file(xiaoNa,xiaoBing,count): file_name_xiaoBing = 'xiaoBing_'+str(cou

为数据挖掘小组写的一个用于造数据的小程序

最近有个数据挖掘的项目,要求在文本里面写入随机字母并且要1000W个 于是就写了个程序用来造数据并记录一下 程序写的时候遇到的问题 1 未考虑内存溢出的情况,大批量的把数据写入导致内存溢出 以后需要谨慎对待 目前完整版 package test; import java.io.File; import java.io.FileWriter; import java.io.IOException; import org.apache.commons.io.FileUtils; import org

使用cefsharp在winform中嵌套浏览器,解决程序闪退问题,你也可以做一个红芯浏览器^v^

使用cefsharp在winform中嵌套浏览器 简单使用cefsharp在winform中嵌套浏览器 在上一节,我们学习了如何简单地在winform中嵌入chromium浏览器,我在使用这个开发项目时,需要点击一个按钮,弹出嵌入浏览器的窗体,出现一个问题,就是第一次点击按钮可以正常打开浏览器,第二次点击就会出现卡壳,闪退问题.由于对于chromium这个庞大的程序不太了解,上网搜索相关文章解决了该问题: 就是在嵌入浏览器的窗体类中不能用Cef.shutdown();需要在调用的主窗体中才能调用

做一个拥有自己站点的java程序员

有个事情和大家分享下,有个自己做了三年java开发的人问我,说想建一个博客类型的网站,主要发表个人的文章,然后用户可以留言,大概就是这么个简单的东西,应该怎么去做.我耐心的和他解释道,应该按照什么样的步骤去做,我解释完后满以为他已经完全懂了,毕竟就这么点东西,很多不是搞技术开发的人,像前十年前的很多站长都是拿本书自学和不断的在百度,很多建的站都是风生水起,我觉得程序员是自带建站光环的,所以解释完毕后以为就功德圆满了.过了一段时间,这个人又找到我,并发给我了一个ip地址,说个人站建好了,叫我看看并

用PyQt5和python3.6做一个最简单的GUI的程序

一般的程序都要有个GUI来实现人机交互的功能,今天我们来用PyQt来做一个最简单的程序 软件需求:python3.6 用的是Anaconda3.6(自带PyQt5,pip)    pycharm PyQt5    QtTools 环境安装和配置 由于Anaconda自带了PyQt5,不用再安装,但要用pip下载QtTools. pip install PyQt5-tools 如果装的不是Anaconda,可以在pycharm里查一下有没有装pyqt的模块,没有的话直接pip下载安装 pip in

一个小时快速搭建微信小程序

「小程序」这个划时代的产品发布快一周了,互联网技术人都在摩拳擦掌,跃跃欲试.可是小程序目前还在内测,首批只发放了 200 个内测资格(泪流满面).本以为没有 AppID 这个月就与小程序无缘了,庆幸的是微信这两天发布了正式版开发者工具,无需内测邀请也可以尝鲜了. 因此也就有了我与「小程序」的初体验,而我的感受只有一个字--爽! 选择哪个「小程序」Demo? 在知名同性交友网站 Github 上,「小程序」的 Demo 不少,但是大多只是简单的 API 演示,有的甚至直接把页面数据写在了 json

Java Date类和Calendar类的一个控制台打印日期的小程序

Java Date类和Calendar类的一个打印日期的小程序,可以直接用. package com.boy.Idate.calendar; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 控制台可视化日历 * @author 田硕 */ public class VisualCalendar {

一个unix时间戳转换的小程序

长期查看监控数据, 监控数据的时间戳格式是标准的unix时间戳, 查看费劲, 于是乎自己写了一个小程序 代码如下 #!/bin/env python #coding:utf8 #unix时间戳转换 import sys, time, os, re def com_judge():     '''     @判断执行程序是否后跟参数     '''     com_count = len(sys.argv)     if com_count == 2:         content = sys.

一个超厉害的智能小程序:可接收你的小程序客服消息,无需开发,自动接入。

它是一款智能小程序客服的小程序工具.分四步为大家测评下 ①进入小程序 ②登入账号 ③查看回复消息 ④个人中心 一.进入小程序 它四个说明:登入,注册,体验,功能 1.登入界面,如果没有账号,请 点击这里 注册 2.同时,它还贴心地准备了测试账号,点击[体验小客服] 3.四大特点:小程序智能客服,多客服接待,自动回复,消息及时推送 (PS:请在PC端注册后,在芝麻小客服后台,设置多客服,自动回复等功能) 二.登入账号 1.输入手机号+密码 2.选择小程序(如果你绑定了多个小程序,这里可以一键切换)