iT邦幫忙

1

我要執行程式的時候會出現這個錯誤 AttributeError: module 'mediapipe' has no attribute 'solutions'
但我查過網路上的方法像是檔名的問題、版本的問題等等,我試過之後還是一樣,有沒有人有其他的辦法~?

我的code:
import cv2
import mediapipe as mp
import random

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

cap = cv2.VideoCapture(0)

with mp_hands.Hands(
model_complexity=0,
min_detection_confidence=0.5,
min_tracking_confidence=0.5) as hands:

if not cap.isOpened():
    print("Cannot open camera")
    exit()

run = True         
while True:
    ret, img = cap.read()
    if not ret:
        print("Cannot receive frame")
        break
    img = cv2.resize(img,(540,320))  
    size = img.shape   
    w = size[1]        
    h = size[0]       
    if run:
        run = False    
        rx = random.randint(50,w-50)    
        ry = random.randint(50,h-100)   
        print(rx, ry)
    img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)   
    results = hands.process(img2)                 
    if results.multi_hand_landmarks:
        for hand_landmarks in results.multi_hand_landmarks:
            x = hand_landmarks.landmark[7].x * w   
            y = hand_landmarks.landmark[7].y * h   
            print(x,y)
            if x>rx and x<(rx+80) and y>ry and y<(ry+80):
                run = True
            
            mp_drawing.draw_landmarks(
                img,
                hand_landmarks,
                mp_hands.HAND_CONNECTIONS,
                mp_drawing_styles.get_default_hand_landmarks_style(),
                mp_drawing_styles.get_default_hand_connections_style())

    cv2.rectangle(img,(rx,ry),(rx+80,ry+80),(0,0,255),5)   
    cv2.imshow('oxxostudio', img)
    if cv2.waitKey(5) == ord('q'):
        break   

cap.release()
cv2.destroyAllWindows()

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
I code so I am
iT邦高手 1 級 ‧ 2023-02-22 08:18:52

我執行沒有問題,確定有WebCam嗎?

cap = cv2.VideoCapture(0)

我的mediapipe版本是0.8.11,升級至最新版也OK。

後來成功了謝謝~~

讚!

0
JamesDoge
iT邦高手 1 級 ‧ 2023-02-22 09:30:13

1.可能是沒有安裝最新的 MediaPipe 模組或是版本不相容的問題。
https://google.github.io/mediapipe/getting_started/install.html

2.將 solutions 改為 holistic。

import cv2
import mediapipe as mp
import random

mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles
mp_holistic = mp.solutions.holistic

cap = cv2.VideoCapture(0)

with mp_holistic.Holistic(
model_complexity=0,
min_detection_confidence=0.5,
min_tracking_confidence=0.5) as holistic:

if not cap.isOpened():
    print("Cannot open camera")
    exit()

run = True         
while True:
    ret, img = cap.read()
    if not ret:
        print("Cannot receive frame")
        break
    img = cv2.resize(img,(540,320))  
    size = img.shape   
    w = size[1]        
    h = size[0]       
    if run:
        run = False    
        rx = random.randint(50,w-50)    
        ry = random.randint(50,h-100)   
        print(rx, ry)
    img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)   
    results = holistic.process(img2)                 
    if results.pose_landmarks:
        for hand_landmarks in results.pose_landmarks:
            x = hand_landmarks.landmark[7].x * w   
            y = hand_landmarks.landmark[7].y * h   
            print(x,y)
            if x>rx and x<(rx+80) and y>ry and y<(ry+80):
                run = True
            
            mp_drawing.draw_landmarks(
                img,
                hand_landmarks,
                mp_holistic.POSE_CONNECTIONS,
                mp_drawing_styles.get_default_pose_landmarks_style(),
                mp_drawing_styles.get_default_pose_connections_style())

    cv2.rectangle(img,(rx,ry),(rx+80,ry+80),(0,0,255),5)   
    cv2.imshow('oxxostudio', img)
    if cv2.waitKey(5) == ord('q'):
        break   
cap.release()
cv2.destroyAllWindows()

後來成功了謝謝~

我要發表回答

立即登入回答