Taula de continguts:

Ulleres intel·ligents: 4 passos
Ulleres intel·ligents: 4 passos

Vídeo: Ulleres intel·ligents: 4 passos

Vídeo: Ulleres intel·ligents: 4 passos
Vídeo: Generació Digital - Capítol 183 2024, De novembre
Anonim
Ulleres intel·ligents
Ulleres intel·ligents
Ulleres intel·ligents
Ulleres intel·ligents

Hola a tothom avui us mostraré com fer ulleres intel·ligents a casa! Una de les coses més importants de les ulleres intel·ligents és que és beneficiós tenir una cosa així en el món tecnològic actual i que no hi ha una sola versió d’ulleres intel·ligents, ja que totes tenen funcions increïbles i un nombre infinit d’aplicacions que es podrien integrar. en el futur. Les característiques d’aquestes ulleres intel·ligents inclouen indicar l’hora, indicar-vos la temperatura cada 5 minuts, entre aquests 5 minuts que canvia entre la temperatura alta i baixa esperada per a aquell dia, també us indica la data. Però la seva principal característica és que pren una fotografia cada 10 segons i després analitza aquesta imatge per obtenir el text en què li retornarà informació útil, si troba una pregunta, la respondrà mitjançant wolfram o si troba una equació matemàtica ho resoldrà!

Subministraments:

Els subministraments necessaris per a aquest projecte inclouran els següents:

1) A Raspberry Pi 0 W (de vilros.com)

2) Una pantalla OLED de 128x64 clara (de Sparkfun.com)

3) Un mòdul de càmera formatat per a Raspberry Pi 0 W (de amazon.com)

4) Qualsevol ullera que trieu

5) Filferros

6) Soldador

7) Soldadura sense plom (perquè no voleu morir de plom)

8) Adhesiu de 2 vies

9) targeta SD mínima de 8 GB

10) ordinador i connexió a Internet

Suposant que ja teniu un ordinador i una connexió a Internet, el cost d’aquestes ulleres arribarà als 130,00 dòlars

Pas 1: cablejar el circuit

Cablatge del circuit!
Cablatge del circuit!

Per tal de mostrar text a la pantalla, haurà de connectar-se a l’OLED mitjançant I2C o SPI, trio I2C, ja que és el que més còmode faig servir, però si us ve de gust connectar-vos-hi mitjançant SPI, seguiu aquest tutorial a al lloc web Sparkfun i torneu aquí quan hàgiu acabat. https://learn.sparkfun.com/tutorials/transparent-g… Si heu triat I2C com he soldat els cables tal com s'indica a continuació:

Pi / / OLED / /

3,3v 3,3v

GND GND

SDA SDA

SCL SCL

Tingueu en compte que l'OLED transparent només pot gestionar 3.3v.

Un cop hàgiu acabat de connectar el circuit, feu lliscar el cable de cinta del mòdul de la càmera al suport del cable de cinta del raspberry pi, traient la pinça negra i lliscant-la cap enrere un cop el cable de cinta estigui al seu lloc.

Pas 2: accediu al Raspberry Pi

Mitjançant ssh podem accedir al nostre pi amb el nostre PC sense connectar cap ratolí i monitor extern de teclat extern. El primer que heu de fer és connectar la targeta SD al vostre PC amb un adaptador o un port integrat, i després haureu d’anar a aquest enllaç https://www.raspberrypi.org/downloads/raspbian/ i descarregar Raspbian buster amb escriptori. En segon lloc, heu de posar el sistema operatiu a la targeta SD mitjançant BalenaEtcher. Seleccioneu la targeta SD i el sistema operatiu Raspbian i feu clic a "flash". Aquest procés pot trigar una mica, de manera que torneu a acabar. En tercer lloc, aneu a la targeta SD a l’explorador de fitxers o al cercador de mac i creeu un fitxer de text anomenat wpa_supplicant, assegureu-vos d’eliminar l’extensió.txt i afegir.conf; al fitxer enganxeu el següent:

país = EUA

ctrl_interface = DIR = / var / run / wpa_supplicant GROUP = netdev update_config = 1 xarxa = {ssid = "WIFI_SSID" scan_ssid = 1 psk = "WIFI_PASSWORD" key_mgmt = WPA-PSK}

