這篇文章主要介紹怎么使用Android Things和TensorFlow在物聯(lián)網(wǎng)上應用機器學習,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
在施甸等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需求定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計,全網(wǎng)整合營銷推廣,外貿(mào)營銷網(wǎng)站建設(shè),施甸網(wǎng)站建設(shè)費用合理。
這個項目探索了如何將機器學習應用到物聯(lián)網(wǎng)上。具體來說,物聯(lián)網(wǎng)平臺我們將使用 Android Things,而機器學習引擎我們將使用 Google TensorFlow。
現(xiàn)如今,Android Things 處于名為 Android Things 1.0 的穩(wěn)定版本,已經(jīng)可以用在生產(chǎn)系統(tǒng)中了。如你可能已經(jīng)知道的,樹莓派是一個可以支持 Android Things 1.0 做開發(fā)和原型設(shè)計的平臺。本教程將使用 Android Things 1.0 和樹莓派,當然,你可以無需修改代碼就能換到其它所支持的平臺上。這個教程是關(guān)于如何將機器學習應用到物聯(lián)網(wǎng)的,這個物聯(lián)網(wǎng)平臺就是 Android Things Raspberry Pi。
物聯(lián)網(wǎng)上的機器學習是最熱門的話題之一。要給機器學習一個最簡單的定義,可能就是 維基百科上的定義:
機器學習是計算機科學中,讓計算機不需要顯式編程就能去“學習”(即,逐步提升在特定任務(wù)上的性能)使用數(shù)據(jù)的一個領(lǐng)域。
換句話說就是,經(jīng)過訓練之后,那怕是它沒有針對它們進行特定的編程,這個系統(tǒng)也能夠預測結(jié)果。另一方面,我們都知道物聯(lián)網(wǎng)和聯(lián)網(wǎng)設(shè)備的概念。其中前景最看好的領(lǐng)域之一就是如何在物聯(lián)網(wǎng)上應用機器學習,構(gòu)建專家系統(tǒng),這樣就能夠去開發(fā)一個能夠“學習”的系統(tǒng)。此外,還可以使用這些知識去控制和管理物理對象。在深入了解 Android Things 的細節(jié)之前,你應該先將其安裝在你的設(shè)備上。如果你是***次使用 Android Things,你可以閱讀一下這篇如何在你的設(shè)備上安裝 Android Things 的教程。
這里有幾個應用機器學習和物聯(lián)網(wǎng)產(chǎn)生重要價值的領(lǐng)域,以下僅提到了幾個有趣的領(lǐng)域,它們是:
在工業(yè)物聯(lián)網(wǎng)(IIoT)中的預見性維護
消費物聯(lián)網(wǎng)中,機器學習可以讓設(shè)備更智能,它通過調(diào)整使設(shè)備更適應我們的習慣
在本教程中,我們希望去探索如何使用 Android Things 和 TensorFlow 在物聯(lián)網(wǎng)上應用機器學習。這個 Adnroid Things 物聯(lián)網(wǎng)項目的基本想法是,探索如何去構(gòu)建一個能夠識別前方道路上基本形狀(比如箭頭)并控制其道路方向的無人駕駛汽車。我們已經(jīng)介紹了 如何使用 Android Things 去構(gòu)建一個無人駕駛汽車,因此,在開始這個項目之前,我們建議你去閱讀那個教程。
這個機器學習和物聯(lián)網(wǎng)項目包含如下的主題:
如何使用 Docker 配置 TensorFlow 環(huán)境
如何訓練 TensorFlow 系統(tǒng)
如何使用 Android Things 去集成 TensorFlow
如何使用 TensorFlow 的成果去控制無人駕駛汽車
這個項目起源于 Android Things TensorFlow 圖像分類器。
我們開始吧!
在開始之前,需要安裝和配置 TensorFlow 環(huán)境。我不是機器學習方面的專家,因此,我需要找到一些快速而能用的東西,以便我們可以構(gòu)建 TensorFlow 圖像識別器。為此,我們使用 Docker 去運行一個 TensorFlow 鏡像。以下是操作步驟:
1、 克隆 TensorFlow 倉庫:
git clone https://github.com/tensorflow/tensorflow.gitcd /tensorflowgit checkout v1.5.0
2、 創(chuàng)建一個目錄(/tf-data
),它將用于保存這個項目中使用的所有文件。
3、 運行 Docker:
docker run -it \--volume /tf-data:/tf-data \--volume /tensorflow:/tensorflow \--workdir /tensorflow tensorflow/tensorflow:1.5.0 bash
使用這個命令,我們運行一個交互式 TensorFlow 環(huán)境,可以掛載一些在使用項目期間使用的目錄。
在 Android Things 系統(tǒng)能夠識別圖像之前,我們需要去訓練 TensorFlow 引擎,以使它能夠構(gòu)建它的模型。為此,我們需要去收集一些圖像。正如前面所言,我們需要使用箭頭來控制 Android Things 無人駕駛汽車,因此,我們至少要收集四種類型的箭頭:
向上的箭頭
向下的箭頭
向左的箭頭
向右的箭頭
為訓練這個系統(tǒng),需要使用這四類不同的圖像去創(chuàng)建一個“知識庫”。在 /tf-data
目錄下創(chuàng)建一個名為 images
的目錄,然后在它下面創(chuàng)建如下名字的四個子目錄:
up-arrow
down-arrow
left-arrow
right-arrow
現(xiàn)在,我們?nèi)フ覉D片。我使用的是 Google 圖片搜索,你也可以使用其它的方法。為了簡化圖片下載過程,你可以安裝一個 Chrome 下載插件,這樣你只需要點擊就可以下載選定的圖片。別忘了多下載一些圖片,這樣訓練效果更好,當然,這樣創(chuàng)建模型的時間也會相應增加。
擴展閱讀
如何使用 API 去集成 Android Things
如何與 Firebase 一起使用 Android Things
打開瀏覽器,開始去查找四種箭頭的圖片:
TensorFlow image classifier
每個類別我下載了 80 張圖片。不用管圖片文件的擴展名。
為所有類別的圖片做一次如下的操作(在 Docker 界面下):
python /tensorflow/examples/image_retraining/retrain.py \ --bottleneck_dir=tf_files/bottlenecks \--how_many_training_steps=4000 \--output_graph=/tf-data/retrained_graph.pb \--output_labels=/tf-data/retrained_labels.txt \--image_dir=/tf-data/images
這個過程你需要耐心等待,它需要花費很長時間。結(jié)束之后,你將在 /tf-data
目錄下發(fā)現(xiàn)如下的兩個文件:
retrained_graph.pb
retrained_labels.txt
***個文件包含了 TensorFlow 訓練過程產(chǎn)生的結(jié)果模型,而第二個文件包含了我們的四個圖片類相關(guān)的標簽。
如果你想去測試這個模型,去驗證它是否能按預期工作,你可以使用如下的命令:
python scripts.label_image \--graph=/tf-data/retrained-graph.pb \--image=/tf-data/images/[category]/[image_name.jpg]
在 Android Things 項目中使用我們的 TensorFlow 模型之前,需要去優(yōu)化它:
python /tensorflow/python/tools/optimize_for_inference.py \--input=/tf-data/retrained_graph.pb \--output=/tf-data/opt_graph.pb \--input_names="Mul" \--output_names="final_result"
那個就是我們?nèi)康哪P?。我們將使用這個模型,把 TensorFlow 與 Android Things 集成到一起,在物聯(lián)網(wǎng)或者更多任務(wù)上應用機器學習。目標是使用 Android Things 應用程序智能識別箭頭圖片,并反應到接下來的無人駕駛汽車的方向控制上。
如果你想去了解關(guān)于 TensorFlow 以及如何生成模型的更多細節(jié),請查看官方文檔以及這篇 教程。
TensorFlow 的數(shù)據(jù)模型準備就緒之后,我們繼續(xù)下一步:如何將 Android Things 與 TensorFlow 集成到一起。為此,我們將這個任務(wù)分為兩步來完成:
硬件部分,我們將把電機和其它部件連接到 Android Things 開發(fā)板上
實現(xiàn)這個應用程序
在深入到如何連接外圍部件之前,先列出在這個 Android Things 項目中使用到的組件清單:
Android Things 開發(fā)板(樹莓派 3)
樹莓派攝像頭
一個 LED 燈
LN298N 雙 H 橋電機驅(qū)動模塊(連接控制電機)
一個帶兩個輪子的無人駕駛汽車底盤
我不再重復 如何使用 Android Things 去控制電機 了,因為在以前的文章中已經(jīng)講過了。
下面是示意圖:
Integrating Android Things with IoT
上圖中沒有展示攝像頭。最終成果如下圖:
Integrating Android Things with TensorFlow
***一步是實現(xiàn) Android Things 應用程序。為此,我們可以復用 Github 上名為 TensorFlow 圖片分類器示例 的示例代碼。開始之前,先克隆 Github 倉庫,這樣你就可以修改源代碼。
這個 Android Things 應用程序與原始的應用程序是不一樣的,因為:
它不使用按鈕去開啟攝像頭圖像捕獲
它使用了不同的模型
它使用一個閃爍的 LED 燈來提示,攝像頭將在 LED 停止閃爍后拍照
當 TensorFlow 檢測到圖像時(箭頭)它將控制電機。此外,在第 3 步的循環(huán)開始之前,它將打開電機 5 秒鐘。
為了讓 LED 閃爍,使用如下的代碼:
private Handler blinkingHandler = new Handler();private Runnable blinkingLED = new Runnable() { @Override public void run() { try { // If the motor is running the app does not start the cam if (mc.getStatus()) return ; Log.d(TAG, "Blinking.."); mReadyLED.setValue(!mReadyLED.getValue()); if (currentValue <= NUM_OF_TIMES) { currentValue++; blinkingHandler.postDelayed(blinkingLED, BLINKING_INTERVAL_MS); } else { mReadyLED.setValue(false); currentValue = 0; mBackgroundHandler.post(mBackgroundClickHandler); } } catch (IOException e) { e.printStackTrace(); } }};
當 LED 停止閃爍后,應用程序?qū)⒉东@圖片。
現(xiàn)在需要去關(guān)心如何根據(jù)檢測到的圖片去控制電機。修改這個方法:
@Overridepublic void onImageAvailable(ImageReader reader) { final Bitmap bitmap; try (Image image = reader.acquireNextImage()) { bitmap = mImagePreprocessor.preprocessImage(image); } final List<Classifier.Recognition> results = mTensorFlowClassifier.doRecognize(bitmap); Log.d(TAG, "Got the following results from Tensorflow: " + results); // Check the result if (results == null || results.size() == 0) { Log.d(TAG, "No command.."); blinkingHandler.post(blinkingLED); return ; } Classifier.Recognition rec = results.get(0); Float confidence = rec.getConfidence(); Log.d(TAG, "Confidence " + confidence.floatValue()); if (confidence.floatValue() < 0.55) { Log.d(TAG, "Confidence too low.."); blinkingHandler.post(blinkingLED); return ; } String command = rec.getTitle(); Log.d(TAG, "Command: " + rec.getTitle()); if (command.indexOf("down") != -1) mc.backward(); else if (command.indexOf("up") != -1) mc.forward(); else if (command.indexOf("left") != -1) mc.turnLeft(); else if (command.indexOf("right") != -1) mc.turnRight();}
在這個方法中,當 TensorFlow 返回捕獲的圖片匹配到的可能的標簽之后,應用程序?qū)⒈容^這個結(jié)果與可能的方向,并因此來控制電機。
***,將去使用前面創(chuàng)建的模型了??截?assets
文件夾下的 opt_graph.pb
和 reatrained_labels.txt
去替換現(xiàn)在的文件。
打開 Helper.java
并修改如下的行:
public static final int IMAGE_SIZE = 299;private static final int IMAGE_MEAN = 128;private static final float IMAGE_STD = 128;private static final String LABELS_FILE = "retrained_labels.txt";public static final String MODEL_FILE = "file:///android_asset/opt_graph.pb";public static final String INPUT_NAME = "Mul";public static final String OUTPUT_OPERATION = "output";public static final String OUTPUT_NAME = "final_result";
運行這個應用程序,并給攝像頭展示幾種箭頭,以檢查它的反應。無人駕駛汽車將根據(jù)展示的箭頭進行移動。
以上是“怎么使用Android Things和TensorFlow在物聯(lián)網(wǎng)上應用機器學習”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
本文名稱:怎么使用AndroidThings和TensorFlow在物聯(lián)網(wǎng)上應用機器學習
鏈接URL:http://redsoil1982.com.cn/article4/jiejie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、虛擬主機、建站公司、品牌網(wǎng)站制作、商城網(wǎng)站、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)