当前位置: 58彩票app下载 > 编程技术 > 正文

何以用Python检查实验伪造的录像,用Python达成检

时间:2019-09-23 02:57来源:编程技术
翻译注:本文以一段自打24时辰耳光的录像为例子,介绍了何等利用均值哈希算法来检查重复摄像帧。以下是译文。 有人在英特网上传了一段录制,他打了温馨二十四个钟头的耳光。他

翻译注:本文以一段自打24时辰耳光的录像为例子,介绍了何等利用均值哈希算法来检查重复摄像帧。以下是译文。

有人在英特网上传了一段录制,他打了温馨二十四个钟头的耳光。他确实这么做了吧?看都毫不看,断定未有!

翻译注:本文以一段自打24时辰耳光的录制为例子,介绍了什么运用均值哈希算法来检查重复录像帧。以下是译文。

前日,作者浏览YouTube的时候,看到了一段相当火的录制。在录制里,一个人声言自身要连接打脸24小时。录制的尺寸正是整齐24钟头。我跳着看完了这几个录像,确实,他就是在打本人的脸。繁多议论纷纭都说这么些摄像是假冒的,小编也是那样想的,但自个儿想明确那么些结论。

有人在互联网上传了一段摄像,他打了温馨二十四个钟头的耳光。他的确这么做了吗?看都毫无看,显著未有!

图片 1

前几日,笔者浏览YouTube的时候,看到了一段非常火的摄像。在录像里,一个人声言自个儿要延续打脸24时辰。录制的长短便是整齐24小时。笔者跳着看完了那几个摄像,确实,他正是在打本身的脸。大多商量都说那么些录疑似貂狗相属的,小编也是这么想的,但自身想显明这么些结论。

计划

图片 2

写三个主次来检查评定录制中是否有轮回。笔者事先一贯不曾用Python管理过录像,所以那对自己来讲多少难度。

计划

第3回尝试

写一个程序来检查实验录制中是否有轮回。笔者事先根本不曾用Python处理过录制,所以那对自个儿的话有个别难度。

看二个录制就如在连忙地翻看图片,那也是行使python读取录像数据的措施。我们看看的每种"图片"都是摄像的二个帧。在录制播放时,它是以每秒30帧的快慢进行播放。

第贰次尝试

在摄像数据中,每一帧都以一个英雄的数组。该数组经过点名数量的红、绿、蓝进行混合来告诉咱们各类岗位上每一个像素的水彩。我们想看看摄像中是否有两个帧出现了往往,有二个办法,正是测算我们看出的每一帧的次数。

看一个录制就如在快捷地翻看图片,那也是使用python读取摄像数据的艺术。大家看来的各样“图片”都以摄像的二个帧。在录像播放时,它是以每秒30帧的速度进行广播。

本人用多个字典类型的变量来开展计数。八个追踪本人早已看到的帧,另五个跟踪全体大同小异的帧。当小编每一个浏览每一帧时,首先检查以前是或不是看过这一帧。若无,则把这一帧加多到作者已看过的帧字典中(见上面的seenframes)。借使原先看过这一帧,则将它增加到另一个字典(dupframes)的列表中,那个字典包涵了别样同等的帧。

在摄像数据中,每一帧都以三个宏大的数组。该数组经过点名数量的红、绿、蓝举办混合来告诉咱们种种地点上各类像素的颜色。大家想看看录像中是或不是有多个帧出现了累累,有一个主意,正是计量大家看到的每一帧的次数。

代码如下:

本人用三个字典类型的变量来进展计数。三个追踪本身早就见到的帧,另贰个追踪全部完全一样的帧。当自身每一个浏览每一帧时,首先检查以前是还是不是看过这一帧。若无,则把这一帧增添到作者已看过的帧字典中(见下边包车型地铁seen_frames)。尽管原先看过这一帧,则将它增多到另三个字典(dup_frames)的列表中,这几个字典包蕴了别的同等的帧。

图片 3

代码如下:

这段代码在本人的macbook pro上跑了大约三个小时。 我们来寻访结果:

def find_duplicates():        # 载入视频文件        filename = 'video.mp4'        vid = imageio.get_reader(filename,  'ffmpeg')        all_frames = vid.get_length()            # 重复的帧保存在这里        seen_frames = {}        dup_frames = {}            for x in range(all_frames):            # 获取单个帧            frame = vid.get_data(x)                # 取帧的哈希值            hashed = hash(frame.tostring())                if seen_frames.get( hashed, None):                # 如果之前看到过这一帧,则添加到dup_frames中具有相同的哈希值的帧列表中                dup_frames[hashed].append(x)            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]  

图片 4

这段代码在本人的macbook pro上跑了大致二个钟头。 大家来拜候结果:

很好,结果看起来很直观,从下图中得以看到,帧5928与帧2048454一模一样,帧5936与帧2048462均等,由此及彼。让我们对视确认。

图片 5

图片 6

很好,结果看起来很直观,从下图中能够看到,帧5928与帧2048454一致,帧5936与帧2048462一致,就那样类推。让我们对视确认。

周全。所以,这一个录像断定是冒充的。 可是,帧相配的多少看起来实在太低了,值得存疑啊。 真的独有二十二个一律的帧吗?在一切24刻钟的录制中那25帧的长度几乎不到1分钟。我们来进一步看一下!

周全。所以,这些摄像肯定是伪造的。 可是,帧相称的数目看起来实在太低了,值得嫌疑啊。 真的唯有二十多个同样的帧吗?在全部24钟头的摄像中那25帧的长短大约不到1分钟。大家来更是看一下!

情状变复杂了

事态变复杂了

该程序的效应是显明一样的帧,那样笔者就能够理解录疑似在循环播放。让我们来探访上边两幅图像的后2秒的帧(帧5936

该程序的作用是鲜明同样的帧,那样本人就能够明白录制是在循环播放。让咱们来看看上面两幅图像的后2秒的帧(帧5936

  • 60和帧2048462 + 60)是什么样的。
  • 60和帧2048462 + 60)是怎么的。

等等…… 那多少个图像看起来是同等的啊!不过她们为何平素不标识为合营吗?大家能够把内部叁个帧减去另外二个帧来寻觅不一致之处。那么些减法是对每种像素的红、绿、蓝的值分别做减法。

等等…… 那多少个图像看起来是同一的哎!可是他们为啥一向不标识为协作吗?我们得以把内部一个帧减去其他多少个帧来找寻不一样之处。这些减法是对各种像素的红、绿、蓝的值分别做减法。

图片 7

图片 8

太好了,我们创建出了一个很酷的故障艺术!但是,实际上三个帧的差值仅仅是录像被核减后的两个帧的差距。由于通过了削减,原本同样的几个帧可能会受到噪音的熏陶而导致失真,进而在数值上不再同样(尽管它们在视觉上看起来是千篇一律的)。

太好了,大家创制出了八个很酷的故障艺术!但是,实际上八个帧的差值仅仅是录像被缩减后的五个帧的反差。由于通过了减弱,原本同样的四个帧大概会惨被噪音的影响而招致失真,进而在数值上不再同样(固然它们在视觉上看起来是均等的)。

对地点的求证总括一下,当本身将数据存款和储蓄在字典中时,小编取了种种图像的哈希。哈希函数将图像转变为整数。纵然八个图像完全同样,则哈希函数将赢得相同的平头。借使五个图像差异,大家将获取多个不等的平头。然而我们实际上想要的是,假设多个图像只是稍微分化,大家然依旧能赢得一致的平头。

对上边的表明总括一下,当本人将数据存款和储蓄在字典中时,我取了各种图像的哈希。哈希函数将图像(数组)转变为整数。如若多少个图像完全相同,则哈希函数将收获平等的整数。如若三个图像区别,我们将获得八个不等的大背头。不过我们实在想要的是,若是三个图像只是微微不一致,我们然仍旧能博得同样的子弹头。

简化大家的缩减难题

简化我们的削减难点

有三种分裂的哈希算法,各样都有刻意的使用情形。我们在此地就要看到的是感知哈希。与其它类型的哈希不一样的是,对于邻近在一起的输入,它们的感知哈希值是平等的。反向图像找寻网址醒目使用的是看似的本事,那几个网址只是抓取他们蒙受的网络和哈准备像。由于同一张图片在互联英特网或者存在多样不一致的分辨率和剪裁,所以检查其他兼具同等哈希值的事物则更上一层楼有利。

有两种不相同的哈希算法,种种都有特意的应用处境。大家在此处就要看到的是感知哈希。与其余品种的哈希不一致的是,对于临近在协同的输入,它们的感知哈希值是一样的。反向图像搜索网站醒目使用的是近乎的技术,那一个网址只是抓取他们碰到的网络和哈安顿像。由于同一张图纸在互联互连网恐怕存在八种差异的分辨率和剪裁,所以检查其余全体同等哈希值的东西则越是便利。

唯独,对于大家来讲,又有新的难为了,因为大家管理的并不完全部是图像,而是一多种的图像,每一张图片都以偏离半数0秒。那象征我们的哈希函数必要:

而是,对于我们的话,又有新的劳累了,因为我们管理的并不完全部都以图像,而是一文山会海的图像,每一张图片都以偏离53%0秒。那意味大家的哈希函数须要:

  • 足足的宽大,五个仅因为压缩而发生噪音的帧的哈希值是一律的
  • 足足的利落,七个相邻帧的哈希值是例外的 那或许很复杂。
  • 足足的不严,八个仅因为压缩而发生噪音的帧的哈希值是同样的
  • 足足的利落,五个相邻帧的哈希值是差别的

均值哈希的参数选拔

那也许很复杂。

本身要品尝使用的哈希算法称为均值哈希。在网络能找到比较多的音信,它的管理进程一般是如此的:减弱图像分辨率,调换为灰度图,然后取哈希值。通过降低分辨率,大家得以去掉噪声的熏陶。但是,大家冒着相邻帧可能会被标志为重复帧的高危害,因为它们是相似的。通过调节分辨率能够稍稍化解这些标题。

均值哈希的参数选择

上边,笔者分别以分辨率8x8和64x64显得均值哈希的结果。8x8看起来降采集样品的太多了,大家错失了太多的音信,仿佛大大多图像看起来都是同等的了。对于64x64,它看起来和原先的图像没什么两样,两个之间恐怕未有丰盛大的区分来忽略压缩发生的噪声。

笔者要尝试运用的哈希算法称为均值哈希(aHash)。在英特网能找到很多的音信,它的管理进程一般是这么的:降低图像分辨率,转变为灰度图,然后取哈希值。通过收缩分辨率,咱们得以去掉噪声的震慑。然则,我们冒着相邻帧只怕会被标志为再度帧的高危害,因为它们是形似的。通过调治分辨率能够稍稍消除这么些难点。

图片 9

上边,作者分别以分辨率8×8和64×64来得均值哈希的结果。8×8看起来降采集样品的太多了,大家失去了太多的音信,就好像大好些个图像看起来都是完全一样的了。对于64×64,它看起来和原本的图像没什么不一致,两个之间可能未有丰富大的界别来忽略压缩发生的噪音。

为了找到适合我们的分辨率,小编试着在两段类似的录制中通过安装一多种差异的分辨率来寻觅匹配项。再次来到的极其项将出现在以下输出中:

