Tabla de contenido:

Gafas inteligentes: 4 pasos
Gafas inteligentes: 4 pasos

Video: Gafas inteligentes: 4 pasos

Video: Gafas inteligentes: 4 pasos
Video: Top 5 Mejores Gafas Inteligentes 2024 | No Compres Sin Ver Esto! 2024, Diciembre
Anonim
Gafas inteligentes
Gafas inteligentes
Gafas inteligentes
Gafas inteligentes

¡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

¡Cableado del circuito!
¡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

¡Tiempo de codificación!
¡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

¡Poniendolo todo junto!
¡Poniendolo 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: