人工智能離前端並不遠 一步步教你開發一個機器學習APP(附源碼)

最近HBO電視網推出的美劇《硅谷Silicon Valley》席捲全球,裏面有一個橋段介紹了超級有趣的iOS app- Not Hotdog。你甚至能夠在APP Store上下載到它。javascript

是否是熱狗?

受啓發於此,我打算開發一個實現一樣功能的「機器人」:用戶只須要上傳任何一張圖片,立刻就能夠獲得反饋,告訴你這張圖片的內容是否是一個熱狗。最重要的是,個人代碼所有以JS實現,是時候讓前端工程師們在人工智能/機器學習領域大展身手了。前端

實現細節

這個APP以Twitter爲宿主,基於Twitter Bot機器人:任何Twitter用戶均可以發佈一張圖片,而且在上傳描述文字中加入「@IsItAHotdog」,就能當即獲得回覆。就像大陸經常使用的微博加入"#"描述符同樣簡單。java

熱狗探測APP

千萬不要被表象所困擾,更不要被「人工智能/機器學習」的標籤所迷惑。其實實現方式和原理很是簡單。git

首先,我forked @BryanEBraun’s 的開源做品Twitter bot,它基於NodeJS,Twitter Bot譯爲機器人:會定時發推,或隨機回覆。github

官方介紹內容也很是簡潔明瞭:npm

This is a simple twitter bot, designed to retweet the contents of a twitter list.服務器

藉助這個工具,接下來個人工做就是對提到"IsItAHotdog"的推文(即含有IsItAHotdog標籤),做出迴應。微信

在安裝 tuiter NPM包以後,代碼中引入依賴,並加入:網絡

var tu = require('tuiter')(config.keys);
 function listen() {    
    tu.filter({        
        track: 'isitahotdog'    
    }, function(stream) {        
        console.log("listening to stream");
        stream.on('tweet', onTweet);
    })
}複製代碼

固然,咱們只對含有圖片的推文進行處理:前端工程師

if(tweet.entities.hasOwnProperty('media') && tweet.entities.media.length > 0)複製代碼

最後,咱們把結果寫進推文回覆中:

tu.update({
    status: "@" + tweet.user.screen_name + message,        
    in_reply_to_status_id: tweet.id_str    
}, onReTweet);複製代碼

訓練模型

以上只是介紹了劫持推文,發佈回覆的內容。那麼回覆的結果應該怎麼得到呢?咱們怎麼知道圖片是否是熱狗呢?這就到了最重要的一步。

熟悉深度學習的朋友可能會了解,接下來咱們可能須要收集圖片,並用Keras搭建CNN經常使用神經網絡。其中Keras是一個兼容Theano和Tensorflow的神經網絡高級包, 高度模塊化,用他來組建一個神經網絡很是快速便捷。

這些內容可能中文資料並很少,僅有的一些若是你們感興趣的話,我推薦:

可是這些深度學習的內容,可能不少前端工程師並非太瞭解,那麼咱們就得從新修煉才能玩轉這一切嗎?

別急,如今就能夠開始!這裏我給你們安利一下AWS Rekognition,咱們的APP也是基於AWS Rekognition來完成。

Amazon Rekognition 是一種讓您可以輕鬆爲應用程序添加圖像分析功能的服務。利用 Rekognition,您能夠檢測對象、場景和麪孔,能夠搜索和比較面孔,還能夠識別圖像中的不當內容。藉助 Rekognition 的 API,您能夠快速爲應用程序添加基於深度學習的複雜視覺搜索和圖像分類功能。

換句話說,「不瞭解機器學習,簡單的調用幾個API都應該會吧。」

Amazon Rekognition基於一樣由Amazon計算機視覺科學家開發的成熟且高度可擴展的深度學習技術,天天可以分析數十億張 Prime Photos 圖像。

說到這裏可能有些繞,其實來看下代碼,很是的簡單:

var params = {
     Image: { 
         Bytes: body
     },
     MaxLabels: 20,
     MinConfidence: 70
 };

 rekognition.detectLabels(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else {
        console.log(data);           // successful response
        var isItAHotdog = false;
        for (var label_index in data.Labels) {
            var label = data.Labels[label_index];
            if(label['Name'] == "Hot Dog") {
               if(label['Confidence'] > 85) {
                    isItAHotdog = true;
                    tweetBasedOnCategorization(tweet, true);
                }
            }
        }
        if(isItAHotdog == false) {
            tweetBasedOnCategorization(tweet, false);
        }
    }
});複製代碼

我把推文附帶的圖片下載到本身的服務器機器上,而後經過AWS Node SDK傳遞給Rekognition,並設置相應的參數,包括置信區間等。
最後,在回調中得到最終結果。

最終結果

讓咱們來看一組測試結果吧:

測試

測試

這一切的開發過程都是很是的簡單,若是你想看到源碼,我fork了一份,並加入了中文註解。請點擊這裏查看源碼。

本文翻譯自Building Silicon Valley’s Hot Dog App in One Night,對於原文進行了部分擴展。

Happy Coding!

最後,可恥地作一波廣告:

受到gitChat的邀請,我要開分享了。形式相似知乎Live,可是這個平臺我感受少了浮躁而更加專業。
主題內容爲:面對前端六年曆史代碼,如何接入並應用ES6解放開發效率

我邀請了資深前端專家,社區網紅@顏海鏡同我一塊兒,詳情介紹點擊這裏。

微信掃描下方二維碼,便可參加:

掃描此二維碼

內容介紹

PS: 做者Github倉庫,歡迎經過代碼各類形式交流。

相關文章
相關標籤/搜索