我正在从客户端应用程序中获取参数性别,并使用该值(男性/女性/无)来更改显示器上显示的视频。我写了一个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()
答案 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')