近几年语音识别越来越红火,大家肯定都听过Siri、Amazon Echo、Google Home……但我们似乎很少听到「中文」语音识别。
OLAMI提供了一套中文语音识别API,完全吸引住我的目光!
重点是!真的超容易使用~
大概花个30秒就能写出“如果你说something,他就会回应something”,而且支援Python、Java、c++等语法,真的很方便!
语音识别能使生活变得更便利,比方说用它来控制家电或是远端语音操控等。
但我觉得它似乎有更特别的地方:我们可以在看不见物体的情形下用声音操控!
由这个角度出发,那岂不是可以帮助视障者改善生活吗?
许多的视障者依靠导盲犬来行走,但是导盲犬的时间成本却是如此的高,如果我们能用低成本却打造出机械导盲犬那该有多好!
机械导盲犬优势在于:
1、节省成本
2、能够降低失误率(毕竟狗狗也是生物难免会受外在影响)。
3、提供更完善的功能,比方说障碍回避、导航、影像识别等。
4、提供视障者更好的权利,也还给狗狗自由的权利!
那就来用Raspberry Pi 动手做吧!!!
如影片所示,使用者可以靠着手上的 Joystick 去控制我们的机械导盲犬:SigmaGO。
而且 SigmaGo 前方有一个超音波感测器可以知道前方是否有障碍物。如果前方有障碍物(我将参数调整为20公分以内),SigmaGO 就会自动后退并告知使用者。
SigmaGO同时也具备了导航系统,步骤如下:
1. 先使用GPS模组取得使用者的经纬度位置
2. 用OLAMI 语音识别取得想前往的目的地
3. 靠GoogleMap API 规划出路径
4. Raspberry Pi 分析路径完后并开始带使用者前往目的地
5. 接着每隔一段时间重新确认路径
SigmaGO 也能够成为使用者的智能语音助手!
使用者可以问时间、天气或算数等,它甚至可以去操控电器之类的(虽然我没有写XD)。
而且,SigmaGO 可以根据使用者的需求自行扩充,可以增加不同的Sensors 或是用OLAMI 的语音系统新增不同功能~
有兴趣的人可以跟著以下的步骤亲自做出属于自己的SigmaGO!
材料:
• Raspberry Pi 3
• USB 麦克风版
• L298N 马达驱动板
• 自走车底盘 + 2x直流马达
• 超音波感测器
• GPS 模组(NEO 6M)
• Joystick 摇杆 + MCP3008
这里使用的是OLAMI的microphone以及speaker:https://github.com/eugenejahn/SigmaGO_GuideDog (SigmaGO 的程式码!!!)
硬件部份请看此链接:https://tw.olami.ai/blog/article/31
我的程式码是使用 OLAMI 提供的 Python code 去加以修改。
如果对 OLAMI 的原始 code 有兴趣的可以先去 OLAMI GitHub 上把 OLAMI Python code 下载到 Raspberry Pi 里。
只要照着上面的 README.md 应该就能成功了(记得要把 hackntu-2017-linux/olami 移到使用者,像这样 /Users/username/olami ,要不然跑起来会有error )。
成功完成后就可以去 OLAMI 官网上建立自己的模块,然后 RaspberryPi 就能够照著你写的模块给你回复!
我们要的语音识别很简单,只要能了解使用者想要去的地名,然后抓出地名关键字再放到 GoogleMap API 上去搜寻该路径~
所以现在要打开 olami/SpeechProcess.py 里面有一个变数叫 nlpResult,它会回传给你语音识别后的结果(JSON格式)。
比方说你写了一个语法叫“向前”,你说了前进它就会回传这是“向前”!
现在只要加一个 if 迴圈,如果符合前往的语法,就去用 Google API 取得到达目的地的路径。
使用这 Google API 需要一个起点,就是现在使用者的位址。
一开始试过用 IP 位置去定位,但十分的不准,所以就买了一颗 NEO 6M GPS Module 来取得自己的位置!(在室内超难接受讯号的,害我以为坏了…搞了超久的!)
得到自己位置的经纬度后,就可以使用API找到去目的地的路程!
现在得到了方向,但我们还需要一台车子带领使用者抵达目的地。所以就把Raspberry Pi 装在自走车上面吧!
然后使用马动驱动版去控制左右两个直流马达,就大功告成了。

要来操控自走车喽~
现在要把 Google map 回传的值和自走车合併在一起!
我们要分析 Google map 回传的值(它一样是 JSON 的格式),并抓出我们要的路线规划。
自走车就能跟着取得的资料执行,如往前、左、右走几分钟之类的。并且每隔30秒更新一次 Google map 的 result,避免走错方向。
这样大致上就完成导航这一块核心了。
现在要来解决避开障碍物的问题~
可以选择使用 camera、超音波或红外线等去处理!
为了方便和节省材料费,我选择使用超音波去侦测距离!
只要在 30cm 以内,Raspberry Pi 就会告诉使用者障碍物理他的距离,以维护使用者的安全!
为了安全,超音波需要一直侦测,但 RaspberryPi 也需要一直侦测使用者有没有在讲话。所以使用 threading 把两个程式串在一起之后,就能同时执行上述两件事了。

最后来优化硬件结构吧!
克服了重重难关后,Raspberry Pi 已经能够靠着 OLAMI 的语音识别和 GoogleAPI 带你前往目的地,并且能够发现前方是否有障碍物了!
现在还差几步就能大功告成了!
我们要把 Joystick 装上去,让使用者能够藉此操控 Raspberry Pi 车,然后再加上一个握把。
注意:Joystick 的部分需要接一颗类比转数位的 IC 才能使用喔!
于是,我们现在可以靠著 Joystick 控制前后左右!终于大功告成了!
后记
材料费凑一凑大约3000多元(树莓派和GPS最贵了……),但比起一只导盲犬便宜很多。不过这还只是个雏形,有很多硬件上和软件上的问题要解决呢(例如马达的马力稍嫌太弱了……)
还好有OLAMI和Google的API使得开发上方便许多!
虽然有时花了很久解决的bug最后才发现是硬件问题,但RaspberryPi真的很有趣!容易开发、性能又强!(只是有时设定很麻烦啦 )
能够亲手做出成品真的很有成就感~
希望它真的能够帮助有需要的人,并提供给他们一个更好的生活!
如果有疑问,可以与这位开发者联系噢~
Facebook: Eugene Jahn
Email:eugenejahnjahn@gmail.com