如何快速切换视频?

时间:2019-01-30 06:56:31

标签: python opencv

我正在从客户端应用程序中获取参数性别,并使用该值(男性/女性/无)来更改显示器上显示的视频。我写了一个if-else循环。但是问题是,性别发生变化时,切换视频会有很多延迟。有没有更优雅的解决方案?我会很感激你的想法。谢谢。

我已经尝试过此代码(服务器端)

def getData(self):
    dst = None

    if self.myHandler.items is not None:
        if len(self.myHandler.items.decode('utf-8')) != 0:
            # dst = self.myHandler.items.decode('utf-8')
            output = self.myHandler.items.decode('utf-8')
            dst = json.loads(output) 
            if dst["gender"] == "F":
                cap = cv2.VideoCapture('No.1/women.mp4')
                if (cap.isOpened()== False):
                    print("Error opening video stream or file")
                while(cap.isOpened()):
                    ret, frame = cap.read()
                    if ret == True:
                        cv2.imshow('Frame',frame)

                        if cv2.waitKey(30) & 0xFF == ord('q'):
                            break                    
                    else: 
                        break        
                cap.release()
                cv2.destroyAllWindows()

            elif dst["gender"] == "M":                  
                cap = cv2.VideoCapture('No.1/men.mp4')                 
                if (cap.isOpened()== False): 
                    print("Error opening video stream or file")
                while(cap.isOpened()):
                    ret, frame = cap.read()
                    if ret == True:
                        cv2.imshow('Frame',frame)
                        if cv2.waitKey(30) & 0xFF == ord('q'):
                            break
                    else: 
                        break
                cap.release()
                cv2.destroyAllWindows()

            elif dst["gender"] == None :
                cap = cv2.VideoCapture('No.1/normal.mov')                 
                if (cap.isOpened()== False): 
                    print("Error opening video stream or file")
                while(cap.isOpened()):
                    ret, frame = cap.read()
                    if ret == True:
                        cv2.imshow('Frame',frame)
                        if cv2.waitKey(30) & 0xFF == ord('q'):
                            break
                    else: 
                        break
                cap.release()
                cv2.destroyAllWindows()  

1 个答案:

答案 0 :(得分:0)

我想到的第一件事是将通用代码移至单独的方法。至少您的程序将具有更清晰的结构:

def show_video(file):
    cap = cv2.VideoCapture(file)
    if not cap.isOpened():
        print("Error opening video stream or file")
    while cap.isOpened():
        ret, frame = cap.read()
        if ret:
            cv2.imshow('Frame', frame)
            if cv2.waitKey(30) & 0xFF == ord('q'):
                break
        else:
            break
    cap.release()
    cv2.destroyAllWindows()


def get_data(self):
    if self.myHandler.items:
        if len(self.myHandler.items.decode('utf-8')) != 0:
            output = self.myHandler.items.decode('utf-8')
            dst = json.loads(output)

            if dst["gender"] == "F":
                show_video('No.1/women.mp4')
            elif dst["gender"] == "M":
                show_video('No.1/men.mp4')
            elif not dst["gender"]:
                show_video('No.1/normal.mov')