自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何使用Android Things和TensorFlow在物聯(lián)網(wǎng)上應(yīng)用機(jī)器學(xué)習(xí)

人工智能 機(jī)器學(xué)習(xí) 物聯(lián)網(wǎng)應(yīng)用
探索如何將 Android Things 與 Tensorflow 集成起來,以及如何應(yīng)用機(jī)器學(xué)習(xí)到物聯(lián)網(wǎng)系統(tǒng)上。學(xué)習(xí)如何在裝有 Android Things 的樹莓派上使用 Tensorflow 進(jìn)行圖片分類。

如何使用Android Things和TensorFlow在物聯(lián)網(wǎng)上應(yīng)用機(jī)器學(xué)習(xí)

探索如何將 Android Things 與 Tensorflow 集成起來,以及如何應(yīng)用機(jī)器學(xué)習(xí)到物聯(lián)網(wǎng)系統(tǒng)上。學(xué)習(xí)如何在裝有 Android Things 的樹莓派上使用 Tensorflow 進(jìn)行圖片分類。

這個(gè)項(xiàng)目探索了如何將機(jī)器學(xué)習(xí)應(yīng)用到物聯(lián)網(wǎng)上。具體來說,物聯(lián)網(wǎng)平臺(tái)我們將使用 Android Things,而機(jī)器學(xué)習(xí)引擎我們將使用 Google TensorFlow

現(xiàn)如今,Android Things 處于名為 Android Things 1.0 的穩(wěn)定版本,已經(jīng)可以用在生產(chǎn)系統(tǒng)中了。如你可能已經(jīng)知道的,樹莓派是一個(gè)可以支持 Android Things 1.0 做開發(fā)和原型設(shè)計(jì)的平臺(tái)。本教程將使用 Android Things 1.0 和樹莓派,當(dāng)然,你可以無需修改代碼就能換到其它所支持的平臺(tái)上。這個(gè)教程是關(guān)于如何將機(jī)器學(xué)習(xí)應(yīng)用到物聯(lián)網(wǎng)的,這個(gè)物聯(lián)網(wǎng)平臺(tái)就是 Android Things Raspberry Pi。

物聯(lián)網(wǎng)上的機(jī)器學(xué)習(xí)是最熱門的話題之一。要給機(jī)器學(xué)習(xí)一個(gè)最簡單的定義,可能就是 維基百科上的定義

機(jī)器學(xué)習(xí)是計(jì)算機(jī)科學(xué)中,讓計(jì)算機(jī)不需要顯式編程就能去“學(xué)習(xí)”(即,逐步提升在特定任務(wù)上的性能)使用數(shù)據(jù)的一個(gè)領(lǐng)域。

換句話說就是,經(jīng)過訓(xùn)練之后,那怕是它沒有針對它們進(jìn)行特定的編程,這個(gè)系統(tǒng)也能夠預(yù)測結(jié)果。另一方面,我們都知道物聯(lián)網(wǎng)和聯(lián)網(wǎng)設(shè)備的概念。其中前景最看好的領(lǐng)域之一就是如何在物聯(lián)網(wǎng)上應(yīng)用機(jī)器學(xué)習(xí),構(gòu)建專家系統(tǒng),這樣就能夠去開發(fā)一個(gè)能夠“學(xué)習(xí)”的系統(tǒng)。此外,還可以使用這些知識(shí)去控制和管理物理對象。在深入了解 Android Things 的細(xì)節(jié)之前,你應(yīng)該先將其安裝在你的設(shè)備上。如果你是***次使用 Android Things,你可以閱讀一下這篇如何在你的設(shè)備上安裝 Android Things 的教程。

