我正在尝试使用Mediapipe的手势识别库和TensorFlow模型来运行一个手部分析程序,以识别手是否处于特定位置。我试图将两者结合起来使用,但是遇到了问题。
每当我尝试同时使用TensorFlow模型和Mediapipe库时,程序就会卡住,无法正常运行。但是,一旦我删除模型加载部分,程序就可以正常运行。因此,我想知道是否存在某种内存问题导致程序卡死,这很奇怪,因为我尝试加载的模型只有25kb。
以下是代码:
如果我注释掉
我的tensorflow版本是1.14.0,keras版本是2.3.1,python版本是3.7.6。
如果您聪明的人知道如何解决这个问题,请告诉我!
谢谢, Sam
每当我尝试同时使用TensorFlow模型和Mediapipe库时,程序就会卡住,无法正常运行。但是,一旦我删除模型加载部分,程序就可以正常运行。因此,我想知道是否存在某种内存问题导致程序卡死,这很奇怪,因为我尝试加载的模型只有25kb。
以下是代码:
import cv2
from tensorflow.keras.models import load_model
import h5py
import mediapipe as mp
model = load_model('/path_to_model/model.h5')
print('Marker 1')
mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles
mp_hands = mp.solutions.hands
print('Marker 2')
cap = cv2.VideoCapture(0)
cap.set(3, 1280) # set the Horizontal resolution
cap.set(4, 720) # Set the Vertical resolution
print('Marker 3')
num_frames = 0
print('Marker 4')
with mp_hands.Hands(
min_detection_confidence=.5,
min_tracking_confidence=.1) as hands:
print('Marker 5')
while cap.isOpened():
print('Marker 6')
success, image = cap.read()
print('Marker 7')
if not success:
print("Ignoring empty camera frame.")
continue
print('Marker 8')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
print('Marker 9')
gray_roi =cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
print('Marker 10')
image.flags.writeable = False
results = hands.process(image)
print('Marker 11')
image.flags.writeable = True
print('Marker 12')
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
print('Marker 13')
if results.multi_hand_landmarks:
print('Marker 14')
for hand_landmarks in results.multi_hand_landmarks:
print('Marker 15')
mp_drawing.draw_landmarks(
image,
hand_landmarks,
mp_hands.HAND_CONNECTIONS,
mp_drawing_styles.get_default_hand_landmarks_style(),
mp_drawing_styles.get_default_hand_connections_style())
print('Marker 16')
print('Marker 17')
if results.multi_handedness is None:
print('Marker 17')
string = 'Handedness: N/A'
else:
print('Marker 18')
string = 'Handedness:' + str(len(results.multi_handedness))
print('Marker 19')
if num_frames % 5 == 0:
print('Marker 20')
position = function_that_uses_model_to_determine_hand_position(gray_roi)
print('Marker 21')
print('Marker 22')
cv2.putText(image, string, (10, 70), cv2.FONT_HERSHEY_PLAIN, 3,
(255, 0, 255), 3)
cv2.putText(image, position, (70, 70), cv2.FONT_HERSHEY_PLAIN, 3,
(255, 0, 255), 3)
print('Marker 23')
cv2.imshow('MediaPipe Hands', image)
print('Marker 24')
if cv2.waitKey(5) & 0xFF == 27:
break
print('Marker 25')
num_frames+=1
print('Marker 26')
cap.release()
如果我注释掉
load_model
部分(和相关的代码行),程序就可以正常运行。但是,每当我尝试包括加载模型时,我只能到达标记10
。 甚至不需要尝试加载模型。如果我只包括from tensorflow.keras.models import load_model
这一行与tensorflow无关的内容,我仍然只能到达标记10
。所以很明显导入或使用它会导致一些问题,阻止了程序的其他部分的运行。我的tensorflow版本是1.14.0,keras版本是2.3.1,python版本是3.7.6。
如果您聪明的人知道如何解决这个问题,请告诉我!
谢谢, Sam