Herramientas Informaticas

Categoría: python Página 1 de 3

📦 Cómo convertir tu script de Python en un archivo EXE con interfaz gráfica

Entrada fija

Ya creaste tu aplicación para descargar videos de YouTube con una interfaz bonita y arte ASCII. Ahora te gustaría compartirla con otros sin que tengan que instalar Python, ¿cierto? Aquí te enseño cómo convertir tu script en un archivo ejecutable .exe de un solo archivo, listo para usar en Windows.


🧰 Requisitos previos

Debes tener instalado:

  • Python 3.10 o 3.11 (recomendado)
  • pip funcionando
  • El script principal, por ejemplo: descargador_youtube.py

🔧 Paso 1: Instalar pyinstaller

Abre una terminal (CMD o PowerShell) y ejecuta:


pip install pyinstaller

📦 Paso 2: Crear el archivo EXE de un solo archivo

Usa el siguiente comando para generar un ejecutable compacto:


pyinstaller --onefile --noconsole descargador_youtube.py

Opciones importantes:

  • --onefile: empaqueta todo en un solo archivo .exe
  • --noconsole: oculta la ventana de consola al abrir (ideal para apps con interfaz gráfica)

📂 Paso 3: Buscar el archivo generado

Después de ejecutar el comando, se generarán carpetas como dist y build. Tu ejecutable estará en la carpeta dist:


/dist/descargador_youtube.exe

¡Ese es el archivo que puedes compartir con otros usuarios de Windows! No necesitan instalar Python ni dependencias.


🧪 Paso 4: Probar el EXE

Haz doble clic en el archivo descargador_youtube.exe. Si todo salió bien, verás tu interfaz gráfica funcionando con arte ASCII incluido. Puedes elegir la carpeta, pegar una URL de YouTube y descargar.


🐞 ¿Problemas comunes?

  • 🔁 Si el video no descarga, asegúrate de estar usando pytubefix y no pytube.
  • 🖼 Si ves un error con tkinter, asegúrate de que tu Python lo incluya (instalación completa desde python.org).
  • 🛠 ¿No funciona en otra PC? Usa la opción --add-data si tienes archivos externos o logos.

💡 Bonus: crear un icono personalizado

Si tienes un ícono (.ico), puedes usarlo así:


pyinstaller --onefile --noconsole --icon=icono.ico descargador_youtube.py

📤 Compartir tu app

Ahora puedes subir el .exe a Google Drive, Dropbox o empaquetarlo en un archivo ZIP para compartir fácilmente.


🚀 ¿Quieres más?

  • Convertir a ejecutable en Linux o macOS
  • Versión con barra de progreso
  • Soporte para listas de reproducción

Déjamelo saber en los comentarios 👇

🎬 Cómo Crear un Descargador de Videos de YouTube con Interfaz Gráfica en Python

Entrada fija

🎬 Cómo Crear un Descargador de Videos de YouTube con Interfaz Gráfica en Python

¿Quieres tu propia app para descargar videos de YouTube de forma sencilla? Aquí te explico cómo hacerlo con Python, usando una interfaz gráfica moderna y arte ASCII decorativo. Usaremos pytubefix para evitar errores comunes como el 400 Bad Request.


✅ Paso 1: Instala las dependencias

Abre la terminal y escribe:


pip install pytubefix

🧱 Paso 2: Código completo del programa

Crea un archivo llamado descargador_youtube.py y copia el siguiente contenido:


import tkinter as tk
from tkinter import ttk, messagebox, filedialog
from pytubefix import YouTube
import threading

def descargar_video():
    url = entrada_url.get()
    carpeta = ruta_descarga.get()

    if not url:
        messagebox.showwarning("Advertencia", "Por favor, ingresa una URL de YouTube.")
        return

    try:
        boton_descargar.config(state=tk.DISABLED)
        estado.set("Descargando video...")

        yt = YouTube(url)
        video = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first()

        if not video:
            raise Exception("No se encontró un stream compatible.")

        video.download(output_path=carpeta)
        estado.set("¡Descarga completada!")
        messagebox.showinfo("Éxito", f"Video descargado: {yt.title}")
    except Exception as e:
        estado.set("Error en la descarga.")
        messagebox.showerror("Error", str(e))
    finally:
        boton_descargar.config(state=tk.NORMAL)

