2024年6月23日 星期日

(AI應用) 跨域合作推樹藝AI:變色龍的智慧冒險

 前一篇文章:(AI應用) 森林探險

《跨域合作推樹藝AI:變色龍的智慧冒險》

在一片遼闊的森林裡,住著一隻名叫查理的變色龍。查理擁有一項特別的技能,他能夠改變自己的顏色來偽裝自己。不過,查理還有一個更大的夢想,他希望能夠學習AI技術,來幫助森林裡的朋友們認識和推廣工藝AI。

一天,查理決定開始他的冒險,他需要拜訪六個重要的單位來學習並推廣他們的工藝AI計畫。


第一站:國立台灣工藝研究發展中心

查理來到了國立台灣工藝研究發展中心,這裡是森林裡智慧的象徵。中心的學者們告訴查理,他們提供計畫補助和指導,幫助創作者們實現他們的工藝夢想。他們教會查理如何使用AI來分析和改進工藝設計,並讓他了解計畫補助的申請流程。查理學到了很多,並在心中記下了他們的LOGO。


第二站:樹藝工坊

接著,查理來到了樹藝工坊。這裡的樹爺爺是一位手藝精湛的工匠,他們負責提供DIY材料包和工藝設計。樹爺爺熱情地展示了各種精美的材料包,並告訴查理如何將AI技術應用於工藝設計中,以創造出更加獨特和創新的作品。查理非常興奮,並記下了樹藝工坊的LOGO。


第三站:奧斯丁國際有限公司

然後,查理來到了奧斯丁國際有限公司。這裡的工作人員專門負責課程活動的推廣和DIY材料包的行銷。他們向查理介紹了如何利用社交媒體和各種活動來推廣工藝AI,並展示了他們成功的行銷案例。查理學會了許多推廣技巧,並記住了奧斯丁國際的LOGO。

第四站:台灣工藝創客青創基地

接下來,查理來到了台灣工藝創客青創基地。這裡聚集了許多充滿創意的年輕創客,他們在這裡進行各種工藝創作和交流。青創基地的負責人告訴查理,他們組織了許多工藝創客活動和成果展,展示了許多精彩的工藝作品。查理參觀了創客們的作品,並記下了青創基地的LOGO。

第五站:木頭爵士的工作坊

之後,查理來到了木頭爵士的工作坊。木頭爵士是一位出色的木工師傅,專門負責木工加工。他展示了如何利用AI技術優化木工加工流程,創作出更加精美和精確的木製工藝品。木頭爵士還向查理介紹了如何將AI與傳統木工技術結合,實現現代與傳統的完美融合。查理學到了寶貴的木工知識,並記下了木頭爵士的LOGO。

第六站:國立虎尾科技大學

最後,查理來到了國立虎尾科技大學。這裡的老師們結合社會責任,將工藝AI融入到課程中,培養出一批批優秀的學生。他們教會查理如何在課程中引入AI技術,並展示了他們的成功案例。查理非常受啟發,並記住了虎尾科技大學的LOGO。

結尾

在完成了六站的學習之旅後,查理回到了森林。他決定利用自己學到的AI技術,來幫助森林裡的朋友們認識和推廣這些單位的工藝AI計畫。查理運用他的變色技能,把每個單位的LOGO展示在他身上,並開始教森林裡的動物們如何利用AI來提升他們的工藝作品。


從此,森林裡充滿了創意和智慧,每個動物都在查理的幫助下,創作出了一個個精彩的工藝作品。而查理,則成為了森林裡最受尊敬的智慧大師。


範例一、五個標籤的學習

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
from microbit import *
from AILens import *
from Wukong import *
wk = WUKONG()
import radio
radio.config(group=16)
radio.on()
display.show(Image.HEART_SMALL)
ai = AILENS()
ai.switch_function(Color)
display.show(Image.HEART)
mode = 0
LearnID = 1
sleep(2000)
while True:
    message = radio.receive()
    if message:
       display.show(message)
    if button_a.was_pressed():
        mode += 1
        mode %= 5
        display.show(mode+1)
        sleep(500)
        display.show(Image.HEART_SMALL)
        if mode == 0:
            ai.switch_function(Color)
        elif mode == 1:
            ai.switch_function(Face)
        elif mode == 2:
            ai.switch_function(Ball)
        elif mode == 3:
            ai.switch_function(Card)
        else:
            ai.switch_function(Learn)
        display.show(Image.HEART)
    ai.get_image()
    if mode == 0:
        if (ai.get_color_type() == "Green"):
            display.show("G")
        elif (ai.get_color_type() == "Red"):
            display.show("R")
        elif (ai.get_color_type() == "Blue"):
            display.show("b")
        elif (ai.get_color_type() == "Yellow"):
            display.show("Y")
        elif (ai.get_color_type() == "Black"):
            display.show("B")
        elif (ai.get_color_type() == "White"):
            display.show("W")
        else:
            display.show(Image.SAD)
    elif mode == 1:
        if ai.get_face():
            display.show(Image.HAPPY)
            radio.send('Owner')
        else:
            display.show(Image.SAD)
            radio.send('non-owner')
    elif mode == 2:
        if ai.get_ball_color() == "Red":
            display.show(Image.HAPPY)
            radio.send('Happy')
        else:
            display.show(Image.SAD)
            radio.send('Sad')
    elif mode == 3:
        if ai.get_card_content() == "Stop":
            display.show("S")
            wk.set_servo(0, 90)
            wk.set_servo(1, 90)
        elif ai.get_card_content() == "Forward":
            display.show("F")
            wk.set_servo(0, 0)
            wk.set_servo(1, 0)
        elif ai.get_card_content() == "Back":
            display.show("B")
            wk.set_servo(0, 180)
            wk.set_servo(1, 180)
        elif ai.get_card_content() == "Turn left":
            display.show("L")
            wk.set_servo(0, 0)
            wk.set_servo(1, 180)
        elif ai.get_card_content() == "Turn right":
            display.show("R")
            wk.set_servo(0, 180)
            wk.set_servo(1, 0)
        else:
            display.show(Image.SAD)
    else:
        if button_b.was_pressed():
            display.scroll('Learn')
            display.show(LearnID)
            ai.learn_object(LearnID)
            sleep(500)
            display.scroll('OK')
            LearnID +=1
            if LearnID == 6:
                LearnID = 1
        ai.get_image()
        buff = ai.get_learn_data()
        display.show(buff[0])
        sleep(2000) 


