python调用百度语音搜索_python调用百度语音识别实现大音频文件语音识别功能
本文为大家分享了python实现大音频文件语音识别功能的具体代码,供大家参考,具体内容如下
实现思路:先用ffmpeg将其他非wav格式的音频转换为wav格式,并转换音频的声道(百度支持声道为1),采样率(值为8000),格式转换完成后,再用ffmpeg将音频切成百度。
支持的时长(30秒和60秒2种,本程序用的是30秒)。
# coding: utf-8
import json
import time
import base64
from inc import rtysdb
import urllib2
import requests
import os
import uuid
from inc import db_config
class BaiduRest:
def __init__(self, cu_id, api_key, api_secert):
self.token_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s"
self.getvoice_url = "http://tsn.baidu.com/text2audio?tex=%s&lan=zh&cuid=%s&ctp=1&tok=%s"
self.upvoice_url = 'http://vop.baidu.com/server_api'
self.cu_id = cu_id
self.get_token(api_key, api_secert)
return
def get_token(self, api_key, api_secert):
token_url = self.token_url % (api_key, api_secert)
r_str = urllib2.urlopen(token_url).read()
token_data = json.loads(r_str)
self.token_str = token_data['access_token']
return True
# 语音合成
def text2audio(self, text, filename):
get_url = self.getvoice_url % (urllib2.quote(text), self.cu_id, self.token_str)
voice_data = urllib2.urlopen(get_url).read()
voice_fp = open(filename, 'wb+')
voice_fp.write(voice_data)
voice_fp.close()
return True
##语音识别
def audio2text(self, filename):
data = {}
data['format'] = 'wav'
data['rate'] = 8000
data['channel'] = 1
data['cuid'] = self.cu_id
data['token'] = self.token_str
wav_fp = open(filename, 'rb')
voice_data = wav_fp.read()
data['len'] = len(voice_data)
# data['speech'] = base64.b64encode(voice_data).decode('utf-8')
data['speech'] = base64.b64encode(voice_data).replace('\n', '')
# post_data = json.dumps(data)
result = requests.post(self.upvoice_url, json=data, headers={'Content-Type': 'application/json'})
data_result = result.json()
if(data_result['err_msg'] == 'success.'):
return data_result['result'][0]
else:
return False
def test_voice(voice_file):
api_key = "vossGHIgEETS6IMRxBDeahv8"
api_secert = "3c1fe6a6312f41fa21fa2c394dad5510"
bdr = BaiduRest("0-57-7B-9F-1F-A1", api_key, api_secert)
# 生成
#start = time.time()
#bdr.text2audio("你好啊", "out.wav")
#using = time.time() - start
#print using
# 识别
#start = time.time()
result = bdr.audio2text(voice_file)
# result = bdr.audio2text("weather.pcm")
#using = time.time() - start
return result
def get_master_audio(check_status='cut_status'):
if check_status == 'cut_status':
sql = "SELECT id,url, time_long,sharps FROM ocenter_recognition WHERE status=0"
elif check_status == 'finished_status':
sql = "SELECT id,url, time_long,sharps FROM ocenter_recognition WHERE finished_status=0"
else:
return False
data = rtysdb.select_data(sql,'more')
if data:
return data
else:
return False
def go_recognize(master_id):
section_path = db_config.SYS_PATH
sql = "SELECT id,rid,url,status FROM ocenter_section WHERE rid=%d AND status=0 order by id asc limit 10" % (master_id)
#print sql
record = rtysdb.select_data(sql,'more')
#print record
if not record:
return False
for rec in record:
#print section_path+'/'+rec[1]
voice_file = section_path+'/'+rec[2]
if not os.path.exists(voice_file):
continue
result = test_voice(voice_file)
print result
exit(0)
if result:
#rtysdb.update_by_pk('ocenter_section',rec[0],{'content':result,'status':1})
sql = "update ocenter_section set content='%s', status='%d' where id=%d" % (result,1,rec[0]) #print sql
rtysdb.do_exec_sql(sql)
parent_content = rtysdb.select_data("SELECT id,content FROM ocenter_recognition WHERE id=%d" % (rec[1]))
#print parent_content
if parent_content:
new_content = parent_content[1]+result
update_content_sql = "update ocenter_recognition set content='%s' where id=%d" % (new_content,rec[1])
rtysdb.do_exec_sql(update_content_sql)
else:
rtysdb.do_exec_sql("update ocenter_section set status='%d' where id=%d" % (result,1,rec[0]))
time.sleep(5)
else:
rtysdb.do_exec_sql("UPDATE ocenter_recognition SET finished_status=1 WHERE id=%d" % (master_id))
#对百度语音识别不了的音频文件进行转换
def ffmpeg_convert():
section_path = db_config.SYS_PATH
#print section_path
used_audio = get_master_audio('cut_status')
#print used_audio
if used_audio:
for audio in used_audio:
audio_path = section_path+'/'+audio[1]
new_audio = uuid.uuid1()
command_line = "ffmpeg -i "+audio_path +" -ar 8000 -ac 1 -f wav "+section_path+"/Uploads/Convert/convert_" + str(new_audio) +".wav";
#print command_line
os.popen(command_line)
if os.path.exists(section_path+"/Uploads/Convert/convert_" + str(new_audio) +".wav"):
convert_name = "Uploads/Convert/convert_" + str(new_audio) +".wav"
ffmpeg_cut(convert_name,audio[3],audio[0])
sql = "UPDATE ocenter_recognition SET status=1,convert_name='%s' where id=%d" % (convert_name,audio[0])
rtysdb.do_exec_sql(sql)
#将大音频文件切成碎片
def ffmpeg_cut(convert_name,sharps,master_id):
section_path = db_config.SYS_PATH
if sharps>0:
for i in range(0,sharps):
timeArray = time.localtime(i*30)
h = time.strftime("%H", timeArray)
h = int(h) - 8
h = "0" + str(h)
ms = time.strftime("%M:%S",timeArray)
start_time = h+':'+str(ms)
cut_name = section_path+'/'+convert_name
db_store_name = "Uploads/Section/"+str(uuid.uuid1())+'-'+str(i+1)+".wav"
section_name = section_path+"/"+db_store_name
command_line = "ffmpeg.exe -i "+cut_name+" -vn -acodec copy -ss "+start_time+" -t 00:00:30 "+section_name
#print command_line
os.popen(command_line)
data = {}
data['rid'] = master_id
data['url'] = db_store_name
data['create_time'] = int(time.time())
data['status'] = 0
rtysdb.insert_one('ocenter_section',data)
if __name__ == "__main__":
ffmpeg_convert()
audio = get_master_audio('finished_status')
if audio:
for ad in audio:
go_recognize(ad[0])
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
python调用百度语音搜索_python调用百度语音识别实现大音频文件语音识别功能相关推荐
- python识别英语语音翻译器_Python结合百度语音识别实现实时翻译软件的实现
一.所需库安装 pip install PyAudio pip install SpeechRecognition pip install baidu-aip pip install Wave pip ...
- python爬虫百度图片搜索_python 爬虫百度图片之列表图
一.爬虫准备 语言:python 浏览器:google chrome 工具:request模块 首先我们在百度图片搜索页面输入需要搜索的关键词(比如:明星)页面结果如下 image.png 按F12进 ...
- vue实现百度语音播报API调用
vue实现百度语音播报API调用 //百度语音播报 Vue.prototype.$speckText = function(str) {var url = "http://tts.baidu ...
- android 百度语音转换工具,百度语音版app下载-百度语音版 安卓版v10.0.10.11-PC6安卓网...
百度语音版app是一款装机必备应用客户端,百度语音版app来自百度为你打造的更智能的语音交互功能,给您更便捷的搜索体验,有了百度语音版app,告别广告干扰,给您更纯净的资讯阅读环境. 软件介绍 百度语 ...
- 用 python 脚本+ffmpeg,把当前目录及子目录下的 wma音频文件转换为mp3 格式
用 python 脚本+ffmpeg,把当前目录及子目录下的 wma音频文件转换为mp3 格式 用 python 脚本,结合ffmpeg软件,把当前目录及子目录下的 wma 音频文件转换为 mp3 格 ...
- python调用百度语音搜索_使用 Python 和百度语音识别生成视频字幕
从视频中提取音频 安装 moviepy pip install moviepy 相关代码: audio_file = work_path + '\\out.wav' video = VideoFile ...
- html5d调用百度语音,易语言调用百度语音平台实现文字转换语音功能的代码
调用百度语音平台实现文字转换语音功能 此功能需要加载精易模块5.6 .版本 2 .支持库 wmp9 .程序集 窗口程序集1 .子程序 _试听按钮_被单击 播放器1.地址 = "http:// ...
- 天猫精灵 python 控制_树莓派4B小爱同学、天猫精灵、智能音箱、百度语音极速版、百度语音标准版、语音识别、语音合成终极方案...
来源:树莓派创客空间 https:/r-pi.cn,里面更多教程 第一句话,python2版本的代码,python3你改改就完事了 第一句话,python2版本的代码,python3你改改就完事了 流 ...
- python 百度ocr安装_Python利用百度文字识别(OCR)服务实现图片文字提取,准确率超高...
最近和朋友聊天,聊到一个充满使命感但又略显心酸的话题--下班回家在网上给小朋友抄题...那么问题来了,除了大家所知的QQ文字识别功能之外,还有哪些方式可以做到文字识别呢. 作为一名热心的Python小 ...
最新文章
- 【sping揭秘】6、IOC容器之统一资源加载策略
- 【OpenCV 4开发详解】图像像素统计
- python pcm 分贝_语音文件 pcm 静默(静音)判断
- Xcode9 之 Xcode Server 持续集成
- 16、mysql中函数的创建和使用
- pb 放弃数据窗口所做修改_为什么我放弃在线数据课程进行基于项目的学习
- Winfrom窗体应用程序___DataGridView
- 计算机学校的奖项,2017年度国家科学技术奖各奖项公示
- mac升级php后旧版本还在,Mac下更新自带的PHP版本
- php 5 windows,PHP 5.5 正式版发布,不再支持 Windows XP
- (转):GOF设计模式趣解(23种设计模式)
- elasticsearch5.0.1集群排错的几个思路总结
- Normalization的方法
- 【69】Sqrt(x)
- HarmonyOS 2+华为P50系列组合正在开启“超级终端”时代
- Javascript验证身份证号码:正则表达式
- 汇编idiv带符合除法指令。。。。
- 数学归纳法的5种常用形式——证明题的利器
- 《游戏数据分析实战》总结思考
- ES6:字符串的扩展及新增方法
热门文章
- 年轻人不讲武德?12月19日来3306π深圳站学点真本事
- 【优化求解】基于PESA—II实现多目标优化求解matlab源码
- Egret 5.3 正式发布,为重度小游戏开发带来新技能
- 蓝桥杯报名Java得奖率_夺冠概率--蓝桥杯
- 软考初级程序员下午题(6)
- DevOps企业实践指南(3): 第一条原则:流动
- 三天学会opencv(十三)——阈值操作
- 最强大脑之《数字华容道》游戏Android端的具体实现
- android仿微信头像点击放大查看,仿微信查看图片(带大小图切换查看)
- 中国计算机技术职业资格网(软考)2021,2021上半年全国软考准考证打印入口:中国计算机技术职业资格网...