def elegir_carpeta():
    carpeta = filedialog.askdirectory()
    if carpeta:
        ruta_descarga.set(carpeta)

def iniciar_descarga():
    hilo = threading.Thread(target=descargar_video)
    hilo.start()

# Crear ventana
ventana = tk.Tk()
ventana.title("Descargador de YouTube")
ventana.geometry("600x460")
ventana.resizable(False, False)
ventana.configure(bg="#ffffff")

# Variables
ruta_descarga = tk.StringVar()
estado = tk.StringVar(value="Esperando URL...")

# Arte ASCII decorativo
ascii_art = r"""
 __     __     ______     __         ______     __   __    
/\ \  _ \ \   /\  __ \   /\ \       /\  ___\   /\ "-.\ \   
\ \ \/ ".\ \  \ \ \/\ \  \ \ \____  \ \  __\   \ \ \-.  \  
 \ \__/".~\_\  \ \_____\  \ \_____\  \ \_____\  \ \_\\"\_\ 
  \/_/   \/_/   \/_____/   \/_____/   \/_____/   \/_/ \/_/ 
"""
etiqueta_ascii = tk.Label(
    ventana,
    text=ascii_art,
    font=("Courier", 10),
    bg="#ffffff",
    fg="#cc0000",
    justify="left"
)
etiqueta_ascii.pack(pady=(5, 0))

# Estilo
estilo = ttk.Style()
estilo.theme_use("clam")
estilo.configure("TButton", font=("Segoe UI", 10), padding=6)
estilo.configure("TLabel", font=("Segoe UI", 10), background="#ffffff")
estilo.configure("TEntry", font=("Segoe UI", 10))

# Widgets
ttk.Label(ventana, text="URL del video de YouTube:").pack(pady=10)
entrada_url = ttk.Entry(ventana, width=60)
entrada_url.pack(pady=5)

frame_carpeta = ttk.Frame(ventana)
frame_carpeta.pack(pady=10)

ttk.Entry(frame_carpeta, textvariable=ruta_descarga, width=45).pack(side=tk.LEFT, padx=(0, 10))
ttk.Button(frame_carpeta, text="Elegir carpeta", command=elegir_carpeta).pack(side=tk.LEFT)

boton_descargar = ttk.Button(ventana, text="Descargar Video", command=iniciar_descarga)
boton_descargar.pack(pady=15)

ttk.Label(ventana, textvariable=estado, foreground="blue").pack(pady=5)

ventana.mainloop()

🧪 Paso 3: Ejecuta tu aplicación


python descargador_youtube.py

🎨 Resultado del arte ASCII


 __     __     ______     __         ______     __   __    
/\ \  _ \ \   /\  __ \   /\ \       /\  ___\   /\ "-.\ \   
\ \ \/ ".\ \  \ \ \/\ \  \ \ \____  \ \  __\   \ \ \-.  \  
 \ \__/".~\_\  \ \_____\  \ \_____\  \ \_____\  \ \_\\"\_\ 
  \/_/   \/_/   \/_____/   \/_____/   \/_____/   \/_/ \/_/ 

💡 Siguientes pasos sugeridos

  • Agregar barra de progreso visual
  • Soporte para listas de reproducción
  • Conversión a MP3 automática

¿Te gustaría que publique otra guía con alguna de estas mejoras? ¡Déjame un comentario! 🚀

🎥 Detección de Personas en Video y Grabación Automática Usando Python y OpenCV

Entrada fija

En este artículo explicaremos cómo crear un sistema de detección de personas que grabe automáticamente la pantalla solo cuando se detecta presencia humana. Este proyecto es útil si usas cámaras IP o software como V380 y deseas una forma eficiente de grabar únicamente cuando hay movimiento humano en una región específica del escritorio.