(AI應用) 森林探險-歡樂蛙與變色龍

上一篇文章:(AI應用) 森林的愛情故事

《森林探險:歡樂蛙與變色龍的奇妙之旅》
在一片美麗而神秘的森林裡,住著一隻活潑的歡樂蛙和一隻神奇的變色龍。變色龍擁有AI能力,不僅可以變換身體的顏色,還能夠辨識方向。這天,歡樂蛙和變色龍決定開車遊覽這片美麗的森林,開始一場奇妙的探險之旅。
他們有一輛可愛的小車子,由歡樂蛙來操控方向盤,而變色龍則利用AI技術來辨識方向和路徑。變色龍的頭上戴著智能AI鏡頭,可以實時分析路況,並將導航信息傳給歡樂蛙。
“準備好了嗎,變色龍?”歡樂蛙興奮地問道。
“當然,出發吧!”變色龍回答,然後開始啟動AI系統,分析周圍的環境和路徑。
車子沿著森林的小徑前進,兩旁是茂密的樹木和五彩繽紛的花朵。變色龍利用AI技術,不斷地告訴歡樂蛙應該向左轉還是向右轉,避開了許多障礙和困難。
“前方100米有一個彎道,記得向右轉哦!”變色龍提醒道。
“明白!”歡樂蛙專心地操控著方向盤,按變色龍的指示行駛。
他們一路上遇到了許多有趣的事情。歡樂蛙和變色龍看到了一群在樹梢間跳躍的松鼠,還有一些美麗的蝴蝶在花叢中飛舞。變色龍的AI鏡頭捕捉到了這些美麗的畫面,並即時傳送給歡樂蛙看。
“看,那邊有一隻漂亮的藍色蝴蝶!”變色龍興奮地說。
“哇,真是太美了!”歡樂蛙也不禁驚嘆道。
當他們經過一條小河時,變色龍的AI鏡頭偵測到了水中的一塊大石頭。
“小心前方的石頭,我們需要稍微轉向左邊。”變色龍提醒道。
歡樂蛙靈活地轉動方向盤,成功地避開了石頭。車子順利地繼續前進。
就在他們享受這段美好旅程的時候,天空突然變得陰暗,開始下起了小雨。變色龍的AI系統馬上偵測到了這一變化,並快速地計算出最近的避雨地點。
“前方不遠處有一個小山洞,我們可以去那裡避雨。”變色龍建議道。
“太好了,我們快去吧!”歡樂蛙說。
他們快速地駛向小山洞,找到了一個安全的避雨場所。歡樂蛙和變色龍在山洞裡休息,聽著外面淅瀝的雨聲,感到無比的平靜和愉快。
雨停後,陽光再次穿過雲層,灑在森林裡,變成了一片金色的海洋。歡樂蛙和變色龍繼續他們的旅程,發現這片森林在雨後變得更加美麗和清新。
“這真是一段奇妙的旅程!”歡樂蛙感慨道。
“是啊,我們一起經歷了許多美好的時刻。”變色龍微笑著說。

最終,他們回到了家,帶著滿滿的回憶和美好的故事。這段森林探險讓他們更加了解彼此,也更加珍惜這片美麗的森林。

範例一:行動卡片辨識

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from microbit import *
from AILens import *
import radio
radio.config(group=16)
radio.on()
display.show(Image.HEART_SMALL)
ai = AILENS()
ai.switch_function(Color)
display.show(Image.HEART)
mode = 0
sleep(2000)
while True:
    message = radio.receive()
    if message:
       display.show(message)
    if button_a.was_pressed():
        mode += 1
        mode %= 4
        display.show(mode+1)
        sleep(500)
        display.show(Image.HEART_SMALL)
        if mode == 0:
            ai.switch_function(Color)
        elif mode == 1:
            ai.switch_function(Face)
        elif mode == 2:
            ai.switch_function(Ball)
        else:
            ai.switch_function(Card)
        display.show(Image.HEART)
    ai.get_image()
    if mode == 0:
        if (ai.get_color_type() == "Green"):
            display.show("G")
        elif (ai.get_color_type() == "Red"):
            display.show("R")
        elif (ai.get_color_type() == "Blue"):
            display.show("b")
        elif (ai.get_color_type() == "Yellow"):
            display.show("Y")
        elif (ai.get_color_type() == "Black"):
            display.show("B")
        elif (ai.get_color_type() == "White"):
            display.show("W")
        else:
            display.show(Image.SAD)
    elif mode == 1:
        if ai.get_face():
            display.show(Image.HAPPY)
            radio.send('Owner')
        else:
            display.show(Image.SAD)
            radio.send('non-owner')
    elif mode == 2:
        if ai.get_ball_color() == "Red":
            display.show(Image.HAPPY)
            radio.send('Happy')
        else:
            display.show(Image.SAD)
            radio.send('Sad')
    else:
        if ai.get_card_content() == "Stop":
            display.show("S")
        elif ai.get_card_content() == "Forward":
            display.show("F")
        elif ai.get_card_content() == "Back":
            display.show("B")
        elif ai.get_card_content() == "Turn left":
            display.show("L")
        elif ai.get_card_content() == "Turn right":
            display.show("R")
        else:
            display.show(Image.SAD)

