欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python進行視頻相似度比較實例

 更新時間:2023年07月28日 11:09:43   作者:培根芝士  
這篇文章主要介紹了使用Python進行視頻相似度比較實例,本文通過漢明距離算法與圖片比較等方法對比兩個視頻流的相似度,文中提供了部分實現(xiàn)代碼與解決思路,需要的朋友可以參考下

Python視頻相似度比較

1、安裝依賴庫

pip3 install numpy
pip3 install opencv-python

2、獲取圖片哈希值

def pHash(img):
	# 縮放圖片為32x32灰度圖片
	img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
	img = cv2.resize(img, (32, 32), interpolation=cv2.INTER_CUBIC)
	# 創(chuàng)建二維列表
	h, w = img.shape[:2]
	vis0 = np.zeros((h,w), np.float32)
	vis0[:h,:w] = img
	# 二維Dct變換
	vis1 = cv2.dct(cv2.dct(vis0))
	vis1 = vis1[:8, :8]
	# 把二維list變成一維list
	img_list = vis1.flatten().tolist()
	# 計算均值, 得到哈希值
	avg = sum(img_list) * 1. / 64
	avg_list = [0 if i < avg else 1 for i in img_list]
	return avg_list

3、求漢明距離

def hanming_dist(s1, s2):
	return sum([ch1 != ch2 for ch1, ch2 in zip(s1, s2)])

4、輸入比較的兩個視頻流,返回是否相似。

幀相似度>=0.85返回True,否則返回False

def compare(video1: cv2.VideoCapture = None, video2: cv2.VideoCapture =None) -> bool:
	# 獲取較短視頻的幀數(shù)
	min_frame_count = min(video1.get(cv2.CAP_PROP_FRAME_COUNT), 
							video2.get(cv2.CAP_PROP_FRAME_COUNT))
	# 獲取視頻FPS
	fps1 = video1.get(cv2.CAP_PROP_FPS)
	similar = 0
	frame_cnt = int(min_frame_count / fps1)
	# 截幀
	for _ in range(frame_cnt):
		for _ in range(int(fps1)): # 按視頻一間隔1s
			retval1 = video1.grab()
			retval2 = video2.grab()
		if not retval1 or not retval2:
			grab_failure_cnt += 1
			if grab_failure_cnt >= 10:
				raise Exception('Grab failed too much >= {} times, could be endless loop.'.format(10))
		else:
			grab_failure_cnt = 0
		flag1, frame1 = video1.retrieve()
		flag2, frame2 = video2.retrieve()
		# 提phash特征
		if flag1 & flag2:
			phash1 = pHash(frame1)
			phash2 = pHash(frame2)
			# 比較漢明距離
			if hanming_dist(phash1, phash2) < 12:
				similar += 1
	print("similar:", similar/frame_cnt, frame_cnt)
	return similar / frame_cnt

5、調(diào)用示例

def compareVideo(srcVideo, dstVideo):
	video1 = cv2.VideoCapture(srcVideo)
	video2 = cv2.VideoCapture(dstVideo)
	return compare(video1, video2)

到此這篇關(guān)于使用Python進行視頻相似度比較實例的文章就介紹到這了,更多相關(guān)Python視頻相似度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python中pandas.DataFrame排除特定行方法示例

    python中pandas.DataFrame排除特定行方法示例

    這篇文章主要給大家介紹了關(guān)于python中pandas.DataFrame排除特定行的方法,文中給出了詳細的示例代碼,相信對大家的理解和學(xué)習(xí)具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Python 中使用正則表達式轉(zhuǎn)義

    Python 中使用正則表達式轉(zhuǎn)義

    這篇文章主要介紹了Python 正則表達式轉(zhuǎn)義,在 Python 中,正則表達式轉(zhuǎn)義sub()方法用于替換字符串,替換后的字符串由 re 模塊中的 Python 內(nèi)置方法返回,需要的朋友可以參考下
    2023-06-06
  • Python Learning 列表的更多操作及示例代碼

    Python Learning 列表的更多操作及示例代碼

    這篇文章主要介紹了Python Learning-列表的更多操作,需要的朋友可以參考下
    2018-08-08
  • python 輸出列表元素實例(以空格/逗號為分隔符)

    python 輸出列表元素實例(以空格/逗號為分隔符)

    今天小編就為大家分享一篇python 輸出列表元素實例(以空格/逗號為分隔符),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python中的logging模塊詳解

    Python中的logging模塊詳解

    這篇文章主要介紹了Python中的logging模塊詳解,默認情況下Python的logging模塊將日志打印到了標準輸出中,且只顯示了大于等于WARNING級別的日志,這說明默認的日志級別設(shè)置為WARNING,需要的朋友可以參考下
    2023-09-09
  • 深入理解Python中的內(nèi)置常量

    深入理解Python中的內(nèi)置常量

    這篇文章主要跟大家介紹了關(guān)于Python中內(nèi)置常量的相關(guān)資料,文中介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看吧。
    2017-05-05
  • 詳解Python的數(shù)據(jù)庫操作(pymysql)

    詳解Python的數(shù)據(jù)庫操作(pymysql)

    這篇文章主要介紹了Python的數(shù)據(jù)庫操作(pymysql),非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-04-04
  • python 讀txt文件,按‘,’分割每行數(shù)據(jù)操作

    python 讀txt文件,按‘,’分割每行數(shù)據(jù)操作

    這篇文章主要介紹了python 讀txt文件,按‘,’分割每行數(shù)據(jù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python機器學(xué)習(xí)實現(xiàn)神經(jīng)網(wǎng)絡(luò)示例解析

    python機器學(xué)習(xí)實現(xiàn)神經(jīng)網(wǎng)絡(luò)示例解析

    這篇文章主要為大家介紹了python機器學(xué)習(xí)python實現(xiàn)神經(jīng)網(wǎng)絡(luò)的示例解析,在同樣在進行python機器學(xué)習(xí)的同學(xué)可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 基于python3.7利用Motor來異步讀寫Mongodb提高效率(推薦)

    基于python3.7利用Motor來異步讀寫Mongodb提高效率(推薦)

    Motor是一個異步mongodb driver,支持異步讀寫mongodb。它通常用在基于Tornado的異步web服務(wù)器中。這篇文章主要介紹了基于python3.7利用Motor來異步讀寫Mongodb提高效率,需要的朋友可以參考下
    2020-04-04

最新評論