本文为大家分享了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调用百度语音识别实现大音频文件语音识别功能相关推荐

  1. python识别英语语音翻译器_Python结合百度语音识别实现实时翻译软件的实现

    一.所需库安装 pip install PyAudio pip install SpeechRecognition pip install baidu-aip pip install Wave pip ...

  2. python爬虫百度图片搜索_python 爬虫百度图片之列表图

    一.爬虫准备 语言:python 浏览器:google chrome 工具:request模块 首先我们在百度图片搜索页面输入需要搜索的关键词(比如:明星)页面结果如下 image.png 按F12进 ...

  3. vue实现百度语音播报API调用

    vue实现百度语音播报API调用 //百度语音播报 Vue.prototype.$speckText = function(str) {var url = "http://tts.baidu ...

  4. android 百度语音转换工具,百度语音版app下载-百度语音版 安卓版v10.0.10.11-PC6安卓网...

    百度语音版app是一款装机必备应用客户端,百度语音版app来自百度为你打造的更智能的语音交互功能,给您更便捷的搜索体验,有了百度语音版app,告别广告干扰,给您更纯净的资讯阅读环境. 软件介绍 百度语 ...

  5. 用 python 脚本+ffmpeg,把当前目录及子目录下的 wma音频文件转换为mp3 格式

    用 python 脚本+ffmpeg,把当前目录及子目录下的 wma音频文件转换为mp3 格式 用 python 脚本,结合ffmpeg软件,把当前目录及子目录下的 wma 音频文件转换为 mp3 格 ...

  6. python调用百度语音搜索_使用 Python 和百度语音识别生成视频字幕

    从视频中提取音频 安装 moviepy pip install moviepy 相关代码: audio_file = work_path + '\\out.wav' video = VideoFile ...

  7. html5d调用百度语音,易语言调用百度语音平台实现文字转换语音功能的代码

    调用百度语音平台实现文字转换语音功能 此功能需要加载精易模块5.6 .版本 2 .支持库 wmp9 .程序集 窗口程序集1 .子程序 _试听按钮_被单击 播放器1.地址 = "http:// ...

  8. 天猫精灵 python 控制_树莓派4B小爱同学、天猫精灵、智能音箱、百度语音极速版、百度语音标准版、语音识别、语音合成终极方案...

    来源:树莓派创客空间 https:/r-pi.cn,里面更多教程 第一句话,python2版本的代码,python3你改改就完事了 第一句话,python2版本的代码,python3你改改就完事了 流 ...

  9. python 百度ocr安装_Python利用百度文字识别(OCR)服务实现图片文字提取,准确率超高...

    最近和朋友聊天,聊到一个充满使命感但又略显心酸的话题--下班回家在网上给小朋友抄题...那么问题来了,除了大家所知的QQ文字识别功能之外,还有哪些方式可以做到文字识别呢. 作为一名热心的Python小 ...

最新文章

  1. 【sping揭秘】6、IOC容器之统一资源加载策略
  2. 【OpenCV 4开发详解】图像像素统计
  3. python pcm 分贝_语音文件 pcm 静默(静音)判断
  4. Xcode9 之 Xcode Server 持续集成
  5. 16、mysql中函数的创建和使用
  6. pb 放弃数据窗口所做修改_为什么我放弃在线数据课程进行基于项目的学习
  7. Winfrom窗体应用程序___DataGridView
  8. 计算机学校的奖项,2017年度国家科学技术奖各奖项公示
  9. mac升级php后旧版本还在,Mac下更新自带的PHP版本
  10. php 5 windows,PHP 5.5 正式版发布,不再支持 Windows XP
  11. (转):GOF设计模式趣解(23种设计模式)
  12. elasticsearch5.0.1集群排错的几个思路总结
  13. Normalization的方法
  14. 【69】Sqrt(x)
  15. HarmonyOS 2+华为P50系列组合正在开启“超级终端”时代
  16. Javascript验证身份证号码:正则表达式
  17. 汇编idiv带符合除法指令。。。。
  18. 数学归纳法的5种常用形式——证明题的利器
  19. 《游戏数据分析实战》总结思考
  20. ES6:字符串的扩展及新增方法

热门文章

  1. 年轻人不讲武德?12月19日来3306π深圳站学点真本事
  2. 【优化求解】基于PESA—II实现多目标优化求解matlab源码
  3. Egret 5.3 正式发布,为重度小游戏开发带来新技能
  4. 蓝桥杯报名Java得奖率_夺冠概率--蓝桥杯
  5. 软考初级程序员下午题(6)
  6. DevOps企业实践指南(3): 第一条原则:流动
  7. 三天学会opencv(十三)——阈值操作
  8. 最强大脑之《数字华容道》游戏Android端的具体实现
  9. android仿微信头像点击放大查看,仿微信查看图片(带大小图切换查看)
  10. 中国计算机技术职业资格网(软考)2021,2021上半年全国软考准考证打印入口:中国计算机技术职业资格网...