範例二、360度伺服馬達控制

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from microbit import *
from AILens import *
from Wukong import *
wk = WUKONG()
import radio
radio.config(group=16)
radio.on()
display.show(Image.HEART_SMALL)
ai = AILENS()
ai.switch_function(Color)
display.show(Image.HEART)
mode = 0
sleep(2000)
while True:
    message = radio.receive()
    if message:
       display.show(message)
    if button_a.was_pressed():
        mode += 1
        mode %= 4
        display.show(mode+1)
        sleep(500)
        display.show(Image.HEART_SMALL)
        if mode == 0:
            ai.switch_function(Color)
        elif mode == 1:
            ai.switch_function(Face)
        elif mode == 2:
            ai.switch_function(Ball)
        else:
            ai.switch_function(Card)
        display.show(Image.HEART)
    ai.get_image()
    if mode == 0:
        if (ai.get_color_type() == "Green"):
            display.show("G")
        elif (ai.get_color_type() == "Red"):
            display.show("R")
        elif (ai.get_color_type() == "Blue"):
            display.show("b")
        elif (ai.get_color_type() == "Yellow"):
            display.show("Y")
        elif (ai.get_color_type() == "Black"):
            display.show("B")
        elif (ai.get_color_type() == "White"):
            display.show("W")
        else:
            display.show(Image.SAD)
    elif mode == 1:
        if ai.get_face():
            display.show(Image.HAPPY)
            radio.send('Owner')
        else:
            display.show(Image.SAD)
            radio.send('non-owner')
    elif mode == 2:
        if ai.get_ball_color() == "Red":
            display.show(Image.HAPPY)
            radio.send('Happy')
        else:
            display.show(Image.SAD)
            radio.send('Sad')
    else:
        if ai.get_card_content() == "Stop":
            display.show("S")
            wk.set_servo(0, 90)
            wk.set_servo(1, 90)
        elif ai.get_card_content() == "Forward":
            display.show("F")
            wk.set_servo(0, 0)
            wk.set_servo(1, 0)
        elif ai.get_card_content() == "Back":
            display.show("B")
            wk.set_servo(0, 180)
            wk.set_servo(1, 180)
        elif ai.get_card_content() == "Turn left":
            display.show("L")
            wk.set_servo(0, 0)
            wk.set_servo(1, 180)
        elif ai.get_card_content() == "Turn right":
            display.show("R")
            wk.set_servo(0, 180)
            wk.set_servo(1, 0)
        else:
            display.show(Image.SAD)


(AI應用) 森林的愛情故事-彩虹鳥和亮亮鼠

上一篇文章:(AI應用) 變色龍與酷炫豬的冒險

《彩虹鳥和亮亮鼠的愛情》

在茂密的森林裡,住著一群友善又有趣的動物朋友們。他們每個人都有自己的獨特本領,讓整個森林充滿了生機和活力。其中,變色龍是一個非常特別的存在,他不僅可以利用AI技術變換身體的顏色,還學會了人臉辨識和紅珠偵測的能力。

變色龍的朋友們包括先知鳥、彩虹鳥、亮亮鼠和酷炫豬。這些動物們共同守護著這片美麗的森林,有一天,一個特別的消息在森林裡傳開了:彩虹鳥和亮亮鼠要結婚了!

在婚禮前幾天,變色龍和先知鳥在森林裡散步,突然感應到一顆紅珠正在快速接近。先知鳥立即啟動超音波測距,發現紅珠就在不遠處。

“變色龍,有一顆紅珠正向我們靠近!”先知鳥興奮地叫道。

變色龍馬上通知了彩虹鳥和亮亮鼠。他們決定利用這顆紅珠來為即將到來的婚禮增添一份神秘的祝福。

彩虹鳥展開了它那五彩繽紛的羽毛,開始在空中飛舞,閃耀出絢麗的光芒,通知所有動物們紅珠即將到來。亮亮鼠也加入了彩虹鳥的行列,閃爍著它那亮亮的小眼睛,讓整片森林都沐浴在光芒中。

酷炫豬看到光芒,立刻用大門牙把micro

頂在頭上,準備好迎接紅珠的到來。他快速地挖掘出一個小坑,等待紅珠落下,確保紅珠的能量能夠安全地被大家使用。

當紅珠終於降落在森林中央時,所有動物都聚集在一起。他們看到紅珠散發出神秘而美麗的光芒,感到無比的興奮和好奇。變色龍、先知鳥、彩虹鳥和亮亮鼠圍在紅珠周圍,研究著這顆神奇的珠子。

