【实践1】Python调用搜狗语音,自制语音识别转文字生成字幕软件,并生成会议纪录。

简单介绍

user的要求是不花钱就能制作一个满足会议纪录需要的软件,在会议时开启可以实时纪录所说的每一句话,并自动生成会议纪录。以下代码满足这个功能,支持使用者定制自己想要的样式,例如软件图标、语音输入界面、语音输入背景、文字大小及颜色等。主要方法是调用搜狗输入法中语音输入功能包,并用Pyqt5制作呈现界面。

效果呈现

【实践1】Python调用搜狗语音,自制语音识别转文字生成字幕软件,并生成会议纪录。_第1张图片

【实践1】Python调用搜狗语音,自制语音识别转文字生成字幕软件,并生成会议纪录。_第2张图片

完整代码

如果要在软件中设置背景,现将图片或动图转为py文件。以我自己的例子是插入动图,如果是要插入背景音乐等,还请另寻方法。

import base64

def pic2py(picture_name):
    """
    将图像文件转换为py文件
    :param picture_name:
    :return:
    """
    open_pic = open("%s" % picture_name, 'rb')
    b64str = base64.b64encode(open_pic.read())
    open_pic.close()
    # 注意这边b64str一定要加上.decode()
    write_data = 'img = "%s"' % b64str.decode()
    f = open('%s.py' % picture_name.replace('.', '_'), 'w+')
    f.write(write_data)
    f.close()

if __name__ == '__main__':
    pics = ["picture_5.gif"]
    for i in pics:
        pic2py(i)
    print("ok")

生成界面


import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtCore import QSize, Qt
from PyQt5.QtGui import *
import os
import base64
from PyQt5.QtWidgets import (QApplication,QLabel, QComboBox)

from PyQt5.QtWidgets import QLabel
from PyQt5.QtGui import QMovie

from picture_5_gif import img as one    #引入img变量,赋别名为one


