-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathExtractor_Personas.py
88 lines (69 loc) · 2.33 KB
/
Extractor_Personas.py
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
83
84
85
86
87
88
#########################################
# Detector y discriminador de objetivos #
#########################################
##############################
# You Only Look Once (YOLO) #
##############################
# https: // gilberttanner.com/blog/yolo-object-detection-with-opencv
# https://www.pyimagesearch.com/2020/01/27/yolo-and-tiny-yolo-object-detection-on-the-raspberry-pi-and-movidius-ncs/
import numpy as np
import tensorflow as tf
import cv2 as cv
from tensorflow.python.keras.api import keras
from tensorflow.keras import datasets, layers, models
from imutils.video import FPS
import Utiles
import Config
import Detector
def guardar_ROIs():
"""Guarda las imagenes de las personas en la carpeta de salida
Utiliza un closure como contador """
contador = 0
def closure(image, ROIs):
nonlocal contador
rects, probabilidades, tipos = ROIs
for rect, probabilidad, tipo in zip(rects, probabilidades, tipos):
cv.imwrite(
f"Salida/Objetivos/Objetivo {contador}.png",
Utiles.ROI_to_img(image, rect))
contador += 1
return closure
if __name__ == "__main__":
# DEBUG Prueba de las funciones (No se usara, Archivo usado como libreria)
titulo = "Extractor Personas"
dims = (0, 0)
# Config.Fullscreen(titulo)
out = None
# Para capturar la salida
if Config.VidProp.guardar:
from Config import VidProp
out = cv.VideoWriter(f"Salida/{titulo}.avi",
VidProp.fourcc, VidProp.fps, VidProp.resolu)
# print(out.get(2)) # TODO
# Abre el video y almacena las dimesiones
cap = cv.VideoCapture(Config.VidProp.source)
dims = Utiles.dimensiones_video(cap)
# Crea la red neural
modelo = Detector.genera_DNN()
# Extrae layers principales de YoLo
capas_conexion = Detector.capas_desconectadas(modelo)
labels = Detector.genera_labels()
colores = Detector.genera_colores(labels)
fps = FPS().start()
# Closure para guardar los objetivos en archivos
save_ROIs = guardar_ROIs()
while cap.isOpened():
ret, image = cap.read()
if not ret:
print('Video file finished.')
break
ROIs = Detector.prediccion(image, modelo, capas_conexion, labels)
save_ROIs(image, ROIs)
if Config.VidProp.show_fps:
Utiles.dibuja_FPS(image, fps)
cv.imshow(titulo, image)
if (cv.waitKey(1) & 0xFF == 27):
break
if Config.VidProp.guardar: Utiles.guardar(out, image)
cap.release()
if Config.VidProp.guardar: out.release()