Chuletario recursos

Programa en python openpipe boby

Instalar mediapipe y demás necesarios.

python3 -m venv mp_env && source mp_env/bin/activate
pip install mediapipe paho-mqtt

Cada vez que se quiera ejecutar hay que ir al directorio y cargar el entorno (env)

python3 -m venv mp_env && source mp_env/bin/activate

Programa boby.py
# -*- coding: utf-8 -*-
import cv2
import mediapipe as mp
import paho.mqtt.client as mqtt
import time

# Configurar el cliente MQTT
client = mqtt.Client()
client.connect("192.168.24.12")

# Crear objeto de detección de pose de Mediapipe
mp_pose = mp.solutions.pose

# Crear objeto de captura de video de OpenCV para acceder a la cámara web
cap = cv2.VideoCapture(0)
up_izq = 0
up_der = 0
nose_x_interp = 90
# Inicializar el objeto de detección de pose
with mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose:

    # Valor de posición anterior
    prev_nose_x = None

    while True:
        # Capturar fotograma de video de la cámara web
        ret, frame = cap.read()

        # Convertir el marco a BGR a RGB
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

        #Invertimos el marco horizontalmente para crear efecto espejo.
        frame = cv2.flip(frame, 1)
        # Procesar el marco para detectar la pose
        results = pose.process(frame)

        # Convertir el marco de nuevo a BGR para mostrarlo en OpenCV
        frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)

        # Dibujar los puntos de la pose en el marco
        if results.pose_landmarks:
            mp.solutions.drawing_utils.draw_landmarks(frame, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)

            # Obtener la posición de la nariz
            nose_x = results.pose_landmarks.landmark[mp_pose.PoseLandmark.NOSE].x * frame.shape[1]
            nose_y = results.pose_landmarks.landmark[mp_pose.PoseLandmark.NOSE].y * frame.shape[0]

            hand_izq_x = results.pose_landmarks.landmark[mp_pose.PoseLandmark.LEFT_WRIST].x * frame.shape[1]
            hand_izq_y = results.pose_landmarks.landmark[mp_pose.PoseLandmark.LEFT_WRIST].y * frame.shape[0]

            hand_der_x = results.pose_landmarks.landmark[mp_pose.PoseLandmark.RIGHT_WRIST].x * frame.shape[1]
            hand_der_y = results.pose_landmarks.landmark[mp_pose.PoseLandmark.RIGHT_WRIST].y * frame.shape[0]

            # Mostrar la posición de la nariz en un recuadro en la esquina inferior izquierda
            cv2.rectangle(frame, (10, frame.shape[0] - 40), (250, frame.shape[0] - 10), (0, 0, 0), -1)
            cv2.putText(frame, f'Pos. centro cara: ({nose_x:.0f}, {nose_y:.0f})', (15, frame.shape[0] - 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)

            # Publicar la posición de la nariz en MQTT si ha habido un movimiento significativo
            if prev_nose_x is not None and abs(nose_x - prev_nose_x) >= 50:
                nose_x_interp = 180-(nose_x / 640) * 180
#               client.publish("boby", f'{nose_x_interp:.0f} {hand_izq_y:.0f} {hand_der_y:.0f}')
                client.publish("boby",f'{nose_x_interp:.0f} {up_izq} {up_der}')
                print(f"Publicando posición de nariz: ({nose_x_interp:.0f})")
                prev_nose_x = nose_x
            elif prev_nose_x is None:
                prev_nose_x = nose_x

            # Tratamiento mano izquierda
            if hand_izq_y <= nose_y and up_izq == 180:
                print ("IZQ_UP")
#               client.publish("boby",f'{nose_x_interp:.0f} {hand_izq_y:.0f} {hand_der_y:.0f}') #publish
                up_izq = 0
                client.publish("boby",f'{nose_x_interp:.0f} {up_izq} {up_der}') #publish    
            elif hand_izq_y >= nose_y and up_izq == 0:
                print ("IZQ_DOWN")
#               client.publish("boby",f'{nose_x_interp:.0f} {hand_izq_y:.0f} {hand_der_y:.0f}') #publish
                up_izq = 180
                client.publish("boby",f'{nose_x_interp:.0f} {up_izq} {up_der}') #publish

            # Tratamiento mano derecha
            if hand_der_y <= nose_y and up_der == 180:
                print ("DER_UP")
#               client.publish("boby",f'{nose_x_interp:.0f} {hand_izq_y:.0f} {hand_der_y:.0f}') #publish
                up_der = 0
                client.publish("boby",f'{nose_x_interp:.0f} {up_izq} {up_der}') #publish
            elif hand_der_y >= nose_y and up_der == 0:
                print ("DER_DOWN")
#               client.publish("boby",f'{nose_x_interp:.0f} {hand_izq_y:.0f} {hand_der_y:.0f}') #publish
                up_der = 180
                client.publish("boby",f'{nose_x_interp:.0f} {up_izq} {up_der}') #publish
                


        # Mostrar el marco en una ventana de OpenCV
        cv2.imshow('Deteccion de pose', frame)

        # Salir si se presiona la tecla 'q'
        if cv2.waitKey(10) & 0xFF == ord('q'):
            break

# Liberar recursos
cap.release()
cv2.destroyAllWindows()

Aplicación para edición de video con eliminacion de fondos.

https://runwayml.com/

Instalar Docker en Linux Mint 20 y Ubuntu 20.04 Focal Fossa.

https://monkiki.github.io/2020/07/01/instalar-docker-en-linux-mint-20.html

Instalar filebrowser como un servicio. (borrador)

Archivo /etc/init.d/filebrowser

!/bin/sh
### BEGIN INIT INFO
# Provides: Arrancar Filebrowser
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Arranca la nube filebrowser
### END INIT INFO

echo "Arrancando Filebrowser"
/usr/local/bin/filebrowser -a 192.168.24.204 -p 8080 -r /home/usuario/archivos/ -d /etc/filebrowser/filebrowser.db&

Lo ponemos de arranque

sudo mkdir /etc/filebrowser/
sudo update-rc.d filebrowser-script defaults

Página para descarga de libros de programación

En esta página se pueden descargar libros de programación en múltiples lenguajes.

https://goalkicker.com

Eliminar fondos automáticamente

Sorprendente página que elimina el fondo de una foto de manera automática.

https://www.remove.bg/

Colorear automáticamente Dibujos

Excelente herramienta online para colorear bocetos y dibujos sin intervención humana.

https://paintschainer.preferred.tech/index_en.html

http://s2p.moe/

 

Awesome

Recursos para proyectos. Podemos encontrar proyectos, manuales, servidores, etc de github ordenado por categorías.

Awesome sysadmin

Recursos para localizar software libre para sysadmin ordenado por categorías.

draw.io

draw.io es un servicio online gratuito d que le permite dibujar una amplia gama de diagramas incluyendo diagramas de flujo, BPMN, diagramas de red, diagramas UML y Entidad Relación, y mucho más. Permite bajarte el diagrama como SVG, o como imagen png, jpg, o pdf y otros.

Diagrama de la red
Diagrama de la red
Plano para instalar red
Plano para instalar red

www.canva.com

canva.com sirve para crear infografías mediante la composición de imágenes. Sirve para crear carteles, folletos, etc…

Permite bajar en jpg, o pdf.

También permite hacer presentaciones y compartirlas.

Escritorio canva
Escritorio canva

www.crello.com

crello.com sirve para crear infografías mediante la composición de imágenes. Sirve para crear carteles, folletos, etc… Es como canva.com.

 

piktochart.com

Con piktochart.com podemos también hacer infografías y carteles con aspecto profesional. Permite bajar sólo PNG en versión gratuita.

Piktochart
Piktochart

 

cpuboss.com, gpuboss.com, ssdboss.com

Con cpuboss podemos comparar procesadores para ver cual es mejor que otro. Lo mismo podemos hacer en gpuboss.com para las tarjetas gráficas. Para los discos SSD tenemos ssdboss.com.

cpuboss
cpuboss

 

waifu2x

Permite ampliar imágenes sin que pierda calidad.

Compressor

Reduce el peso de imágenes y fotos sin que apenas se note.