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.
