ChatTTS+Python编程搞定语音报时小程序

news2024/11/26 13:43:03

文字转语音神器+Python编程搞定语音报时小程序

今天一个好哥们发了一个文字转语音的AI神器的短视频。这个神器的网站是[ChatTTS - Text-to-Speech for Conversational Scenarios][https://chattts.com/],如下图所示:

Screenshot 2024-05-30 at 19.36.49

Screenshot 2024-05-30 at 19.37.24

这个开源项目可以从github.com上下载,也可以在这个网页下载。如下图所示:

Screenshot 2024-05-30 at 19.41.02

在主页上大概体验了一下,文字转语音还可以,但是有些生字(镇赉县)还是不能正常识别,比方说这个”赉“字。还有就是阿拉伯数字也不能正常识别。但是可以通过程序转成汉字,然后就可以了。言归正传,这个开源项目给我的最好的体会就是免费,于是按照上图所示的步骤,下载了源码并安装了依赖库,强调一下,这个源码运行环境在Anaconda下可以,PyCharm我的电脑不能运行,报错。

我首先想到的是利用这个API编一个语音报时的小程序,之前我编了一个万年历,这回可以实现语音播报了。我首先实现一个简单的报时小程序。

下载之后的源码文件夹拷贝到你指定的目录下面,然后进入Anaconda的Jupyter-Notebook下,打开

上面说到了,阿拉伯数字是不能准确识别的。但是用datetime模块生成的时间或者日期都是阿拉伯数字,必须转成汉字才可以利用这个开源模块实现语音播报。

环境

操作系统:macOS Sonoma

开发环境:Anaconda+Python 3.11

源码如下:

import torch
import ChatTTS
from IPython.display import Audio
import datetime


chat = ChatTTS.Chat()
chat.load_models()

# 定义一个类
class PeriodDay:
    def __init__(self):
        self.now = datetime.datetime.now()

    def get_time_of_day(self):
        if self.now.hour < 12:
            return "上午"
        elif 12 <= self.now.hour < 18:
            return "下午"
        else:
            return "晚上"

    # 定义一个时间转成汉字的函数
    def format_time_final(self):
        hour, minute = self.now.strftime('%H:%M').split(':')
        if int(minute) == 0:
            minute = '整'
        elif int(minute) < 10:
            minute = '零' + number_to_chinese(int(minute)) + '分'
        elif int(minute) < 20:
            minute = number_to_chinese(int(minute))[1:] + '分'
        else:
        	minute = number_to_chinese(int(minute)) + '分'

        if 10 <= int(hour) < 20:
            hour = number_to_chinese(int(hour))[1:] + '时'
            return f'{hour} {minute}'
        else:
            return f'{number_to_chinese(int(hour))[:]}{minute}'

    def get_month_day(self):
        month = number_to_chinese(self.now.month)
        day = number_to_chinese(self.now.day)
        return month, day
    
    # 定义一个返回星期几的函数
    def get_weekday(self):
        date = self.now.strftime('%Y-%m-%d')
        # 将日期转换为datetime对象
        datetime_obj = datetime.datetime.strptime(date, '%Y-%m-%d')

        # 获取星期几的数字(0代表星期日,1代表星期一,...,6代表星期六)
        weekday = datetime_obj.strftime('%w')

        # 将星期几数字转换为中文星期几
        weekdays = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
        weekday_cn = weekdays[int(weekday)
        return weekday_cn


# 定义一个数字转成汉字的函数
def number_to_chinese(number):
    units = ['', '十']
    digits = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']

    if number == 0:
        return '零'

    result = ''
    digit_count = 0
    last_zero = True

    while number > 0:
        digit = number % 10
        number //= 10

        if digit == 0:
            result = digits[number] + '十'
            break
        if digit != 0:
            if last_zero:
                result = digits[digit] + result
            else:
                result = digits[digit] + units[digit_count] + result
            last_zero = False
        else:
            if not last_zero:
                result = digits[digit] + result
            last_zero = True

        digit_count += 1

    return result


# 实例化一个早中晚的对象
morning_noon_evening = PeriodDay()
# 获取当前的时段
time_of_day = morning_noon_evening.get_time_of_day()

# 利用当前时间提取月,日,时,分
month, day = morning_noon_evening.get_month_day()
# 将时:分转成汉字
text_time = morning_noon_evening.format_time_final()
# 要报时的文字
time_text = f"{time_of_day}好,现在是{month}{day}{week_day}  北京时间{text_time}。在干嘛?"
# 定义一个转成语音的文字列表变量
texts = [time_text]
print(time_text)
# 生成语音
wavs = chat.infer(texts, use_decoder=True)

# 播放语音
Audio(wavs[0], rate=24_000, autoplay=True)

运行效果如下:

INFO:ChatTTS.core:All initialized.
下午好,现在是五月三十一日 星期五  北京时间十四时 一十一分。在干嘛?
 10%|████▏                                     | 38/384 [00:00<00:09, 38.29it/s]
 15%|██████                                  | 309/2048 [00:05<00:32, 53.73it/s]

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1795438.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VisualStudio2022离线包安装后无法进行版本升级(Visual Studio installer 卡在正在下载进度条0%)

目录 一、问题现象二、问题分析三、解决办法恢复正常 一、问题现象 表现1(未安装时&#xff0c;安装) 表现2&#xff08;已安装&#xff0c;升级&#xff09; 二、问题分析 原因&#xff1a;无法访问 aka.ms 测试方法:在浏览器中输入&#xff1a; https://aka.ms/vs/16/rele…

[笔试训练](三十四)100:[NOIP2008]ISBN号码101:kotori和迷宫102:矩阵最长递增路径

目录 100:[NOIP2008]ISBN号码 101:kotori和迷宫 102:矩阵最长递增路径 100:[NOIP2008]ISBN号码 题目链接:[NOIP2008]ISBN号码_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解: 简单模拟 #include <iostream> #include<string> using namespace std; str…

文件上传题目练习

[HNCTF 2022 Week1]easy_upload 先尝试上传一个php文件&#xff0c;发现直接就成功了 用蚁剑测试连接成功 找到flag [NISACTF 2022]bingdundun~ 白名单上传 这里因为尝试了很多绕过方式都不成功&#xff0c;去搜索了一下wp&#xff0c;发现要用到Phar://伪协议 补充&#xff…

【多模态】36、ShareGPT4V | 借助 GPT4V 的能够来生成更丰富的 caption 用于提升 LMM 模型的能力

文章目录 一、背景二、方法2.1 ShareGPT4V 数据集构建2.2 ShareGPT4V-PT 数据生成2.3 ShareGPT4V-7B Model 三、效果3.1 benchmark3.2 定量分析3.3 多模态对话 四、一些例子 论文&#xff1a;ShareGPT4V: Improving Large Multi-Modal Models with Better Captions 代码&#…

Python logging 模块详解

Python 的 logging 模块提供了一个强大而灵活的日志系统。它是 Python 标准库的一部分&#xff0c;因此可以在任何 Python 程序中使用。logging 模块提供了许多有用的功能&#xff0c;包括日志消息的级别设置、日志消息的格式设置、将日志消息输出到不同的目标&#xff0c;以及…

【机器学习】GLM4-9B-Chat大模型/GLM-4V-9B多模态大模型概述、原理及推理实战

​​​​​​​ 目录 一、引言 二、模型简介 2.1 GLM4-9B 模型概述 2.2 GLM4-9B 模型架构 三、模型推理 3.1 GLM4-9B-Chat 语言模型 3.1.1 model.generate 3.1.2 model.chat 3.2 GLM-4V-9B 多模态模型 3.2.1 多模态模型概述 3.2.2 多模态模型实践 四、总结 一、引言…

《精通ChatGPT:从入门到大师的Prompt指南》大纲目录

第一部分&#xff1a;入门指南 第1章&#xff1a;认识ChatGPT 1.1 ChatGPT是什么 1.2 ChatGPT的应用领域 1.3 为什么需要了解Prompt 第2章&#xff1a;Prompt的基本概念 2.1 什么是Prompt 2.2 好Prompt的特征 2.3 常见的Prompt类型 第二部分&#xff1a;Prompt设计技巧 第…

SOA的发展历史

1.SOA的发展历程 回顾SOA发展历程&#xff0c;我们把其大致分为了三个阶段&#xff0c;下面将分别介绍每个阶段的重要标准和规范。 1.1.萌芽阶段 这一阶段以XML技术为标志&#xff0c;时间大致从20世纪90年代末到21世纪初。XML系W3C所建&#xff0c;源自流行的标准通用标记语…

多表连接查询和子查询

一、连接查询 连接查询是SQL语言最强大的功能之一&#xff0c;它可以执行查询时动态的将表连接起来&#xff0c;然后从中查询数据。 1.1、连接两表的方法 在SQL中连接两表可以有两种方法&#xff0c;一种是无连接规则连接&#xff0c;另一种是有连接规则连接。 无连接规则连…

多卡聚合智能融合通信设备在无人机无线视频传输应用

无人驾驶飞机简称“无人机”&#xff0c;是利用(无线电)遥控设备和自备的程序控制装置操纵的不载人飞行器&#xff0c;现今无人机在航拍、农业、快递运输、测绘、新闻报道多个领域中都有深度的应用。 无人机无线视频传输保证地面人员利用承载的高灵敏度照相机可以进行不间断的画…

Accelerate 笔记:保存与加载文件

保存和加载模型、优化器、随机数生成器和 GradScaler 使用 save_state() 将上述所有内容保存到一个文件夹位置使用 load_state() 加载之前通过 save_state() 保存的状态通过使用 register_for_checkpointing()&#xff0c;可以注册自定义对象以便自动从前两个函数中存储或加载 …

【推荐】用scss循环zoom缩放比例,解决可视化大屏在不同分辨率屏幕下的适配问题

方法1&#xff1a; 指定几种常规屏幕宽度&#xff08;用这种方式就必须要强制用户全屏查看页面&#xff0c;在固定的宽度下才能达到比较不错的显示效果&#xff09; // 适配不同分辨率的页面---------------------------------------- html {overflow: hidden;width: 1920px;…

AR眼镜定制开发_在AR眼镜中实现ChatGPT功能

AR眼镜定制方案中&#xff0c;需要考虑到强大的算力、轻巧的设计和更长的续航时间等基本要求。然而&#xff0c;AR眼镜的设计方案不仅仅需要在硬件和显示技术方面取得突破&#xff0c;还要在用户体验方面有所进展。 过去&#xff0c;由于造价较高&#xff0c;AR眼镜的普及和商业…

搜维尔科技:「案例」Faceware电影中面部动画的演变历程

面部动画是电影中角色表演的一个重要方面&#xff0c;尤其是在严重依赖电子动画、化妆效果和动作捕捉系统的奇幻电影中。在《龙与地下城&#xff1a;盗贼荣誉》电影中&#xff0c;龙裔角色的面部动画是一个复杂的系统&#xff0c;使该生物在大屏幕上栩栩如生。该系统依赖于一种…

逻辑回归及python实现

概述 logistic回归是一种广义线性回归&#xff08;generalized linear model&#xff09;&#xff0c;因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同&#xff0c;都具有 w‘xb&#xff0c;其中w和b是待求参数&#xff0c;其区别在于他们的因变量不同&#x…

zeppelin 未授权任意命令执行漏洞复现

一、命令执行复现 访问http://ip:8080&#xff0c;打开zeppelin页面&#xff0c;&#xff08;zeppelin默认监听端口在8080&#xff09; 点击Notebook->create new note创建新笔记 在创建笔记的时候选择Default Interpreter为sh&#xff0c;即可执行sh命令 如下图&#x…

2024 Q1企业级SSD市场暴涨,国产努力追赶!

在2024年第一季度&#xff0c;由于对高容量存储需求的激增&#xff0c;企业级固态硬盘&#xff08;SSD&#xff09;市场的收入实现了显著增长&#xff0c;达到了37.58亿美元&#xff0c;与上一季度相比增长了62.9%。这一增长主要得益于供应商减产导致的高容量订单需求未得到满足…

基础篇01——SQL的基本语法和分类

MySQL数据库安装与基本使用 安装教程参见&#xff1a;通过zip安装MySQL 通过命令行启动和停止MySQL服务命令 前提&#xff1a;安装MySQL成功之后 启动服务&#xff1a;net start mysql 停止服务&#xff1a;net stop mysql 通过命令行连接mysql 可以通过mysql的客户端命令行…

GPT、Claude、Perplexity等AI集体宕机罢工,全球打工人崩溃了

就在昨天&#xff01;一个看似平常的周三上午&#xff0c;三大顶尖AI居然集体罢工了&#xff01; 首先&#xff0c;网友们发现OpenAI的ChatGPT崩了&#xff0c;接着Claude和Perplexity也接连陷入崩溃状态。而Gemini也出现了短暂下线问题&#xff0c;整整三个小时&#xff0c;这…

【MySQL】sql语句之表操作(上)

序言 在上一篇的数据库操作的内容中&#xff0c;学习了两种属性和常用的七种操作&#xff0c;学习是循序渐进的&#xff0c;库的操作学完了&#xff0c;就要开始学习表的操作了&#xff0c;而表可与数据强相关&#xff0c;比如DDL&#xff0c;即数据定义语言&#xff0c;DML&am…