导入Tensorflow导致程序冻结

5
我正在尝试使用Mediapipe的手势识别库和TensorFlow模型来运行一个手部分析程序,以识别手是否处于特定位置。我试图将两者结合起来使用,但是遇到了问题。
每当我尝试同时使用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

我还发现,即使我将导入减少到“import tensorflow”,仍然会出现相同的问题。 - Sam Skinner
1
首先,我建议创建一个小型网络,保存它并尝试重新加载它,以确保tensorflow安装没有问题。如果成功运行,则tensorflow没有问题。很可能是您的系统没有足够的内存来加载模型。 - Swaroop Bhandary
1个回答

1
我已经找到了你的问题,它不是代码本身的问题,而是tensorflow版本的问题。你正在使用从2019年6月至2019年9月使用的版本。简而言之,你的代码是正确的,但你使用的tensorflow版本是错误的。希望这可以帮助你。
在2019年7月,这篇文章指出,tensorflow会无缘无故地崩溃: https://discuss.python.org/t/crashes-combining-tensorflow-with-other-packages-who-can-reproduce/2029#:~:text=The%20way%20Tensorflow%20built%20their%20“manylinux”%20wheels%20made,part%20of%20the%20people%20who%20looked%20into%20it

enter image description here

如果您认为我已经回答了您的问题,请将其标记为答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接