我正在创建一个图像流行度算法,用于将视频(.mp4格式)切割成帧。借助AI,程序会检查哪些帧可能展示了最美丽的图像;这一结果以“分数”表示。
这个方法有效,但我遇到了一个问题。因为视频中的某些帧非常相似,我有很多帧的分数几乎相同。
最终结果会生成一个包含[分数, 帧编号]的列表。例如,如果列表中有3个项目是几乎相同的帧编号,因此分数也(几乎)相同,我希望只保留分数最高的那个帧编号在列表中,以便去除重复项。
这与以下这行代码有关:result.append((predict(pil_image, model), name))
这是代码:
回答:
由于没有可复现的示例,您可以调整以下代码来解决您的问题,这段代码分析每个帧的数据并跳过不必要的帧,更新最佳值并添加新值。
MAX_FRAME_NUMBER_DIFF = 60MAX_SCORE_DIFF = 0.5current_frame = countcurrent_score = predict(pil_image, model)data = (current_score, current_frame)if not results: results.append(data)else: last_score, last_frame = results[-1] is_similar_frame = current_frame - last_frame <= MAX_FRAME_NUMBER_DIFF is_score_better = current_score > last_score is_score_way_better = current_score - last_score <= MAX_SCORE_DIFF if is_similar_frame: if is_score_better: if is_score_way_better: # 如果当前分数与前一分数的差异大于MAX_SCORE_DIFF results.append(data) else: # 当前分数比前一分数好,但没有那么好 results[-1] = data # 更新最后一个值 else: # 当前分数不如前一分数 continue # 跳过这个 else: # 如果不是相似的帧 results.append(data)