變色龍利用它的AI技術,開始分析紅珠的能量,發現這顆紅珠可以為森林帶來持久的光明和溫暖。先知鳥利用超音波進一步確認了紅珠的穩定性,保證它不會對森林造成任何危害。

“這顆紅珠真是太棒了!它可以讓我們的婚禮更加美麗和特別。”彩虹鳥說。

亮亮鼠也點頭同意:“是的,這顆紅珠的能量將會給我們的婚禮帶來更多的光彩和祝福。”

在紅珠的光芒照耀下,所有動物們都感到一種前所未有的溫暖和幸福。婚禮當天,彩虹鳥和亮亮鼠在紅珠的光芒下宣誓,他們的愛情在所有朋友們的見證下變得更加閃亮和堅定。

變色龍和他的朋友們為彩虹鳥和亮亮鼠的婚禮準備了很多驚喜。變色龍用他變幻的顏色為婚禮現場增添了無限的美麗,先知鳥用它的歌聲為大家帶來了動人的音樂,酷炫豬則用他的門牙頂著micro:bit,記錄下這一個個美好的瞬間。

這片森林因為紅珠的到來變得更加美麗和安全,而變色龍和他的朋友們也成為了這片森林的守護者,用他們的智慧和力量,守護著這片充滿奇蹟的土地。

範例一、紅色球的辨識

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from microbit import *
from AILens import *
import radio
radio.config(group=16)
radio.on()
display.show(Image.HEART_SMALL)
ai = AILENS()
ai.switch_function(Color)
display.show(Image.HEART)
mode = 0
sleep(2000)
while True:
    message = radio.receive()
    if message:
       display.show(message)
    if button_a.was_pressed():
        mode += 1
        mode %= 3
        display.show(mode+1)
        sleep(500)
        display.show(Image.HEART_SMALL)
        if mode == 0:
            ai.switch_function(Color)
        elif mode == 1:
            ai.switch_function(Face)
        else:
            ai.switch_function(Ball)
        display.show(Image.HEART)
    ai.get_image()
    if mode == 0:
        if (ai.get_color_type() == "Green"):
            display.show("G")
        elif (ai.get_color_type() == "Red"):
            display.show("R")
        elif (ai.get_color_type() == "Blue"):
            display.show("b")
        elif (ai.get_color_type() == "Yellow"):
            display.show("Y")
        elif (ai.get_color_type() == "Black"):
            display.show("B")
        elif (ai.get_color_type() == "White"):
            display.show("W")
        else:
            display.show(Image.SAD)
    elif mode == 1:
        if ai.get_face():
            display.show(Image.HAPPY)
            radio.send('Owner')
        else:
            display.show(Image.SAD)
            radio.send('non-owner')
    else:
        if ai.get_ball_color() == "Red":
            display.show(Image.HAPPY)
            radio.send('Happy')
        else:
            display.show(Image.SAD)
            radio.send('Sad')


(AI應用) 變色龍與酷炫豬的冒險

前一篇文章:(AI應用) micro:bit/Wukong Breakout Board/Smart AI Lens三方合作用Python撰寫顏色辨識程式

《變色龍與酷炫豬的冒險》

在茂密的森林裡,住著一隻神奇的變色龍。他不僅可以利用AI技術來變換身體的顏色,還學會了一項新技能——人臉辨識。這些技術都是由李永謨老師和敏哥教授共同研發的。

一天,變色龍對他的朋友酷炫豬說:“酷炫豬,我現在有了新技能!當AI發現主人來了,我會呈現笑臉;若不是主人,而是其他動物,我則會顯示哭臉。”

酷炫豬對變色龍的這項新技能感到非常好奇,他問:“那我們可以用這個技能來幫助大家嗎?”

變色龍點點頭:“當然可以!我們可以一起守護這片森林,讓大家都知道誰是朋友,誰是陌生人。”

於是,變色龍和酷炫豬開始了他們的森林守護計畫。每當有動物經過,變色龍都會啟動他的人臉辨識功能。如果AI識別出來的是他的主人李老師,變色龍就會開心地呈現笑臉。如果是其他動物,變色龍就會顯示哭臉,讓酷炫豬知道有陌生人來了。

一天,森林裡的小動物們正在玩耍,突然,一隻從未見過的狐狸悄悄地靠近。變色龍立刻啟動了人臉辨識功能,發現這不是他的主人。他的身體馬上變成了哭臉,並向酷炫豬發出警報。

酷炫豬看到了變色龍的哭臉,知道有陌生人來了。他迅速用他堅硬的大門牙把micro:bit頂在頭上,並且用鼻子發出低沉的警告聲,讓所有的小動物們都警覺起來。

狐狸看到大家都對他保持警惕,明白自己已經被發現了。他無奈地退回了森林深處,不再打擾這群小動物們。

當天晚上,李老師來到了森林裡。變色龍立刻識別出來,開心地變成了笑臉。酷炫豬看到變色龍的笑臉,也歡快地跑過去迎接李老師。

李老師摸了摸變色龍的頭,稱讚道:“你們真是好幫手,今天又保護了大家。”

變色龍和酷炫豬高興地笑了,他們知道,他們的森林守護計畫正在成功進行著。他們不僅能夠保護這片美麗的森林,還能讓大家感到安心和快樂。