✅ ¿Qué hace este script?

  • Captura un área definida de la pantalla (donde aparece el video de la cámara).
  • Usa un modelo de inteligencia artificial para detectar personas.
  • Comienza a grabar cuando detecta presencia humana.
  • Detiene la grabación si no se ve nadie por un período definido.
  • Guarda los videos automáticamente con marcas de tiempo.

🧠 Tecnologías y librerías usadas

  • OpenCV: procesamiento de imágenes y video.
  • mss: captura rápida de pantalla.
  • NumPy: procesamiento eficiente de matrices.
  • datetime y time: control de tiempo.
  • Modelo Caffe SSD preentrenado: para detección de rostros/personas.

📦 Requisitos

Asegúrate de tener Python 3.8+ (funciona en 3.12) y las siguientes librerías instaladas:

pip install opencv-python numpy mss

También necesitas dos archivos de modelo descargados:

  • deploy.prototxt
  • res10_300x300_ssd_iter_140000.caffemodel

Se pueden obtener desde los repositorios oficiales de OpenCV o desde:

wget https://raw.githubusercontent.com/opencv/opencv/master/samples/dnn/face_detector/deploy.prototxt .

wget https://github.com/opencv/opencv_3rdparty/raw/dnn_samples_face_detector_20170830/res10_300x300_ssd_iter_140000_fp16.caffemodel -O res10_300x300.caffemodel

🧾 El código completo

import cv2
import numpy as np
import time
from mss import mss
from datetime import datetime

# === Configuraciones ===
monitor = {"top": 100, "left": 100, "width": 640, "height": 480}

prototxt = "deploy.prototxt"
model = "res10_300x300_ssd_iter_140000.caffemodel"
NO_PERSON_TIMEOUT = 5

net = cv2.dnn.readNetFromCaffe(prototxt, model)
sct = mss()
recording = False
video_writer = None
last_person_time = 0

def detect_person(frame):
    blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300, 300)), 1.0,
                                 (300, 300), (104.0, 177.0, 123.0))
    net.setInput(blob)
    detections = net.forward()

    for i in range(detections.shape[2]):
        confidence = detections[0, 0, i, 2]
        if confidence > 0.6:
            return True
    return False

def start_recording(filename, frame_size, fps=20):
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    return cv2.VideoWriter(filename, fourcc, fps, frame_size)

print("🔍 Monitoreando... Presiona ESC para salir.")

while True:
    frame = np.array(sct.grab(monitor))
    frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)

    person_detected = detect_person(frame)
    current_time = time.time()

    if person_detected:
        last_person_time = current_time
        if not recording:
            filename = datetime.now().strftime("grabacion_%Y%m%d_%H%M%S.mp4")
            video_writer = start_recording(filename, (monitor["width"], monitor["height"]))
            print(f"🟢 Persona detectada – grabando en: {filename}")
            recording = True
    else:
        if recording and (current_time - last_person_time > NO_PERSON_TIMEOUT):
            print("🔴 No hay persona – deteniendo grabación.")
            recording = False
            video_writer.release()
            video_writer = None

    if recording and video_writer is not None:
        video_writer.write(frame)

    cv2.imshow("Vista", frame)
    if cv2.waitKey(1) == 27:  # ESC
        break

# Limpieza
if video_writer:
    video_writer.release()
cv2.destroyAllWindows()

🛠️ Cómo ajustar a tu uso

  • Cambia las coordenadas de monitor según dónde esté la imagen de la cámara en tu pantalla.
  • Puedes modificar el umbral de confianza (confidence > 0.6) si detecta demasiado o poco.
  • Cambia el tiempo NO_PERSON_TIMEOUT si quieres que espere más o menos antes de cortar la grabación.

📂 Salidas

  • Videos guardados en la misma carpeta, con nombre grabacion_YYYYMMDD_HHMMSS.mp4.
  • No graba sonido (ideal para privacidad o rendimiento).

🖥️ Requisitos mínimos de hardware

  • CPU moderna (Intel i5 o Ryzen 5 en adelante recomendado).
  • RAM: 4 GB mínimo (8+ recomendado).
  • Sistema operativo: Linux o Windows.
  • Sin GPU necesaria, ya que el modelo es liviano.

