You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python手部追踪项目报错TypeError: NoneType无len(),求错误排查

OpenCV手部追踪项目TypeError错误分析与修复

错误原因

你遇到的TypeError: object of type 'NoneType' has no len(),本质是landmarklist变量为None时调用了len()方法。问题出在findPosition函数的返回逻辑:

  • 只有当self.result.multi_hand_landmarks(检测到手部)时,函数才会返回landmarklist;
  • 若未检测到手部,函数没有显式返回值,Python会默认返回None;
  • 而你在主循环里直接对landmarklist执行len()判断,自然触发错误。

另外还有一个潜在问题:camera.read()可能读取失败(比如摄像头未正常连接),此时frame为None,后续调用findhands和findPosition会引发更多错误。

修复方案

1. 修正findPosition函数的返回逻辑

确保无论是否检测到手部,函数都返回列表类型(空列表或包含 landmark 的列表):

def findPosition(self, frame, handNomor = 0, draw=True):
    landmarklist = []
    if self.result.multi_hand_landmarks:
        tanganku = self.result.multi_hand_landmarks[handNomor]
        for id, lm in enumerate(tanganku.landmark):
            h, w, c = frame.shape
            cx, cy = int(lm.x * w), int(lm.y * h)
            landmarklist.append([cx, cy, id])
            if draw:
                cv2.circle(frame, (cx, cy), 2, (195, 26, 195), cv2.FILLED)
    # 统一返回列表,避免返回None
    return landmarklist

2. 主循环添加帧有效性判断

在处理帧之前,先确认摄像头成功读取到帧,同时补充窗口显示和退出逻辑(否则程序会无响应):

def main():
    ptime = 0
    ctime = 0
    detector = handDetector()
    camera = cv2.VideoCapture(0)

    while True:
        start, frame = camera.read()
        # 判断是否成功获取帧
        if not start:
            print("无法读取摄像头画面,请检查设备连接")
            break
        frame = detector.findhands(frame)
        landmarklist = detector.findPosition(frame)
        if len(landmarklist) != 0:
            print(landmarklist[4])
        
        # 计算并显示FPS
        ctime = time.time()
        fps = 1 / (ctime - ptime)
        ptime = ctime
        cv2.putText(frame, f'FPS: {int(fps)}', (10,70), cv2.FONT_HERSHEY_PLAIN, 3, (255,0,255), 3)
        
        # 显示画面和退出逻辑
        cv2.imshow("Hand Tracking", frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    # 释放摄像头资源并关闭窗口
    camera.release()
    cv2.destroyAllWindows()

内容的提问来源于stack exchange,提问作者NoobProgrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 20:35:23