從那天起,變色龍和酷炫豬成為了森林裡的英雄,所有的動物們都非常信任和依賴他們。無論白天還是夜晚,他們都用自己的技能守護著這片森林,讓每個角落都充滿了安全和歡笑。

故事中的角色和功能
變色龍:他負責使用AI技術來辨識顏色和人臉。他的身體上戴著一個智能AI鏡頭,可以通過I2C接口連接到micro:bit。
酷炫豬:他操控著這段程式碼,確保一切順利運行。當有需要時,他會用堅硬的大門牙頂著micro:bit,讓它工作得更好。

範例一:新增辦識人臉功能

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from microbit import *
from AILens import *
display.show(Image.HEART_SMALL)
ai = AILENS()
ai.switch_function(Color)
display.show(Image.HEART)
mode = 0
sleep(2000)
while True:
    if button_a.was_pressed():
        mode += 1
        mode %= 2
        display.show(mode+1)
        sleep(500)
        display.show(Image.HEART_SMALL)
        if mode == 0:
            ai.switch_function(Color)
        else:
            ai.switch_function(Face )
        display.show(Image.HEART)
    ai.get_image()
    if mode == 0:
        if (ai.get_color_type() == "Green"):
            display.show("G")
        elif (ai.get_color_type() == "Red"):
            display.show("R")
        elif (ai.get_color_type() == "Blue"):
            display.show("b")
        elif (ai.get_color_type() == "Yellow"):
            display.show("Y")
        elif (ai.get_color_type() == "Black"):
            display.show("B")
        elif (ai.get_color_type() == "White"):
            display.show("W")
        else:
            display.show(Image.SAD)
    else:
        if ai.get_face():
            display.show(Image.HAPPY)
        else:
            display.show(Image.SAD)

程式解析
1.導入模塊:首先,程式碼導入了micro:bit和AILens的模塊,這些是讓變色龍的AI技術運作的關鍵。

1
2
from microbit import *
from AILens import *

2.初始化顯示和AI:接著,顯示一個小的心形圖案,並初始化AI鏡頭,預設設置為顏色辨識模式。

1
2
3
4
display.show(Image.HEART_SMALL)
ai = AILENS()
ai.switch_function(Color)
display.show(Image.HEART)

3.模式設置:設置一個變數mode來記錄當前的工作模式(0為顏色辨識,1為人臉辨識)。然後讓micro:bit休眠兩秒鐘。

1
2
mode = 0
sleep(2000)

4.主循環:在主循環中,不斷檢查按鈕A是否被按下。如果被按下,切換模式,並根據模式顯示相應的數字和圖案。根據模式切換AI功能為顏色辨識或人臉辨識。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
while True:
    if button_a.was_pressed():
        mode += 1
        mode %= 2
        display.show(mode+1)
        sleep(500)
        display.show(Image.HEART_SMALL)
        if mode == 0:
            ai.switch_function(Color)
        else:
            ai.switch_function(Face)
        display.show(Image.HEART)

5.圖像獲取與顯示:在每個循環中,獲取AI鏡頭的圖像。如果模式為顏色辨識,則根據不同顏色顯示相應的字母。如果是人臉辨識,則顯示快樂或悲傷的表情。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
ai.get_image()
if mode == 0:
    if (ai.get_color_type() == "Green"):
        display.show("G")
    elif (ai.get_color_type() == "Red"):
        display.show("R")
    elif (ai.get_color_type() == "Blue"):
        display.show("b")
    elif (ai.get_color_type() == "Yellow"):
        display.show("Y")
    elif (ai.get_color_type() == "Black"):
        display.show("B")
    elif (ai.get_color_type() == "White"):
        display.show("W")
    else:
        display.show(Image.SAD)
else:
    if ai.get_face():
        display.show(Image.HAPPY)
    else:
        display.show(Image.SAD)

範例二:讓變色龍加上通訊功能

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from microbit import *
from AILens import *
import radio
radio.config(group=16)
radio.on()
display.show(Image.HEART_SMALL)
ai = AILENS()
ai.switch_function(Color)
display.show(Image.HEART)
mode = 0
sleep(2000)
while True:
    message = radio.receive()
    if message:
       display.show(message)
    if button_a.was_pressed():
        mode += 1
        mode %= 2
        display.show(mode+1)
        sleep(500)
        display.show(Image.HEART_SMALL)
        if mode == 0:
            ai.switch_function(Color)
        else:
            ai.switch_function(Face )
        display.show(Image.HEART)
    ai.get_image()
    if mode == 0:
        if (ai.get_color_type() == "Green"):
            display.show("G")
        elif (ai.get_color_type() == "Red"):
            display.show("R")
        elif (ai.get_color_type() == "Blue"):
            display.show("b")
        elif (ai.get_color_type() == "Yellow"):
            display.show("Y")
        elif (ai.get_color_type() == "Black"):
            display.show("B")
        elif (ai.get_color_type() == "White"):
            display.show("W")
        else:
            display.show(Image.SAD)
    else:
        if ai.get_face():
            display.show(Image.HAPPY)
            radio.send('Owner')
        else:
            display.show(Image.SAD)
            radio.send('non-owner')


範例三、酷炫猪的接收訊息的功能

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from microbit import *
import radio
radio.config(group=16)
radio.on()
mode = 0
while True:
    message = radio.receive()
    if message == 'Owner':
        display.show(Image.SMILE)
    elif message == 'non-owner':
        display.show(Image.SAD)