Capítulo 1

 

El Camino del Programa

El objetivo de este libro es enseñarle a pensar como lo hacen los científicos informáticos. Esta manera de pensar combina las mejores características de la matemática, la ingeniería, y las ciencias naturales. Como los matemáticos, los científicos informáticos usan lenguajes formales para designar ideas (específicamente, computaciones). Como los ingenieros, ellos diseñan cosas, ensamblando sistemas a partir de componentes y evaluando ventajas y desventajas de cada una de las alternativas. Como los científicos, ellos observan el comportamiento de sistemas complejos, forman hipótesis, y prueban sus predicciones.

La habilidad más importante del científico informático es la soluciún de problemas. La soluciún de problemas incluye poder formular problemas, pensar en la solución de manera creativa, y expresar una solución con claridad y precisión.

Como se verá, el proceso de aprender a programar es la oportunidad perfecta para desarrollar la habilidad de resolver problemas. Por esa razón este capítulo se llama “El Camino del programa”.

A cierto nivel, usted aprenderá a programar, lo cual es una habilidad muy útil por sí misma. A otro nivel, usted utilizará la programaciún para obtener algún resultado. Ese resultado se verá más claramente durante el proceso.

1.2. ¿Qué es un programa?

Un programa es una secuencia de instrucciones que especifican cómo ejecutar una computación. La computación puede ser algo matemático, como solucionar un sistema de ecuaciones o determinar las raíces de un polinomio, pero también puede ser una computación simbólica, como buscar y reemplazar el texto de un documento o (aunque parezca raro) compilar un programa.

Las instrucciones (comandos, órdenes) tienen una apariencia diferente en lenguajes de programación diferentes, pero existen algunas funciones básicas que
se presentan en casi todo lenguaje:

entrada: Recibir datos del teclado, o un archivo u otro aparato.

salida: Mostrar datos en el monitor o enviar datos a un archivo u otro aparato.

matemáticas: Ejecutar operaciones básicas de matemáticas como la adición y la multiplicación.

operación condicional: Probar la veracidad de alguna condición y ejecutar una secuencia de instrucciones apropiada.
repetición: Ejecutar alguna acción repetidas veces, normalmente con alguna variación.

Lo crea o no, eso es todo. Todos los programas que existen, por complicados que sean, están formulados exclusivamente con tales instrucciones. Así, una manera de describir la programación es: El proceso de romper una tarea en tareas cada vez más pequeñas hasta que estas tareas sean suficientemente simples para ser ejecutadas con una de estas instrucciones simples.

Quizás esta descripción sea un poco ambigua. No se preocupe. Lo explicaremos con más detalle con el tema de los algoritmos.

1.3.1. Errores sintácticos

Python solo puede ejecutar un programa si el programa es correcto sintácticamente. En caso contrario, es decir si el programa no es correcto sintácticamente, el proceso falla y devuelve un mensaje de error. El término sintaxis se refiere a la estructura de cualquier programa y a las reglas de esa estructura. Por ejemplo, en español la primera letra de toda oración debe ser mayúscula, y todas las oraciones deben terminar con un punto. esta oración tiene un error sintáctico.

Esta oración también para la mayoría de lectores, unos pocos errores sintácticos no son significativos, y por eso pueden leer la poesía de e. e. cummings sin anunciar errores de sintaxis. Python no es tan permisivo. Si hay aunque sea un solo error sintáctico en el programa, Python mostrará un mensaje de error y abortará la ejecución del programa. Durante las primeras semanas de su carrera como programador pasará, seguramente, mucho tiempo buscando errores sintácticos. Sin embargo, tal como adquiera experiencia tendrá menos errores y los encontrará mas rápido.

1.3.2. Errores en tiempo de ejecución

El segundo tipo de error es un error en tiempo de ejecución. Este error no aparece hasta que se ejecuta el programa. Estos errores también se llaman excepciones

porque indican que algo excepcional (y malo) ha ocurrido.

