首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

高阶实战 | 如何用Python检测伪造的视频

我用两个字典类型的变量来进行计数。一个跟踪我已经看到的帧,另一个跟踪所有完全相同的帧。当我逐个浏览每一帧时,首先检查以前是否看过这一帧。...代码如下: 这段代码在我的macbook pro上跑了大约一个小时。...然而,帧匹配的数量看起来实在太低了,值得怀疑啊。 真的只有25个相同的帧吗?在整整24小时的视频中这25帧的长度几乎不到1秒钟。我们来进一步看一下!...这意味着我们的哈希函数需要: 足够的宽松,两个仅因为压缩而产生噪声的帧的哈希值是相同的 足够的灵敏,两个相邻帧的哈希值是不同的 这可能很复杂。...对于64×64,它看起来和原来的图像没什么不同,两者之间可能没有足够大的区别来忽略压缩产生的噪声。 为了找到适合我们的分辨率,我试着在两段类似的视频中通过设置一系列不同的分辨率来寻找匹配项。

1.4K50

一个小程序引发的思考

5; } } class MyClass { public int val = 20; } } 呵呵,大家看了以后可能会感觉这不是很简单的代码吗...有什么特别的地方吗?没有,真没有!但是我想问下大家这两次输出结果会有什么不同吗?分别是什么?有没有得出两次结果都是一样的?这个程序输出的结果是: ?     可能有些童鞋可能会问,不应该是一样的吗?...值类型与引用类型(这个面试的时候经常会被问到)     值类型:值类型只需要一段单独的内存,用于存储实际的数据,他存在栈里面     引用类型:引用类型需要两段内存。...CLR的自动GC在判断出程序的代码不会再访问某些数据时,自动清除无主的堆对象。我们因此可以不用操心这项使用其它编程语言时非常容易出错的工作了。      ...因为s是引用类型所以引用被复制,结果实参和形参都引用堆中的同一个对象。 因为i是值类型,所以值被复制,产生了一个独立的数据项。 在方法的结尾,f2和对象f1的字段都被加上5.