Haureu d’introduir el vostre nom i contrasenya de WiFi als llocs i al país corresponents si no esteu als EUA. Tingueu en compte que el Raspberry Pi només es pot connectar a una xarxa de 2,4 Ghz, cosa que significa que el vostre ordinador també haurà de connectar-se a aquesta xarxa. Després de crear un fitxer de text buit sense cap extensió anomenada ssh i expulsar la targeta SD. Aleshores haureu d’instal·lar PuTTY https://www.putty.org/ que és el que faràs servir per habilitar ssh. Un cop instal·lat, introduïu l'adreça IP del vostre raspberry pi, podeu esbrinar què és accedint al vostre lloc web dels routers iniciant la sessió i veient els dispositius connectats.

Després d’accedir al Raspberry Pi, us demanarà que inicieu la sessió, el nom d’usuari per defecte és "pi" i la contrasenya és "raspberry". Escriviu sudo raspi-config i aneu a les opcions d’interfície i activeu càmera, ssh i i2c, feu clic a Finalitza i escriviu sudo reboot. Ara ja esteu llest per incorporar-vos al raspberry pi, endavant i instal·leu Escriptori remot i introduïu l'adreça IP del vostre raspberry pi i ara esteu bé per introduir-lo al raspberry pi.

Pas 3: temps de codificació

Temps de codificació!
Temps de codificació!

He triat codificar aquest programa en python, així que assegureu-vos que teniu instal·lat python3.7 o 3.8 al vostre escriptori. Aquest codi funciona utilitzant un servidor i un client, el més important és el vostre ordinador. El client o el raspberry pi farà una foto i la penjarà a la caixa de descàrrega, que és la recuperada pel servidor que després executa el processament d’imatges i el reconeixement de text a la imatge. Haureu d’obtenir un identificador d’aplicació wolframalpha, dropbox i openweathermap perquè això funcioni, tot el que heu de fer és anar al registre dels llocs web i us proporcionarà un identificador d’aplicació. i després introduïu-los als llocs corresponents determinats pels comentaris del codi. Assegureu-vos que pip ho ha instal·lat tot i que heu instal·lat Tesseract OCR i OpenCV. Creeu un fitxer python anomenat Server.py al vostre ordinador i un fitxer anomenat client.py al raspberry pi i, a continuació, copieu i enganxeu el codi. Tingueu en compte que, com més atrevits són els personatges i el fons és més blanc, millors són els resultats, és el cas de tots els programes de reconeixement de text.

Tots els enllaços per registrar-se a un identificador d'aplicació / /

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Assegureu-vos d’instal·lar Tesseract OCR i OpenCV / /

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

import dropboxde PIL importació d'imatge d'importació cv2 importació pytesseract de la importació pytesseract Importació de sortida numpy com a importació np importació de socket importació wolframalpha

dbx = dropbox. Dropbox ("dropboxAPIkey")

s = socket.socket (socket. AF_INET, socket. SOCK_STREAM)

app_id = "Identificador d'aplicació"

host = socket.gethostname ()

port = 60567 print (host) s.bind ((host, port)) s.listen (2)

mentre que és cert:

c, addr = s.accept () print (f'Got connection from: {addr} ') break

mentre que és cert:

mentre que True: metadades time.sleep (13.7), f = dbx.files_download ("/ dropbox_API / Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Imatge descarregada!") image = cv2.imread ("Image.jpg") Image = cv2.resize (imatge, (640, 480), interpolació = cv2. INTER_AREA) image68 = cv2.rotate (Image, cv2. ROTATE_90_COUNTERCLOCKWISE) gris = cv2.cvtColor (imatge68, cv2. COLOR_BGR2GRAY)

def remove_noise (gris):

