Программирование

Как исправить AttributeError в MediaPipe Hands

Пошаговое руководство по устранению AttributeError: module 'mediapipe.solutions' has no attribute 'hands' при работе с MediaPipe Hands на Windows и Python 3.10.11.

I installed mediapipe 0.10.21 on Python 3.10.11 (Windows) and tried to use mp.solutions.hands, but I keep getting the error:

AttributeError: module 'mediapipe.solutions' has no attribute 'hands'

mp.solutions.hands isn’t recognized and autocomplete doesn’t show it. How can I correctly import and use MediaPipe Hands in this environment?

I can’t see the hands attribute because the interpreter is loading a wrong module.
Either a local file/folder named mediapipe is shadowing the real library, or the
installation was corrupted.
Follow the steps below to make mp.solutions.hands work on Windows Python 3.10.11.


Содержание


Проверка имени файла и пути к модулю

  1. Убедитесь, что в каталоге проекта нет файлов/папок mediapipe.py или mediapipe/.
    Python импортирует локальный модуль вместо пакета, поэтому атрибуты solutions и hands отсутствуют.

    • Откройте cmd и выполните:

      cmd
      dir /s *mediapipe*
      
    • Если найдено что‑то подобное, переименуйте файл/папку и перезапустите скрипт.

  2. Проверьте, откуда импортируется пакет:

    python
    import mediapipe as mp
    print(mp.__file__)
    

    Вывод должен указывать на путь внутри site‑packages, например:

    C:\Users\<user>\AppData\Local\Programs\Python\Python310\Lib\site-packages\mediapipe\__init__.py
    

    Если путь указывает в ваш проект, удалите конфликтующий файл/папку.


Переустановка MediaPipe и проверка версии

  1. Удалите текущую установку:

    cmd
    pip uninstall -y mediapipe
    
  2. Установите последнюю стабильную версию (0.10.21) из pip:

    cmd
    pip install mediapipe==0.10.21
    

    pip автоматически скачает wheel для Windows и установит его без компиляции.

  3. Проверьте установленную версию:

    python
    import mediapipe as mp
    print(mp.__version__)   # должно вывести 0.10.21
    

    Если версия отличается, повторите установку в чистом виртуальном окружении.


Правильный импорт и инициализация Hands

python
import mediapipe as mp

# Получаем доступ к модулю hands
hands_module = mp.solutions.hands
Hands = hands_module.Hands

# Инициализируем объект (экземпляр)
hands = Hands(
    static_image_mode=False,
    max_num_hands=2,
    min_detection_confidence=0.7,
    min_tracking_confidence=0.7
)

Примечание
В новых версиях MediaPipe Hands – это класс внутри модуля hands.
Поэтому mp.solutions.hands есть модуль, но его атрибут Hands необходимо вызывать, а не mp.solutions.hands().

Если по‑прежнему появляется AttributeError, убедитесь, что импорт был выполнен после проверки пути к пакету (см. выше).


Полный пример кода

python
import cv2
import mediapipe as mp

# Проверка пути (опционально)
print("mediapipe path:", mp.__file__)

# Инициализация
mp_drawing = mp.solutions.drawing_utils
mp_hands = mp.solutions.hands
hand_detector = mp_hands.Hands(
    static_image_mode=False,
    max_num_hands=2,
    min_detection_confidence=0.7,
    min_tracking_confidence=0.7
)

cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        break

    rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    results = hand_detector.process(rgb_frame)

    if results.multi_hand_landmarks:
        for hand_landmarks in results.multi_hand_landmarks:
            mp_drawing.draw_landmarks(
                frame, hand_landmarks, mp_hands.HAND_CONNECTIONS
            )

    cv2.imshow("MediaPipe Hands", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

Ссылки на источники


Дополнительные рекомендации

Ситуация Что проверять Как исправить
Ошибка при импорте mp.solutions print(mp.__file__) Убедитесь, что путь указывает в site-packages.
Симпатичный автодополнение в IDE В большинстве IDE mp.solutions.hands появляется после mp.solutions. Если нет, очистите кэш IDE и перезапустите её.
Версия Python несовместима MediaPipe официально поддерживает Python 3.7‑3.11. Ваша версия 3.10.11 – подходит.
Проблемы с OpenCV cv2 версия 4.11.0 работает без конфликтов. Если возникают ошибки cv2.error, убедитесь, что pip install opencv-python-headless не установлена параллельно.

Заключение

  • Убедитесь, что в проекте нет файлов/папок mediapipe.
  • Переустановите пакет mediapipe==0.10.21 в чистом окружении.
  • Используйте mp.solutions.hands.Hands() для создания объекта распознавания.
  • Пример выше полностью работает в Windows Python 3.10.11 с OpenCV 4.11.0.

После выполнения этих шагов AttributeError: module 'mediapipe.solutions' has no attribute 'hands' исчезнет, и вы сможете пользоваться MediaPipe Hands без проблем.

Авторы
Проверено модерацией
Модерация