File size: 2,472 Bytes
c705b37 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
from pathlib import Path
from sklearn.cluster import DBSCAN
import numpy as np
import json
class DataHub:
def __init__(self, video_analysis_json_path: str):
print("DataHub inicializando con JSON:", video_analysis_json_path)
self.video = json.loads(Path(video_analysis_json_path).read_text(encoding='utf-8'))
class get_face_clusters:
def __init__(self, data: DataHub):
self.data = data
def get_clusters(self, eps: float, min_samples: int):
caras = self.data.video.get("caras", {})
embeddings_caras = []
for cara in caras:
embeddings_caras.append(cara['embeddings'])
X = np.array(embeddings_caras)
clustering = DBSCAN(eps=eps, min_samples=min_samples, metric='euclidean').fit(X)
labels_caras = clustering.labels_
print(labels_caras)
return labels_caras
class get_voices_clusters:
def __init__(self, data: DataHub):
self.data = data
def get_clusters(self, eps: float, min_samples: int):
voices = self.data.video.get("voices", {})
embeddings_voices = []
for voice in voices:
embeddings_voices.append(voice['embeddings'])
X = np.array(embeddings_voices)
clustering = DBSCAN(eps=eps, min_samples=min_samples, metric='euclidean').fit(X)
labels_voices = clustering.labels_
print(labels_voices)
return labels_voices
class get_scene_clusters:
def __init__(self, data: DataHub):
self.data = data
def get_clusters(self, eps: float, min_samples: int):
scenes = self.data.video.get("escenas", {})
embeddings_scenes = []
for scene in scenes:
embeddings_scenes.append(scene['embeddings'])
X = np.array(embeddings_scenes)
clustering = DBSCAN(eps=eps, min_samples=min_samples, metric='euclidean').fit(X)
labels_scenes = clustering.labels_
print(labels_scenes)
return labels_scenes
video = "dif_catala_1_2"
analysis_path = f"/home/acasado/bsc/proyecto_bsc/{video}/analysis.json"
datahub = DataHub(analysis_path)
face_clusterer = get_face_clusters(datahub)
voice_clusterer = get_voices_clusters(datahub)
scene_clusterer = get_scene_clusters(datahub)
labels_caras = face_clusterer.get_clusters(eps=0.4, min_samples=2)
labels_voces = voice_clusterer.get_clusters(eps=1.3, min_samples=1)
labels_escenas = scene_clusterer.get_clusters(eps=1.3, min_samples=2) |