class Ui_MainWindow(QMainWindow):
    tmp = open('picture_5_gif', 'wb')        #创建临时的文件
    tmp.write(base64.b64decode(one))    ##把图片解码,写入文件中
    tmp.close() 


    def __init__(self ):
        super().__init__()
        self.setObjectName("self")
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)     #窗口置顶


        #获取显示器分辨率
        self.desktop = QApplication.desktop()
        self.screenRect = self.desktop.screenGeometry()
        self.screenheight = self.screenRect.height()
        self.screenwidth = self.screenRect.width()

        # print("Screen height {}".format(self.screenheight))
        # print("Screen width {}".format(self.screenwidth))

        self.height = int(self.screenheight)
        self.width = int(self.screenwidth)

        # 获取文件路径,打开文件
        data_dir_test = "C:\Program Files (x86)\SogouInput\Components\VoiceInput"
        dirs = os.listdir(data_dir_test)
        # 输出所有文件和文件夹
        for file in dirs:
            print(file)
        #拼接,因为每个人所用的输入法版本不一样,所以选择让程式去判断,再拼接,确保软件在每台电脑上都能正常使用
        file_path = os.path.join(data_dir_test, file, 'VoiceInput.exe')
        # print(file_path)

        cmd = file_path  #得到搜狗VoiceInput文件的绝对路径
        a = os.startfile(cmd)        

        self.label = QLabel(self)
        self.label.setFixedSize(self.width, self.height)     #设置动图背景大小1
        self.movie = QMovie("picture_5_gif")
        self.movie.setScaledSize(QSize(self.width, self.height))     #设置动图背景大小2
        self.label.setMovie(self.movie)
        self.movie.start()

        # self.resize(500, 300)
        self.centralwidget = QtWidgets.QWidget(self)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(0.14065*self.width, 0.2361*self.height, 0.74*self.width, 0.56*self.height))   #文本框坐标和大小
        # self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        # self.textEdit = QtWidgets.QTextEdit(self.verticalLayoutWidget) # 这里替换自己定义的 QTextView
        self.textEdit = myTextEdit(self.verticalLayoutWidget)  #文本框
        
        self.textEdit.setPlaceholderText("正在聆听......")      #占位文本
        #设置调色板
        self.PlaceholderText = QComboBox()
        pal = self.textEdit.palette()
        pal.setColor(QPalette.PlaceholderText, QColor('gray'))      #占位文字颜色
        pal.setColor(QPalette.ColorRole.Text,QColor('white'))       #设定文本颜色格式
        self.textEdit.setPalette(pal)
        #设置占位符字体
        ft = self.textEdit.font()
        ft.setPointSizeF(28)        #占位符字号
        ft.setFamily('Microsoft YaHei UI') 
        self.textEdit.setFont(ft)
        
        # self.textEdit.setFocusPolicy(Qt.StrongFocus)     #设置焦点
        self.textEdit.setAlignment(Qt.AlignJustify)        #设置两端对齐
        self.textEdit.setFontFamily('Microsoft YaHei UI')     #设置输入字体
        self.textEdit.setFontPointSize(26)     #设置输入字号
        # self.textEdit.setTextColor(QColor('white'))       #文本框里字体颜色(设置了文本颜色格式可以不用再次设置)
        self.textEdit.setStyleSheet("QTextEdit{background:transparent;border:0px}")       #文本框边框和背景透明
        # self.textEdit.setText(" ")        #设置了则不能设置文本对齐方式
        self.verticalLayout.addWidget(self.textEdit)
        self.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(self)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 19))
        self.menubar.setObjectName("menubar")
        self.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(self)
        self.statusbar.setObjectName("statusbar")
        self.setStatusBar(self.statusbar)

        self.retranslateUi()
        QtCore.QMetaObject.connectSlotsByName(self)


    def retranslateUi(self):
        _translate = QtCore.QCoreApplication.translate
        #获取显示器分辨率
        self.desktop = QApplication.desktop()
        self.screenRect = self.desktop.screenGeometry()
        self.screenheight = self.screenRect.height()
        self.screenwidth = self.screenRect.width()

        self.height = int(self.screenheight)
        self.width = int(self.screenwidth)
        
        self.setGeometry(-1, -2, self.width, self.height)    #窗口坐标和大小
        self.setWindowFlags(QtCore.Qt.CustomizeWindowHint)  #隐藏标题栏
        # self.setFocusPolicy(Qt.StrongFocus)     #设置焦点
        # self.setFocusPolicy(Qt.NoFocus)         #禁掉焦点


class myTextEdit(QtWidgets.QTextEdit): #继承 原本组件
    def __init__(self,parent):
        QtWidgets.QTextEdit.__init__(self)
        self.parent = parent
        
	#写入txt
    def keyPressEvent(self, event):
        QtWidgets.QTextEdit.keyPressEvent(self,event)
        print('press',event)
        content = self.toPlainText()
        fw = open(r"D:\ITR.txt",mode='w+', encoding='UTF-8')	#"w+"表明在下一次写入时会把之前写入的全部删除再写入,如果是需要追加或是其他功能的可以更改写入方式。
        fw.write(content)
        fw.close()  

		#退出软件方式:按键盘左上角esc键退出。
        if (event.key())==int(16777216): 
            def kill_exe(exe_name):
                os.system('taskkill /f /t /im VoiceInput.exe')#MESMTPC.exe程序名字
            exe_name = 'VoiceInput.exe'
            kill_exe(exe_name)
            sys.exit(app.exec_())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = Ui_MainWindow()
    win.show()
    sys.exit(app.exec_())

打包成带特定图标的软件
图标必须是ico格式,可以在该网站进行转换→ico在线生成器
win+R调出cmd界面,输入以下代码

pyinstaller -F -w -i D:\tubiao.ico main.py
直接运行可以用,不做代码解析,有bug先百度

你可能感兴趣的:(语音识别,python,人工智能)