這里有幾個(gè)應(yīng)用機(jī)器學(xué)習(xí)和物聯(lián)網(wǎng)產(chǎn)生重要價(jià)值的領(lǐng)域,以下僅提到了幾個(gè)有趣的領(lǐng)域,它們是:

  • 在工業(yè)物聯(lián)網(wǎng)(IIoT)中的預(yù)見性維護(hù)
  • 消費(fèi)物聯(lián)網(wǎng)中,機(jī)器學(xué)習(xí)可以讓設(shè)備更智能,它通過調(diào)整使設(shè)備更適應(yīng)我們的習(xí)慣

在本教程中,我們希望去探索如何使用 Android Things 和 TensorFlow 在物聯(lián)網(wǎng)上應(yīng)用機(jī)器學(xué)習(xí)。這個(gè) Adnroid Things 物聯(lián)網(wǎng)項(xiàng)目的基本想法是,探索如何去構(gòu)建一個(gè)能夠識(shí)別前方道路上基本形狀(比如箭頭)并控制其道路方向的無人駕駛汽車。我們已經(jīng)介紹了 如何使用 Android Things 去構(gòu)建一個(gè)無人駕駛汽車,因此,在開始這個(gè)項(xiàng)目之前,我們建議你去閱讀那個(gè)教程。

這個(gè)機(jī)器學(xué)習(xí)和物聯(lián)網(wǎng)項(xiàng)目包含如下的主題:

  • 如何使用 Docker 配置 TensorFlow 環(huán)境
  • 如何訓(xùn)練 TensorFlow 系統(tǒng)
  • 如何使用 Android Things 去集成 TensorFlow
  • 如何使用 TensorFlow 的成果去控制無人駕駛汽車

這個(gè)項(xiàng)目起源于 Android Things TensorFlow 圖像分類器。

我們開始吧!

 

如何使用 Tensorflow 圖像識(shí)別

在開始之前,需要安裝和配置 TensorFlow 環(huán)境。我不是機(jī)器學(xué)習(xí)方面的專家,因此,我需要找到一些快速而能用的東西,以便我們可以構(gòu)建 TensorFlow 圖像識(shí)別器。為此,我們使用 Docker 去運(yùn)行一個(gè) TensorFlow 鏡像。以下是操作步驟:

1、 克隆 TensorFlow 倉庫:

  1. git clone https://github.com/tensorflow/tensorflow.git
  2. cd /tensorflow
  3. git checkout v1.5.0

2、 創(chuàng)建一個(gè)目錄(/tf-data),它將用于保存這個(gè)項(xiàng)目中使用的所有文件。

3、 運(yùn)行 Docker:

  1. docker run -it \
  2. --volume /tf-data:/tf-data \
  3. --volume /tensorflow:/tensorflow \
  4. --workdir /tensorflow tensorflow/tensorflow:1.5.0 bash

使用這個(gè)命令,我們運(yùn)行一個(gè)交互式 TensorFlow 環(huán)境,可以掛載一些在使用項(xiàng)目期間使用的目錄。

 

如何訓(xùn)練 TensorFlow 去識(shí)別圖像

在 Android Things 系統(tǒng)能夠識(shí)別圖像之前,我們需要去訓(xùn)練 TensorFlow 引擎,以使它能夠構(gòu)建它的模型。為此,我們需要去收集一些圖像。正如前面所言,我們需要使用箭頭來控制 Android Things 無人駕駛汽車,因此,我們至少要收集四種類型的箭頭:

  • 向上的箭頭
  • 向下的箭頭
  • 向左的箭頭
  • 向右的箭頭

為訓(xùn)練這個(gè)系統(tǒng),需要使用這四類不同的圖像去創(chuàng)建一個(gè)“知識(shí)庫”。在 /tf-data 目錄下創(chuàng)建一個(gè)名為 images 的目錄,然后在它下面創(chuàng)建如下名字的四個(gè)子目錄:

  • up-arrow
  • down-arrow
  • left-arrow
  • right-arrow

