Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Programa – Lê vídeo e gera Excel com medidas das emoções
Carlos Alberto Gonçalves
BH – Junho 2024
Prompt
Elabore um programa Python que Leia um vídeo com expressões faciais Facial Action Coding System (FACS). Siga as seguintes instruções:
(i)Faça um pedido de download do vídeo com a seguinte pergunta “Baixe o Vídeo:” e, em seguida armazene o vídeo para os cálculos, avaliação;
(ii) calcule o tempo do vídeo em segundos e informe a “Duração do Vídeo em Segundos:”
(iii) solicite como parâmetro o número de frames desejados para as medidas das emoções básicas (medo, nojo, raiva, surpresa, alegria, Neutra e tristeza.) em que serão medidas as emoções básicas universais. Essa medida será repassada em segundos também. Px exemplo, se o vídeo durar 60 segundos e o número de frames for como entrada 5 segundos, o número de frames será de 60/5 ou 12 frames de medida das emoções básicas, se for 10 segundos teremos 6 frames e assim por diante;
(iv) as emoções serão medidas pelas intensidades das FACS (tipos de músculos faciais identificados no evento) sendo a escala de variações medidas entre 0,000 até 1,000 (decimais) conforme a intensidade da emoção no frame gerando uma planilha excel que que cada coluna contém as emoções e suas medidas e nas linhas o número do frame correspondente. Medir os diferentes movimentos dos músculos faciais que representa a ênfase para cada emoção no seu respectivo frame e colocar na tabela com precisão de 3 casas decimais;
(v) Claro que em cada frame comparecem simultaneamente todas as 6 emoções com diferentes medidas de intensidade entre 0,000 e 1,000. Portanto, a linha do frame terá um valor de intensidade conforme as FACS (intensidade dos movimentos da FACs) para cada emoção universal. 
(vi) Para explicar melhor a saída veja a tabela adote o template a seguir:
P
	Saida das emoções
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	Frames
	Alegria
	Medo
	Tristeza
	Nojo
	Raiva
	Surpresa
	Nojo
	Neutro
	1
	 0,234
	 0,200
	 0,000
	 0,003
	 0,600
	 0,002
	 0,002
	 0,001
	2
	 0,002
	 
	 
	 
	 
	 
	 
	 
	3
	 
	 
	 
	 
	 
	 
	 
	 
	4
	 
	 
	 
	 
	 
	 
	 
	 
	....
	 
	 
	 
	 
	 
	 
	 
	 
	n
	 
	 
	 
	 
	 
	 
	 
	 
	Médias
	x1
	x2
	 
	 
	 
	 
	 
	...
	DesviPad
	d1
	d2
	 
	 
	 
	 
	 
	...
(vii) após Analises baixar a planilha Excel
(viii) após baixar a planilha Excel perguntar se deseja continuar com o S (Sim) ou N (Não). Se o usuário responder S deve-se voltar para ler novo vídeo e continuar o processo gerando nova saída excel e assim continuamente até o usuário responde N, ou quit.
Funciona para o Google Colaborative
Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
import os
import cv2
import pandas as pd
from deepface import DeepFace
def is_colab():
 try:
 import google.colab
 return True
 except ImportError:
 return False
def download_video():
 if is_colab():
 from google.colab import files
 uploaded = files.upload()
 for filename in uploaded.keys():
 return filename
 else:
 return input("Digite o caminho do vídeo: ")
def get_video_duration(video_path, default_frame_rate=30):
 cap = cv2.VideoCapture(video_path)
 frame_rate = cap.get(cv2.CAP_PROP_FPS)
 total_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
 
 if frame_rate == 0:
 print("Não foi possível obter a taxa de quadros do vídeo. Usando valor padrão de 30 FPS.")
 frame_rate = default_frame_rate
 
 video_duration = total_frames / frame_rate
 cap.release()
 return video_duration, frame_rate
