|

Python玩AI:CVZone 手部辨識(進階)

   
作者:Ted Lee

萬丈高樓皆由平地起。本文接續前著《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註冊即可享有一切福利!

會員福利
1

免費電子報

2

會員搶先看

3

主題訂閱

4

好文收藏

Ted Lee

Author: Ted Lee

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

Share This Post On

Submit a Comment

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