return cv2.medianBlur (gris, 5) llindar de def (gris): return cv2.threshold (gris, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (gris): kernel = np.ones ((5, 5), np.uint8) retorna cv2.dilate (gris, nucli, iteracions = 1) d = pytesseract.image_to_data (gris, output_type = Output. DICT)

n_boxes = len (d ['text'])

per a l'interval (n_boxes): if int (d ['conf'] )> 60: (x, y, w, h) = (d ['left'] , d ['top'] , d ['width'] , d ['height'] ) gris = cv2.rectangle (gris, (x, y), (x + w, y + h), (0, 255, 0), 2) break pytesseract.pytesseract.tesseract_cmd = r "C: / Program Files / Tesseract-OCR / tesseract.exe" text = pytesseract.image_to_string (gris) print (text) mentre True: text2 = " "if len (text)> = 2: c.send (bytes (text," utf-8 ")) if len (text) = 2: consulta = text client = wolframalpha. Client (app_id) res = client.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 of luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106 import socket import datetime from time import import pyowm serial = i2c (port = 1, adreça = 0x3C) device = ssd1306 (serial, rotate = 1) camera = picamera. PiCamera () dropbox_access_token = "" #Your dropbox-id again computer_path = r "/home/pi/Image.jpg" dropbox_path = f "/dropbox_API/Image.jpg" s = socket.socket (socket. AF_INET, socket. SOCK_STREAM) host = "" #ip address of your PC port = 60567 s.connect ((host, port)) msg1 = "" owm = pyowm. OWM ("") # app-id for 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 ("") # la vostra ciutat i país en format de cadena weather = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) mentre és True: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) amb canvas (dispositiu) com a dibuix: draw.text ((0, 0), hour, fill = "white") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "blanc") draw.text ((0, 9), "_", fill = "blanc") draw.text ((0, 9), data, fill = "blanc" ") if min1 in num: obs = owm.weather_at_place (" ") # your town and country in string format again

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") if min1 not in 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] dropbox account linked") client. files_upload (open (computer_path, "rb"). read (), dropbox_path) print ("[UPLOADED] {}". format (computer_path)) full_msg = "" time.sleep (5) msg = s.recv (100) si len (msg)> = 2: full_msg + = msg.decode ("utf-8") print (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) amb canvas (dispositiu) com a dibuix: 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 = " blanc ") draw.text ((0, 9), data, emplenament = "blanc") si min1 en num: obs = owm.weather_at_place ("") # la vostra ciutat i país de nou en format de cadena

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") if min1 not in num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") si len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) amb canvas (dispositiu) com a dibuix: 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 = "blanc") draw.text ((0, 9), data, fill = "blanc") si min1 in num: obs = owm.weather_at_place ("") #la vostra ciutat i país de nou en format de cadena

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") if min1 not in 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) amb canvas (dispositiu) com a dibuix: 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 = "blanc") draw.text ((0, 9), data, fill = "blanc") si min1 en num: obs = owm.weather_at_place ("") # la vostra ciutat i país de nou en format de cadena

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") if min1 not in num: obs = owm.weather_at_place ("") # your town and country in string format again

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") if min1 not in num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") si len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) amb canvas (dispositiu) com a dibuix: 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 = "blanc") draw.text ((0, 9), data, fill = "blanc") si min1 in num: obs = owm.weather_at_place ("") #la vostra ciutat i país de nou en format de cadena

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") if min1 not in num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) client.files_delete (dropbox_path) print ("Arxius eliminats")

P. S. Sóc un programador aficionat, així que si us plau no qüestioneu els meus horrible mètodes de programació.

Pas 4: ajuntar-ho tot

Posant-ho tot junt!
Posant-ho tot junt!

Un cop heu acabat la resta, pràcticament només heu acabat de connectar la càmera raspberry pi i mostrar-la a les ulleres. Podeu fer-ho mitjançant l’adhesiu de doble cara esmentat als subministraments o podeu utilitzar els mètodes que creieu necessaris. És possible que també us hàgiu adonat que no he esmentat cap bateria en cap lloc d'aquesta lliçó, ja que tinc previstes actualitzacions futures per a aquestes ulleres i ara no en volia fixar cap. Però si voleu adjuntar-ne un, necessitareu un circuit de carregador de li-po a Amazon

Si us ha agradat i en voleu veure més, he començat un canal de YouTube i espero que també hi publiqueu tutorials. Aquí teniu l’enllaç:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Déu estalvia!

Joan 3:16 "Perquè Déu va estimar tant el món que va donar al seu Fill únic, el que creu en ell, no perirà, sinó que tindrà una vida eterna."

Recomanat: