当前位置 博文首页 > dragonandsky的博客:python文本转音频问题--以及flask实现的网

    dragonandsky的博客:python文本转音频问题--以及flask实现的网

    作者:[db:作者] 时间:2021-07-05 19:05

    问题描述:

    pyttsx3,python的一个文本转语言非常好的库
    但是最近安装的时候总是报一些奇奇怪怪的问题!
    解决办法很简单
    先这样,然后就好了

    pip install -U setuptools
    pip install pyttsx3
            
    

    总有一些博客喜欢说要安装pywin32的其实pip install pytts3就会直接安装pywin32,如果你没有那你就还是pip一下吧!


    关于pyttx3的运用:

    可以考虑我这篇博文
    考研的福音,文本转音频,支持docx,txt文件


    我的特殊用处:

    最近有做那个每日英语句子的版块
    每天一个英文句子,大伙学起来!!!

    在这里插入图片描述
    随着我不断更新:现在第一板块:跟AI聊天;第三版块:查看照片地址信息外;第二板块新增句子音频。采用的就是pyttx3将文本转音频的技术

    句子音频模块

    import os
    import pyttsx3
    import re
    import json
    #保存音频文件
    def savetheaudio(strx,time):
        engine = pyttsx3.init()
        # 设置新的语音速率
        engine.setProperty('rate', 170)
        rate = engine.getProperty('rate')
        #engine.say(strx)
        engine.save_to_file(strx,time+'.mp3')
        engine.runAndWait()
        print("文件目录:"+time+'.mp3')
        #获取文件路径,后缀
    if __name__ == '__main__':
        with open('./data/englishJson.json','r',encoding="UTF-8")as file:
            englishsentense = json.loads(file.read())
        for english in englishsentense:
            path = 'C:/wwwroot/192.168.1.104/english/'+english["Time"]
            sentence = english["Sentence"]
            savetheaudio(sentence,path)
    

    在这里插入图片描述
    文本采用json串存储,不仅可以读取到页面显示,也能直接用于文本转音频,存储为对应的日期.mp3文件,这样就可以用于后台变化对应的日期与文本音频
    另外整个所有页面的后台逻辑上都是采用flask python模块实现,非常的方便—推荐推荐
    特别是开头的日历模块也是用python 的calendar模块做的非常的人性化

    日历小模块

    def get_calendar(year,month):
        year = int(year)
        month = int(month)
        num_zero = calendar.monthrange(year,month)[0]+1
        d = calendar.monthrange(year,month)[1]
        zero = np.zeros(num_zero).astype('int32')
        days =np.arange(1,d+1)
        beforelist = np.hstack((zero,days))
        num_zero1 = 42-len(beforelist)
        if num_zero1!=0:
            zero1 = np.zeros(num_zero1).astype('int32')
            endlist = np.hstack((beforelist,zero1))
            endlist = endlist.reshape(6,7)
        else:
            endlist = beforelist.reshape(6,7)
        return endlist
    

    照片信息显示模块

    因为用python获取照片地址的代码网上到处都有,我也不是原创就不沾在这里了:说明我的网站并没有保持你上传的照片,只是读取了信息最后都会删除

    def photos_address():
        if request.method == 'POST':
            f = request.files.get('photo')
            if f.filename == '':
                flash('No selected file')
                print('No selected file')
                return redirect('inxex')
            if f and allowed_file(f.filename):
                print(allowed_file(f.filename))
                path = './'+"gps"+secure_filename(f.filename)
                f.save(path)
                try:
                    photo_time,photo_address =huzhiwen.show_img_address(path)
                except Exception as e:
                    return redirect(url_for('index',photo_time="照片格式错误",photo_address="照片格式错误"))
                os.remove(path)
                return redirect(url_for('index',photo_time=photo_time,photo_address=photo_address))
    

    如上os.remove(path)即移除了该照片

    AI模块

    采用全网已知的青云客AI网上也很好搜到就不再这里粘贴了

    总结

    最终实现只有不到100行需要管理的代码
    在这里插入图片描述

    主要是我挺多函数都封装在了自己的模块
    我的模块封装了近20个函数吧!不过本网页只用到了6个
    在这里插入图片描述
    也就不到120行,除去引入的包,也就100行代码
    因为我前端代码不熟练,前端代码有200多行,不过个人觉得总体效果还是不错的!!

    cs