現(xiàn)在,我們?nèi)フ覉D片。我使用的是 Google 圖片搜索,你也可以使用其它的方法。為了簡化圖片下載過程,你可以安裝一個(gè) Chrome 下載插件,這樣你只需要點(diǎn)擊就可以下載選定的圖片。別忘了多下載一些圖片,這樣訓(xùn)練效果更好,當(dāng)然,這樣創(chuàng)建模型的時(shí)間也會(huì)相應(yīng)增加。

擴(kuò)展閱讀

打開瀏覽器,開始去查找四種箭頭的圖片:

TensorFlow image classifier

TensorFlow image classifier

每個(gè)類別我下載了 80 張圖片。不用管圖片文件的擴(kuò)展名。

為所有類別的圖片做一次如下的操作(在 Docker 界面下):

  1. python /tensorflow/examples/image_retraining/retrain.py \
  2. --bottleneck_dir=tf_files/bottlenecks \
  3. --how_many_training_steps=4000 \
  4. --output_graph=/tf-data/retrained_graph.pb \
  5. --output_labels=/tf-data/retrained_labels.txt \
  6. --image_dir=/tf-data/images

這個(gè)過程你需要耐心等待,它需要花費(fèi)很長時(shí)間。結(jié)束之后,你將在 /tf-data 目錄下發(fā)現(xiàn)如下的兩個(gè)文件:

  1. retrained_graph.pb
  2. retrained_labels.txt

***個(gè)文件包含了 TensorFlow 訓(xùn)練過程產(chǎn)生的結(jié)果模型,而第二個(gè)文件包含了我們的四個(gè)圖片類相關(guān)的標(biāo)簽。

 

如何測試 Tensorflow 模型

如果你想去測試這個(gè)模型,去驗(yàn)證它是否能按預(yù)期工作,你可以使用如下的命令:

  1. python scripts.label_image \
  2. --graph=/tf-data/retrained-graph.pb \
  3. --image=/tf-data/images/[category]/[image_name.jpg]

 

優(yōu)化模型

在 Android Things 項(xiàng)目中使用我們的 TensorFlow 模型之前,需要去優(yōu)化它:

  1. python /tensorflow/python/tools/optimize_for_inference.py \
  2. --input=/tf-data/retrained_graph.pb \
  3. --output=/tf-data/opt_graph.pb \
  4. --input_names="Mul" \
  5. --output_names="final_result"

那個(gè)就是我們?nèi)康哪P?。我們將使用這個(gè)模型,把 TensorFlow 與 Android Things 集成到一起,在物聯(lián)網(wǎng)或者更多任務(wù)上應(yīng)用機(jī)器學(xué)習(xí)。目標(biāo)是使用 Android Things 應(yīng)用程序智能識(shí)別箭頭圖片,并反應(yīng)到接下來的無人駕駛汽車的方向控制上。

如果你想去了解關(guān)于 TensorFlow 以及如何生成模型的更多細(xì)節(jié),請查看官方文檔以及這篇 教程。

 

如何使用 Android Things 和 TensorFlow 在物聯(lián)網(wǎng)上應(yīng)用機(jī)器學(xué)習(xí)

TensorFlow 的數(shù)據(jù)模型準(zhǔn)備就緒之后,我們繼續(xù)下一步:如何將 Android Things 與 TensorFlow 集成到一起。為此,我們將這個(gè)任務(wù)分為兩步來完成:

  1. 硬件部分,我們將把電機(jī)和其它部件連接到 Android Things 開發(fā)板上
  2. 實(shí)現(xiàn)這個(gè)應(yīng)用程序

 

Android Things 示意圖

在深入到如何連接外圍部件之前,先列出在這個(gè) Android Things 項(xiàng)目中使用到的組件清單:

  1. Android Things 開發(fā)板(樹莓派 3)
  2. 樹莓派攝像頭
  3. 一個(gè) LED 燈
  4. LN298N 雙 H 橋電機(jī)驅(qū)動(dòng)模塊(連接控制電機(jī))
  5. 一個(gè)帶兩個(gè)輪子的無人駕駛汽車底盤

