|

用GenAI自動拆解程式碼學習:GenAI時代的新程式學習法

   

作者:Ted Lee

再大、再長的程式碼也不過是由幾個基本的功能方塊(functional blocks)組成罷了!

一開始,當我們使用自製教材來教授影像辨識這個專題時,是自己想破頭硬是做程式碼的拆解。拆解完之後好像也就冰在冰箱冷凍起來放了。
然而,學而不用則罔。我們在想:如果人工能拆解程式碼,那GenAI能做嗎?再者,它應該也能幫忙想出更多的進階應用吧?
於是,我們就這樣開啟了這條追尋All Blue的偉大的航道──先說結論:

你可以不會寫程式,但你可以學著叫GenAI幫你生!

人工拆解

我們在《ython玩AI,你也可以 — 從CVZone入門吧!》和《GenAI拆解學習:以「健康手環監測系統」示例》這兩篇中展示如何以人工的方式來拆解原始的程式碼。
然而,對於完全沒有相關概念的初學者而言,要能從成品中去拆解出基本的材料當然不會是一件容易的事。
於是,我們開始幻想:

如果把原始程式碼餵給GenAI來處理會怎樣呢?

GenAI自動拆解

在本小節中,我們在Claude輸入下列咒語(prompt)並附上陳會安老提供的CVZone手部辨識原始碼「0. ch6–4a.py」[2]:

(人設)你是Python Tkinter高手
(任務)拆解以下程式碼讓我學習
(輸出)分階段以最少的程式碼來展示功能性,附拆解圖


from cvzone.HandTrackingModule import HandDetector
import cv2

cap = cv2.VideoCapture(0)
detector = HandDetector(detectionCon=0.5, maxHands=1)

while cap.isOpened():
    success, img = cap.read()
    hands, img = detector.findHands(img)
    if hands:
        hand = hands[0]
        bbox = hand["bbox"]        
        fingers = detector.fingersUp(hand)
        totalFingers = fingers.count(1)
        print(totalFingers)
        msg = "None"
        if totalFingers == 5:
            msg = "Paper"
        if totalFingers == 0:
            msg = "Rock"
        if totalFingers == 2:
            if fingers[1] == 1 and fingers[2] == 1:
                msg = "Scissors"
        cv2.putText(img, msg, (bbox[0]+200,bbox[1]-30),
                    cv2.FONT_HERSHEY_PLAIN, 2, (0, 255, 0), 2)
    cv2.imshow("Image", img)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break
       
cap.release()
cv2.destroyAllWindows()

 

經過一番小小的交談之後,Claude生了一個可以讓我們自動分段複製程式碼供測的網頁程式碼「拆解講義.html」,檔案的連結分享於此。讀者們可以下載後用瀏灠器打開使用。

圖:拆解講義.html

Claude將原始碼拆解為下列五個基本功能堆疊的過程:

1.攝影機控制(stage1_basic_camera.py)
2.手部偵測(stage2_hand_detection.py)
3.手指辨識(stage3_finger_recognition.py)
4.RSP(剪刀、石頭、布)手勢判斷(stage4_game_logic.py)
5.辨識結果輸出(stage5_complete.py)
讀者們可將上述五個程式片段(snippets)一一自行測試來幫助自己更深入了解原程式的寫作邏輯。
註:我們和Claude完整的對話記錄分享於

進階應用
拆完就滿足了嗎?當然不,邁向高手之路無他,唯勤而已!
那麼,還可以怎麼玩呢?
先前,我們要自己想破頭:在《Python玩AI,你也可以 — 從CVZone入門吧!》這篇中讓人類玩家和電腦對猜,並且能自動判斷輸贏;在《讓我們Py在一起:手勢控制PowerPoint放映切換》這篇……,還有呢?
現在,一句咒語就跑出一張全面性的應用清單出來了!(表1)

給幾個使用這個短短範例程式的進階擴充應用

表1:手部辨識的進階延申指引

因此,GenAI時代

不怕做不出來,反倒是怕想不到而已!

[1]六種授權條款。
[2]這個小專案是援用傳統的影像處理(image processing)技術,並以著名的OpenCV函式庫的簡化版CVZone來實作(implement)的。

(作者為本刊專欄作家,本文同步表於作者部落格,原文連結;責任編輯:謝涵如)

Ted Lee
以3D感知開啟智慧機器人新時代:從深度相機到OpenVINO的邊緣智慧革命

訂閱MakerPRO知識充電報

與40000位開發者一同掌握科技創新的技術資訊!

Author: Ted Lee

從工程師轉任中學教師,又為了捍衛教育理念,投身成為 STEAM 教育工作者,自稱「無可救藥的人文教育理想主義者」的李俊德(Ted Lee)。

Share This Post On

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *