语音识别的三个解决方案:
原本用途:本来是要求从视频中识别语音,然后把文字内容提取出来,结果看了很多项目,中文的注释,识别的却是英文,感到授课的门槛有点低,我能看懂别人开源的代码,距离自己开发还是有距离的。后来探索了很多,比如字幕生成,把字幕不生成到视频下方而是一段一段增加到txt文本里,我也认为这是最好的办法,而且能顺便给每个字、每个句子一个时间戳。后来意识到一天的时间实在是很难完成,于是从网上找了最普通的,也是不难理解的解决方案及相关代码:还是从视频转音频,再从音频转文字。

一共三种方案:① speech_recognition加上r.recognize_sphinx(audio,language=“zh-CN”))② 百度API(科大讯飞类似)从百度手里薅羊毛真的是困难 ③ 利用TIMIT项目的解决方法去实现

方案一:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022.1.5# @File    : duizhaozu1.pyimport os
import speech_recognition as srdef file_to_wav(file_path, wav_path, sampling_rate):if os.path.exists(wav_path):  # 如果文件存在# 删除文件,可使用以下两种方法。os.remove(wav_path)# 终端命令command = "D:/download/ffmpeg-master-latest-win64-lgpl/bin/ffmpeg.exe -i {} -ac 1 -ar {} {}".format(file_path, sampling_rate, wav_path)os.system(command)if __name__ == '__main__':file_path = r'C:\Users\PineappleMan\Desktop\ok\DFS.mp4'wav_path = r'C:\Users\PineappleMan\Desktop\ok\DFS.wav'sampling_rate = 16000file_to_wav(file_path, wav_path, sampling_rate)r=sr.Recognizer()with sr.AudioFile(wav_path) as source:audio =r.record(source)print("文本内容:",r.recognize_sphinx(audio,language="zh-CN"))

其中,文件为视频,如果直接是音频(wav文件)就直接把格式转换的代码删掉,代码借鉴了https://download.csdn.net/download/weixin_38693753/13709062

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple speech_recognition

运行的时候遇到了错误就是缺少pocketsphinx:https://download.csdn.net/download/yuxuwen1234/12195200,实际上去下载一个whl就行了,我的python是3.7所以下载了链接中的,很快就能运行好了,网上很多解决方案,因为报错的是swig的问题,但是“头痛医头,脚痛医脚”,就应该机智的去下载whl去解决这个问题。

方案二:

import base64
import json
import os
import time
import uuidimport requests
import urllib.response
from inc import db_config
from inc import rtysdbclass 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_idself.get_token(api_key, api_secert)returndef get_token(self, api_key, api_secert):token_url = self.token_url % (api_key, api_secert)r_str = urllib.response.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 % (urllib.response.quote(text), self.cu_id, self.token_str)
#
#
# voice_data = urllib.response.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'] = 8000data['channel'] = 1data['cuid'] = self.cu_iddata['token'] = self.token_strwav_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 Falsedef 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() - startreturn resultdef 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 Falsedata = rtysdb.select_data(sql, 'more')if data:return dataelse:return Falsedef go_recognize(master_id):section_path = "C:/Users/PineappleMan/Desktop/ok/audio1.wav"sql = "SELECT id,rid,url,status FROM ocenter_section WHERE rid=%d AND status=0 order by id asc limit 10" % (master_id)# print sqlrecord = rtysdb.select_data(sql, 'more')# print recordif not record:return Falsefor rec in record:# print section_path+'/'+rec[1]voice_file = section_path + '/' + rec[2]if not os.patcvoice_file:continueresult = 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 sqlrtysdb.do_exec_sql(sql)parent_content = rtysdb.select_data("SELECT id,content FROM ocenter_recognition WHERE id=%d" % (rec[1]))# print parent_contentif parent_content:new_content = parent_content[1] + resultupdate_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 = "C:/Users/PineappleMan/Desktop/ok/audio1.wav"# print section_pathused_audio = get_master_audio('cut_status')# print used_audioif 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_lineos.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 = "C:/Users/PineappleMan/Desktop/ok/audio1.wav"if sharps > 0:for i in range(0, sharps):timeArray = time.localtime(i * 30)h = time.strftime("%H", timeArray)h = int(h) - 8h = "0" + str(h)ms = time.strftime("%M:%S", timeArray)start_time = h + ':' + str(ms)cut_name = section_path + '/' + convert_namedb_store_name = "Uploads/Section/" + str(uuid.uuid1()) + '-' + str(i + 1) + ".wav"section_name = section_path + "/" + db_store_namecommand_line = "ffmpeg.exe -i " + cut_name + " -vn -acodec copy -ss " + start_time + " -t 00:00:30 " + section_name# print command_lineos.popen(command_line)data = {}data['rid'] = master_iddata['url'] = db_store_namedata['create_time'] = int(time.time())data['status'] = 0rtysdb.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])

该项目参考了https://download.csdn.net/download/weixin_38531210/12867107,但是做了很多改动!无论是官网还是这些项目,调用的包都是比较陈旧的,甚至python3已经用别的名称进行取代了。所以改动的工作量是相当大的。

方案三:

TIMIT是比较经典的英文的语音识别,找到相关代码并不难。这里就不多讲了。过两天我把每行代码做好注释再发出来。