我不再重復(fù) 如何使用 Android Things 去控制電機(jī) 了,因?yàn)樵谝郧暗奈恼轮幸呀?jīng)講過了。

下面是示意圖:

Integrating Android Things with IoT

Integrating Android Things with IoT

上圖中沒有展示攝像頭。最終成果如下圖:

[[238649]]

Integrating Android Things with TensorFlow

 

使用 TensorFlow 實(shí)現(xiàn) Android Things 應(yīng)用程序

***一步是實(shí)現(xiàn) Android Things 應(yīng)用程序。為此,我們可以復(fù)用 Github 上名為 TensorFlow 圖片分類器示例 的示例代碼。開始之前,先克隆 Github 倉庫,這樣你就可以修改源代碼。

這個(gè) Android Things 應(yīng)用程序與原始的應(yīng)用程序是不一樣的,因?yàn)椋?/p>

  1. 它不使用按鈕去開啟攝像頭圖像捕獲
  2. 它使用了不同的模型
  3. 它使用一個(gè)閃爍的 LED 燈來提示,攝像頭將在 LED 停止閃爍后拍照
  4. 當(dāng) TensorFlow 檢測到圖像時(shí)(箭頭)它將控制電機(jī)。此外,在第 3 步的循環(huán)開始之前,它將打開電機(jī) 5 秒鐘。

為了讓 LED 閃爍,使用如下的代碼:

  1. private Handler blinkingHandler = new Handler();
  2. private Runnable blinkingLED = new Runnable() {
  3. @Override
  4. public void run() {
  5. try {
  6. // If the motor is running the app does not start the cam
  7. if (mc.getStatus())
  8. return ;
  9.  
  10. Log.d(TAG, "Blinking..");
  11. mReadyLED.setValue(!mReadyLED.getValue());
  12. if (currentValue <= NUM_OF_TIMES) {
  13. currentValue++;
  14. blinkingHandler.postDelayed(blinkingLED,
  15. BLINKING_INTERVAL_MS);
  16. }
  17. else {
  18. mReadyLED.setValue(false);
  19. currentValue = 0;
  20. mBackgroundHandler.post(mBackgroundClickHandler);
  21. }
  22. } catch (IOException e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. };

當(dāng) LED 停止閃爍后,應(yīng)用程序?qū)⒉东@圖片。

現(xiàn)在需要去關(guān)心如何根據(jù)檢測到的圖片去控制電機(jī)。修改這個(gè)方法:

  1. @Override
  2. public void onImageAvailable(ImageReader reader) {
  3. final Bitmap bitmap;
  4. try (Image image = reader.acquireNextImage()) {
  5. bitmap = mImagePreprocessor.preprocessImage(image);
  6. }
  7.  
  8. final List<Classifier.Recognition> results =
  9. mTensorFlowClassifier.doRecognize(bitmap);
  10.  
  11. Log.d(TAG,
  12. "Got the following results from Tensorflow: " + results);
  13.  
  14. // Check the result
  15. if (results == null || results.size() == 0) {
  16. Log.d(TAG, "No command..");
  17. blinkingHandler.post(blinkingLED);
  18. return ;
  19. }
  20.  
  21. Classifier.Recognition rec = results.get(0);
  22. Float confidence = rec.getConfidence();
  23. Log.d(TAG, "Confidence " + confidence.floatValue());
  24.  
  25. if (confidence.floatValue() &lt; 0.55) {
  26. Log.d(TAG, "Confidence too low..");
  27. blinkingHandler.post(blinkingLED);
  28. return ;
  29. }
  30.  
  31. String command = rec.getTitle();
  32. Log.d(TAG, "Command: " + rec.getTitle());
  33.  
  34. if (command.indexOf("down") != -1)
  35. mc.backward();
  36. else if (command.indexOf("up") != -1)
  37. mc.forward();
  38. else if (command.indexOf("left") != -1)
  39. mc.turnLeft();
  40. else if (command.indexOf("right") != -1)
  41. mc.turnRight();
  42. }

在這個(gè)方法中,當(dāng) TensorFlow 返回捕獲的圖片匹配到的可能的標(biāo)簽之后,應(yīng)用程序?qū)⒈容^這個(gè)結(jié)果與可能的方向,并因此來控制電機(jī)。

***,將去使用前面創(chuàng)建的模型了。拷貝 assets 文件夾下的 opt_graph.pb 和 reatrained_labels.txt 去替換現(xiàn)在的文件。

打開 Helper.java 并修改如下的行:

  1. public static final int IMAGE_SIZE = 299;
  2. private static final int IMAGE_MEAN = 128;
  3. private static final float IMAGE_STD = 128;
  4. private static final String LABELS_FILE = "retrained_labels.txt";
  5. public static final String MODEL_FILE = "file:///android_asset/opt_graph.pb";
  6. public static final String INPUT_NAME = "Mul";
  7. public static final String OUTPUT_OPERATION = "output";
  8. public static final String OUTPUT_NAME = "final_result";

運(yùn)行這個(gè)應(yīng)用程序,并給攝像頭展示幾種箭頭,以檢查它的反應(yīng)。無人駕駛汽車將根據(jù)展示的箭頭進(jìn)行移動(dòng)。

 

總結(jié)

教程到此結(jié)束,我們講解了如何使用 Android Things 和 TensorFlow 在物聯(lián)網(wǎng)上應(yīng)用機(jī)器學(xué)習(xí)。我們使用圖片去控制無人駕駛汽車的移動(dòng)。 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2022-03-18 17:53:14

機(jī)器學(xué)習(xí)物聯(lián)網(wǎng)工業(yè)物聯(lián)網(wǎng)

2020-04-11 21:53:00

物聯(lián)網(wǎng)IOT物聯(lián)網(wǎng)技術(shù)

2023-07-13 15:16:07

物聯(lián)網(wǎng)機(jī)器學(xué)習(xí)

2023-03-13 11:20:09

物聯(lián)網(wǎng)機(jī)器學(xué)習(xí)

2023-04-21 16:18:34

物聯(lián)網(wǎng)機(jī)器學(xué)習(xí)工具

2021-10-26 14:44:28

人工智能AI深度學(xué)習(xí)

2020-08-12 11:35:04

物聯(lián)網(wǎng)安全機(jī)器學(xué)習(xí)物聯(lián)網(wǎng)應(yīng)用

2020-12-21 13:19:02

谷歌Android Thi物聯(lián)平臺(tái)

2021-11-02 09:40:50

TensorFlow機(jī)器學(xué)習(xí)人工智能

2022-09-27 14:39:32

2018-04-26 11:28:26

區(qū)塊鏈物聯(lián)網(wǎng)數(shù)據(jù)

2021-12-02 12:43:18

機(jī)器學(xué)習(xí)邊緣計(jì)算區(qū)塊鏈

2020-05-28 07:15:00

機(jī)器學(xué)習(xí)TensorFlow人工智能

2023-08-18 10:34:29

2020-05-25 22:39:38

機(jī)器學(xué)習(xí)物聯(lián)網(wǎng)IOT

2024-01-29 11:12:23

人工智能機(jī)器學(xué)習(xí)物聯(lián)網(wǎng)

2022-06-17 11:13:33

物聯(lián)網(wǎng)人工智能邊緣計(jì)算

2019-06-26 23:27:33

機(jī)器人物聯(lián)網(wǎng)應(yīng)用IOT

2019-06-11 09:45:56

物聯(lián)網(wǎng)應(yīng)用酒店IOT

2023-06-01 15:39:01

機(jī)器學(xué)習(xí)物聯(lián)網(wǎng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)