Taula de continguts:
- Pas 1: cablejar el circuit
- Pas 2: accediu al Raspberry Pi
- Pas 3: temps de codificació
- Pas 4: ajuntar-ho tot
Vídeo: Ulleres intel·ligents: 4 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:10
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
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ó
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
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:
Ulleres intel·ligents (menors de 10 $ !!!): 8 passos (amb imatges)
Ulleres intel·ligents (menors de 10 $ !!!): Hola! Tots coneixem les ulleres intel·ligents com la que es diu E.D.I.T.H. feta pel nostre estimat personatge Tony Stark que després va passar a Peter Parker. Avui fabricaré un vidre tan intel·ligent que també sigui inferior a 10 dòlars. No són gaire
Ulleres intel·ligents: 6 passos
Ulleres intel·ligents: hola a tothom
Ulleres intel·ligents de bricolatge: Arduino / ESP: 5 passos
Ulleres intel·ligents de bricolatge: Arduino / ESP: la nova versió està disponible aquí: [YouTube] Hola, estic aquí per mostrar-vos el meu projecte de bricolatge i animar-vos a fer-ho vosaltres mateixos. El projecte són unes ulleres intel·ligents reals que tothom pot fer a casa. .Tots els codis es poden trobar aquí i recursos: [GitHub] Jo també
Com fer bricolatge de persianes intel·ligents amb interruptors intel·ligents SONOFF ?: 14 passos
Com es fan les persianes intel·ligents de bricolatge amb els interruptors intel·ligents SONOFF ?: Utilitzeu el mode d’interblocatge als interruptors intel·ligents SONOFF per convertir les vostres persianes o persianes corrents en intel·ligents. i tirar cap avall al vespre? De totes maneres, sóc
Maquinari i programari piratejar dispositius intel·ligents, bombeta LED Tuya i Broadlink, Sonoff, endoll intel·ligent BSD33: 7 passos
Hardware and Software Hack Smart Devices, Tuya and Broadlink LEDbulb, Sonoff, BSD33 Smart Plug: En aquest instructiu us mostro com he flasheado diversos dispositius intel·ligents amb el meu propi firmware, de manera que puc controlar-los mitjançant MQTT mitjançant la meva configuració d’Openhab. nous dispositius quan els vaig piratejar. Per descomptat, hi ha altres mètodes basats en programari per fer flash