67740
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何用Python检测视频真伪?

    我们想看看视频中是否有多个帧出现了多次,有一个方法,就是计算我们看到的每一帧的次数。 我用两个字典类型的变量来进行计数。一个跟踪我已经看到的帧,另一个跟踪所有完全相同的帧。...所以,这个视频肯定是伪造的。 然而,帧匹配的数量看起来实在太低了,值得怀疑啊。 真的只有25个相同的帧吗?在整整24小时的视频中这25帧的长度几乎不到1秒钟。我们来进一步看一下!...这意味着我们的哈希函数需要: 足够的宽松,两个仅因为压缩而产生噪声的帧的哈希值是相同的 足够的灵敏,两个相邻帧的哈希值是不同的 这可能很复杂。...对于64x64,它看起来和原来的图像没什么不同,两者之间可能没有足够大的区别来忽略压缩产生的噪声。 为了找到适合我们的分辨率,我试着在两段类似的视频中通过设置一系列不同的分辨率来寻找匹配项。...虽说不一定能保证每个匹配帧都能找到,但是这比我们以前做的要详细得多,我认为这已经够好了。

    1.5K30

    ES6 参数默认值引起的中间作用域

    第二个需要明确的地方是:上面代码中,存在全局作用域、参数作用域、函数作用域,并且这三者的关系如图: image.png 明确这两点之后开始来分析结果。...后面在全局访问 x 时也同理,因为全局已经有这个 x 的声明,所以就把它打印出来,为 1。 事情到这里其实问题不大,直到后面遇到了两段代码,对于输出无法理解。...如果在同一作用域中用 let 重复声明一个变量,则确实会报错,但是根据上面的分析,这里其实是不同的两个作用域,按道理说不应该报错。为什么会报错呢?...根据 @紫云飞 老师的说法,这其实是出于合理情况的考虑 —— 这里就应该报错。...可以肯定的是,这里访问的一定是函数体的 x,那么它为何会有值 2 呢,难道它默认会有一个值吗?

    53430

    Go和Java的性能对比,真的如此吗?

    的性能吗,难道?...arr[k] arr[k] = arr[k+1] arr[k+1] = temp } } } } 我们分别执行以下这两段代码...解密开始 仔细观察两段代码,其实是有一些细微区别的,有时候一点点的细微区别导致的结果千差万别,甚至让你得出一个错误结论从而误导你,看下面Go的代码,这个代码片段是在Sort方法中出现的,我们看到有一个arr...,我们对这两段代码做反编译分析,写一个main.go文件,在main函数中分别调用两个排序函数,然后执行这个命令:go tool compile-m main.go,得到结果如下,其中第一个圈红的是修改前的代码...网上也有很多实验来说明Go的性能是Java的好几倍,希望你见到时好好思考一下,这个测试是客观的吗?为什么会出现这个我意料之外的结果?

    1.3K20

    NoneType 的实现,原因和细节

    这解释了很多问题,因为涉及 Python 中的 None 的大多数错误都会产生 AttributeError,而不是产生某种特殊的“NoneError”或类似错误。...我一直认为学习新语言特性的最好方法就是使用它,所以我尝试在 IDLE 中实例化 NoneType:>>> n = NoneType()这产生了一个错误:Traceback (most recent call...这并不是我预期的结果。我尝试使用 dis 来获取有关 NoneType 的更多信息,但是当我调用以下代码时:>>> dis.dis(type(None))它没有产生任何输出。...以下是我想问的问题:为什么 n 与 None 是完全相同的对象?为什么语言被设计成 n 与 None 是完全相同的对象?如何用 Python 实现这种行为?...总的来说,None 和 NoneType 是 Python 语言中用来表示空值和缺省状态的重要部分,理解它们的工作方式有助于编写更清晰、更健壯的代码。

    14710

    JVM垃圾收集之——怎样判定一个对象是不是垃圾

    那Java是使用的这一种垃圾回收方法吗?...但如果按照引用计数算法,两个对象之间其实还存在着互相引用,即引用计数器的值为1,也就是说本来不应该被回收,所以这里使用的显然就不是引用计数算法。...7.反映Java虚拟机内部情况的JMXBean、JVMTI中注册的回调、本地代码缓存等。 我们研究的一直都是怎么让一个对象去死,但是 3一个对象真的非死不可吗?...{ SAVE_HOOK.isAlive(); } else { System.out.println("once, i am dead :("); } // 下面这段代码与上面的完全相同...另外一个值得注意的地方是,代码中有两段完全一样的代码片段,执行结果却是一次逃脱成功,一次失败,这是因为任何一个对象的finalize()方法都只会被系统自动调用一次,如果对象面临下一次回收,它的finalize

    34130

    用functools.lru_cache实现Python的Memoization

    Python被称作“内置电池(batteries included)”,这意味着Python捆绑了大量常用的库和模块,这些只需要一个import声明!...一旦你认识到什么时候使用lru_cache,你只需几行代码就可以快速加快你的应用程序。 我们再来看看我们的斐波那契数列示例。...我再一次使用该timeit模块来运行一个简单的基准测试,以便了解这种优化对性能的影响: 您可能想知道,为什么我们这次能够以更快的速度获得第一次运行的结果。第一次运行缓存不应该是 “冻结”的吗?...源代码中看到的一样。...还有一个typed布尔参数可以设置为True告诉缓存,不同类型的函数参数应该分开缓存。例如,fibonacci(35)和fibonacci(35.0)将被视为产生截然不同结果的不同调用。

    99590

    应对变化

    这思路就是袁英杰提出的正交设计,有四大策略 四大策略 策略一:消除重复 重复代码,不管接手老项目还是住持新项目,都特别重视重复代码的比率,为什么呢?...、低耦合原则,从而会大幅提升软件的长期维护成本;而我们所求的高内聚是指关联紧密的事物放在一起,两段完全相同的代码关联最为紧密,重复就意味着低内聚 更糟糕的是,本质重复的代码,都在表达同一项知识。...0意味着当一个需求还没有出现时,我们就不应该在系统中编写一行针对它的代码。 1意味着某种需求已经出现,我们只需要使用最简单的手段来实现它,无需考虑任何变化。...策略三:缩小依赖范围 前面两个策略解决了软件单元如何划分问题,现在需要关注合的问题:模块之间的粘合点API的定义 ? •首先,客户和实现模块的数量,会对耦合度产生重大的影响。...里氏替换原则强调的是,一个子类不应该破坏其父类与客户之间的契约。唯有如此,才能保证:客户与其父类所暴露的接口(即API)所产生的依赖关系是稳定的。子类只应该成为隐藏在API背后的某种具体实现方式。

    63830

    你的手写 new 实现足够严谨吗?

    在开始阅读这篇文章之前,你可以对比下面这两段代码的输出结果是否一致(假设 myNew 是你自己实现的 new 操作): function F(){} F.prototype = null const obj1...基本上,上面代码的实现没有什么问题,但是我突然产生了一个疑问:当第一个参数是 null 的时候,Fn.prototype = proto 已经把构造函数的原型对象设置为 null了,为什么后面还要在判断第一个参数为...这两个语句的作用难道不是一样的吗?毕竟 Fn.prototype 和 obj.__proto__ 都是指向同一个原型对象呀!...Fn.prototype 还恰好就是 null 的话,就会导致实例的 __proto__ 也是 null,这和 new 的实际实现是有出入的。...所以,如果想实现一个更加严谨的 new,那么就不应该在内部去调用 Object.create 方法,而应该选择手动创建一个对象并和构造函数建立原型关系,同时,我们还应该加入对构造函数原型的类型判断,看它到底是不是一个对象

    52510

    Java 枚举查找并不抛异常的实现

    异常不应该用于控制流,并且这样可能会有一些性能影响。不要偷懒。你必须用正确的方式去做。 ? ? 在 GitHub 上查看。...没错,它会迭代所有枚举,直到找到匹配的枚举或返回null——最坏的情况下需要n次,其中n就是枚举值的数量。有些人可能会认为这微不足道,这是过早优化了而已。但是,数据结构和算法是CS基础。...这会大大提高性能吗?不,但它是一个很好的习惯。在面试候选人时,你会对线性复杂度搜索算法感到满意吗?此时,你不应该让这样的代码审查通过。 ? ? ?...基本说来,这段代码将创建一个全局的静态地图,并以Enum的类名称键入,并将其用于查找。 ? ? ? 通过字段的进一步索引 这个完全相同的方法可以用于枚举的其他字段。...通过字段索引的静态Map(较优) 我们不能在这里利用Guava,因为对于静态索引创建唯一的全局密钥将是一件困难的事。但是,这并不意味着我们没有帮手! ?

    2.3K30

    关于架构设计的易变性,应该如何理解呢?

    一、架构设计分层 通常情况下,我们的架构设计图大概率会如下图这个样子了,首先声明一点,这其实并没有什么不妥的,这也是很典型的分层设计啦~ 关于各个分层的具体描述,就简单的来聊聊吧。...下面的两个流程是完全相同的,只是在第二步使用的活动不一样,如果 B 和 D 干的是同一件事情,那么 B 和 D 应该被封装进同一个 Engine 中。...开发架构有很大的灵活性,不过显然会导致层与层之间互相耦合,层内的横向调用也会导致层内的相互耦合,这样的项目是没法维护的。 作者认为产生横向调用是因为架构按照功能分解的恶果之一。...在增加新的需求时,应该不太需要变更架构,这才说明这套架构设计对了。 系统中的功能是集成的结果,而不是实现的结果。...福利:关注公众号回复关键字:重构,即可免费获取《重构:改善既有代码的设计》 ·················· END ··················

    63430

    未闻Code·知识星球周报总结(九)

    之前发了一篇关于Python的black库格式化代码的文章一日一技:如何用一行命令格式化 Python 代码?,有人问:Pycharm就能格式化代码,为什么还要这个第三方库呢?...同理,如果你希望所有人在开发代码的时候,使用类型标注,并且不准给一个变量赋值不同类型的数据,你不应该在文档或者早会上面反复强调。你应该在ci里面使用mypy。...然后 for g in result: print(g) 2 提问:1.在做获取试卷的爬虫,网站A和网站B的某一套试卷可能会相同(但试卷标题和试卷内容不会完全相同),爬虫A的内容存到了Mongo...点击空白处查看答案 如果你可以一条一条分开,可以分别把他们读到Python的两个set里面。然后做交集就是相同的,做差集就是不同的。...我应该去改动什么设置来改变这种情况吗? 点击空白处查看答案 可以开pycharm的调试模式,跟踪一下请求,看看哪几行代码一直在重复运行。

    46330

    迪米特法则与重构

    (payment); } else { //money not enough } } } 让我们将PaperBoy中charge()方法的代码翻译成这幕小话剧的对白...了解最小的知识,就意味着依赖最小,彼此产生的影响就会最小。这实际上是KISS(keep it simple and stupid)原则的体现。...注意,charge()行为仍然属于PaperBoy的职责,因此我们不应该将该方法整体搬迁到Customer中,而应该先进行方法的提取: ?...提取的pay()的方法体与charge()方法完全相同,但是在PaperBoy类中却保留了charge()方法,只是这个方法什么也没有做,在接收方法请求后,转而将请求委派给了pay()方法。...所谓m1().m2().m3().m4()的调用,其实是调用者不需要也不想知道的“知识”,把这些中间过程的细节暴露出来没有意义,调用者关心的是最终结果;而上述代码中的map()与filter()等方法其实返回的还是

    50260

    【AI大模型】Embedding模型解析 文本向量知识库的构建和相似度检索

    结果存储 嵌入向量生成后,需要将它们存储起来以便于后续的检索和分析。...余弦相似度是一种用来衡量两个向量方向上的相似性的方法。在文本分析中,它常用于比较两段文本的语义相似性。...这个比例的本质是测量两个向量之间夹角的余弦值,范围从-1到1: 当余弦值为1时,表示两个向量方向完全相同。 当余弦值为0时,表示两个向量正交,即在高维空间中不相关。...在文本相似度测量中,如果两个文本的向量化表示在方向上更接近,它们的余弦相似度就更高,这意味着它们在语义上更相似。因此,通过计算向量之间的余弦相似度,我们可以有效地评估两段文本的相似性。...", "Programming in Python is fun and versatile." ] # 输入文本 input_text = "Python is" # 执行查找 top_similar_texts

    8.7K00

    每日算法系列【LeetCode 1031】两个非重叠子数组的最大和

    提示 L >= 1 M >= 1 L + M <= A.length <= 1000 0 <= A[i] <= 1000 题解 这题意思就是找到两段给定长度的、不重合的、连续的区间,使得两段区间和最大。...因为长度是给定的,所以我们只需要预处理好前缀和 sum ,然后给定区间右端点,就可以直接算出区间和。那么如果枚举两段区间的右端点,时间复杂度也才 ,极限情况下也就 1e6 左右,貌似也还可以接受。...那有没有更快的方法呢?试试动态规划!因为两段区间有前后顺序,我们不妨假设长度为 L 的区间在后面。用 dpm[i] 表示前 i 个数中长度为 M 的区间和的最大值。...] 吗?...其实当我们遍历长度为 L 的区间时,长度为 M 的区间不用每次都重新遍历,可以重复利用之前的结果,每次向右移动直到和长度为 L 的区间衔接上为止。

    1.1K20

    生物学家与计算机科学家合作的十条原则

    虽然有些事情您不应该妥协,比如记录您的代码,但是您的脚本真的有必要在5分钟而不是15分钟内完成吗?此脚本多久运行一次,由多少人运行?如果您加快速度,它们将累计节省多少时间?...与速度更快的低级C代码相比,其他科学家可能更愿意重用您的高级Python代码。请注意,在这里,我不是在谈论可能会由同样多的用户运行数千次的软件。...代码审查(其他人检查您的代码并指出不一致和错误)不应该是一种令人不舒服的做法,而应该像在CS和工程中一样成为一个标准过程。学会感激有人愿意查看您的代码并对其进行测试。...规则9:沟通如何验证您的协作结果 你们的合作会有什么结果?你将如何验证计算机科学家将产生的数据?尽早确定这一点很重要,这样合作者才能清楚地了解湿实验室验证的可能性和可行性。...你只对少数几个自信十足的候选人感兴趣吗?你能验证数以百计的调查结果吗?讨论这一点也可能增加合作中的个人投资,因为对计算机科学家来说,验证自己的发现通常是令人满意的。

    63710

    依赖倒置,控制反转,依赖注入 其实很简单

    本篇可以帮你理清这几个关键词的意义,重新梳理自己的思想。 什么是依赖倒置呢? 上层模块不应该依赖于底层模块,它们都应该依赖于抽象 初学者看到这句解释,估计都想骂人了。...听起来很高大上,我直接用两段代码一探究竟吧: public class Test { public static void main(String[] args) { Teacher...直接不会用接口对象吗。...this.iMotion = iMotion; } public void play() { iMotion.play(); } } 大多数同学肯定又要喊了,这不就是我经常写代码时的版本吗...上面的demo虽然看起来很简单,但是大家关注的点不应该在缺陷的demo上,而应该在代码的过渡上面,我们现在看这些操作,觉得很简单,那是因为我们已经写了太多业务代码,设计模式肯定经常涉及,所以觉得不难。

    28510

    巧用ClickHouse快速判断两个集合的相似度

    AS sh2, ngramSimHash('传统的hash算法只负责将原始内容尽量均匀随机地映射为一个,原理上相当于伪随机数产生算法。')...AS sh3, ngramSimHash('SimHash本身属于一种局部敏感哈希算法,它产生的Hash签名在一定程度上可以表征原内容的相似度。')...从哈希值直观的来看,sh1 和 sh2 是两段完全相同的文本,而 sh3 和 sh4 与 sh1 是有差异的,但是直接通过哈希值我们并不能判断它们的相似程度,这个时候就需要利用海明距离了。...AS sh3, ngramSimHash('SimHash本身属于一种局部敏感哈希算法,它产生的Hash签名在一定程度上可以表征原内容的相似度。')...从结果可得知: sh1 和 sh2 的海明距离是0,所以它们没有差异; sh1 和 sh3 的距离是3,根据经验,距离在3以内的两段文本相似度就算很高了; sh1 和 sh4 的距离是10,远大于3,

    2.5K20
    领券