萬丈高樓皆由平地起。本文接續前著《Python玩AI,你也可以 — 從CVZone入門吧!》一文,將更進一步地詳細說明如何以註解掉旁枝程式碼的拆解(decompose)過程來追踨(code tracing)別人寫好的原始程式(source code)。透過這個動手術切除旁枝的技巧,我們可以很容易地從一隻程式解析出它組成的基本元素有哪些?
第一步,如圖 1,我們先從陳會安老師分享的 CVZone 手部辨識原始專案 ch6–4a.py 中拆解出攝影機控制,camera_control.py。第二步,再從剩餘的程式碼中找出「手部辨識」的內容,hand_detection.py。此時,程式會框出左/右手手掌的位置。第三步,手指辨識,判別五隻手指頭的出現狀況,finger_detect.py。
圖 1:專案拆解
ch6–4a.py
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
bbox = hand
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 and fingers == 1:
msg = "Scissors"
cv2.putText(img, msg, (bbox+200,bbox-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()
註:本文所使用的 Python IDE 為陳會安老師包好 CVZone 的 fChart。
原始專案拆解 1:攝影機控制
在 ch6–4a.py 中,我們使用了 Python 的單行註解 #(綠色)與多行註解 ‘’’…’’’(紅色)。註解完後如 camera_control.py 所示。執行結果的截圖如圖 2。
camera_control.py
#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
bbox = hand
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 and fingers == 1:
msg = "Scissors"
cv2.putText(img, msg, (bbox+200,bbox-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()
只需不到短短一分鐘...
輸入您的信箱與ID註冊即可享有一切福利!
會員福利
免費電子報
會員搶先看
主題訂閱
好文收藏