MediaPipe指针检测指针.进程将永远等待



当我运行以下Python文件时

import tensorflow as tf
import tensorflow_hub as hub
from tensorflow_docs.vis import embed
import numpy as np
import cv2
import json
import mediapipe as mp
mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles
mp_hands = mp.solutions.hands
def detectHands():
print("detect hands")
with mp_hands.Hands(
static_image_mode=True,
model_complexity=1,
min_detection_confidence=0.5,
max_num_hands=2) as hands:
image_path_1 = './210.jpg'
hands_image_input = tf.io.read_file(image_path_1)
hands_image_input = tf.image.decode_jpeg(hands_image_input)
# print("  read_file = cv2.imread(image_path_1);")
# read_file = cv2.imread(image_path_1)
# print("handsImage = cv2.flip(cv2.imread(input_image), 1)")
# print(hands_image_input)
# hands_image_input = cv2.flip(cv2.imread(image_path_1), 1)
# Convert the BGR image to RGB before processing.
# print("hands.process(read_file)",read_file)
# print("hands ")
print("hands ")
print(hands)
# flipped_image = cv2.cvtColor(read_file, cv2.COLOR_BGR2RGB)
print("flipped_image ")
# print(flipped_image)
results = hands.process(hands_image_input)
print('results!:', results)
# Print handedness and draw hand landmarks on the image.
print('Handedness:', results.multi_handedness)
if not results.multi_hand_landmarks:
return
image_height, image_width, _ = image.shape
annotated_image = image.copy()
for hand_landmarks in results.multi_hand_landmarks:
print('hand_landmarks:', hand_landmarks)
print(
f'Index finger tip coordinates: (',
f'{hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP].x * image_width}, '
f'{hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP].y * image_height})'
)
mp_drawing.draw_landmarks(
annotated_image,
hand_landmarks,
mp_hands.HAND_CONNECTIONS,
mp_drawing_styles.get_default_hand_landmarks_style(),
mp_drawing_styles.get_default_hand_connections_style())
# cv2.imwrite(
#     './tmp/annotated_image.png', cv2.flip(annotated_image, 1))
# Draw hand world landmarks.
if not results.multi_hand_world_landmarks:
return
for hand_world_landmarks in results.multi_hand_world_landmarks:
mp_drawing.plot_landmarks(
hand_world_landmarks, mp_hands.HAND_CONNECTIONS, azimuth=5)

detectHands()

它显示以下输出,但从不低于以下行

results = hands.process(hands_image_input)
/Users/richardlindhout/PycharmProjects/pythonProject1/venv/bin/python /Users/richardlindhout/go/src/bitbucket.org/omoda-applicatiebeheer/media-service/external_helpers/pythonProject1/main.py
2022-03-02 16:33:52.222319: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
detect hands
hands 
<mediapipe.python.solutions.hands.Hands object at 0x15902c2e0>
flipped_image 

为什么它不超时,或者为什么它需要很长时间才能得到结果?

我认为我的mac安装中的tensorflow有问题。

我现在用Docker运行它,这样我就不会有环境问题了。

我有以下Dockerfile


FROM tensorflow/tensorflow:latest
RUN apt-get update && apt-get install -y --no-install-recommends 
build-essential 
gcc-8 g++-8 
ca-certificates 
curl 
ffmpeg 
git 
wget 
unzip 
python3-dev 
python3-opencv 
python3-pip 
libopencv-core-dev 
libopencv-highgui-dev 
libopencv-imgproc-dev 
libopencv-video-dev 
libopencv-calib3d-dev 
libopencv-features2d-dev 
software-properties-common && 
add-apt-repository -y ppa:openjdk-r/ppa && 
apt-get update && apt-get install -y openjdk-8-jdk && 
apt-get clean && 
rm -rf /var/lib/apt/lists/*
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100 --slave /usr/bin/g++ g++ /usr/bin/g++-8
RUN pip3 install --upgrade setuptools
RUN pip3 install tensorflow_hub
RUN pip3 install numpy
RUN pip3 install mediapipe

RUN ln -s /usr/bin/python3 /usr/bin/python

并使用构建

docker build - < Dockerfile -t python-ai

然后我就可以运行Python代码了!

docker run -it --rm -v $PWD:/tmp -w /tmp python-ai python ./main.py

最新更新