我正致力于检测Java中2个视频之间的相似性。用户将建议两个视频,软件必须通过检查文件内容来检测它们是否相似。我读到可以比较2个视频的每一帧。任何人都可以分享可以用Java实现的任何合适的算法(或代码或方法)吗?
答案 0 :(得分:8)
用于确定图像中的相似性的算法种类繁多。在Google Scholar中搜索image similarity algorithm
和video similarity algorithm
会产生大量相关文章 - StackOverflow上也有一些问题(例如this one)。
应注意几个重要方面:
没有相似性的通用定义 - 您需要根据您的具体目的来定义它。例如,具有红色正方形的图像和具有蓝色正方形的图像可以被认为是相似的,因为两者都具有正方形,或者基于颜色差异而完全不同。
相似性一般不以绝对术语定义,即存在或不存在。大多数相似性算法产生相对指标,该指标必须与基线相关以产生有意义的结果。例如,如果您有一组图像描绘各种颜色的方块,您可能会在绝对值上获得高相似度值,但这是由应该关注的颜色变化引起的微小差异。
免责声明:在使用通过搜索引擎找到的任何算法之前,您应该调查其合法身份。视频相似性是一个相当热的研究领域,相当多的算法可能受到专利等的阻碍。使用它们进行学术研究可能是可以接受的,但是你应该向律师询问其他任何事情......
修改强>
我不确定你需要什么,但我可以提供一些一般的提示:
调查视频元数据(如长度和分辨率)是否有用。例如,将30秒剪辑的内容与3小时电影进行实际比较是否有意义?
考虑一下你是否可以在每个文件中相同时间戳的相应帧的随机样本上使用基于图像的相似性。在大多数情况下,详细检查每一帧可能会浪费时间和CPU周期。
考虑使用分层相似性度量架构,在真正的CPU占用之前,使用更简单,更便宜的方法来清除明显的情况。例如,计算平均颜色和其他简单指标框架可能比轮廓检测或面部识别容易得多。
那就是说,我不相信能在这里得到明确答案。您将不得不进行实验,看看哪种方法最适合您的实际用例......