总结

其实一天实现一个功能,尤其是对我这种考研考了很久,忘了很多东西的人来说。但是这种有目的的功能实现,还是很锻炼自己的。再接再厉吧。

【Day4】语音识别(音频转文字)相关推荐

  1. 免费视频转文字-音频转文字软件:网易见外工作台, Speechnotes, autosub, Speech to Text, 百度语音识别

    文章目录 网易见外工作台(推荐) Chrome插件 Speechnotes autosub 百度语音识别API IBM的Speech to Text(不推荐) 此文首发于我的Jekyll博客:zhan ...

  2. 音频怎么在线转换成文字?试试这几个音频转文字的方法

    日常工作学习中,有的朋友需要把音频文件中的语音转成文字,翻译成文稿.那如何能快速把音频转文字呢?下面教你几个在线音频转文字的方法,简单高效. 方法1:借助Vovsoft Speech to Text ...

  3. 录音转文字软件有电脑版吗?推荐这几个音频转文字软件

    在日常工作学习中,会遇到需要将录音转文字的情况,比如上课将课堂内容录音,课后整理成笔记,那应该怎么把录音转文字呢?有没有电脑版的录音转文字软件呢?下面就介绍几个可以将音频转文字的软件. 一.灵听录音转 ...

  4. 怎么转换英文音频成文字?英文音频转文字app分享

    两位朋友正在讨论如何将一段英文讲座的音频转换成文字,以便于学习和理解. Sophia:嗨,我最近听了一段非常精彩的英文讲座,但是对于我来说,理解听到的内容有些困难.你知道有什么方法可以将英文音频转换成 ...

  5. 有哪些音频转文字的软件可以批量操作?

    在生活中,不管是线上听课还是远程的视频会议,有时我们对着电脑久了,难免会走神.虽然有的时候我们可能会使用手机录音来记录,但是后期我们根据回听录音文件来做笔记时,需要全神贯注的倾听,否则可能会错漏一些录 ...

  6. Python实现离线音频转文字(时间分隔+区分说话人)

    Python实现离线音频转文字(时间分隔+区分说话人) 文章目录 Python实现离线音频转文字(时间分隔+区分说话人) 前言 领取转写时长 创建个人应用 运行Python代码 运行环境 解决思路 修 ...

  7. html在电脑上转换字体怎么变了,电脑上如何音频转文字?

    1 电脑中的音频转文字分为两种情况,一种情况是即时语音转文字,一种情况是音频文件转文字.下面分别说说. 即时语音转文字 即时语音转文字其实就是语音输入,你对着电脑说话,在文档上变成文字.需要借助语音输 ...

  8. 拯救会议纪要!快用这三个音频转文字方法,让领导对你刮目相看

    Hello,大家好,我是指尖科技君~ 不知道小伙伴们平时有录音的习惯吗?我有时候会为了防止忘记一些重要的东西:就会把会议上的重点内容给录制下来,这样子可以方便后期的资料整理. 可是大部分会议重点的信息 ...

  9. 每日技巧分享:如何音频转文字?

    随着科技的不断发展,音频转文字已经成为了一项非常常见的技术.在过去,人们需要手动转录音频中的内容,这既费时又费力.但现在,有了音频转文字的技术,我们可以很方便地将音频中的内容转化为文字,这对于许多人来 ...

最新文章

  1. inum在linux中含义,linux
  2. [问题]DotNet 项目如何实现在构建时 Build 号自动增加?
  3. 在windows上搭建react-native的android环境
  4. Android nomedia 避免图片等资源泄露在系统图库其中
  5. OpenCV的k - means聚类 -对图片进行颜色量化
  6. powershell 入门_使用PowerShell入门的5个Cmdlet
  7. [Java基础]获取Class类的对象
  8. 使用mkdir创建同级多目录
  9. python db api_dbapi · PyPI
  10. C/C++常见问题(转)
  11. ajax在php中使用方法,在项目中如何使用ajax请求
  12. .NET Remoting Basic(9)-上下文(CallContext)
  13. 指针函数 (C语言)
  14. 常用IP扫描工具整理一下
  15. Atitit MP3元数据抽取结果 音乐信息检索 取出了重复和英文的数据 一共368个。。 /bookmarksHtmlEverythingIndexPrj/src/apkg/songlistC
  16. int、double型数最大正数值和最小正数值分别是多少
  17. vi编辑器中的常用命令
  18. 上课第一天初感。。。
  19. 基于spring boot的毕业设计论文选题申报管理系统设计与实现 毕业论文+项目源码、
  20. php和java做网站_java与php哪个做网站简单

热门文章

  1. 【科研技巧】解决WPS中插入mathtype选项卡为灰色不能使用
  2. 9_Conveniences
  3. sicily 1048 Inverso
  4. python星号平行四边形_python学习:python的星号(*)和双星号(**)用法
  5. 服务器虚拟内存最佳设置范围,Windows2003服务器虚拟内存怎么设置最好?
  6. 复合类型与with关键字
  7. Mosquitto AUTH认证
  8. 软件设计师(二):操作系统基本原理
  9. 泛站站群域名百度站长平台批量认证域名方法
  10. μm 和μin和 μinch关系