Last active
August 29, 2015 14:19
-
-
Save mpco/e0094e7fb2d2b072845c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# -*- coding: utf-8 -*- | |
""" | |
__author__ = 'm' | |
__time__ = '15-4-20' | |
网络限制,未测试 | |
""" | |
import os | |
import re | |
import wave | |
import pyaudio | |
import requests | |
CHUNK = 1024 | |
FORMAT = pyaudio.paInt16 | |
CHANNELS = 2 | |
RATE = 8000 | |
RECORD_SECONDS = 5 | |
WAVE_OUTPUT_FILENAME = "output.wav" | |
# 录音并写入文件 | |
def record_wave(): | |
p = pyaudio.PyAudio() | |
stream = p.open(format=FORMAT, | |
channels=CHANNELS, | |
rate=RATE, | |
input=True, | |
frames_per_buffer=CHUNK) | |
print("* recording") | |
frames = [] | |
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): | |
data = stream.read(CHUNK) | |
frames.append(data) | |
print("* done recording") | |
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() | |
def speech2text(flac_file, rate, yourkey): | |
""" | |
使用Google Speech API进行语音识别 | |
""" | |
url = 'https://www.google.com/speech-api/v2/recognize?output=json&lang=zh-CN&key=' + yourkey | |
files = {'file': open(flac_file, 'rb')} | |
headers = {'Content-Type': 'audio/x-flac; rate='+str(rate)+';'} | |
# 网络不通,则可设置requests代理,https://requests-docs-cn.readthedocs.org/zh_CN/latest/user/advanced.html#id11 | |
# Socks5代理需要使用额外的包,http://blog.gohjkl.com/coder/2015/03/09/Python-Requests-socks-proxy/ | |
return_text = requests.post(url, files=files, headers=headers).text | |
# 获取识别的文本内容 | |
trans_text = re.findall('transcript\":\"(.*?)\"', return_text) | |
return ''.join(trans_text) | |
def text2cmd(cmds): | |
if cmds.find("谷歌") > -1: | |
os.system("chrome https://www.google.com") | |
if cmds.find("百度") > -1: | |
os.system("chrome https://www.baidu.com") | |
if __name__ == '__main__': | |
while True: | |
""" | |
Enter your Google API Key | |
""" | |
key = 'xxxxxxxxxxxxxxxxxxxx' | |
# 录音并写入文件 | |
record_wave() | |
# 转换 | |
os.system('flac output.wav') | |
# 语音识别 | |
cmds_text = speech2text('output.flac', RATE, key) | |
# 执行指令 | |
text2cmd(cmds_text) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment