2020年4月5日 星期日

[AI] 用臉發功:使用VIA Pixetto視覺感測器之人臉偵測(Face Detection)功能

用臉發功:

使用VIA Pixetto視覺感測器之人臉偵測(Face Detection)功能


FB2http://gg.gg/TedLeeMicrobitFB/
URL2http://gg.gg/TedLeeMicrobit/

Line:ted2016.kpvs
Email:Lct4246@gmail.com
FB1http://gg.gg/TedLeeFB/
Bloghttp://gg.gg/TedLeeBlog/
URL1http://gg.gg/TedLeeURL/

Apr. 5, 2020
88x31.png[1]

難易度

★★★☆☆

主題

8787內建的AI影像處理(image processing)功能應用實作。

任務

石鐘媽為了近來疫情嚴重,家中兩個小寶貝將面臨學校隨時停課而要有家裡蹲的居家照護因應。
各位讀者,請腦力激盪一下,利用8787來替石鐘媽隨時演奏一曲快樂頌提提神吧?
利用8787的模板匹配功能來演奏音樂曲目,例如:看到LV標誌播一曲快樂頌。

材料

項目品名單位數量
1VTS-8787視覺感測器1
2micro USB傳輸線1
3Grove – 4x公端杜邦線+母座 to Grove 4pin連接線1
4Arduino Uno1
5USB2.0 A公-B公傳輸線1
6馬達擴充板(註)1
7TT馬達1
8四號電池盒(四入,含蓋、開關)、1
9四號電池4

    造形設計(機構)

    請參考轉盤https://reurl.cc/62EpDr商品永不停轉的抽獎大轉盤https://reurl.cc/5lG72n)的概念設計作品的外觀。記得將8787及其相關電路的尺寸考量進去。

      功能設計(電路、程式)

      先依照下列二表格及圖1接妥8787、Uno、馬達擴充板與TT馬達的連接線路。

      馬達擴充板
      電池盒
      TT馬達
      OUT3(D5)
      OUT4(D6)
      5V/12V
      GND

      馬達擴充板
      8787
      D3
      D4
      5V
      GND

      圖1:接線圖。


      在Pixetto Utility上(圖2)選用形狀偵測功能,讓8787識別並套用之(例如我們以先前至夏威夷旅行帶回的川普大叔紀念筆做為待測物),詳細操作方法可參考拙著《VIA Pixetto視覺感測器大開箱(unboxing):AI開發工具(Development Kits)篇》(https://reurl.cc/Qd6eVO)一文。

      圖2:在Pixetto Utility上選用特徵點偵測功能。

      接著,在Pixetto Junior上拉出圖3的積木程式。這個程式的邏輯是一開機後先讓馬達順轉後停止做自我測試(self test)
      接著,若8787「看見」前述的川普大叔人像商品後就逆轉。否則,就停止馬達轉動。
      為了程式易於理解,我們亦在圖三中加入了副程式(subroutines)───本例是用無傳回傳的function)的概念將馬達順轉forward()、逆轉backward()與停止stp()控制獨立成個別的程式片段來呼叫。

      圖3:Pixetto Junior的Blockly程式碼。

      圖3積木程式自動生成的Arduino程式碼如下所示。

      #include <Arduino.h>
      #include <SmartSensor.h>

      SmartSensor ss(3,4);

      int motorIn1;
      int motorIn2;

      void forward() {
      digitalWrite(motorIn1, HIGH);
      digitalWrite(motorIn2, LOW);
      }

      void backward() {
      digitalWrite(motorIn1, LOW);
      digitalWrite(motorIn2, HIGH);
      }

      void stop() {
      digitalWrite(motorIn1, LOW);
      digitalWrite(motorIn2, LOW);
      }

      void setup() {
        ss.begin();

        motorIn1 = 5;
        motorIn2 = 6;
        pinMode(motorIn1, OUTPUT);
        pinMode(motorIn2, OUTPUT);
        forward();
        delay(500);
        stop();
      } //end of setup()

      void loop() {
        if (ss.isDetected()) {
         if (ss.getTypeID() == 0) {
         backward();
         delay(500);
         }
        } else {
         stop();
        } //end of if
      } //end of loop()

      本單元的操作影片https://youtu.be/OpC_7JnE4e0 如圖4所示。

      圖4:展示影片。

        教學活動設計

        1. 當音樂下了之後,讓8787識別到特徵點後表演左三圈,右三圈https://reurl.cc/qd5gZ0)。

          参考資料
          1. 六種授權條款

          2020年4月4日 星期六

          [micro:bit] 蒸汽彼特(STEAM on micro:bit)II──主題10:卡路里大作戰之鋼鐵人反應爐燈環傳

          蒸汽彼特(STEAM on micro:bit)II

          主題10:卡路里大作戰之鋼鐵人反應爐燈環傳


          FB2http://gg.gg/TedLeeMicrobitFB/
          URL2http://gg.gg/TedLeeMicrobit/

          Line:ted2016.kpvs
          Email:Lct4246@gmail.com
          FB1http://gg.gg/TedLeeFB/
          Bloghttp://gg.gg/TedLeeBlog/
          URL1http://gg.gg/TedLeeURL/

          Apr. 4, 2020
          88x31.png[1]

           

          難易度

          ★★☆☆☆

          主題

          跑跑跑…向前跑,邊跑邊消耗多食的卡路里之外,還可以替鋼鐵人反應爐積累能量

          任務

          反應爐是鋼鐵人的心臟,為了讓他好好活下去,請督促小彼特每天都要按時運動好將卡路里燃燒後轉換成反應爐所需的能量。
          廣播計步功能結合,每跑十步就讓燈環多亮一顆燈。待燈環全數點亮後還會放音樂

          材料

          編號品名單位數量
          1小彼特主板2
          2傳輸線1
          3燈環(註)4
          4魔鬼氈1
          5瓦楞紙板/PP板/木板…1

          造形設計

          以上一小節第5項材料,參考圓扁盒造形https://reurl.cc/O1Ap6A)、https://reurl.cc/xZ9OWNhttps://reurl.cc/vDdeEA…來設計反應爐的外觀。請留意要預留放置小彼特的尺寸。

          功能設計=硬(電路設計)+軟(程式設計)

          電路設計 電路設計如右圖所示。藍色小彼特為發送端(transmitter,Tx),它連接KSB040鋰電擴充板https://reurl.cc/ex33gM)供電;紅色小彼特為接收端(receiver,Rx),除了和接收端一樣使用KSB040做為電力來源外,考量到燈環需要5V電源(主板只需3V),因此,我們再加上一塊KSB047 PWM轉接板https://reurl.cc/E7rryn)後,恰巧可以把原本是要給外接伺服馬達用的5V電源接腳挪拿來驅動燈環使用。操作影片https://reurl.cc/1xZGpQ)如右圖所示
          另外,它除了輕巧、省接線外,售價上也不會比外接獨立電源來的貴。所以,選用KSB040再搭配KSB047就會是一個經濟而實惠的不錯選擇了。


          如何選擇合適的擴充板(extension boards) 關於小彼特常用的擴充板可參考我們在MakerPro專欄中《micro:bit搭載KAISE週邊的引導式教學組合》(https://reurl.cc/z8ZM2e)一文的詳細介紹。以下,我們條列幾項重要的原則供讀者在有需要採購時較好依循:
          1. 錢有涯,擴充無涯:硬體擴充本身就是個無底洞,需量(財/能)力而為之。
          2. 專款專用,切忌包山包海:將所有元件集結在同一塊電路板子上雖可省去收找材料的麻煩,但一有某處單獨的零件損壞常會是再多新買一塊新品替代。更重要的是,在做作品時就會發現雖需求功能不多,但因為整塊板子全都包了,遂而無法客制量身訂作。
          3. 教學需求至上:凡教學上用不到的硬體,請都放在最後再考量。
          4. 學習常規,不學特例:筆者上課常和學生們笑言:「我們很懶,只要辛苦地一次把他們學會,之後就不用再多花時間學第二次。」某些廠商為了防呆或者是刻意簡化的接線方式,一開始學時無腦地喀喳就接好了,但只要是非該廠商推出的產品,就會立即發現接起線來東卡、西卡的。
          5. 跟風無時停(台語):網上推坑不平之路很多,只要看推的人有沒在教學?有沒學員作品不斷的產出?大概就知道他們推薦東西的受測度了。以我們而言,我們得要站在教學第一線來考量。因為自己有在教學,所以會被學員操到金嚇嚇(台語)~。


          程式設計 既然硬體先天就已畫分好了傳送端和接收端,軟體功能的程式撰寫當然也得遵循這個架構。

          1. 傳送端的程式如某右圖所示。我們使用87號廣播通道(radio channel)來傳遞訊息。當傳送端的小彼特晃動時,將計步的記錄傳送出去後發出提示音效。(隨時按下按鈕A可發射代碼99表示要歸零重新開始。)完整的參考程式碼可按https://reurl.cc/9EGGjd下載
          2. 接收端的程式如某右圖所示

          Make Codehttps://makecode.microbit.org/)線上編輯工具中匯入燈環的擴充積木。本例是使用手邊的EzRing硬體,故需引入合適的積木擴充包https://reurl.cc/WdrrpL)。讀者若使用的是WS2812款式的燈環,則需匯入neopixel這包擴充積木
          程式初始化時需指定和接收端相同的第87號廣播頻道。接著,我們要告訴接收端的小彼特8787是以P1(RX)和P2(TX)兩隻接腳來和EzRing傳遞序列(serial)控制資料(若是使用WS2812,則只要選用P1或P2一隻接腳來傳送5050 RGB LED的顯示資訊即可)。然後,再讓燈環閃礫一下表示備妥(ready)
          當收到傳送端傳來的計步值時,則將結果顯示到燈環上(一步一顆、二步兩顆…)。
          此外,若收到99的歸零訊息則將燈環換色後熄滅。
          完整的參考程式碼可按
          https://reurl.cc/vDdW11下載

          展示影片請參考https://youtu.be/s-IAP8ER7Fg

            教學活動設計

            教學投影片可由https://reurl.cc/Y1v09o)下載。
            1. 手勢控燈 參考右手邊的影片https://reurl.cc/qd5OQp),設計若干不同手勢(gestures)來操控燈環的顯示樣式(patterns)


            積木指標

            Basic、Radio、Loops、Input、Logic、Math、Variables、Extensions

            編程指

            循序結構(sequence structure)判斷結構(decision structure)重覆結構(repetition structure)非同步事件處理(asynchronous event handling)

            硬體指

            擴充板、燈環。

            参考資料
            1. 六種授權條款

            2020年4月2日 星期四

            [AI] 俄羅斯轉盤:使用VIA Pixetto視覺感測器之特徵點偵測(Keypoint Detection)功能

            俄羅斯轉盤:

            使用VIA Pixetto視覺感測器之特徵點偵測(Keypoint Detection)功能


            FB2http://gg.gg/TedLeeMicrobitFB/
            URL2http://gg.gg/TedLeeMicrobit/

            Line:ted2016.kpvs
            Email:Lct4246@gmail.com
            FB1http://gg.gg/TedLeeFB/
            Bloghttp://gg.gg/TedLeeBlog/
            URL1http://gg.gg/TedLeeURL/

            Apr. 2, 2020
            88x31.png[1]

            難易度

            ★★★☆☆

            主題

            8787內建的AI影像處理(image processing)功能應用實作。

            任務

            石鐘媽為了近來疫情嚴重,家中兩個小寶貝將面臨學校隨時停課而要有家裡蹲的居家照護因應。
            各位讀者,請腦力激盪一下,利用8787來替石鐘媽隨時演奏一曲快樂頌提提神吧?
            利用8787的模板匹配功能來演奏音樂曲目,例如:看到LV標誌播一曲快樂頌。

            材料

            項目品名單位數量
            1VTS-8787視覺感測器1
            2micro USB傳輸線1
            3Grove – 4x公端杜邦線+母座 to Grove 4pin連接線1
            4Arduino Uno1
            5USB2.0 A公-B公傳輸線1
            6馬達擴充板(註)1
            7TT馬達1
            8四號電池盒(四入,含蓋、開關)、1
            9四號電池4


            造形設計(機構)

            請參考轉盤https://reurl.cc/62EpDr商品永不停轉的抽獎大轉盤https://reurl.cc/5lG72n)的概念設計作品的外觀。記得將8787及其相關電路的尺寸考量進去。

              功能設計(電路、程式)

              先依照下列二表格及圖1接妥8787、Uno、馬達擴充板與TT馬達的連接線路。

              馬達擴充板
              電池盒
              TT馬達
              OUT3(D5)
              OUT4(D6)
              5V/12V
              GND

              馬達擴充板
              8787
              D3
              D4
              5V
              GND

              圖1:接線圖。


              在Pixetto Utility上(圖2)選用形狀偵測功能,讓8787識別並套用之(例如我們以先前至夏威夷旅行帶回的川普大叔紀念筆做為待測物),詳細操作方法可參考拙著《VIA Pixetto視覺感測器大開箱(unboxing):AI開發工具(Development Kits)篇》(https://reurl.cc/Qd6eVO)一文。

              圖2:在Pixetto Utility上選用特徵點偵測功能。

              接著,在Pixetto Junior上拉出圖3的積木程式。這個程式的邏輯是一開機後先讓馬達順轉後停止做自我測試(self test)
              接著,若8787「看見」前述的川普大叔人像商品後就逆轉。否則,就停止馬達轉動。
              為了程式易於理解,我們亦在圖三中加入了副程式(subroutines)───本例是用無傳回傳的function)的概念將馬達順轉forward()、逆轉backward()與停止stp()控制獨立成個別的程式片段來呼叫。

              圖3:Pixetto Junior的Blockly程式碼。

              圖3積木程式自動生成的Arduino程式碼如下所示。

              #include <Arduino.h>
              #include <SmartSensor.h>

              SmartSensor ss(3,4);

              int motorIn1;
              int motorIn2;

              void forward() {
              digitalWrite(motorIn1, HIGH);
              digitalWrite(motorIn2, LOW);
              }

              void backward() {
              digitalWrite(motorIn1, LOW);
              digitalWrite(motorIn2, HIGH);
              }

              void stop() {
              digitalWrite(motorIn1, LOW);
              digitalWrite(motorIn2, LOW);
              }

              void setup() {
                ss.begin();

                motorIn1 = 5;
                motorIn2 = 6;
                pinMode(motorIn1, OUTPUT);
                pinMode(motorIn2, OUTPUT);
                forward();
                delay(500);
                stop();
              } //end of setup()

              void loop() {
                if (ss.isDetected()) {
                if (ss.getTypeID() == 0) {
                backward();
                delay(500);
                }
                } else {
                stop();
                } //end of if
              } //end of loop()

              本單元的操作影片https://youtu.be/OpC_7JnE4e0 如圖4所示。

              圖4:展示影片。

                教學活動設計

                1. 當音樂下了之後,讓8787識別到特徵點後表演左三圈,右三圈https://reurl.cc/qd5gZ0)。

                  参考資料
                  1. 六種授權條款

                  2020年3月31日 星期二

                  [micro:bit] 蒸汽彼特(STEAM on Micro:bit)II──主題9:小彼特心臟病

                  蒸汽彼特(STEAM on micro:bit)II

                  主題9:小彼特心臟病


                  FB2http://gg.gg/TedLeeMicrobitFB/
                  URL2http://gg.gg/TedLeeMicrobit/

                  Line:ted2016.kpvs
                  Email:Lct4246@gmail.com
                  FB1http://gg.gg/TedLeeFB/
                  Bloghttp://gg.gg/TedLeeBlog/
                  URL1http://gg.gg/TedLeeURL/

                  Mar. 31, 2020
                  88x31.png[1]




                  難易度

                  ★★☆☆☆

                  主題

                  根據撲克牌遊戲來設計類似的小彼特玩法。

                  任務

                  小阿聰總是神經大條,對事情的反應老是慢半拍。請設計一個特訓機來協助他反應up up!
                  利用導電原理,使用鋁箔(aluminum foil)作為接觸端點,並以鱷魚夾(crocodile clip)搭建出電路迴路來偵測瞬間觸碰的反應識別

                  材料

                  編號 品名 單位 數量
                  1 小彼特主板 1
                  2 傳輸線 1
                  3 鱷魚夾 4
                  4 鋁箔紙 1
                  5 瓦楞紙板/PP板/木板… 1

                  造形設計

                  設計我們想們想要的外觀(例如這款由世界最偉大的林先生親手繪製的大象圖案,留出要黏貼發牌、奇數牌玩家、偶數牌玩家及GND四個鋁箔觸碰點的位置,再根據我們事先畫好的設計稿剪裁之

                  功能設計=硬(電路設計)+軟(程式設計)

                  參考撲克牌心臟病的實際玩法https://reurl.cc/z8MaW7)來制定我們的遊戲規則。例如:兩位玩家(以奇數或偶數數字搶答區別,文後以奇數玩家及偶數玩家簡稱之)都先將一手放在GND觸碰(touch)的共地鋁箔上。然後,選由其中的一位玩家按小彼特的A按鈕發牌。當牌數為偶數時,先前被指定為偶數需作答的玩家有按下觸碰則得一分。反之,若先前被指定為奇數需作答的玩家因誤判而按下觸碰時就扣一分。最後,在比賽時間結束後,按下A按鈕會自動顯示贏家代碼,奇數玩家為A,偶數玩家為B。平手則以=表示。


                  導電原理:從電源正極出發,經開關到LED後回到電源負極的電路迴路(circuit loop),開關就是擔任迴路導通的切換關口。像本單元中的鋁箔正是做為迴路的導通開關之用。


                  電路設計如圖所示
                  另一方面,程式邏輯(program logic)参考樣版(template)步驟為:(變數played表示發牌的狀態,0:未發,1已發;card:記錄發牌的點數;scored_A/scored_B:奇數/偶數玩家的得分記錄)。

                  1. 發牌(觸碰P0):程式流程為,轉換成對應的程式碼為
                  2. 作答(觸碰P1/P2:程式流程為,轉換成對應的程式碼為
                  3. 判斷輸贏(小彼特主板的按鈕A):程式流程為,轉換成對應的程式碼為。
                  參考程式碼可按https://reurl.cc/qdOR70下載。教學投影片可由https://reurl.cc/9EOkja下載

                  教學活動設計

                  1. 敏捷王 採三戰兩勝分組進行競賽。選出最終的年度最佳「敏捷王」。
                  2. 搶答機 請將上述的範例程式做適度的修改,並設計十道題目,由紅白兩隊各派十人參賽。主持人念完題目後開始按機搶答。
                  3. 心臟病 用四塊小彼特WXYZ模擬四家對戰,並再放置一塊小彼特D來顯示各家翻出的牌。
                    一開始按下小彼特D的A按鈕將52張牌平均發給小彼特WXYZ。
                    然後由小彼特WXYZ輪流按按鈕A出牌,並顯示在小彼特D上。
                    每家出完牌後即開始等候按下按鈕B搶答。
                    搶答的先後次序由小彼特D來仲裁。
                    (建議使用WiFi來處理五塊小彼特之間的訊息傳遞。根據筆者實測,多塊小彼特通訊會產生信號干擾而導致封包遺失(packet lose)https://reurl.cc/j7kzEn)的窘境。)

                  積木指標

                  Basic、Input、Logic、Math、Variables

                  編程指

                  循序結構(sequence structure)判斷結構(decision structure)非同步事件處理(asynchronous event handling)

                  硬體指

                  鋁箔紙、鱷魚夾。

                  参考資料
                  1. 六種授權條款