Con los programas que vamos a escribir al principio, los errores en tiempo de ejecución ocurrirán con poca frecuencia, así que puede pasar bastante tiempo hasta que vea uno.

1.4. Lenguajes formales y lenguajes naturales

Los lenguajes naturales son los lenguajes hablados por seres humanos, como el español, el inglés y el francés. No los han diseñados personas (aunque se
intente poner cierto orden en ellos), sino que se han desarrollado naturalmente.

Los lenguajes formales son lenguajes diseñados por humanos y que tienen aplicaciones específicas. La notación matemática, por ejemplo, es un lenguaje formal ya que se presta a la representación de las relaciones entre números y símbolos. Los químicos utilizan un lenguaje formal para representar la estructura química de las moléculas. Y lo más importante:

Los lenguajes de programación son lenguajes formales desarrollados para expresar computaciones.

Los lenguajes formales casi siempre tienen reglas sintácticas estrictas. Por ejemplo, 3+3 = 6 es una expresión matemática correcta, pero 3 = +6$ no lo es. De
la misma manera, H20 es una nomenclatura química correcta, pero 2Zz no lo es.

Existen dos clases de reglas sintácticas, en cuanto a unidades y estructura. Las unidades son los elementos básicos de un lenguaje, como lo son las palabras, los números y los elementos químicos. Por ejemplo, en 3=+6$, $ no es una unidad matemática aceptada (al menos hasta donde nosotros sabemos. Similarmente, 2Zz no es formal porque no hay ningún elemento con la abreviatura Zz.

La segunda clase de regla sintáctica está relacionada con la estructura de un elemento; o sea, el orden de las unidades. La estructura de la sentencia 3=+6$
no se acepta porque no se puede escribir el símbolo de igualdad seguido de un símbolo positivo. Similarmente, las fórmulas moleculares tienen que mostrar el número de subíndice después del elemento, no antes.

A manera de práctica, trate de producir una oración con estructura aceptada pero que esté compuesta de unidades irreconocibles. Luego escriba otra oración con unidades aceptables pero con estructura no válida.

Al leer una oración, sea en un lenguaje natural o una sentencia en un lenguaje técnico, se debe discernir la estructura de la oración. En un lenguaje natural este proceso, llamado análisis sintáctico ocurre subconscientemente.

Por ejemplo cuando usted escucha la oración “El otro zapato cayó”, entiende que “el otro zapato” es el sujeto y “cayó” es el verbo. Cuando se ha analizado la oración sintácticamente, se puede deducir el significado, o la semántica, de la oración. Suponiendo que sepa lo que es un zapato y lo que es caer, entenderá el significado de la oración.

Aunque existen muchas cosas en común entre los lenguajes naturales y los lenguajes formales|por ejemplo las unidades, la estructura, la sintaxis y la
semántica|también existen muchas diferencias:

ambigüedad: Los lenguajes naturales tienen muchísimas ambigüedades, que los hablantes sortean usando claves contextuales y otra información. Los lenguajes formales se diseñan para estar completamente libres de am-

redundancia: Para reducir la ambigüedad y los malentendidos, las lenguas naturales utilizan bastante redundancia. Como resultado suelen ser prolijos. Los lenguajes formales son menos redundantes y más concisos.

literalidad: Los lenguajes naturales tienen muchas metáforas y frases hechas.
programas: El significado de un dicho, por ejemplo “Estirar la pata”, es diferente al significado de sus sustantivos y verbos. En este ejemplo, la oración no tiene nada que ver con un pie y significa ‘morirse’. Los lenguajes formales no difieren de su significado literal.

Los que aprenden a hablar un lenguaje natural|es decir, todo el mundo| muchas veces tienen dificultad en adaptarse a los lenguajes formales. A veces
a diferencia entre los lenguajes formales y los naturales es comparable a la diferencia entre la prosa y la poesía:

Poesía: Se utiliza una palabra por su cualidad auditiva tanto como por su significado. El poema, en su totalidad, produce un efecto o reacción emocional.
La ambigüedad no es solo común sino utilizada a propósito.

Prosa: El significado literal de la palabra es mas importante y la estructura da más significado aún. La prosa se presta al análisis más que la poesía, pero todavía contiene ambigüedad.

Programas: El significado de un programa es inequívoco y literal, y es entendido en su totalidad analizando las unidades y la estructura.
He aquí unas sugerencias para la lectura de un programa (y de otros lenguajes formales). Primero, recuerde que los lenguajes formales son mucho más densos que los lenguajes naturales, y por consecuente lleva más tiempo leerlos. También, la estructura es muy importante, así que entonces no es una buena idea leerlo de pies a cabeza, de izquierda a derecha. En vez de eso, aprenda a separar las diferentes partes en su mente, identificar las unidades e interpretar la estructura. Finalmente, ponga atención a los detalles. Los fallos de puntuación y la ortografía, que puede obviar en el lenguaje natural, pueden suponer una gran diferencia en un lenguaje formal.

1.5. El primer programa

Tradicionalmente el primer programa en un lenguaje nuevo se llama “Hola, mundo” (Hello world!) porque sólo muestra las palabras “Hola a todo el mundo”.

En Python es así:

   1: print "Hola, mundo"

 

Este es un ejemplo de una sentencia print, la cual no imprime nada en papel, más bien muestra un valor. En este caso, el resultado es las palabras Hola, mundo

Las comillas señalan el comienzo y el final del valor; no aparecen en el resultado.

Alguna gente evalúa la calidad de un lenguaje de programación por la simplicidad del programa “Hola, mundo”. Si seguimos ese criterio, Python cumple con todas sus metas.

1.6. Glosario

solución de problemas: El proceso de formular un problema, hallar la solución y expresar esa solución.

lenguaje de alto nivel: Un lenguaje como Python diseñado para ser fácil de leer y escribir para la gente.

lenguaje de bajo nivel: Un lenguaje de programación diseñado para ser fácil de ejecutar para un computador; también se lo llama lenguaje de máquina “o lenguaje ensamblador”.

portabilidad: La cualidad de un programa que le permite ser ejecutado en más de un tipo de computador.

interpretar: Ejecutar un programa escrito en un lenguaje de alto nivel traduciéndolo línea por línea

compilar: Traducir un programa escrito en un lenguaje de alto nivel a un lenguaje de bajo nivel todo al mismo tiempo, en preparación para la ejecución
posterior.

código fuente: Un programa escrito en un lenguaje de alto nivel antes de ser compilado.

código de objeto: La salida del compilador una vez que ha traducido el programa.

programa ejecutable: Otro nombre para el código de objeto que está listo para ejecutarse.

guión: Un programa archivado (que va a ser interpretado).

programa: Un conjunto de instrucciones que especifica una computación.

algoritmo: Un proceso general para resolver una clase completa de problemas.

error (bug): Un error en un programa.

depuración: El proceso de hallazgo y eliminación de los tres tipos de errores de programación.

sintaxis: La estructura de un programa.

error sintáctico: Un error en un programa que hace que el programa sea imposible de analizar sintácticamente (e imposible de interpretar).

error en tiempo de ejecución: Un error que no ocurre hasta que el programa ha comenzado a ejecutarse e impide que el programa continúe.

excepción: Otro nombre para un error en tiempo de ejecución.

error semántico: Un error en un programa que hace que ejecute algo que no era lo deseado.

semántica: El significado de un programa.

lenguaje natural: Cualquier lenguaje hablado que evolucionó de forma natural.

lenguaje formal: Cualquier lenguaje diseñado por humanos que tiene un propósito específico, como la representación de ideas matemáticas o programas de computadores; todos los lenguajes de programación son lenguajes formales.

unidad: Uno de los elementos básicos de la estructura sintáctica de un programa, análogo a una palabra en un lenguaje natural.

análisis sintáctico: La examinación de un programa y el análisis de su estructura sintáctica.

sentencia print: Una instrucción que causa que el interprete Python muestre un valor en el monitor.

Página 1 de 3

Creado con WordPress & Tema de Anders Norén