CVzone是一個視覺包,可以輕鬆運行像人臉檢測、手部跟蹤、姿勢估計等,並可處理圖像及其他 AI 功能。它的核心是使用 OpenCV 和 MediaPipe 庫。底下的例子,將逐步說明如何使用 web cam 進行手勢分析猜拳遊戲。
使用CVZone時需安裝如下套件
pip install opencv-python cvzone mediapipe==0.10.13。
請注意,安裝Python套件時,會連帶 C/C++函數庫一併安裝,所以不需手動安裝 dll檔。
圖片
請先下載如下圖片置於專案中。

開啟web cam
只要使用 cv2.VideoCapture()即通開啟web cam。然後再使用 read() 一張一張的將圖片讀入並顯示即可。底下的cam.set()可以設定 web cam的解析度。但並不是每個web cam都可以,要看硬体的解析度為何而決定。當顯示圖片後,會等待 1ms,抓取使用者是否有按下按鍵。如果有按下 ESC 或 “q “,從整個迴圈中斷,並關閉cam。

偵測手勢
偵測手勢可以使用 cvzone.HandTrackingModule裏的 HandDetector偵測。
底下的detectionCon 是偵測手部的可信度,一般設定為 0.5 就相當的精準。
maxHands 是指要偵測最多幾支手的數量,大家都想說最多一定是 2 支啦,除非你有三支手。錯了,這可是可以偵測多人多支手的喔。

偵測手指數
detector偵測到手勢後,產生 hands集合。若只有一支手,則手指資料存在 hand[0]之中。再使用fingersUp(hand[0])取得fingers 五支手指的資料。
fingers[0~4]分別代表大姆指,食指,中指,無名指,小指的資料,收起時為0,伸開時為1。
猜拳遊戲完整代碼
底下是猜拳遊戲的完整代碼。
1. 如果玩家比中指就退出程式。
2. 若出拳不在剪刀石頭布之內也不是中指,電腦視窗將會清除空白,並且開始偵測判斷輸贏。
3. 若玩家正確出拳,電腦視窗會隨機出拳,並停止判斷。


人臉偵測
cvzone亦可作人臉偵測,但精準度極差。想要更加精準的話,請看另一篇使用Dlib 所寫成的 照片人臉偵測。底下僅列出cvzone FaceDetector 語法。
import cv2
from cvzone.FaceDetectionModule import FaceDetector
detector = FaceDetector()
img=cv2.imread('face1.jpg')
img=cv2.resize(img, (800,600), interpolation=cv2.INTER_LINEAR)
img, bbox = detector.findFaces(img, draw=True)
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

