首页 > 编程语言 >Python实现语音转文字功能

Python实现语音转文字功能

时间:2024-06-23 21:43:18浏览次数:9  
标签:文字 Python self filename seconds split 语音 wav

import os
import requests
import urllib
import calendar
import time
import datetime
from moviepy.editor import AudioFileClip
from pydub import AudioSegment
from aip import AipSpeech


class DouYin:
    def __init__(self):
        self._headers = {
            'Accept': '*/*',
            'Accept-Encoding': 'gzip,deflate,sdch',
            'Accept-Language': 'zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4',
            'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0;'
                          ' Nexus 5 Build/MRA58N)'
                          'AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/66.0.3359.181 Mobile Safari/537.36',
        }

    # 音频文件
    def transform(self,videoName):
        audioName = datetime.datetime.now()
        audioName = audioName.strftime('%m%d%H%M%S') + '.wav'

        audio = AudioFileClip(os.getcwd() + "/" +videoName)
        audio.write_audiofile(audioName)

        #语音分割
        self.speech_seg(audioName)


    #语音分割
    def speech_seg(self,filename):
        txtFileName = datetime.datetime.now()
        txtFileName = txtFileName.strftime('%m%d%H%M%S') + '.txt'

        txt_path = os.getcwd() + '/' + txtFileName
        if os.path.exists(txt_path):
            os.remove(txt_path)  # 如果存在即删除文件
         #长语音分割为59s语音区间
        sound = AudioSegment.from_wav(filename)   #音频文件读取
        seconds_of_file = sound.duration_seconds  #音频长度
        seconds_per_split_file = 59               #设定每段59s
        if seconds_of_file % int(seconds_per_split_file) == 0:
            times = int(seconds_of_file / int(seconds_per_split_file))  # 语音长度能被59整除
        else:
            times = int(seconds_of_file // int(seconds_per_split_file) + 1)  # 非整除
        print(f'{filename}可切割 {times} 次') #输出该语音能被切割几次
        start_time = 0
        internal = seconds_per_split_file * 1000 
        end_time = seconds_per_split_file * 1000  #语音结束时间点即59s
        #各分割语音的文本所含字数列表
        length_list=[]
        for i in range(times):
            if i + 1 == times:  # 最后一次切割
                part = sound[start_time:]
            else:
                part = sound[start_time:end_time]
             
            data_split_filename = os.path.join('' + str(i) + '.wav') # audios_try文件夹用来临时存放分割后的语音文件
            part.export(data_split_filename, format="wav")  # 先导入该文件
            wav_version = AudioSegment.from_wav(data_split_filename)  # 再读取分割好的文件
            mono = wav_version.set_frame_rate(16000).set_channels(1)  # 设置声道和采样率
            mono.export(data_split_filename, format='wav', codec='pcm_s16le')  # 存储设置后的音频文件
            text = self.speech_recognize(data_split_filename) #语音转文字
            length_list.append(len(text))
            with open(txt_path,'a') as ff: #识别的文字追加写入
                ff.write(text)
                ff.write('\n') #换行
            print(f'    {str(i)}.wav语音转换成功,开始删除')
            os.remove(data_split_filename) #删除音频文件
            start_time += internal
            end_time += internal
            time.sleep(0.5)

    #调用接口,实现语音识别
    def speech_recognize(self,seg_filename):
         #对应参数输入
        APP_ID = '57997766'
        API_KEY = '百度语音识别APP_KEY'
        SECRET_KEY = '百度语音识别SECRET_KEY'

        aipSpeech = AipSpeech(APP_ID, API_KEY, SECRET_KEY) #传入参数
        with open(seg_filename, 'rb') as fp:
            audioPcm = fp.read()
        json = aipSpeech.asr(audioPcm, 'wav', 16000, {'dev_pid': 1537})
        if 'success' in json['err_msg']:
            context = json['result'][0]    #转换成功的文本
        else:
            context = '=====识别失败====='
            print('识别失败!')
        return context
      
    def run(self):
        print(f'============{self.id}共{len(self.audio_list)}个文件==============')
        for i in self.audio_list:
            try:
                self.speech_seg(i)
                print(f'-----{i}-----分析完成')
            except:
                print(f'-----{i}-----分析出现问题')
                pass

if __name__ == "__main__":
    DY = DouYin()
    DY.transform("1.mp4")

  

标签:文字,Python,self,filename,seconds,split,语音,wav
From: https://www.cnblogs.com/panxiangfu/p/18263962

相关文章

  • python基础 - 利用耗时计算回顾基础
    """json格式:1-自动化测试:做接口自动化测试响应数据里resp.json()接收数据2-测试开发:做后端服务--接口返回数据类型json转化方法:1-json--转--字典importjsonjson.loads()2-字典--转--jsonimportjsonjson.dumps()常见报错JSONDecodeError在j......
  • python基础 - 多线程技术
    基础概念importtimedeftest(something):print(f"我开始>>>{something}")time.sleep(2)print(f"我结束>>>{something}")"""场景:1-io密集型--阻塞sleeprequestssocket"""importthreading"&quo......
  • 天尊版ChatGPT商业运营网站程序源码,支持Midjourney绘画,GPT语音对话+DALL-E3文生图+sun
    天尊版ChatGPT商业运营网站程序源码,支持Midjourney绘画,GPT语音对话+DALL-E3文生图+suno-ai音乐生成+TTS语音对话+支持GPTs文章目录天尊版ChatGPT商业运营网站程序源码,支持Midjourney绘画,GPT语音对话+DALL-E3文生图+suno-ai音乐生成+TTS语音对话+支持GPTs前言一、文档总......
  • python基础 - socket编程基础
    一对一---服务端importsocketip_port=('127.0.0.1',9999)1-创建socket对象---socket也叫套接字sk=socket.socket()2-绑定ip端口sk.bind(ip_port)3-开启监听sk.listen()print('---socket服务器已经启动完成---')4-阻塞等待客户端来链接可以返回连接对象......
  • SQL-Python
    师从黑马程序员数据库介绍数据库就是存储数据的库数据组织:库->表->数据数据库和SQL的关系MySQL的基础命令 SQL基础SQL语言的分类SQL的语法特征DDL-库管理showDATABASES;usesys;SELECTdatabase();CREATEDATABASEtestCHARSETutf-8;SHOWDATAB......
  • 基于 Python-Tkinter 的古诗文垂直搜索引擎(全网首份 + 包复现)
    目录一、前言二、实现效果参考文献注:①整个项目可作为本科阶段计算机NLP方向的课程设计,建议收藏。一、前言  中国古典诗词具有独特的艺术表现形式,在人们的日常生活中架起了情感共鸣的桥梁、充当了教育和启蒙的工具,其中很多古诗词蕴含着民族正气和家国情......
  • [absl_py][python]absl_py所有whl文件下载地址汇总
    absl_py是Google开发并维护的一个Python软件包,它是C++Abseil库的Python版本。该库旨在提供一系列高质量的、跨平台的实用工具,帮助开发者构建大规模软件项目。以下是关于absl_py的详细介绍:功能概述:字符串处理:absl_py提供了一组实用的字符串操作函数,包括字符串拼接、分割、......
  • python连接mysql、sqlserver、oracle、postgresql数据库进行封装
    python连接mysql、sqlserver、oracle、postgresql数据库进行封装python连接mysql、sqlserver、oracle、postgresql数据库进行封装详解一、引言二、python连接MySQL数据库进行封装三、python连接SQLServer数据库进行封装四、Python连接Oracle数据库进行封装五、Python连......
  • Python自动化神器:如何用PyAutoGUI模拟滚轮动一次
    哈喽,大家好,我是木头左!一、PyAutoGUI简介PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序控制鼠标和键盘操作。它主要在三个方面发挥作用:1)对屏幕上的图像进行识别;2)控制鼠标和键盘的操作;3)具有强大的截图功能。二、安装PyAutoGUI使用PyAutoGUI之前,需要先进行安装。......
  • 【python】python海底捞门店营业数据分析与可视化(数据集+源码+论文)【独一无二】
    ......