def analyze_video(video_path, frame_rate, capture_interval, output_excel):
 cap = cv2.VideoCapture(video_path)
 total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
 
 video_duration = total_frames / frame_rate
 results = []
 for second in range(0, int(video_duration), capture_interval):
 frame_number = int(second * frame_rate)
 if frame_number >= total_frames:
 print(f"Frame número {frame_number} está fora do alcance do vídeo.")
 break
 cap.set(cv2.CAP_PROP_POS_FRAMES, frame_number)
 ret, frame = cap.read()
 if not ret:
 print(f"Não foi possível ler o frame no segundo {second}.")
 continue
 face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
 gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
 faces = face_cascade.detectMultiScale(gray_frame, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
 if len(faces) == 0:
 print(f"Nenhum rosto detectado no segundo {second}.")
 results.append([second, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000])
 else:
 for (x, y, w, h) in faces:
 face = frame[y:y+h, x:x+w]
 face_rgb = cv2.cvtColor(face, cv2.COLOR_BGR2RGB)
 try:
 print(f"Analisando frame no segundo {second}...")
 analysis = DeepFace.analyze(face_rgb, actions=['emotion'], enforce_detection=False)
 emotion_scores = analysis[0]['emotion']
 row = [second] + [
 round(emotion_scores.get('happy', 0.0) / 100, 5),
 round(emotion_scores.get('fear', 0.0) / 100, 5),
 round(emotion_scores.get('sad', 0.0) / 100, 5),
 round(emotion_scores.get('disgust', 0.0) / 100, 5),
 round(emotion_scores.get('angry', 0.0) / 100, 5),
 round(emotion_scores.get('surprise', 0.0) / 100, 5),
 round(emotion_scores.get('neutral', 0.0) / 100, 5)
 ]
 print(f"Resultado da análise no segundo {second}: Alegria: {row[1]}, Medo: {row[2]}, Tristeza: {row[3]}, Nojo: {row[4]}, Raiva: {row[5]}, Surpresa: {row[6]}, Neutro: {row[7]}")
 results.append(row)
 except Exception as e:
 print(f"Erro ao processar o segundo {second}: {e}")
 results.append([second, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000])
 cap.release()
 # Criação do DataFrame e cálculo da média e desvio padrão
 df = pd.DataFrame(results, columns=['Frames', 'Alegria', 'Medo', 'Tristeza', 'Nojo', 'Raiva', 'Surpresa', 'Neutro'])
 # Cálculo das médias e desvios padrões
 mean_row = pd.DataFrame([['Média'] + df.iloc[:, 1:].mean().round(5).tolist()], columns=df.columns)
 std_row = pd.DataFrame([['Desvio Padrão'] + df.iloc[:, 1:].std(ddof=1).round(5).tolist()], columns=df.columns)
 
 df = pd.concat([df, mean_row, std_row], ignore_index=True)
 
 df.to_excel(output_excel, index=False)
 print(f"Resultados salvos em {output_excel}")
 # Download do arquivo Excel se estiver no Colab
 if is_colab():
 from google.colab import files
 files.download(output_excel)
 print(f"Arquivo Excel {output_excel} baixado no diretório de downloads padrão.")
def main():
 while True:
 print("Baixe o Vídeo:")
 video_path = download_video()
 
 video_duration, frame_rate = get_video_duration(video_path)
 print(f"Duração do Vídeo em Segundos: {video_duration:.4f}")
 
 # Verifica a extensão do vídeo
 video_extension = os.path.splitext(video_path)[1].lower()
 if video_extension not in [".mp4", ".mkv", ".avi", ".mov", ".wmv"]:
 print(f"Formato de vídeo {video_extension} não suportado.")
 continue
 try:
 frame_rate = float(input("Digite a taxa de frames por segundo (FPS): ").strip())
 except ValueError:
 frame_rate = 30 # Valor padrão se a entrada for inválida
 print("Entrada inválida. Usando valor padrão de 30 FPS.")
 
 while True:
 try:
 capture_interval = int(input("Digite o intervalo de captura em segundos: ").strip())
 break
 except ValueError:print("Por favor, insira um número inteiro válido para o intervalo de captura.")
 output_excel = os.path.splitext(video_path)[0] + '.xlsx'
 
 analyze_video(video_path, frame_rate, capture_interval, output_excel)
 
 # Pergunta se deseja analisar outro vídeo após o download do Excel
 continuar = input("Quer processar outro vídeo? (S/N): ").strip().upper()
 if continuar != "S":
 print("FIM")
 break
if __name__ == "__main__":
 main()
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Resposta para o Vídeo07
	Frames
	Alegria
	Medo
	Tristeza
	Nojo
	Raiva
	Surpresa
	Neutro
	0
	0
	0,08020
	0
	0
	0
	0,941
	0,057
	4
	0
	0,24851
	0,038
	0
	0,692
	0,001
	0,023
	8
	0
	0,10712
	0,012
	0,001
	0,855
	0,003
	0,021
	12
	0
	0,02922
	0,084
	0
	0,746
	0
	0,14
	16
	0
	0,00600
	0,779
	0
	0,061
	0
	0,154
	20
	0
	0
	0
	0
	0
	0
	0
	24
	0
	0,00661
	0,193
	0
	0,8
	0
	0,006
	28
	0
	0,06603
	0,106
	0
	0,884
	0
	0,007
	32
	0
	0,00771
	0,53
	0
	0,456
	0
	0,014
	36
	0
	0
	0
	0
	0
	0
	0
	40
	0
	00
	0
	0
	0
	0
	0
	Média
	0
	0,07736
	0,158
	0
	0,409
	0,086
	0,038
	Desvio Padrão
	0
	0,076
	0,259
	0
	0,395
	0,284
	0,056
	 
	 
	 
	 
	 
	 
	 
	 
Ver consegue editar esse vídeo no youtube e salva-lo em mp4
https://www.google.com/search?client=firefox-b-d&q=tem+um+v%C3%ADdeo+mp4+de+duelo+do+Clint+Eastwood%3F#fpstate=ive&vld=cid:15c576ec,vid:HtoRQA-lUvs,st:0

Mais conteúdos dessa disciplina