Sommario:

Occhiali intelligenti: 4 passaggi
Occhiali intelligenti: 4 passaggi

Video: Occhiali intelligenti: 4 passaggi

Video: Occhiali intelligenti: 4 passaggi
Video: 5 Migliori Occhiali Connessi e Intelligenti nel 2022 2024, Luglio
Anonim
Occhiali intelligenti
Occhiali intelligenti
Occhiali intelligenti
Occhiali intelligenti

Ciao a tutti oggi vi mostro come realizzare gli Smart Glasses in casa! Una delle cose più belle degli occhiali intelligenti è quanto sia vantaggioso avere qualcosa di simile nel mondo della tecnologia di oggi e come non ci sia solo una versione di occhiali intelligenti poiché tutti hanno caratteristiche sorprendenti e un numero infinito di applicazioni che potrebbero essere integrate nel futuro. Le caratteristiche di questi occhiali intelligenti includono la lettura dell'ora, che ti dice la temperatura ogni 5 minuti, tra quei 5 minuti scambia tra l'alta e la bassa temperatura prevista per quel giorno, ti dice anche la data. Ma la sua caratteristica principale è che scatta una foto ogni 10 secondi e poi analizza quell'immagine per il testo in cui restituirà informazioni utili su di essa, se trova una domanda allora risponderà usando wolframio, o se trova un'equazione matematica lo risolverà!

Forniture:

Le forniture necessarie per questo progetto includeranno quanto segue:

1) Un Raspberry Pi 0 W (da villos.com)

2) Un chiaro display OLED 128x64 (da Sparkfun.com)

3) Un modulo fotocamera formattato per Raspberry Pi 0 W (da amazon.com)

4) Tutti gli occhiali a tua scelta

5) Fili

6) Saldatore

7) Saldatura senza piombo (perché non vuoi morire di piombo)

8) Adesivo bidirezionale

9) Scheda SD minima di 8 GB

10) computer e connessione internet

Supponendo che tu abbia già un computer e una connessione Internet, il costo di questi occhiali sarà di circa $ 130,00

Passaggio 1: cablaggio del circuito

Cablaggio del circuito!
Cablaggio del circuito!

Per visualizzare il testo sullo schermo dovrai connetterti all'OLED tramite I2C o SPI, scelgo I2C in quanto è quello con cui mi trovo più a mio agio ma se hai voglia di connetterti tramite SPI segui questo tutorial su il sito web di Sparkfun e torna qui quando hai finito. https://learn.sparkfun.com/tutorials/transparent-g… Se hai scelto I2C in quanto ho saldato i fili come indicato di seguito:

Pi \/ OLED \/

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Si prega di notare che l'OLED trasparente può gestire solo 3.3v.

Dopo aver terminato il collegamento del circuito, fai scorrere il cavo a nastro del modulo della fotocamera nel supporto del cavo a nastro sul lampone pi estraendo il morsetto nero e facendolo scorrere nuovamente una volta che il cavo a nastro è in posizione.

Passaggio 2: accesso al Raspberry Pi

Usando ssh possiamo accedere al nostro pi con il nostro pc senza collegare una tastiera e un monitor esterni aggiuntivi. La prima cosa che fai è collegare la tua scheda SD al PC con un adattatore o una porta integrata, quindi dovrai andare a questo link https://www.raspberrypi.org/downloads/raspbian/ e scaricare Raspbian buster con scrivania. In secondo luogo devi mettere il sistema operativo sulla scheda SD usando BalenaEtcher, seleziona la tua scheda SD e il sistema operativo Raspbian e fai clic su "flash" questo processo potrebbe richiedere del tempo, quindi torna quando hai finito. Terzo, vai alla scheda SD in Esplora file o Finder su Mac e crea un file di testo chiamato wpa_supplicant assicurati di eliminare l'estensione.txt e aggiungi.conf, nel file incolla quanto segue:

paese=USA

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

Dovrai inserire il nome e la password WiFi nei luoghi e nel paese corrispondenti se non ti trovi negli Stati Uniti. Tieni presente che il Raspberry Pi può connettersi solo a una rete a 2,4 Ghz, il che significa che anche il tuo PC dovrà connettersi a quella rete. Dopo aver creato un file di testo vuoto senza estensione chiamato ssh, quindi espellere la scheda SD. Dovrai quindi installare PuTTY https://www.putty.org/ che è ciò che utilizzerai per abilitare ssh. Una volta installato inserisci l'indirizzo IP del tuo raspberry pi, puoi capire di cosa si tratta accedendo al sito web del tuo router e guardando i dispositivi collegati.

