File size: 6,810 Bytes
2457274
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
#!/bin/bash

# ZenVision AI Subtitle Generator - Installation Script
# Instala todas las dependencias y modelos necesarios

set -e

echo "🚀 Instalando ZenVision AI Subtitle Generator..."
echo "=================================================="

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Function to print colored output
print_status() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# Check Python version
print_status "Verificando versión de Python..."
python_version=$(python3 --version 2>&1 | awk '{print $2}' | cut -d. -f1,2)
required_version="3.8"

if [ "$(printf '%s\n' "$required_version" "$python_version" | sort -V | head -n1)" = "$required_version" ]; then
    print_success "Python $python_version encontrado"
else
    print_error "Python $required_version o superior requerido. Encontrado: $python_version"
    exit 1
fi

# Check if running on supported OS
print_status "Detectando sistema operativo..."
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
    OS="linux"
    print_success "Sistema Linux detectado"
elif [[ "$OSTYPE" == "darwin"* ]]; then
    OS="macos"
    print_success "Sistema macOS detectado"
elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
    OS="windows"
    print_success "Sistema Windows detectado"
else
    print_warning "Sistema operativo no reconocido: $OSTYPE"
    OS="unknown"
fi

# Install system dependencies
print_status "Instalando dependencias del sistema..."

if [[ "$OS" == "linux" ]]; then
    if command -v apt-get &> /dev/null; then
        sudo apt-get update
        sudo apt-get install -y ffmpeg python3-dev python3-pip build-essential
        print_success "Dependencias de Ubuntu/Debian instaladas"
    elif command -v yum &> /dev/null; then
        sudo yum install -y ffmpeg python3-devel python3-pip gcc gcc-c++
        print_success "Dependencias de CentOS/RHEL instaladas"
    elif command -v pacman &> /dev/null; then
        sudo pacman -S --noconfirm ffmpeg python python-pip base-devel
        print_success "Dependencias de Arch Linux instaladas"
    else
        print_warning "Gestor de paquetes no reconocido. Instala manualmente: ffmpeg, python3-dev"
    fi
elif [[ "$OS" == "macos" ]]; then
    if command -v brew &> /dev/null; then
        brew install ffmpeg
        print_success "FFmpeg instalado via Homebrew"
    else
        print_warning "Homebrew no encontrado. Instala FFmpeg manualmente"
    fi
fi

# Create virtual environment
print_status "Creando entorno virtual..."
if [ ! -d "venv" ]; then
    python3 -m venv venv
    print_success "Entorno virtual creado"
else
    print_warning "Entorno virtual ya existe"
fi

# Activate virtual environment
print_status "Activando entorno virtual..."
source venv/bin/activate
print_success "Entorno virtual activado"

# Upgrade pip
print_status "Actualizando pip..."
pip install --upgrade pip setuptools wheel

# Install PyTorch with CUDA support if available
print_status "Detectando soporte CUDA..."
if command -v nvidia-smi &> /dev/null; then
    print_success "NVIDIA GPU detectada, instalando PyTorch con CUDA"
    pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu118
else
    print_warning "No se detectó GPU NVIDIA, instalando PyTorch CPU"
    pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu
fi

# Install Python dependencies
print_status "Instalando dependencias de Python..."
pip install -r requirements.txt
print_success "Dependencias de Python instaladas"

# Download spaCy models
print_status "Descargando modelos de spaCy..."
python -m spacy download en_core_web_sm
python -m spacy download es_core_news_sm

# Try to download additional language models
for lang in fr de it pt; do
    print_status "Intentando descargar modelo de spaCy para $lang..."
    python -m spacy download ${lang}_core_news_sm || print_warning "Modelo $lang no disponible"
done

print_success "Modelos de spaCy descargados"

# Download NLTK data
print_status "Descargando datos de NLTK..."
python -c "
import nltk
nltk.download('punkt')
nltk.download('stopwords')
nltk.download('vader_lexicon')
print('Datos de NLTK descargados')
"

# Create necessary directories
print_status "Creando directorios necesarios..."
mkdir -p ~/.zenvision/cache
mkdir -p ~/.zenvision/models
mkdir -p /tmp/zenvision
print_success "Directorios creados"

# Test installation
print_status "Probando instalación..."
python -c "
import torch
import whisper
import transformers
import gradio
import moviepy
import librosa
import cv2
import spacy
print('✅ Todas las librerías principales importadas correctamente')

# Test CUDA availability
if torch.cuda.is_available():
    print(f'✅ CUDA disponible: {torch.cuda.get_device_name(0)}')
else:
    print('⚠️ CUDA no disponible, usando CPU')

# Test Whisper
try:
    model = whisper.load_model('tiny')
    print('✅ Whisper cargado correctamente')
except Exception as e:
    print(f'❌ Error cargando Whisper: {e}')
"

# Create launcher script
print_status "Creando script de lanzamiento..."
cat > run_zenvision.sh << 'EOF'
#!/bin/bash
cd "$(dirname "$0")"
source venv/bin/activate
python app.py
EOF

chmod +x run_zenvision.sh
print_success "Script de lanzamiento creado: ./run_zenvision.sh"

# Display system information
print_status "Información del sistema:"
echo "  - Python: $(python --version)"
echo "  - PyTorch: $(python -c 'import torch; print(torch.__version__)')"
echo "  - CUDA disponible: $(python -c 'import torch; print(torch.cuda.is_available())')"
echo "  - Dispositivos CUDA: $(python -c 'import torch; print(torch.cuda.device_count())')"

# Calculate approximate model size
print_status "Calculando tamaño aproximado de modelos..."
echo "  - Whisper large-v2: ~1.5 GB"
echo "  - BERT multilingual: ~400 MB"
echo "  - RoBERTa sentiment: ~200 MB"
echo "  - DistilRoBERTa emotion: ~300 MB"
echo "  - Modelos de traducción: ~500 MB"
echo "  - Otros modelos: ~300 MB"
echo "  - TOTAL APROXIMADO: ~3.2 GB"

print_success "¡Instalación completada!"
echo ""
echo "=================================================="
echo "🎬 ZenVision AI Subtitle Generator está listo!"
echo "=================================================="
echo ""
echo "Para ejecutar la aplicación:"
echo "  1. Activar entorno virtual: source venv/bin/activate"
echo "  2. Ejecutar aplicación: python app.py"
echo "  3. O usar el script: ./run_zenvision.sh"
echo ""
echo "La aplicación estará disponible en: http://localhost:7860"
echo ""
echo "Para más información, consulta el README.md"
echo ""
print_success "¡Disfruta usando ZenVision! 🚀"