2024年6月18日 星期二

機智雲開發板的網路輸出控制



硬體:機智雲開發板

參考程式:MicroPython – Getting Started with MQTT on ESP32/ESP8266

燒錄暨編寫工具:uPyCraft

boot.py:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# Complete project details at https://RandomNerdTutorials.com

try:
  import usocket as socket
except:
  import socket

from machine import Pin, PWM
import network

import esp
esp.osdebug(None)

import gc
gc.collect()

ssid = 'cmlin2'
password = '0928931103'

station = network.WLAN(network.STA_IF)

station.active(True)
station.connect(ssid, password)

while station.isconnected() == False:
  pass

print('Connection successful')
print(station.ifconfig())

led = Pin(2, Pin.OUT)

main.py:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import time
# Complete project details at https://RandomNerdTutorials.com

def web_page():
  if led.value() == 1:
    gpio_state="ON"
  else:
    gpio_state="OFF"
  
  html = """<html><head> <title>ESP Web Server</title> <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" href="data:,"> <style>html{font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;}
  h1{color: #0F3376; padding: 2vh;}p{font-size: 1.5rem;}.button{display: inline-block; background-color: #e7bd3b; border: none; 
  border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}
  .button2{background-color: #4286f4;}</style></head><body> <h1>ESP Web Server</h1> 
  <p>GPIO state: <strong>""" + gpio_state + """</strong></p><p><a href="/?led=on"><button class="button">ON</button></a></p>
  <p><a href="/?led=off"><button class="button button2">OFF</button></a></p></body></html>"""
  return html

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)

while True:
  conn, addr = s.accept()
  print('Got a connection from %s' % str(addr))
  request = conn.recv(1024)
  request = str(request)
  print('Content = %s' % request)
  led_on = request.find('/?led=on')
  led_off = request.find('/?led=off')
  if led_on == 6:
    print('LED ON')
    led.value(0)
    RedLED = PWM(Pin(15))
    GreedLED = PWM(Pin(12))
    BlueLED=  PWM(Pin(13))
    RedLED.duty(0)
    GreedLED.duty(0)
    BlueLED.duty(0)
    for i in range(0, 1024, 10):
        RedLED.duty(i)   
        time.sleep(0.01)
    RedLED.duty(0)
    for i in range(0, 1024, 10):
        GreedLED.duty(i)   
        time.sleep(0.01)
    GreedLED.duty(0)
    for i in range(0, 1024, 10):
        BlueLED.duty(i)   
        time.sleep(0.01)
    BlueLED.duty(0)
  if led_off == 6:
    print('LED OFF')
    led.value(1)
    RedLED = PWM(Pin(15))
    GreedLED = PWM(Pin(12))
    BlueLED=  PWM(Pin(13))
    RedLED.duty(0)
    GreedLED.duty(0)
    BlueLED.duty(0)

  response = web_page()
  conn.send('HTTP/1.1 200 OK\n')
  conn.send('Content-Type: text/html\n')
  conn.send('Connection: close\n\n')
  conn.sendall(response)
  conn.close()


2024年6月17日 星期一

(AI應用) micro:bit/Wukong Breakout Board/Smart AI Lens三方合作用Python撰寫顏色辨識程式

參考文章:AI-Lens-Python Samples Code

程式套件:EF_Produce_MicroPython-master

程式編輯器:https://python.microbit.org/

專案程式要先從程式套件中,下載兩個重要程式,Wukong.py和AILens.py到程式編輯器的專案中。



範例一:顏色辨識

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from microbit import *
from AILens import *
ai = AILENS()
ai.switch_function(Color)
while True:
    ai.get_image()
    if (ai.get_color_type() == "Green"):
        display.scroll("Green")
        sleep(2000)
    elif (ai.get_color_type() == "Red"):
        display.scroll("Red")
        sleep(2000)
    elif (ai.get_color_type() == "Blue"):
        display.scroll("Blue")
        sleep(2000)
    elif (ai.get_color_type() == "Yellow"):
        display.scroll("Yellow")
        sleep(2000)
    elif (ai.get_color_type() == "Black"):
        display.scroll("Black")
        sleep(2000)
    elif (ai.get_color_type() == "White"):
        display.scroll("White")
        sleep(2000)
    else:
        display.show(Image.SAD)

範例二:控制燈的顏色
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from microbit import *
from AILens import *
import neopixel

# 初始化AILens
ai = AILENS()
ai.switch_function(Color)

# 初始化WS2812B LED,假設有4顆LED連接在pin16上
np = neopixel.NeoPixel(pin16, 4)

def set_color(color):
    for i in range(4):
        np[i] = color
    np.show()

while True:
    ai.get_image()
    color_type = ai.get_color_type()
    if color_type == "Green":
        set_color((0, 255, 0))  # 綠色
        display.scroll("Green")
        sleep(2000)
    elif color_type == "Red":
        set_color((255, 0, 0))  # 紅色
        display.scroll("Red")
        sleep(2000)
    elif color_type == "Blue":
        set_color((0, 0, 255))  # 藍色
        display.scroll("Blue")
        sleep(2000)
    elif color_type == "Yellow":
        set_color((255, 255, 0))  # 黃色
        display.scroll("Yellow")
        sleep(2000)
    elif color_type == "Black":
        set_color((0, 0, 0))  # 黑色(關閉LED)
        display.scroll("Black")
        sleep(2000)
    elif color_type == "White":
        set_color((255, 255, 255))  # 白色
        display.scroll("White")
        sleep(2000)
    else:
        set_color((0, 0, 0))  # 關閉LED
        display.show(Image.SAD)

