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

Mediapipe Hands识别代码运行内存耗尽问题排查求助

问题:Mediapipe手部检测代码持续占用内存直至耗尽

我想要验证搭载OpenCV与Mediapipe库的开发环境是否正常运行,为此测试了如下代码:

import cv2
import mediapipe as mp

mp_hands=mp.solutions.hands
mp_drawing=mp.solutions.drawing_utils

webcam = cv2.VideoCapture(0,cv2.CAP_DSHOW)
while webcam.isOpened():
    success, img = webcam.read()  
    img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    results=mp_hands.Hands(max_num_hands=3,min_detection_confidence=0.7,min_tracking_confidence=0.6).process(img)
    cv2.imshow('test', img)
    results=[]
    print("passo")
    if cv2.waitKey(5) & 0xFF == ord("q"):
        break
webcam.release()
cv2.destroyAllWindows()

启动程序后,results=mp_hands.Hands(max_num_hands=3,min_detection_confidence=0.7,min_tracking_confidence=0.6).process(img)这一行会持续占用工作站内存直至耗尽。我使用Python 3.11与Mediapipe 0.10.5版本,已尝试更换摄像头、删除部分变量来降低内存占用,想咨询这是库的bug还是代码需要调整?


解决方案

这是代码逻辑问题,不是库的bug。

问题根源

你在while循环的每次迭代中都重新创建mp_hands.Hands()实例,该实例包含手部检测模型的权重、上下文状态等大量资源。循环不断生成新实例,旧实例的内存无法被Python垃圾回收机制及时回收,最终导致内存耗尽。

修复后的代码

import cv2
import mediapipe as mp

mp_hands=mp.solutions.hands
mp_drawing=mp.solutions.drawing_utils

webcam = cv2.VideoCapture(0,cv2.CAP_DSHOW)
# 将Hands实例化移到循环外,仅创建一次
with mp_hands.Hands(max_num_hands=3, min_detection_confidence=0.7, min_tracking_confidence=0.6) as hands:
    while webcam.isOpened():
        success, img = webcam.read()  
        if not success:
            print("无法读取摄像头帧")
            break
        img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
        # 循环内仅调用process方法
        results=hands.process(img)
        cv2.imshow('test', cv2.cvtColor(img, cv2.COLOR_RGB2BGR))  # 转回BGR格式,保证画面颜色正常
        print("passo")
        if cv2.waitKey(5) & 0xFF == ord("q"):
            break
webcam.release()
cv2.destroyAllWindows()

额外说明

  1. 使用with语句管理Hands实例,能自动释放资源,避免潜在的内存泄漏
  2. 增加success判断,防止摄像头读取失败时后续代码报错
  3. 显示画面时将RGB转回BGR,因为OpenCV默认使用BGR格式,否则显示画面会出现颜色失真

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:32:39