视频相似性检测

视频相似性检测通常用于处理因压缩、缩放、亮度等因素导致非完全一致的视频。通过一秒一帧切取并使用PHash算法提取每帧的指纹,再进行相似度对比。PHash是一种图像指纹提取方法,包括缩放图像、转为灰度图、DCT变换、取均值二值化等步骤,最后计算汉明距离确定视频帧的相似度。

背景

完全一样的视频可以通过MD5判断,但视频可能因为压缩格式、缩放、明暗、尾部截断导致非完全一致,故需要对视频帧进行重复检测。非常相似定义:缩放、亮度、帧率、水印、格式变换等造成的视频差异(旋转的效果不佳)。本文采用一秒一帧切帧,对每帧提取Phash(perceptual hash algortihm 感知hash算法)值,进行相似度对比。

PHash简介

用于提取图像指纹

  1. 缩放为32*32的小图
  2. 转为灰度图, Gray = R0.299 + G0.587 + B*0.114
  3. DCT离散余弦变换,只保留左上角8*8的部分
  4. 求均值,根据均值二值化,变成64位01串

步骤

  1. 下载视频
  2. 获取视频帧,间隔为24帧(一般为1s)
  3. 每帧提取phash特征,补齐64位拿到指纹
  4. 指纹间求汉明距离 diff对有多少个,根据测试集调整阈值
# @Description: 比较两个视频是否非常相似
#               非常相似定义:缩放、亮度、帧率、格式变换等造成的视频差异(旋转的效果不佳)

import cv2
import numpy as np


def pHash(img):
    """
    get image pHash value
    """

    # 缩放图片为32x32灰度图片
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    img = cv2.resize(img, (32, 32), interpolation=cv2.INTER_CUBIC)

    # 创建二维列表
    h, w = img.shape[:2]
    vis0 = np.zeros((h,w), np.float32)
    vis0[:h,:w] = img

    # 二维Dct变换
    vis1 =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值