2024年6月16日 星期日

(AI協作)讓ChatGPT生成彩虹鳥童話故事再生成Python控制程式

前一篇文章:(AI協作)用Python設計亮亮鼠控制程式再運用ChatGPT產生童話故事

範例一:

提示詞:

彩虹鳥有那些能力呢?

ChaptGPT生成的內容:

在遙遠的魔法森林裡,住著一隻名叫亮亮的小老鼠和一隻美麗的小鳥,名叫彩虹。彩虹不僅以她五彩斑斕的羽毛和動聽的歌聲而聞名,她還擁有三項神奇的能力,讓她在森林中獨一無二。

第一項能力是彩虹能夠治癒傷痛。她的羽毛中蘊含著魔法,只要輕輕觸碰受傷的動物,它們的傷口就會迅速癒合。不論是身體上的創傷還是心靈上的痛楚,彩虹的羽毛都能帶來安慰和治療。

第二項能力是彩虹能夠預知天氣變化。每當暴風雨即將來臨或是陽光燦爛的日子即將到來,彩虹的羽毛會隨著天氣的變化而改變顏色。這項能力讓森林裡的動物們能夠提前準備,避開惡劣的天氣,或者享受美好的時光。

第三項能力是彩虹的歌聲具有魔力。當她唱起歌來,所有聽到她歌聲的動物都會感到心情愉快,煩惱和憂慮會隨之消散。她的歌聲能夠喚醒沉睡的花朵,使植物茁壯成長,讓整個森林都充滿生機。

一天,亮亮在森林裡遇見了彩虹,被她的美麗和善良深深吸引。亮亮決定用自己的能力來保護和幫助彩虹,兩隻動物很快成為了密不可分的好朋友。

有一天,一場突如其來的暴風雨襲擊了森林,彩虹的羽毛變成了深紫色,預示著危險的來臨。亮亮立即爬到彩虹的樹下,用閃燈發出警告信號,提醒其他動物們避開風暴。彩虹則用她的歌聲安撫著動物們的情緒,讓大家在驚恐中找到一絲平靜。

暴風雨過後,彩虹和亮亮一起巡視森林,治癒受傷的動物,幫助大家重建家園。彩虹用她的羽毛治癒了亮亮的傷口,亮亮則用他的電燈照亮了彩虹的道路。兩隻動物在彼此的陪伴和支持中,建立了深厚的感情。

最終,亮亮和彩虹的愛情故事在森林中傳開,成為了魔法森林裡最美麗的傳說。動物們都為他們的愛情感到高興,他們的故事也代代相傳,永不消逝。在這片充滿魔力的森林裡,亮亮和彩虹用他們的光芒和歌聲,帶來了無盡的希望和幸福。


範例二:

提示詞:

幫我產生彩虹鳥Python程式可以在micro:bit

上執行,完成三項能力

ChapGPT生成內容:

當然,這裡有一個 Python 程式,可以在 micro:bit 上模擬彩虹鳥的三項能力。這段程式包括了用 LED 顯示屏顯示不同的圖案來模擬治癒能力、預知天氣變化和播放歌曲。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from microbit import *
import music
import random

# 彩虹鳥能力的顯示圖案
heal_icon = Image.HEART
weather_icons = [Image.SUNNY, Image.CLOUD, Image.RAIN]
sing_icon = Image.MUSIC_QUAVER

# 治癒能力
def heal():
    display.show(heal_icon)
    sleep(2000)
    display.clear()

# 預知天氣變化
def predict_weather():
    weather = random.choice(weather_icons)
    display.show(weather)
    sleep(2000)
    display.clear()

# 播放歌曲
def sing():
    display.show(sing_icon)
    music.play(music.ENTERTAINER)
    display.clear()

# 主循環
while True:
    if button_a.was_pressed():
        heal()
    if button_b.was_pressed():
        predict_weather()
    if pin_logo.is_touched():
        sing()

這段程式實現了彩虹鳥的三項能力:

1. **治癒能力**:按下 A 鍵,LED 顯示屏會顯示心形圖案,模擬治癒能力。

2. **預知天氣變化**:按下 B 鍵,LED 顯示屏會隨機顯示太陽、雲朵或雨滴圖案,模擬預知天氣變化的能力。

3. **播放歌曲**:觸摸 micro:bit 的 logo,LED 顯示屏會顯示音符圖案,並播放一段音樂,模擬彩虹鳥的歌聲。

將這段程式上傳到 micro:bit 上,即可看到彩虹鳥的三項神奇能力在你的 micro:bit 上展示出來。

執行失敗,因Image.SUNNY, Image.CLOUD, Image.RAIN並未定義。

範例三:

提示詞:

產生Image的LED 顯示屏會隨機顯示太陽、雲朵或雨滴圖案,Python程式,樣式如下:

display.show(Image('00300:' '03630:' '36963:' '03630:' '00300'))

ChatGPT生成的內容:

當然,這裡有一個 Python 程式,可以在 micro

上模擬彩虹鳥的三項能力,其中包括 LED 顯示屏隨機顯示太陽、雲朵或雨滴圖案的功能。


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from microbit import *
import music
import random

