Sommario:
- Passaggio 1: cablaggio del circuito
- Passaggio 2: accesso al Raspberry Pi
- Passaggio 3: tempo di codifica
- Passaggio 4: mettere tutto insieme
Video: Occhiali intelligenti: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 09:59
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
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
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
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:
Occhiali intelligenti (meno di $ 10!!!): 8 passaggi (con immagini)
Occhiali intelligenti (meno di $ 10!!!): Ciao! Conosciamo tutti gli Smart Glasses come quello chiamato E.D.I.T.H. realizzato dal nostro amato personaggio Tony Stark che è stato poi trasmesso a Peter Parker. Oggi costruirò un vetro così intelligente che anche sotto i $ 10! Non sono proprio un
Occhiali intelligenti: 6 passaggi
Smart Glasses: Ciao a tutti !! Oggi voglio condividere con voi ragazzi, qualcosa che desideravo da molto tempo A Smart Glasses fai-da-te costruiti intorno ai 25 $ Ora lasciamo morire - Do It Extremely
Occhiali intelligenti fai-da-te - Arduino/ESP: 5 passaggi
Occhiali intelligenti fai da te - Arduino/ESP: La nuova versione è disponibile qui: [YouTube] Ehi ragazzi! Sono qui per mostrarvi il mio progetto fai-da-te e incoraggiarvi a farlo da soli! Il progetto sono dei veri occhiali intelligenti che tutti possono realizzare a casa .Tutto il codice può essere trovato qui e le risorse:[GitHub]Ho anche
Come realizzare tende a rullo intelligenti fai-da-te con interruttori intelligenti SONOFF?: 14 passaggi
Come fare le tende a rullo intelligenti fai-da-te con gli interruttori intelligenti SONOFF?: utilizza la modalità di interblocco negli interruttori intelligenti SONOFF per trasformare le tue normali tende a rullo / veneziane in intelligenti e tirarlo giù la sera? Comunque, io sono
Occhiali intelligenti per realtà aumentata fai-da-te con Arduino: 7 passaggi
Occhiali intelligenti per realtà aumentata fai-da-te che utilizzano Arduino: poiché la tecnologia sta crescendo rapidamente e si integra a tutti gli aspetti della vita delle persone, designer e sviluppatori hanno cercato di fornire un'esperienza tecnologica più piacevole alle persone. Una delle tendenze tecnologiche che mirano a semplificare la vita è l'usura