背景
完全一样的视频可以通过MD5判断,但视频可能因为压缩格式、缩放、明暗、尾部截断导致非完全一致,故需要对视频帧进行重复检测。非常相似定义:缩放、亮度、帧率、水印、格式变换等造成的视频差异(旋转的效果不佳)。本文采用一秒一帧切帧,对每帧提取Phash(perceptual hash algortihm 感知hash算法)值,进行相似度对比。
PHash简介
用于提取图像指纹
- 缩放为32*32的小图
- 转为灰度图, Gray = R0.299 + G0.587 + B*0.114
- DCT离散余弦变换,只保留左上角8*8的部分
- 求均值,根据均值二值化,变成64位01串
步骤
- 下载视频
- 获取视频帧,间隔为24帧(一般为1s)
- 每帧提取phash特征,补齐64位拿到指纹
- 指纹间求汉明距离 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 =

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

被折叠的 条评论
为什么被折叠?



