feature: Add GNU/Linux and MacOS support

This commit is contained in:
2026-01-22 19:48:42 +01:00
parent 33930b0e79
commit 694ccc0edb

View File

@@ -14,6 +14,8 @@ import time
import math
import numpy as np
import json
import platform
import sys
# ===========================
# CONFIGURACIÓN
@@ -45,6 +47,15 @@ BG_COLOR = "#282c34"
TEXT_COLOR = "#abb2bf"
ACCENT_COLOR = "#61afef"
# Cross-platform video backend
V_BACKEND = cv2.CAP_ANY
if platform.system() == "Windows":
V_BACKEND = cv2.CAP_DSHOW
elif platform.system() == "Darwin": # macOS
V_BACKEND = cv2.CAP_AVFOUNDATION
elif platform.system() == "Linux":
V_BACKEND = cv2.CAP_V4L2
# ===========================
# CLASES DE UTILIDAD
# ===========================
@@ -550,12 +561,12 @@ class App:
self.btn_graph = tk.Button(self.controls_frame, text="Generar Gráfico", command=generate_graph, bg="#98c379", fg="black", font=("Helvetica", 10))
self.btn_graph.pack(side="left", padx=5)
self.log_text = scrolledtext.ScrolledText(window, height=8, bg="#21252b", fg="white", font=("Consolas", 9))
self.log_text = scrolledtext.ScrolledText(window, height=8, bg="#21252b", fg="white", font=("Courier", 9) if platform.system() != "Windows" else ("Consolas", 9))
self.log_text.pack(fill="x", padx=10, pady=5)
# Logic
# Usamos CAP_DSHOW en Windows para compatibilidad "Universal" (Mejor acceso a ajustes)
self.cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
# Usamos el backend apropiado según el sistema operativo
self.cap = cv2.VideoCapture(0, V_BACKEND)
# Configurar 1080p por defecto
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
@@ -830,8 +841,8 @@ class App:
if self.cap.isOpened():
self.cap.release()
# Reabrir con DirectShow para mantener compatibilidad universal
self.cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
# Reabrir con el backend apropiado
self.cap = cv2.VideoCapture(0, V_BACKEND)
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
@@ -1012,7 +1023,7 @@ class App:
try:
if self.cap.isOpened():
self.cap.release()
self.cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
self.cap = cv2.VideoCapture(0, V_BACKEND)
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
except: