INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
Traceback (most recent call last):
File "e:\Coding\Python\Face_Reg\test.py", line 13, in <module>
fingers = detector.fingersUp('*')
File "C:\Users\aarav\AppData\Local\Programs\Python\Python310\lib\site-packages\cvzone\HandTrackingModule.py", line 111, in fingersUp
myHandType = myHand["type"]
TypeError: string indices must be integers
这是我的代码:
import cv2
import cvzone.SerialModule
from cvzone.HandTrackingModule import HandDetector
cap = cv2.VideoCapture(0)
detector = HandDetector(maxHands = 1, detectionCon = 0.7)
#mySerial = cvzone.SerialObject("COM3", 9600, 1)
while True:
success, img = cap.read()
hands, img = detector.findHands(img)
lmList, bbox = detector.findHands(img)
if lmList:
fingers = detector.fingersUp('*')
print(fingers)
# mySerial.sendData(fingers)
cv2.imshow("Image", img)
cv2.waitKey(1)
嗨!我正在制作一个手部跟踪软件。当我单击“运行”时,相机会弹出,但是当我将手放入框架中时,相机就会关闭并给出错误
HandDetector.fingersUp
需要一个代表一只手的字典,由 HandDetector.findHands
返回。
下面提供了一个工作示例:
import cv2
import cvzone.SerialModule
from cvzone.HandTrackingModule import HandDetector
cap = cv2.VideoCapture(0)
detector = HandDetector(maxHands = 1, detectionCon = 0.7)
while True:
success, img = cap.read()
# The 'flipType' parameter flips the image, making it easier for some detections
hands, img = detector.findHands(img, flipType=True)
if hands:
# Gets fingers for the first detected hand
fingers = detector.fingersUp(hands[0])
print(fingers)
# mySerial.sendData(fingers)
cv2.imshow("Image", img)
cv2.waitKey(1)
注意:您可能还想查看 项目的 github,因为它包含手部跟踪的详细示例。
您看到的错误源于代码的这一部分:
fingers = detector.fingersUp('*')
错误信息:
TypeError: string indices must be integers
表示 FingerUp 函数正在尝试访问具有非整数值的字符串索引。
问题可能是你如何调用 FingerUp 方法。通常,fingersUp 需要检测到的手的地标,但您要向其传递一个字符串 ('*')。
调用 FingerUp 方法的正确方法是传递检测到的手的标志。
这是代码的更正版本:
import cv2
import cvzone.SerialModule
from cvzone.HandTrackingModule import HandDetector
cap = cv2.VideoCapture(0)
detector = HandDetector(maxHands=1, detectionCon=0.7)
while True:
success, img = cap.read()
hands, img = detector.findHands(img)
# This will give the landmarks of the detected hand
lmList, bboxInfo = detector.findPosition(img)
if lmList:
fingers = detector.fingersUp()
print(fingers)
cv2.imshow("Image", img)
cv2.waitKey(1)
注意 我从 FingerUp() 中删除了参数,因为该方法在内部使用了最新的手部标志。
运行修改后的代码,看看它是否适合您。如果出现任何其他问题,请仔细检查文档或简历课程中的示例,以确保您正确使用这些方法。