今天我們要介紹一位AI專家,同時也是一個新晉老爸:
他有一個21月大的寶寶,叫黛西。
這位細心的爸爸發現,雖然寶寶還不太會說話,但特別喜歡指著一些圖案試圖跟爸爸媽媽說這是什麼,比如電視錄像裡的動物、海報上的食物,畫冊上的卡通圖案。
於是他就在想——為什麼不構建一個可以與他一起玩這類指向遊戲的機器人呢?
概念
經過一番集思廣益的討論……,這個愛心老爸確切地知道想要構建什麼——它應該是一個聊天機器人,外觀像狗,這是寶寶最喜歡的動物。她的名字叫Qrio,是疑問和好奇兩個詞的混合體。
所以他用自家的狗狗為藍本,設計了一個形象:
Qrio將能夠看到寶寶走過並對他說:「嗨,黛西!你想來給我看你的玩具嗎?接下來,當寶寶拿起並向她展示飛機玩具時,她會繼續說「嘿,那是一架飛機。讓我為您播放一架飛機的視頻,然後尋找供他播放的飛機視頻。
研究
為了實現上述目標,Qrio需要具有以下模塊:
1.理解力,Qrio必須識別寶寶及其攜帶的玩具。為此,需要有一臺連接到AI系統的攝像頭,以檢測寶寶及其玩具的存在和位置。需要構建經過訓練以識別人臉和玩具的對象檢測AI模型,該模型將在連接到相機的GPU驅動的設備上運行。
2.視覺存在 -以虛擬狗的形式出現,它將與寶寶進行交互。它由顯示在顯示器上的虛擬木偶系統驅動。
3.語音,以便Qrio可以向他寶寶招呼,並要求寶寶拿起玩具,說出玩具的名稱等,這需要文本語音轉換技術,並且顯然需要揚聲器。
4.視頻搜索和播放,以便Qrio可以在YouTube上搜索並播放相關視頻。這將由自動化工具來驅動。
5.所有組件的協調員。
經過任真的研究和評估後,這個爸爸確認了一下硬體設備:
1.NVIDIA Jetson Nano。這是一個由GPU驅動的微型嵌入式設備,它將運行所有模塊(特別是對象檢測AI模型)。這是完成這項工作的理想設備,因為它可以通過簡單的HDMI埠支持視頻和音頻輸出,並且具有乙太網埠,可輕鬆訪問網際網路。您甚至可以插入滑鼠和鍵盤來在設備上進行開發和調試,因為它具有功能齊全的Ubuntu 18.04 OS。
2.電視(帶HDMI輸入和內置揚聲器)。這樣寶寶可以看到Qrio並聽到她在說什麼,還可以播放YouTube視頻。
3.樹莓派相機-Sony IMX219。這是一款超讚的微型8MP相機,可讓Qrio識別出寶寶及其玩具。圖像質量很棒,價格也非常便宜。
實作
有了一個堅實的計劃,寶爸開始履行自己的使命。
建立AI模型
首先,需要開發和訓練對象檢測組件以識別特定的人臉和玩具。請記住,NVIDIA Jetson Nano的GPU的功能遠不如1080Ti等臺式機類GPU卡強大,因此選擇在精度和性能之間取得良好平衡的物體檢測模型架構至關重要。
寶爸最後選擇的模型架構是SSDLiteMobileNetV2,它在 TensorFlow 1.8 object detection API上運行。
寶爸最後決定採用四個類別訓練模型:一個人臉和三個寶寶喜歡玩的玩具(飛機,火車和熊貓)。所有訓練集圖像(每類別150張圖像)都是從使用同一臺Sony IMX219攝像機錄製的視頻文件生成的。為了最大程度地提高檢測精度並確保照明和背景一致,寶爸都是在同一客廳中拍攝的。這三個玩具是手動製作的,並從視頻中刻苦地貼上標籤。但是,為了保持理智,寶爸使用了Amazon Rekognition(一種現成的對象檢測雲服務)來自動標記所有面孔。
視頻錄製是使用GStreamer完成的,寶爸將記錄幀速率設置為120 FPS,並稍後使用視頻編輯工具對其進行降採樣。記錄尺寸設置為720x540,這已經足夠了,因為對象檢測模型只能在300x300像素上運行,而任何較大的圖像在訓練和推理過程中都會自動調整為300x300像素。
GStreamer和OpenCV框架用於連接到攝像機並從攝像機獲取視頻。寶爸設法使對象檢測以10 FPS的速度運行,這比最低要求8 FPS還要高-並且具有相當好的檢測精度!
建立視覺形象
正確設置視覺狀態組件至關重要。Qrio必須具有吸引力,更重要的是,寶寶想要和她一起玩,它看起來像一隻真正的活狗。花費了幾個小時的時間,寶爸才找到了一個名為arcade的出色Python框架,它支持遊戲動畫循環,並能夠通過旋轉和縮放來渲染/顯示Sprite(具有透明度的PNG圖像)。由於此框架基於OpenGL,因此NVIDIA Jetson Nano的速度性能應該非常出色,因為它將通過GPU加速。
寶爸花了幾個小時來調整煩躁的動畫參數,以最終得到想要的結果:
語音
經過各種比較後,寶爸最後使用Amazon Polly 。語音質量提高了100倍,並且沒有明顯的延遲,即使它需要通過Internet進行API調用以從雲中生成和下載生成的音頻文件。雖然是收費的,但是考慮到Qrio最多只需要說出50個不同的句子,並且它僅需支付50個Amazon Polly電話(0.08美分)的費用,它就可能被大量緩存。好極了!!!
建立視頻搜索和播放
如前所述,Qrio必須能夠在YouTube上搜索並播放特定視頻。最好的方法是使用自動化測試套件,該套件可以控制Web瀏覽器在YouTube中執行搜索並播放來自搜索結果的視頻。在這裡,寶爸採用Selenium自動化框架。
建立協調員
該模塊用作將所有其他模塊粘合在一起的協調器。協調器的一個關鍵部分是狀態機,它可以跟蹤遊戲的當前狀態。
為什麼我們需要狀態機?這樣,我們就可以在收到同一事件時做出不同的決定,具體取決於我們當前所處的狀態。例如,如果以前Qrio尚未見過寶寶,則獨自觀看飛機玩具不應觸發播放YouTube視頻的呼叫,因為這可能是玩具飛機正躺在沙發上的情況。在播放飛機視頻後看到飛機玩具應該讓Qrio說:「嘿,我們以前玩過飛機。你為什麼不帶我看 的東西呢?您可以在下面的狀態圖中看到四個主要狀態- 空閒,參與,ObectRecognis和PlayingVideo。當系統處於PlayingVideo以外的任何狀態時,它會定期調用Fidget Animation System動畫Qrio坐立不安,並通過視覺模塊進行檢查以獲取所有可識別對象的位置。系統從空閒狀態開始,如果檢測到寶寶至少0.5秒鐘(以最大程度減少錯誤檢測),它將調用語音模塊說類似「 Hi 黛西,您想來玩嗎?」的內容。並將遊戲狀態設置為「 參與」狀態。
此外,如果在處於「 參與」模式時可以看到熊貓玩具,則Qrio會說「 Hi 黛西,我認為那是一隻熊貓,」,並且會進入ObjectRecognised模式。如果熊貓玩具仍然保持可見狀態兩秒鐘,Qrio將切換到PlayingVideo狀態下,會說「讓我為您播放有關熊貓的視頻」,並調用視頻搜索和播放模塊來搜索並播放熊貓視頻。但是,如果最近播放了一個有關熊貓的視頻,它會說:「嘿,我們以前玩過熊貓。為什麼不給我帶來其他東西?視頻將只在全屏播放45秒,而視線和煩躁的動畫系統將暫停以將CPU資源集中在播放流暢的視頻上。視頻播放完成後,將隱藏瀏覽器窗口,並恢復視線和坐姿動畫系統。在參與模式下10秒鐘內看不到Dexie時,協調器會將狀態重置為空閒。
您還可以看到,當人臉可見時,除了PlayingVideo之外,在任何狀態下都可以調用Head Tracking模塊,以使Qrio的眼球跟隨人臉邊界框的中心。
好了,來看看當寶寶第一次看見Qrio時候的樣子吧!
更多Jetson NANO應用案例:
【Jetson開發項目展示】利用AI巧妙地拉開社交距離
【Jetson開發項目展示】利用開放顯微鏡和深度學習進行瘧疾檢測
【Jetson開發項目展示】自適應交通控制系統
【Jetson開發項目展示】Simto - Real:用於機器人導航的虛擬制導
【Jetson開發項目展示】用Jetson NANO作一個盲人閱讀器
【Jetson開發項目展示】用Jetson NANO檢測植物病害
邁向精準農業第一步:用Jetson NANO做一個智能農業機器人
【Jetson開發項目展示】用 Jetson Nano打造水下航行器
不要問我星星有幾顆,Jetson NANO告訴你有很多....
利用Jetson NANO,做一棵可以拯救蜜蜂的聖誕樹
Jetson NANO應用案例展示 | 打造智能商業化門店
Jetson NANO應用案例展示 | 無人機在黑暗場景中的定位飛行
【Jetson開發項目展示】利用Jetson NANO和TensorRT做一個道路智能坑洞檢測器
【Jetson開發項目展示】用Jetson NANO做一個智能快遞櫃原型
【Jetson開發項目展示】敢跟NVIDIA JetBot小車玩石頭剪刀布麼?
【Jetson 開發項目展示】利用Jetson NANO實現人臉識別考勤