Dopo aver ottenuto l'accesso al Raspberry Pi, ti verrà chiesto di accedere, il nome utente predefinito è "pi" e la password è "raspberry". Digita sudo raspi-config, quindi vai alle opzioni di interfaccia e abilita fotocamera, ssh e i2c, quindi fai clic su Fine e digita sudo reboot. Ora sei pronto per ssh nel raspberry pi, vai avanti e installa Remote Desktop e inserisci l'indirizzo IP del tuo raspberry pi e ora sei a posto per ssh nel raspberry pi.

Passaggio 3: tempo di codifica

Tempo di codifica!
Tempo di codifica!

Ho scelto di codificare questo programma in python, quindi assicurati di avere python3.7 o 3.8 installato sul desktop. Questo codice funziona utilizzando un server e un client, il server è il tuo pc. Il client o raspberry pi scatterà una foto e la caricherà su dropbox che è recuperata dal server che quindi esegue l'elaborazione delle immagini e il riconoscimento del testo sull'immagine. Dovrai ottenere un app-id wolframalpha, dropbox e openweathermap affinché funzioni, tutto ciò che devi fare è andare alla registrazione dei siti Web e ti darà un app-id. e poi inserirli nei posti corrispondenti determinati dai commenti nel codice. Assicurati di avere pip installato tutto e installato Tesseract OCR e OpenCV. Crea un file python chiamato Server.py sul tuo pc e un file chiamato client.py sul raspberry pi, quindi copia e incolla il codice. Ma sappi che più i caratteri sono in grassetto e lo sfondo più bianco, migliori sono i risultati, questo è il caso di ogni software di riconoscimento del testo.

Tutti i link per registrarsi per un app-id \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Assicurati di installare Tesseract OCR e 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 tempo di importazione

dbx = dropbox. Dropbox("dropboxAPIkey")

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

app_id = "ID app"

host = socket.gethostname()

porta = 60567 print (host) a.bind((host, porta)) a.ascolta(2)

mentre vero:

c, addr = s.accept() print (f'Ho ottenuto la connessione da: {addr}') break

mentre vero:

while True: metadati time.sleep(13.7), f = dbx.files_download("/dropbox_API/Image.jpg") out = open("Image.jpg", 'wb') out.write(f.content) out. close() print("Immagine scaricata!") image = cv2.imread("Image.jpg") Image = cv2.resize(image, (640, 480), interpolation=cv2. INTER_AREA) image68 = cv2.rotate(Immagine, cv2. ROTATE_90_COUNTERCLOCKWISE) grigio = cv2.cvtColor(image68, cv2. COLOR_BGR2GRAY)

def remove_noise(grigio):

return cv2.medianBlur(grigio, 5) def thresholding(grigio): return cv2.threshold(grigio, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU)[1] def dilate(grigio): kernel = np.ones((5, 5), np.uint8) return cv2.dilate(gray, kernel, iterazioni=1) d = pytesseract.image_to_data(gray, output_type = Output. DICT)

n_caselle = len(d['testo'])

for i in range(n_boxes): if int(d['conf']) > 60: (x, y, w, h) = (d['left'], d['top'], d['larghezza'], d['altezza']) grigio = cv2.rettangolo(grigio, (x, y), (x + w, y + h), (0, 255, 0), 2) break pytesseract.pytesseract.tesseract_cmd = r"C:\Programmi\Tesseract-OCR\tesseract.exe" text = pytesseract.image_to_string(grigio) print(text) while True: text2 = " " if len(testo) >= 2: c.send(bytes(testo, "utf-8")) if len(testo) = 2: query = 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

Cliente.py:

import dropboximport picameraimport time da luma.core.interface.serial importa i2c da luma.core.render importa canvas da 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, rotante=1) camera = picamera. PiCamera() dropbox_access_token= "" #Il tuo dropbox-id di nuovo computer_path=r"/home/pi/Image.jpg" dropbox_path= f"/dropbox_API/Image.jpg" s = socket.socket(socket. AF_INET, socket. SOCK_STREAM) host = ""#indirizzo ip della porta del tuo pc = 60567 s.connect((host, porta)) msg1 = " " owm = pyowm. OWM("")#app-id per 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. mese) + "/" + str(cdt.year) obs = owm.weather_at_place("")#la tua città e il tuo paese in formato stringa 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 canvas(device) as draw: draw.text((0, 0), hour, fill = "white") draw.text((11, 0), ":", fill = "white") draw.text((15, 0), min1, fill = "bianco") draw.text((0, 9), "_", fill = "bianco") draw.text((0, 9), date, fill = "bianco ") if min1 in num: obs = owm.weather_at_place("")#la tua città e il tuo paese di nuovo in formato stringa

meteo = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "bianco") se min1 non è in num: draw.text((40, 0), temp2, fill = "white") draw.text((32, 0), "F", fill = "bianco") camera.start_preview() time.sleep(2) camera.capture("/home/pi/Image.jpg") camera.stop_preview client = dropbox. Dropbox(dropbox_access_token) print("[SUCCESSO] account dropbox collegato"). 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 canvas(device) come draw: draw.text((0, 19), full_msg, fill = "white") draw.text((0, 0), hour, fill = "white") draw.text((11, 0), ":", fill = "bianco") draw.text((15, 0), min1, fill = "white") draw.text((0, 9), "_", fill = " bianco") draw.text((0, 9), data, fill = "bianco") if min1 in num: obs = owm.weather_at_place("")#la tua città e il tuo paese di nuovo in formato stringa

meteo = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "bianco") se min1 non è in num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "bianco") if len(msg) <= 1: cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) with canvas(device) as draw: draw.text((0, 0), hour, fill = "white") draw.text((11, 0), ":", fill = "white") draw.text((15, 0), min1, fill = "bianco") draw. text((0, 9), "_", fill = "white") draw.text((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place("") #la tua città e il tuo paese di nuovo in formato stringa

meteo = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "bianco") se min1 non è in num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "bianco") 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 canvas(device) as draw: draw.text((0, 19), full_msg, fill = "bianco") draw.text((0, 29), full_msg2, fill = "white") draw.text((0, 0), hour, fill = "bianco") draw.text ((11, 0), ":", fill = "bianco") draw.text((15, 0), min1, fill = "white") draw.text((0, 9), "_", fill = "bianco") draw.text((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place("")#la tua città e il tuo paese di nuovo in formato stringa

meteo = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "bianco") se min1 non è in num: obs = owm.weather_at_place("")#la tua città e il tuo paese di nuovo in formato stringa

meteo = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "bianco") se min1 non è in num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "bianco") if len(msg1) <= 1: cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) with canvas(device) as draw: draw.text((0, 0), hour, fill = "white") draw.text((11, 0), ":", fill = "white") draw.text((15, 0), min1, fill = "bianco") draw. text((0, 9), "_", fill = "white") draw.text((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place("") #la tua città e il tuo paese di nuovo in formato stringa

meteo = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "bianco") se min1 non è in num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "bianco") time.sleep(7) client.files_delete(dropbox_path) print ("File cancellati")

P. S. Sono un programmatore dilettante, quindi per favore non mettere in dubbio i miei orribili metodi di programmazione.

Passaggio 4: mettere tutto insieme

Mettere tutto insieme!
Mettere tutto insieme!

Una volta terminato tutto il resto, praticamente tutto ciò che resta da fare è collegare la fotocamera e il display Raspberry Pi agli occhiali. Puoi farlo utilizzando l'adesivo biadesivo menzionato nelle forniture o puoi utilizzare qualsiasi metodo che ritieni necessario. Potresti anche aver notato che non ho menzionato una batteria da nessuna parte in questa lezione perché ho pianificato aggiornamenti futuri per questi occhiali e non volevo collegarne uno in questo momento. Ma se vuoi collegarne uno, avrai bisogno di un circuito di ricarica li-po da Amazon

Se ti è piaciuto e vuoi vedere di più, ho aperto un canale YouTube e spero di pubblicare anche dei tutorial. Ecco il link:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Dio salva!

Giovanni 3:16 "Poiché Dio ha tanto amato il mondo che ha dato il suo unigenito Figlio, colui che sempre crede in lui non perirà, ma avrà vita eterna".

Consigliato: