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.
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.
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.
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.
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.
waifu2x
Permite ampliar imágenes sin que pierda calidad.
Compressor
Reduce el peso de imágenes y fotos sin que apenas se note.