作家
登录

如何用Python检测伪造的视频

作者: 来源: 2017-06-29 14:15:23 阅读 我要评论

 
  •         else:   
  •  
  •             # 如不雅这是第一次看到这一帧,则保存到seen_frames中   
  •  
  •             seen_frames[hashed] = x   
  •  
  •             dup_frames[hashed] = [x]   
  •  
  •    
  •  
  •     # 返回反复帧列表的列表   
  •  
  •     return [dup_frames[x] for x in dup_frames if len(dup_frames[x]) > 1]  
  • 这段代码在我的macbook pro上跑了大年夜约一个小时。 我们来看看结不雅:

    这些都是我们找到的反复帧。将它们转换为大年夜概的时光戳(以秒为单位,译者注:视频链接指向YouTube网站,请科学上彀):

    • 142.07
    • 2403.2
    • 4161.83
    • 4413.07
    • 4915.53
    • 5418.0
    • 5669.23
    • 6171.7
    • 6925.4
    • etc…

    很好,结不雅看起来很直不雅,大年夜下图中可以看出,帧5928与帧2048454雷同,帧5936与帧2048462雷同,以词攀类推。让我们目视确认。

    对膳绫擎的解释总结一下,当我将数据存储在字典中时,我取了每个图像的哈希。哈希函数将图像(数组)转换为整数。如不雅两个图像完全雷同,则哈希函数将获得雷同的┞符数。如不雅两个图像不合,我们将获得两个不合的┞符数。然则我们实际想要的是,如不雅两个图像只是稍微不合,我们然仍然能获得雷同的┞符数。

    完美。所以,这个视频肯定是捏造的。 然而,帧匹配的数量看起来实袈溱太低了,值得困惑啊。 真的只有25个雷同的帧吗?在整整24小时的视频中这25帧的长度几乎不到1秒钟。我们来进一步看一下!

    情况变复杂了

    该法度榜样的感化是肯定雷同的帧,如许我就能知道视频是在轮回播放。让我们来看看膳绫擎两幅图像的后2秒的帧(帧5936 + 60和帧2048462 + 60)是什么样的。

    等等…… 这两个图像看起来是一样的啊!然则他们为什么没有标记为匹配呢?我们可以把个一一个帧减去别的一个帧来找出不合之处。这个减法是对每个像素的红、绿、蓝的值分别做减法。

    太好了,我们创造出了一个很酷的故障艺术!然则,实际上两个帧的差值仅仅是视频被紧缩后的两个帧的差别。因为经由了紧缩,本来雷同的两个帧可能会受到噪音的影响而导致掉真,大年夜而在数值上不再一样(尽管它们在视觉上看起来是一样的)。

    简化我们的紧缩问题

    有几种不合的哈希算法,每种都有专门的应用处景。我们在这老将要看到的是感知哈希。与其他类型的哈希不合的是,对于接近在一路的输入,它们的感知哈希值是雷同的。反向图像搜刮网站显然应用的是类似的技巧,这些网站只是抓取他们碰到的收集和哈希图像。因为同一张图片在互联网上可能存在多种不合的分辨率和剪裁,所以检查其他具有雷同哈希值的器械则更为便利。

    然而,对于我们来说,又有新的麻烦了棘因为我们处理的并不美满是图像,而是一系列的图像,每一张图片都是相差1/30秒。这意味着我们的哈希函数须要:

    • 足够的宽松,两个仅因为紧缩而产生噪声的帧的哈希值是雷同的
    • 足够的灵敏,两个相邻帧的哈希值是不合的

    这可能很复杂。

    均值哈希的参数选择

    下面,我分别以分辨率8×8和64×64显示均值哈希的结不雅。8×8看起来降采样的太多了,我们掉去了太多的信息,似乎大年夜多半图像看起来都是一样的了。对于64×64,它看起来和本来的图像没什么不合,两者之间可能没有足够大年夜的差别来忽视紧缩产生的噪声。


    为了找到合适我们的分辨率,我试着在两段类似的视频中经由过程设置一系列不合的分辨率来寻找匹配项。返回的匹配项将涌如今以下输出中:

    • [8,108]
    • [9,109]
    • [10,11,110,111]

    上述的解释是,第8帧和第108帧雷同。第9帧和第109帧雷同,但不合于8、108。第10、11、110、111帧与其他帧都不合,但彼此雷同。这种情况很有可能产生,因为算法并不完美,有时也会混淆,认为两个相邻的帧是雷同的。我们看看下面这几个数字:

    • 有若干个匹配的桶?大年夜膳绫擎可以看到,有3个。
    • 每个桶中的平均帧数是若干?平均值为(2 + 2 + 4)/ 3 = 2.7。
    • 所有桶中最多的帧是若干? 4。

    这里的目标是获得大年夜量的桶(第一个数字),并且每个桶内的帧数尽可能的少(平均或最差情况)。理论上来说,因为我正在看的┞封段视频有1个轮回,所以每桶应当只有2帧。


      推荐阅读

      从零开始使用TensorFlow建立简单的逻辑回归模型

    TensorFlow 是一个基于 python 的机械进修框架。在 Coursera 上进修了逻辑回归的课程内容后,想把在 MATLAB 中实现了的内容用 TensorFlow 从新实现一遍,当做进修 Python 和框架的敲门砖。>>>详细阅读


    本文标题:如何用Python检测伪造的视频

    地址:http://www.17bianji.com/lsqh/35965.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)