我正在学习在线高级简历课程,但代码无法正常运行。这些是我收到的错误消息:

问题描述 投票:0回答:2
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)

嗨!我正在制作一个手部跟踪软件。当我单击“运行”时,相机会弹出,但是当我将手放入框架中时,相机就会关闭并给出错误

python opencv error-handling face-recognition cvzone
2个回答
0
投票

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,因为它包含手部跟踪的详细示例。


0
投票

您看到的错误源于代码的这一部分:

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() 中删除了参数,因为该方法在内部使用了最新的手部标志。

运行修改后的代码,看看它是否适合您。如果出现任何其他问题,请仔细检查文档或简历课程中的示例,以确保您正确使用这些方法。

© www.soinside.com 2019 - 2024. All rights reserved.