停止无限循环时出现问题



我有以下部分代码。我正在以每秒5帧的速度从文件夹中读取帧,在一个无限循环中,文件夹中总共有2552帧。

当从文件夹中读取所有帧时,我需要停止读取帧,因为我的代码面临的问题是无限循环的,读取的帧比文件夹中的多。我不想在跑步时改变。当所有帧都被读取时,我该如何停止,一旦文件名列表被处理,就硬停止或软停止无限循环,一次又一次。

filenames = [img for img in glob.glob("video-frames/*.jpg")]
fps = 5
interval = int(1 / fps)
while running: # INFINITE LOOP
filenames = sorted(filenames, key=os.path.getctime)
for img in filenames:
frame = cv2.imread(img)
frame_count += 1
time.sleep(interval)
send_frame(frame,frame_count) # REPEAT INFINITE LOOP

您的代码看起来过于随意。我建议把你的问题再分解一下。

首先,你的列表理解除了浪费cpu周期之外什么都没做。glob.glob已经返回了一个列表。所以:

filenames = glob.glob("video-frames/*.jpg")

应该足够了。

其次,只需删除while true语句。

filenames = sorted(filenames, key=os.path.getctime)
for img in filenames:
frame = cv2.imread(img)
frame_count += 1
time.sleep(interval)
send_frame(frame, frame_count) # no more infinite loop :)

一旦filenames列表中的每个jpg都用完,这将停止。

如果你不熟悉列表或迭代,我建议你看一下

最新更新