# 治癒能力的顯示圖案
heal_icon = Image('09090:'
                  '90909:'
                  '09990:'
                  '09090:'
                  '00900')

# 預知天氣變化的圖案
sunny_icon = Image('00300:'
                   '03630:'
                   '36963:'
                   '03630:'
                   '00300')

cloud_icon = Image('00000:'
                   '00330:'
                   '03663:'
                   '36666:'
                   '03660')

rainy_icon = Image('00000:'
                   '00300:'
                   '03630:'
                   '03630:'
                   '36963')

weather_icons = [sunny_icon, cloud_icon, rainy_icon]

# 播放歌曲的顯示圖案
sing_icon = Image('00000:'
                  '09090:'
                  '00900:'
                  '09090:'
                  '00000')

# 治癒能力
def heal():
    display.show(heal_icon)
    sleep(2000)
    display.clear()

# 預知天氣變化
def predict_weather():
    weather = random.choice(weather_icons)
    display.show(weather)
    sleep(2000)
    display.clear()

# 播放歌曲
def sing():
    display.show(sing_icon)
    music.play(music.ENTERTAINER)
    display.clear()

# 主循環
while True:
    if button_a.was_pressed():
        heal()
    if button_b.was_pressed():
        predict_weather()
    if pin_logo.is_touched():
        sing()

這段程式實現了彩虹鳥的三項能力:

  1. 治癒能力:按下 A 鍵,LED 顯示屏會顯示心形圖案,模擬治癒能力。
  2. 預知天氣變化:按下 B 鍵,LED 顯示屏會隨機顯示太陽、雲朵或雨滴圖案,模擬預知天氣變化的能力。
  3. 播放歌曲:觸摸 micro:bit的 logo,LED 顯示屏會顯示音符圖案,並播放一段音樂,模擬彩虹鳥的歌聲。

將這段程式上傳到 micro:bit上,即可看到彩虹鳥的三項神奇能力在你的 micro:bit上展示出來。

執行結果正常。

範例四:
提示詞:
治癒能力請加上WS2812B-6的程式,顏色可以變化

ChatGPT生成內容:
當然,這裡是一個改進過的 Python 程式,可以在 micro:bit上模擬彩虹鳥的三項能力,並包括使用 WS2812B LED 變化顏色來展示治癒能力。為了使用 WS2812B LED,你需要安裝 micro:bit的 neopixel 庫。

首先,請確保你已經安裝了 neopixel 庫。如果還沒有安裝,你可以在 Mu 編輯器中使用以下命令來安裝:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import neopixel
from microbit import pin0, sleep

# 創建 neopixel 物件,假設有 6 顆 LED 連接在 pin0 上
np = neopixel.NeoPixel(pin0, 6)

# 設置所有 LED 的顏色為紅色
for i in range(6):
    np[i] = (255, 0, 0)
np.show()

現在,將這段程式整合到主程式中:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
from microbit import *
import music
import random
import neopixel

# 創建 neopixel 物件,假設有 6 顆 LED 連接在 pin0 上
np = neopixel.NeoPixel(pin0, 6)

# 治癒能力的顯示圖案
heal_icon = Image('09090:'
                  '90909:'
                  '09990:'
                  '09090:'
                  '00900')

# 預知天氣變化的圖案
sunny_icon = Image('00300:'
                   '03630:'
                   '36963:'
                   '03630:'
                   '00300')

cloud_icon = Image('00000:'
                   '00330:'
                   '03663:'
                   '36666:'
                   '03660')

rainy_icon = Image('00000:'
                   '00300:'
                   '03630:'
                   '03630:'
                   '36963')

weather_icons = [sunny_icon, cloud_icon, rainy_icon]

# 播放歌曲的顯示圖案
sing_icon = Image('00000:'
                  '09090:'
                  '00900:'
                  '09090:'
                  '00000')

# 設置 neopixel 顏色變化
def set_neopixel_color():
    for i in range(6):
        np[i] = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
    np.show()

# 治癒能力
def heal():
    display.show(heal_icon)
    set_neopixel_color()
    sleep(2000)
    np.clear()
    display.clear()

# 預知天氣變化
def predict_weather():
    weather = random.choice(weather_icons)
    display.show(weather)
    sleep(2000)
    display.clear()

# 播放歌曲
def sing():
    display.show(sing_icon)
    music.play(music.ENTERTAINER)
    display.clear()

# 主循環
while True:
    if button_a.was_pressed():
        heal()
    if button_b.was_pressed():
        predict_weather()
    if pin_logo.is_touched():
        sing()

這段程式實現了以下功能:

  1. 治癒能力:按下 A 鍵,LED 顯示屏會顯示心形圖案,同時 WS2812B LED 燈會隨機變化顏色,模擬治癒能力。
  2. 預知天氣變化:按下 B 鍵,LED 顯示屏會隨機顯示太陽、雲朵或雨滴圖案,模擬預知天氣變化的能力。
  3. 播放歌曲:觸摸 micro
    的 logo,LED 顯示屏會顯示音符圖案,並播放一段音樂,模擬彩虹鳥的歌聲。

請確保 WS2812B LED 正確連接到 micro:bit的 pin0,並且提供適當的電源。將這段程式上傳到 micro:bit上,即可看到彩虹鳥的三項神奇能力在你的 micro:bit上展示出來。

執行結果正常。