I'm developing a program that analyzes two videos and removes similar frames using opencv and saves it again, but I've tried a lot of things and the final part that analyzes the similarity and saves, but always a problem and I do not know where I'm going wrong.
import cv2
from skimage.measure import _structural_similarity as ssim
from time import sleep
caminho_video_1 = 'C:/Users\lourd\Videos/Alan Walker The Spectre[1].mp4'
caminho_video_2 = 'C:/Users\lourd\Videos/Bruno Mars The Lazy Song [OFFICIAL VIDEO].wmv'
ca1 = cv2.VideoCapture(caminho_video_1)
ca2 = cv2.VideoCapture(caminho_video_1)
lista_imagens = []
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('C:/Users\lourd\Videos\Captures/teste.avi',fourcc, 25.0, (640,480))
def compara(imageA, imageB):
s = ssim.compare_ssim(imageA, imageB)
return s
def analisa(imagem_A, imagem_B):
cont = True
maior_valor = 0
for imagem in imagem_B:
if cont == True:
maior_valor = compara(imagem_A, imagem)
cont = False
elif compara(imagem_A, imagem) > maior_valor:
maior_valor = compara(imagem_A, imagem)
return maior_valor
success2 = success1 = True
cont_frames_vid2 = cont_encerra_vid2 = cont_frame_vid1 = cont_encerra_vid1 = porcentagem = 0
while True:
success2, image2 = ca2.read()
if success2 == True:
image_resize2 = cv2.resize(image2, (400, 400), 2)
To_cinza2 = cv2.cvtColor(image_resize2, cv2.COLOR_BGR2GRAY)
lista_imagens.append(To_cinza2)
print('Video 2 frames carregados: ', cont_frames_vid2)
cont_frames_vid2 += 1
if success2 == False: #Não conheço bem o opencv e essa foi a melhor forma que eu consegui para sair do loop quando acaba os frames do video. Se alguém tiver uma dica agradeço
cont_encerra_vid2 += 1
if cont_encerra_vid2 > 40:
break
while True:
success1, image1 = ca1.read()
if success1 == True:
cont_frame_vid1 += 1
if success1 == False:
cont_encerra_vid1 += 1
if cont_encerra_vid1 > 40:
break
print(f' Frames carregados: Video1: {cont_frame_vid1}: Video2: {cont_frames_vid2}')
sleep(1)
print('Começando análise.')
sleep(2)
for c in range(cont_frame_vid1):
success1, image1 = ca1.read()
if success1 == True:
image_resize1 = cv2.resize(image1, (400, 400), 2)
To_cinza1 = cv2.cvtColor(image_resize1, cv2.COLOR_BGR2GRAY)
if analisa(To_cinza1, lista_imagens) < 70:
out.write(image1)
print(f'Salvando frame numero: {cont_frames_processo}, Progresso total: {porcentagem}%.')
porcentagem = (c / cont_encerra_vid1 * 100)
print('Fim.')
ca1.release()
ca2.release()