買書捐殘盟

2011年10月22日 星期六

Google App Inventor - 使用手機的語音控制

如果你的手機支援語音搜尋,那麼應該可以啟用語音辨識的操作。
這個功能可以替代手寫,英語的辨識率還算不錯,但中文辨識率不太高就是了。
(假如假設你發音正確,那麼應該可以顯示將你想說的語音轉成文字)

首先,我在手機介面上,設計如下的簡易畫面來進行測試:

(圖1)手機操作畫面

圖1中,我引用了App inventor的Other stuff中的[Speech recognizer]元件作語音控制。
而[按下後說話]的按鈕,是用來啟用speech recognizer,當你按下後即可說話。
簡單說了一段英文或中文語句,文字將顯示在圖中的Voice2TextResult文字欄位。

-------------------------------
其次,開啟Block Editor,進行程式編輯。
程式設計如下:

(圖2)程式內容

圖2中:
1. SpeechAfterPressedBtn-即按鈕,按下按鈕後,開始說話。
 call SpeechRecognizer1.GetText,呼叫語音辨識,取得文字。
2. When...SpeechRecognizer1.BeforeGettingText-
 當操作者還在說話時,介面上Voice2TextResult文字欄位的內容為空白
3. When...SpeechRecognizer1.AfterGettingText-
 將Voice2TextResult文字欄位指定為SpeechRecognizer1.Result
 即所說的內容,經過語音辨識後將文字呈現在Voice2TextResult文字欄位

--------------------------
有興趣的玩家,可以利用這樣的功能,實現在NXT的藍芽控制,當你說:
Go或是向前、Back或是向後、Left或是向左、Right或是向右,經過語音辨識,再結合
前述[Google App Inventor -手機藍芽遙控Segway]的方法,程式稍微修改一下就可
讓你的機器人用語音控制前進,後退、向左及向右了。

2011年10月15日 星期六

利用手機的指北針感應器,來做方位感測

前幾天利用手機的digital compass sensor (orientation sensor),拿來做為方位的度量。
設計的機構如下:


結果發現,這樣的機構,因為太靠近nxt motor,會產生磁場嚴重的干擾而使度量發生錯誤。
今天再改裝加高鷹架,機構如圖:


尚未測試,也許可以改善。測試的結果待續。

2011年9月20日 星期二

Google App Inventor - 使用手機的LocationSensor讀取經緯資料

現在的手機只要具備GPS的功能,就可以使用Google App Inventor裡的LocationSensor 來讀取
所在位置的經緯度、高度等資料。


(圖1-軟體介面外型)

部分程式:

其中:
1. [value latitude] -->由Location Sensor傳回的緯度數據
2. [value longitude]-->由Location Sensor 傳回的經度數據
3. LatitudeReport.Text --> 將[value latitude]顯示在(圖1)的緯度欄位
4. LongitudeReport.Text-->將[value longitude]顯示在(圖1)的經度欄位
5. AddressReport.Text-->將[LocationSensor1.CurrentAddress]的結果顯示在位址欄位

至於已知兩處AB的經緯度,如何得知A-B間最短的距離?
我利用:

其中:
其中 為大圓距離, 是地球半徑(6371km),而點 1 經度、緯度分別為 、 ,點 2 的經度、緯度分別為 、 。
其實這只是球面三角餘弦公式的推廣,注意經緯度的度數計算時要轉成徑度,才會計算正確。
d算出來的單位為km.

2011年9月14日 星期三

Google App Inventor- 製作找方位軟體

坊間有一些support Compass的軟體,以圖像的方式做出指北針,操作者可由指針朝北定出方位。

筆者試著以Google App inventor製作一簡易型的指北針,只要您的手機有Orientation Sensor就具備數位指北針的支援。


(圖1)

介面說明:
1. [Compass Test]-軟體標題
2. [CurrentDirection]-標籤文字
3. [TextBox]-存放方位感測器(Orientation Sensor)的方位
4. [CheckDirection]- 按鈕每點一次,可搜尋當前方位角
5. 引用OrientationSensor,並設定為[enable]


※使用AppInventor,介面可使用中文字,但Block Editor僅能使用英文字,設計時須注意。