图片 10

  • [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帧。

为了找到适合大家的分辨率,小编试着在两段类似的摄像中经过设置一种类不一致的分辨率来索求相称项。重回的协作项将面世在偏下输出中:

图片 11

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

好的,看起来64太极端了,大家大致从来不一个桶在那或多或少上。另一方面,在图片的左侧,桶的高低(Bucket Size)有二个爆炸点,个中拥有的帧都被检验为重新的。那一个爆炸点仿佛是在20左近。从最大桶的大大小小(马克斯Bucket Size)那根曲线来看,20的要命数分公司就像有一点点意外。为了反驳这一段英特网海广播台频,笔者也只愿意做到那个了,那么,让大家一道去探访把分辨率设置为24后取哈希的图景呢。

上述的解释是,第8帧和第108帧一样。第9帧和第109帧同样,但分化于8、108。第10、11、110、111帧与别的帧都不可同日而语,但彼此同样。这种景色很有非常大概率爆发,因为算法并不周密,临时也会搅乱,认为三个相邻的帧是一致的。大家看看下边那多少个数字:

结果

自身把原先的哈希函数换到了那些新的均值哈希函数,并再次总计深入分析。瞧,出现了太多的匹配帧!相称帧太多了,无法全部出示出来,这里我显得了同等桶中的一些多少:

  • 4262
  • 72096
  • 124855
  • 132392
  • 147466
  • 162540
  • 170077
  • 185151
  • 207762
  • 252984

etc… 那几个都以我们找到的再次帧。将它们转变为概况的时光戳(以秒为单位,译者注:录像链接指向YouTube网站,请科学上网):

好极了!

假令你想要查看这一个再一次的职位,你能够看看这段录制剪辑。它恰恰发生在掌掴的中等! 虽说不必然能确定保证每一个相配帧都能找到,可是那比大家此前做的要详细得多,小编感到那早已够好了。

本身并不曾跟随那几个YouTube客商,所以自身不通晓这么些录疑似二个里边笑话照旧别的什么,但这纯属是三个有趣的种类。

  • 有多少个门户大概的桶?从上面能够看到,有3个。
  • 每一个桶中的平均帧数是不怎么?平均值为(2 + 2 + 4)/ 3 = 2.7。
  • 装有桶中最多的帧是有个别? 4。

这里的目的是获得大批量的桶(第多个数字),何况每一个桶内的帧数尽恐怕的少(平均或最差景况)。理论上的话,由于自己正在看的这段摄像有1个巡回,所以每桶应该独有2帧。

图片 12

好的,看起来64太极端了,大家差非常少比较少个桶在这或多或少上。另一方面,在图纸的左侧,桶的深浅(Bucket Size)有四个爆炸点,个中具有的帧都被检查实验为重复的。这几个爆炸点就好像是在20紧邻。从最大桶的高低(马克斯Bucket Size)那根曲线来看,20的不行数办事处就像是有些不敢相信 无法相信。为了反驳这一段网络海电台频,笔者也只愿意做到那一个了,那么,让大家共同去走访把分辨率设置为24后取哈希的情形吧。

结果

小编把原先的哈希函数换来了这几个新的均值哈希函数,并再次总括深入分析。瞧,出现了太多的相称帧!相称帧太多了,不能够全体出示出来,这里作者出示了一样桶中的一些数量:

  • 4262
  • 72096
  • 124855
  • 132392
  • 147466
  • 162540
  • 170077
  • 185151
  • 207762
  • 252984
  • etc…

那些都以大家找到的双重帧。将它们转变为大意的时刻戳(以秒为单位,译者注:录制链接指向YouTube网址,请科学上网):

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

好极了!

假若您想要查看这么些再度的职位,你能够看看这段录像剪辑。它恰恰爆发在掌掴的高级中学级! 虽说不必然能保险每种相称帧都能找到,不过那比大家之前做的要详细得多,小编觉着那早就够好了。

自身并未订阅那个YouTube客商,所以自个儿不明了这些摄疑似一个之中笑话依旧别的什么(它发表于12月1日),但这相对是贰个妙不可言的门类。

【编辑推荐】

编辑:编程技术 本文来源:何以用Python检查实验伪造的录像,用Python达成检

关键词:

  • 上一篇:没有了
  • 下一篇:没有了