Tabla de contenido:
- Paso 1: Cableado del circuito
- Paso 2: acceder a la Raspberry Pi
- Paso 3: ¡Tiempo de codificación
- Paso 4: ¡Poniéndolo todo junto
Video: Gafas inteligentes: 4 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:40
¡Hola a todos, hoy les voy a mostrar cómo hacer Smart Glasses en casa! Una de las mejores cosas de las gafas inteligentes es lo beneficioso que es tener algo como esto en el mundo de la tecnología actual y cómo no existe una sola versión de las gafas inteligentes, ya que todas tienen características asombrosas y un número infinito de aplicaciones que podrían integrarse. en el futuro. Las características de estas gafas inteligentes incluyen decir la hora, que le dice la temperatura cada 5 minutos, entre esos 5 minutos cambia entre la temperatura alta y baja esperada para ese día, también le dice la fecha. Pero su característica principal es que toma una imagen cada 10 segundos y luego analiza esa imagen en busca de texto en el que devolverá información útil sobre ella, si encuentra una pregunta, la responderá usando wolfram, o si encuentra una ecuación matemática. ¡lo solucionará!
Suministros:
Los suministros necesarios para este proyecto incluirán lo siguiente:
1) Una Raspberry Pi 0 W (de vilros.com)
2) Una pantalla OLED clara de 128x64 (de Sparkfun.com)
3) Un módulo de cámara formateado para Raspberry Pi 0 W (de amazon.com)
4) Cualquier vaso que elijas
5) Alambres
6) soldador
7) Soldadura sin plomo (porque no quieres morir a causa del plomo)
8) adhesivo de 2 vías
9) Tarjeta SD mínima de 8gb
10) computadora y conexión a internet
Suponiendo que ya tenga una computadora y una conexión a Internet, el costo de estas gafas será de alrededor de $ 130.00
Paso 1: Cableado del circuito
Para mostrar texto en la pantalla, tendrá que conectarse al OLED a través de I2C o SPI, elijo I2C ya que es el que me siento más cómodo usando, pero si tiene ganas de conectarse a través de SPI, siga este tutorial en el sitio web de Sparkfun y vuelva aquí cuando haya terminado. https://learn.sparkfun.com/tutorials/transparent-g… Si ha elegido I2C, ya que he soldado los cables como se indica a continuación:
Pi / / OLED / /
3,3 v 3,3 v
GND GND
SDA SDA
SCL SCL
Tenga en cuenta que el OLED transparente solo puede manejar 3.3v.
Una vez que haya terminado de conectar el circuito, deslice el cable plano del módulo de la cámara en el soporte del cable plano en la raspberry pi tirando de la abrazadera negra y deslizándola nuevamente una vez que el cable plano esté en su lugar.
Paso 2: acceder a la Raspberry Pi
Usando ssh podemos acceder a nuestro pi con nuestra pc sin conectar un teclado y un monitor externos extra. Lo primero que debe hacer es conectar su tarjeta SD a su PC con un adaptador o un puerto incorporado, luego deberá dirigirse a este enlace https://www.raspberrypi.org/downloads/raspbian/ y descargar Raspbian buster con escritorio. En segundo lugar, debe colocar el sistema operativo en la tarjeta SD usando BalenaEtcher, seleccione su tarjeta SD y el sistema operativo Raspbian y haga clic en "flash". Este proceso podría llevar algo de tiempo, así que vuelva cuando haya terminado. En tercer lugar, vaya a la tarjeta SD en el explorador de archivos o el buscador en mac y cree un archivo de texto llamado wpa_supplicant, asegúrese de eliminar la extensión.txt y agregue.conf, en el archivo pegue lo siguiente:
país = EE. UU.
ctrl_interface = DIR = / var / run / wpa_supplicant GROUP = netdev update_config = 1 network = {ssid = "WIFI_SSID" scan_ssid = 1 psk = "WIFI_PASSWORD" key_mgmt = WPA-PSK}
Tendrá que ingresar su nombre y contraseña de WiFi en los lugares y países correspondientes si no se encuentra en los EE. UU. Tenga en cuenta que la Raspberry Pi solo se puede conectar a una red de 2,4 Ghz, lo que significa que su PC también tendrá que conectarse a esa red. Después, cree un archivo de texto vacío sin extensión llamado ssh y luego expulse su tarjeta SD. Luego, necesitará instalar PuTTY https://www.putty.org/ que es lo que usará para habilitar ssh. Una vez instalado, ingrese la dirección IP de su raspberry pi, puede averiguar qué es yendo al sitio web de su enrutador iniciando sesión y mirando los dispositivos conectados.
Una vez que obtenga acceso a la Raspberry Pi, le pedirá que inicie sesión, el nombre de usuario predeterminado es "pi" y la contraseña es "raspberry". Escriba sudo raspi-config, luego vaya a las opciones de interfaz y habilite la cámara, ssh e i2c, luego haga clic en finalizar y escriba sudo reboot. Ahora está listo para SSH en Raspberry Pi, continúe e instale Remote Desktop e ingrese la dirección IP de su Raspberry Pi y ahora está listo para SSH en Raspberry Pi.
Paso 3: ¡Tiempo de codificación
Elegí codificar este programa en Python, así que asegúrese de tener instalado Python3.7 o 3.8 en su escritorio. Este código funciona mediante el uso de un servidor y un cliente, el servidor es su PC. El cliente o raspberry pi tomará una foto y la cargará en Dropbox, que es la recuperada por el servidor, quien luego ejecuta el procesamiento de imágenes y el reconocimiento de texto en la imagen. Tendrá que obtener una identificación de aplicación de wolframalpha, dropbox y openweathermap para que esto funcione, todo lo que tiene que hacer es ir al registro de sitios web y le dará una identificación de aplicación. y luego introdúzcalos en los lugares correspondientes determinados por los comentarios en el código. Asegúrese de haber instalado todo pip e instalado Tesseract OCR y OpenCV. Cree un archivo Python llamado Server.py en su PC y un archivo llamado client.py en la Raspberry Pi y luego copie y pegue el código. Pero sepa que cuanto más audaces sean los caracteres y más blanco el fondo, mejores serán los resultados, este es el caso de todos los programas de reconocimiento de texto.
Todos los enlaces para registrarse para obtener un ID de aplicación / /
www.wolframalpha.com/
openweathermap.org/api
www.dropbox.com/developers/documentation
Asegúrese de instalar Tesseract OCR y OpenCV / /
github.com/UB-Mannheim/tesseract/wiki
opencv.org/
Server.py:
import dropboxfrom PIL import Image import cv2 import pytesseract from pytesseract import Output import numpy as np import wolframalpha import socket import time
dbx = dropbox. Dropbox ("dropboxAPIkey")
s = socket.socket (socket. AF_INET, socket. SOCK_STREAM)
app_id = "ID de aplicación"
host = socket.gethostname ()
port = 60567 print (host) s.bind ((host, port)) s.listen (2)
mientras que es verdadero:
c, addr = s.accept () print (f'Obtuve conexión desde: {addr} ') romper
mientras que es cierto:
while True: metadatos time.sleep (13.7), f = dbx.files_download ("/ dropbox_API / Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Imagen descargada!") image = cv2.imread ("Image.jpg") Image = cv2.resize (image, (640, 480), interpolation = cv2. INTER_AREA) image68 = cv2.rotate (Image, cv2. ROTATE_90_COUNTERCLOCKWISE) gris = cv2.cvtColor (image68, cv2. COLOR_BGR2GRAY)
def remove_noise (gris):
return cv2.medianBlur (gris, 5) def umbral (gris): return cv2.threshold (gris, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (gris): kernel = np.ones ((5, 5), np.uint8) return cv2.dilate (gris, kernel, iteraciones = 1) d = pytesseract.image_to_data (gris, output_type = Output. DICT)
n_boxes = len (d ['texto'])
for i in range (n_boxes): if int (d ['conf'] )> 60: (x, y, w, h) = (d ['left'] , d ['top'] , d ['ancho'] , d ['alto'] ) gris = cv2.rectangle (gris, (x, y), (x + w, y + h), (0, 255, 0), 2) romper pytesseract.pytesseract.tesseract_cmd = r "C: / Archivos de programa / Tesseract-OCR / tesseract.exe" text = pytesseract.image_to_string (gris) print (text) while True: text2 = " "if len (texto)> = 2: c.send (bytes (texto," utf-8 ")) if len (texto) = 2: consulta = texto cliente = wolframalpha. Client (app_id) res = cliente.query (query) answer = next (res.results).text answer1 = answer.partition ('\ n') [0] print (answer1) c.send (bytes (answer1, "utf-8")) if len (text) <= 1: c.send (bytes (text2, "utf-8")) time.sleep (7.5) break
Client.py:
importar dropboximport picameraimport time from luma.core.interface.serial import i2c from luma.core.render import canvas from luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106 import socket import datetime from time import sleep import pyowm serial = i2c (port = 1, address = 0x3C) device = ssd1306 (serial, rotate = 1) camera = picamera. PiCamera () dropbox_access_token = "" # Your dropbox-id nuevamente computer_path = r "/home/pi/.jpg" dropboxImage_path = f "/dropbox_API/Image.jpg" s = socket.socket (socket. AF_INET, socket. SOCK_STREAM) host = "" # dirección IP de su PC puerto = 60567 s.connect ((host, puerto)) msg1 = "" owm = pyowm. OWM ("") # id-aplicación para openweathermap num = ["05", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "00"] cdt = datetime.datetime.now () min1 = str (cdt.minute) date = str (cdt.day) + "/" + str (cdt. mes) + "/" + str (cdt.year) obs = owm.weather_at_place ("") # su ciudad y país en formato de cadena weather = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) while True: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) con lienzo (dispositivo) como dibujar: dibujar texto ((0, 0), hora, relleno = "blanco") dibujar texto ((11, 0), ":", relleno = "blanco") dibujar texto ((15, 0), min1, fill = "white") draw.text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "blanco ") si min1 en num: obs = owm.weather_at_place (" ") # su ciudad y país en formato de cadena nuevamente
weather = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") si min1 no está en num: draw.text ((40, 0), temp2, fill = "white") draw.text ((32, 0), "F", fill = "white") camera.start_preview () time.sleep (2) camera.capture ("/ home / pi / Image.jpg") camera.stop_preview client = dropbox. Dropbox (dropbox_access_token) print ("[SUCCESS] cuenta de dropbox vinculada") cliente. files_upload (open (computer_path, "rb"). read (), dropbox_path) print ("[UPLOADED] {}". format (computer_path)) full_msg = "" time.sleep (5) msg = s.recv (100) if len (msg)> = 2: full_msg + = msg.decode ("utf-8") print (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) con lienzo (dispositivo) como dibujar: draw.text ((0, 19), full_msg, fill = "white") draw.text ((0, 0), hour, fill = "white") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") draw.text ((0, 9), "_", fill = " blanco ") dibujar texto ((0, 9), fecha, relleno = "blanco") si min1 en num: obs = owm.weather_at_place ("") # su ciudad y país en formato de cadena nuevamente
weather = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") si min1 no está en num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") if len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) con lienzo (dispositivo) como dibujar: draw.text ((0, 0), hora, relleno = "blanco") dibujo texto ((11, 0), ":", relleno = "blanco") dibujo texto ((15, 0), min1, relleno = "blanco") dibujo. text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("") #tu ciudad y país en formato de cadena de nuevo
weather = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") si min1 no está en num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (5.4) full_msg1 = "" msg1 = s.recv (100) if len (msg1)> = 2: full_msg1 + = msg1.decode ("utf-8") full_msg2 = ("\ n".join (textwrap.wrap (full_msg1, 9))) cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) con lienzo (dispositivo) como dibujo: draw.text ((0, 19), full_msg, fill = "white") draw.text ((0, 29), full_msg2, fill = "white") draw.text ((0, 0), hour, fill = "white") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") draw.text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("") # su ciudad y país en formato de cadena de nuevo
weather = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") si min1 no está en num: obs = owm.weather_at_place ("") # su ciudad y país en formato de cadena nuevamente
weather = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") si min1 no está en num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") if len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) con lienzo (dispositivo) como dibujar: draw.text ((0, 0), hora, relleno = "blanco") dibujo texto ((11, 0), ":", relleno = "blanco") dibujo texto ((15, 0), min1, relleno = "blanco") dibujo. text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("") #tu ciudad y país en formato de cadena de nuevo
weather = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") si min1 no está en num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) client.files_delete (dropbox_path) print ("Archivos eliminados")
PD Soy un programador aficionado, así que no cuestione mis horribles métodos de programación.
Paso 4: ¡Poniéndolo todo junto
Una vez que haya terminado todo lo demás, prácticamente todo lo que le queda por hacer es conectar la cámara raspberry pi y la pantalla a las gafas. Puede hacer esto usando el adhesivo de doble cara mencionado en los suministros o puede usar cualquier método que crea necesario. También es posible que haya notado que no he mencionado una batería en ninguna parte de esta lección porque tengo planificadas actualizaciones futuras para estas gafas y no quería colocar una en este momento. Pero si desea conectar uno, necesitará un circuito de cargador li-po de amazon
Si te gustó esto y quieres ver más, he comenzado un canal de YouTube y espero que también publique tutoriales allí. Aqui esta el link:
www.youtube.com/channel/UCGqcWhHXdZf231rLe…
¡Dios salva!
Juan 3:16 "Porque de tal manera amó Dios al mundo que dio a su único Hijo, el que siempre cree en él, no perecerá, sino que tendrá vida eterna".
Recomendado:
Gafas inteligentes (¡menos de $ 10!): 8 pasos (con imágenes)
Gafas inteligentes (¡¡¡Menos de $ 10 !!!): ¡Hola! Todos estamos familiarizados con las gafas inteligentes como la llamada E.D.I.T.H. hecho por nuestro querido personaje Tony Stark, que luego pasó a Peter Parker. ¡Hoy voy a construir uno de esos vidrios inteligentes que también cuestan menos de $ 10! No son del todo
Gafas inteligentes: 6 pasos
Gafas inteligentes: ¡Hola a todos! Hoy voy a compartir con ustedes, algo que quería desde hace mucho tiempo Unas gafas inteligentes de bricolaje construidas alrededor de 25 $ Ahora vamos a MORIR - Hágalo extremadamente
Gafas inteligentes de bricolaje - Arduino / ESP: 5 pasos
Gafas inteligentes de bricolaje - Arduino / ESP: La nueva versión está disponible aquí: [YouTube] ¡Hola chicos! Estoy aquí para mostrarles mi proyecto de bricolaje y animarlos a que lo hagan usted mismo. El proyecto son unas gafas realmente inteligentes que todos pueden hacer en casa. .Todo el código se puede encontrar aquí y los recursos: [GitHub] Yo también
Gafas de realidad aumentada inteligentes de bricolaje con Arduino: 7 pasos
Gafas de realidad aumentada inteligentes para bricolaje con Arduino: a medida que la tecnología crece rápidamente y se integra a todos los aspectos de la vida de las personas, los diseñadores y desarrolladores intentaron brindar una experiencia de tecnología más agradable a las personas. Una de las tendencias tecnológicas que tiene como objetivo hacer la vida más fácil es el desgaste
Gafas de cristal líquido para ambliopía (gafas de entrenamiento de oclusión alterna) [ATtiny13]: 10 pasos (con imágenes)
Anteojos de cristal líquido para ambliopía (anteojos de entrenamiento de oclusión alterna) [ATtiny13]: ambliopía (ojo vago), un trastorno de la vista que afecta aproximadamente al 3% de la población, generalmente tratado con parches o gotas de atropina simples. Desafortunadamente, esos métodos de tratamiento ocluyen un ojo más fuerte durante períodos de tiempo largos e ininterrumpidos, no