我有这段代码,我使用 MediaPipe 和 OpenCV 来标记手指:
import cv2
import mediapipe as mp
from mediapipe import solutions
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(
static_image_mode=False,
max_num_hands=2,
min_detection_confidence=0.5,
min_tracking_confidence=0.5,
)
mp_drawing = mp.solutions.drawing_utils
finger_indices = [
mp_hands.HandLandmark.THUMB_TIP,
mp_hands.HandLandmark.INDEX_FINGER_TIP,
mp_hands.HandLandmark.MIDDLE_FINGER_TIP,
mp_hands.HandLandmark.RING_FINGER_TIP,
mp_hands.HandLandmark.PINKY_TIP,
]
def label_fingers(frame, fingers, hand_landmarks, frame_width, frame_height):
font = cv2.FONT_HERSHEY_SIMPLEX
font_scale = 1.0
color = (255, 0, 0)
thickness = 2
line_type = cv2.LINE_AA
for idx, finger in enumerate(finger_indices):
landmark = hand_landmarks.landmark[finger]
x = int(landmark.x * frame_width)
y = int(landmark.y * frame_height)
text = str(fingers[idx])
org = (x, y)
cv2.putText(frame, text, org, font, font_scale, color, thickness, line_type)
async def process_video_stream(frame, fingers):
frame = cv2.resize(frame, (600, 400))
frame = cv2.flip(frame, 1)
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
result = hands.process(rgb_frame)
if result.multi_hand_landmarks:
frame_height, frame_width = frame.shape[:2]
for hand_landmarks in result.multi_hand_landmarks:
mp_drawing.draw_landmarks(
frame,
hand_landmarks,
mp_hands.HAND_CONNECTIONS,
solutions.drawing_styles.get_default_hand_landmarks_style(),
solutions.drawing_styles.get_default_hand_connections_style(),
)
label_fingers(frame, fingers, hand_landmarks, frame_width, frame_height)
return frame
代码运行良好,但我收到以下警告消息:
/home/khalid/.local/lib/python3.10/site-packages/google/protobuf/symbol_database.py:55: UserWarning: SymbolDatabase.GetPrototype() is deprecated. Please use message_factory.GetMessageClass() instead. SymbolDatabase.GetPrototype() will be removed soon.
warnings.warn('SymbolDatabase.GetPrototype() is deprecated. Please '
我不知道代码中的何处调用了已弃用的
SymbolDatabase.GetPrototype()
函数,因此我可以用新的 message_factory.GetMessageClass()
方法替换它。如何找到并更新这个已弃用的函数用法?
错误不在代码中,而是在作为 mediapipe 安装的一部分安装的 protobuf 库中。我最近在使用 Face Landmark 检测时也遇到了这个错误,解决这个问题的方法是管理 mediapipe 和 protobuf 的版本。对我有用的是 mediapipe 版本 0.10.11 和 protobuf 版本 3.20.3
更多信息可以在此 github 问题链接上找到:https://github.com/google-ai-edge/mediapipe/issues/5361