(圖2)

圖2即Block Edit的程式碼。
由appinventor手冊提供的orientation sensor,偵測到的為數值,介於0~359。
其中:
0: 北方
90: 東方
180: 南方
270: 西方

筆者將數值轉化成文字,使操作的時候較易識別。
-------------------------------
※測試時,操作者將手機任意指向一方位,按下[CheckDirection]按鈕,即馬上顯示該方位的方位角,但無角度顯示,僅以16方位之結果顯示之。
即:
東、西、南、北
東南、東北、東南東、南東南、北北東、東北東
西南、西北、西南西、南南西、西北西、北北西

2011年9月4日 星期日

手機藍芽遙控挖土機



這個遙控的原理承襲前述藍芽遙控的方式,技術上大同小異。
bot裝置參考[Lego.com Mindstorms]部分的接法。
機身略有修改。

2011年9月1日 星期四

VB設計:讓電腦自動偵測SerialPort,並自動與nxt連線

在上一篇[利用藍芽技術,讓電腦可控制NXT主機],當時談到:

在設計時,使用者必須先知道自己的電腦對外連線的輸出埠(Com port)並連結,才能讓電腦透過藍芽連線裝置。

然而,如果能夠設計一程式,讓電腦在開啟軟體後,能夠自動偵測與連結電腦現有的輸出埠,而無須使用者去指定,便能增加其便利性。

換句話說,電腦到底選中哪一個輸出埠,交由軟體自己去尋找與連線,而不再經由使用者去確認與指定。

我的作法是:
ˋ
上圖即VB建構的一個畫面,畫面上方做一個MenuStrip,裡面的item包含Connect 、Disconnect
以及結束。

當按下[connect]的item,程式碼相對應的內容如下:

   Private Sub ComPortConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComPortConnect.Click

Dim com_port As String = ""

For Each sp As String In My.Computer.Ports.SerialPortNames
com_port = sp
Next

SerialPort1.PortName = com_port
SerialPort1.Open()
ConnStatus.Text = com_port + " is Connected"
End Sub
------
其中:
1.ComPortConnect_Click() 代表按下該item後即將完成的動作行為
2. Dim com_port As String ="": 宣告com_port為字串變數,其初始值為空字串
3. For Each sp.....:這一段的敘述,讓電腦自動尋找已建立的com port name有哪些,其結果回傳給sp變數,並指定給com_port
4. SerialPort1.PortName = com_port: 指定SerialPort的PortName為被找到的com_port
5. SerialPort1.Open( ): 開啟該com_port的序列埠
6. ConnStatus是畫面裏頭的文字方塊(TextBox),當連線成功,則在該TextBox顯示COM(x) is connected!

當按下[Disconnect]的item,相對應程式碼如下:


SerialPort1.Close()
ConnStatus.Text = "Wait to connect!"

上述意思是:
把SerialPort開啟的序列埠關閉,並於文字方塊顯示Wait to connect!

2011年8月23日 星期二

Kinect技術,值得研究!

今天在大潤發特別停駐在Kinect看人打電玩的時候,不是因為電玩好玩到甚麼程度,而是Kinect感應器的技術吸引我。

-----------------
目前Kinect的技術有三大主流:Kinect一次可擷取三種東西,分別是彩色影像、3D深度影像、以及聲音訊號。

Kinect主要就是靠3D深度感應器偵測玩家的動作。中間視訊鏡頭則是用來辨識玩家身分(靠著人臉辨識和身體特徵)、以及辨識基本的臉部表情。
-----------------

這可以提供給做影像辨識的研究一個方向,傳統的影像辨識各家學派技術推陳出新,技術艱深難懂,如果能夠統一規格,當然對間接使用這項技術應用的人來說,他也許不需要再學辨識技術,只要接續這項技術的後端,繼續開發更多的應用,這真的很不錯喔。

當然,以遊戲的角度來思考,Kinect的技術優於Wii或PS,在於使用者無須背負(手持)感應器(如Wii要手持遙控器),Kinect完全拋棄這些雜七雜八的東西,讓使用者更輕盈。

寒假再來好好研究這一項技術。