桔子菌和楼下超市田大爷的角色互换经历–Python做的商品价格语音播报器

原文链接:http://www.juzicode.com/python-funny-broadcast-price-voice/

周末在楼下超市买菜的时候,结完账超市老板田大爷把桔子菌拉到一边神秘兮兮地说:听说你是写程序的?

桔子菌茫然地点点头:是的,写过一点的。

田大爷朝隔壁竞争对手望了望,压低声音跟桔子菌说:听到没,我也想搞一个那样的软件给我播报菜价,但是打听了下,100块只能用3个月。

桔子菌听着隔壁超市传来明显的”机器”腔调声,那是超市惯用的语言播报软件发出来的,只是不知道这种软件的使用还有这么个讲究。

田大爷继续说了:你是写程序的,能不能帮忙找一个这样的免费软件。电脑和音箱我这里已经有了,不用你操心。

哦,对了,这种软件的使用越简单越好。田大爷赶紧补充了一条需求。

看来在别人眼里程序猿的刻板印象还是相当刻骨铭心的,只要是和电脑相关的工作都是程序猿能干的,上次桔子菌确实也给田大爷修过电脑的,不过这次找软件好像和写代码有点接近些了。

桔子菌看了看超市里那个人工录音的大喇叭,还没有开口。

田大爷摆出很嫌弃的样子:这不好用啊,几十个菜价只要有一个发生了变化,又要把所有的菜价全部重新录一遍。田大爷是摇着头说完的。

看着田大爷殷切的眼神,桔子菌不忍心残忍拒绝,但是也不确定能不能找到这种软件,只是答应了田大爷试试看。

没想到平时桔子菌在田大爷这里做了这么多次甲方,今天田大爷成了桔子菌的“甲方”。

回到家桔子菌吃完午饭就来到了电脑前,开始给田大爷物色免费软件。

桔子菌首先搜到的是下面这种,在网页上写一段文字,对方把语音文件录好发回来,但是价格也不菲,而且和大爷说的需求也不符,菜价发生变化又得重新交钱,重新录制。

桔子菌又跑到软件分享网站上找到几个离线版的,表面说免费使用,实际上仍然是要收费的:

而且看着操作起来似乎也不简单:

田大爷的需求很明确:免费、简单、适应价格变化,可是桔子菌在网上找了个把小时愣是没有物色到符合需求的软件。就在将要放弃之际桔子菌心想既然找不到现成的,为何不自己做一个呢?

桔子菌快速做了评估,自己做的话其他都好说,难点是怎么将文字转换为语音这部分。我们知道Windows系统从XP开始就有“文字转语音TTS”的功能,到了win7和win10系统就演变成了“讲述人”:

Windows自带的这些功能,一般也会提供类似的编程接口。这个时候桔子菌首先想到的当然是怎么用Python做了,一种方式是写VBS脚本交给Python调用,另外还可以通过win32com模块加载文字转语音组件,后者更原汁原味,就选win32com了。

先写个简单的脚本测试下:

import win32com.client
speaker = win32com.client.Dispatch("SAPI.SpVoice")
speaker.Speak("桔子 3块钱一斤")

运行之后听了下,效果还可以,也是原汁原味的“机器”声音。

接下来就是怎么具体实现了,为了快速部署“上线”,桔子菌并不打算做复杂的操作界面,如果要修改价格、增加菜品,直接在excel里面修改。

但是想到要修改excel表格,桔子菌担心田大爷不会操作。问过田大爷后,来了个大反转,这次轮到桔子菌对田大爷有刻板印象了,他表示修改excel完全没有问题,啧啧啧。

有了前面的“顶层设计“,接下里就是实现”底层逻辑“了。用Tk做界面,一个开始按钮,一个停止按钮,加一个显示状态的文本框。因为要循环播报,不能在Tk的按钮事件里面加无限循环,所以需要开个线程。按钮只改变一个标志位即可,线程里面每次轮询这个标志位决定开始播报还是停止播报。价格手动在excel里修改,用Python的xlrd模块读出数据。最后就是用pyinstaller打包程序。

表格结构是这样的,三列,如果单位不填写默认解析为斤:

做出来的效果就是这样的:

最后当然就是部署“生产环境”了,程序发布给田大爷使用。

田大爷反馈这个软件用起来确实容易上手,现在终于可以和隔壁对手一起同台竞技飚菜价了。

哦,对了,田大爷表示下次有机还会再找桔子菌修电脑、找软件。

扩展内容:

  1. Python进阶教程m13–打包工具pyinstaller
  2. Python进阶教程m10–多线程
  3. Python进阶教程m8–图形界面–tkinter
  4. Python进阶教程m2d–xlrd读excel

桔子菌和楼下超市田大爷的角色互换经历–Python做的商品价格语音播报器》有1条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注