转自公众号帛书辰光
PS:代码可在 此处 中找到
自制迷你红绿灯
今天,我看着弟弟的玩具车灵光乍现,想要制作一个迷你红绿灯。很快,我就找来一块纸板,拿着剪刀咔嚓咔嚓地剪了起来。 我先剪出两块“L”形的纸板,当作红绿灯的杆子。然后找来一个rgb灯,夹在纸板中,它能显示一千六百多万种颜色,拿来当红绿灯绰绰有余。接着剪出底座,在上面开个口,插入红绿灯,这样就完成了。最后我编写了一个最基本的红绿灯程序,叫上弟弟来测试。
弟弟看到红绿灯很激动,一会儿就已经开了六七圈了。显然,红绿灯没有问题。然而,我还想让这个迷你红绿灯更加真实,于是决定增加一个闯红灯抓拍功能。我找来了一个摄像头和一个超声波传感器,并尝试将它们集成到我的设计中。
首先,在底座合适的位置安装传感器。接着,我编写了一段额外的代码来处理传感器的信号输入,传感器能像蝙蝠一样发出超声波并根据返回时间计算距离,进而检测到玩具车的接近,然后拍摄一张照片,模拟真实路口的监控抓拍功能。最后,为了警告闯红灯的人,我准备了一段警报音频,只要有人闯红灯,它便会嘀嘀嘀的响起。
这个红绿灯项目既有趣又有教育意义,在带领弟弟测试的过程中,不仅增强了他的交通规则意识,还启蒙了他的科技实践能力。
哥德巴赫猜想验证项目
今天,我从网络上了解到了哥德巴赫猜想(简称哥猜),简单地说,就是每个大于2的偶数都可以表示为两个质数之和,我打算用我熟悉的python语言来写一段验证程序。
网络上有很多验证程序,但都不是我想要的,因为效率太低而且没有目标,容易让人失去耐心。这时我想到了一个下载工具——IDM。它之所以能把乌龟一般的下载速度提升,就是因为它能把文件分成多部分同时下载。那我是不是也可以把要验证的数分成一块一块的,同时进行验证呢?带着这个问题,我学习了多线程的使用方法,封装了验证代码,并成功创建了10个线程。光让它们做重复工作是没有意义的,于是我让验证程序根据参数去验证不同的区间,这样就实现了效率提升。
但运行后,我立刻发现了问题:整个程序的运行过程什么输出都没有,完全不知道在哪一步,也不知道什么时候结束。为了解决这个问题,我建立了一个数据列表,验证程序中计算出每个步骤的进度后就存储进列表里,并在线程启动完成后不停循环输出每个步骤的信息。在算出进度后,我又不停计算,得到了剩余时间并把它处理成自然语言然后放进信息里。这样,一个多线程验证哥猜的程序就做好了。我利用它,成功使用家用电脑把哥猜验证到了10^8。
此次运用多线程验证哥猜的实践经验,让我认识到并发编程在解决复杂计算问题时的优势,希望以后解决问题时能用到它。
语音合成技术的实践与探索
为了每天早上可以听到天气预报和新闻,我决定使用语音合成技术来制作一段天气预报程序。百度的语音合成技术能够生成高度拟人化和自然流畅的语音输出,这正是我需要的。
在查看文档后,为了方便未来使用语音合成,我决定编写一个“类”,“类”就是一个模板。首先编写初始化部分,获取设备mac码和本地用户密钥,如果没有就从接口重新获取并保存。然后编写语音合成函数,程序调用百度语音合成接口,输入一大堆参数,如果结果没有异常就返回百度生成的音频。有异常还需要判断,如果用户密钥过期就重新获取。
看起来很复杂对不对,但实现起来就是要需要考虑各种可能的情况,比如用户密钥过期、合成错误等,不然它就无法处理,只会报错。 语音合成解决了,接下来看看天气数据如何获取。天气接口有很多,我选心知天气。浏览完文档,我编写了一段可以获取今天、明天、后天天气以及当前气温的程序,但是返回的数据无法阅读,需要程序处理。于是我不断修改文案,努力让信息变得更自然。最终,它把可以温度、天气、风向、风力、湿度、降雨量合成一段话。
新闻获取部分相对简单,只需找到合适的新闻接口,指定所需的新闻类型ID,然后获取该类型的新闻列表。
经过以上步骤,一个集成了天气预报和新闻播报功能的程序就构建成功。随着语音合成及识别技术的持续进步和完善,此类应用具有广阔的应用前景,不仅可以用于日常生活场景,如智能家居控制、新闻资讯获取,还可以扩展至教育学习、无障碍沟通等多个领域,极大地丰富人们的智能生活体验。