Sadržaj:
- Korak 1: Ožičenje kruga
- Korak 2: Pristupanje Raspberry Pi -u
- Korak 3: Vrijeme kodiranja
- Korak 4: Spojite sve zajedno
Video: Pametne naočare: 4 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:04
Pozdrav svima danas ću vam pokazati kako napraviti pametne naočale kod kuće! Jedna od najvećih stvari o pametnim naočalama je koliko je korisno imati nešto ovakvo u današnjem svijetu tehnologije i kako ne postoji samo jedna verzija pametnih naočala jer sve imaju nevjerojatne značajke i beskonačan broj aplikacija koje se mogu integrirati u budućnosti. Karakteristike ovih pametnih čaša uključuju vrijeme govorenja, govoreći vam temperaturu svakih 5 minuta, između tih 5 minuta mijenja se između očekivane visoke i niske temperature za taj dan, također vam govori i datum. Ali njegova glavna značajka je da snima sliku svakih 10 sekundi, a zatim analizira tu sliku radi teksta u kojem će vratiti korisne informacije o njoj, ako pronađe pitanje, odgovorit će na nju pomoću wolframa ili ako pronađe matematičku jednadžbu rešiće to!
Potrošni materijal:
Zalihe potrebne za ovaj projekt uključivat će sljedeće:
1) A Raspberry Pi 0 W (S vilros.com)
2) Jasan OLED ekran 128x64 (sa Sparkfun.com)
3) Modul kamere formatiran za Raspberry Pi 0 W (s amazon.com)
4) Bilo koje čaše po vašem izboru
5) Žice
6) Lemilica
7) Lemilo bez olova (jer ne želite umrijeti od olova)
8) 2 -smjerno ljepilo
9) SD kartica min. 8 GB
10) računarska i internetska veza
Pod pretpostavkom da već imate računalo i internetsku vezu, cijena ovih naočala iznosit će oko 130,00 USD
Korak 1: Ožičenje kruga
Da biste prikazali tekst na ekranu koji ćete morati povezati s OLED -om putem I2C ili SPI -a, biram I2C jer je to onaj koji mi je ugodnije koristiti, ali ako želite povezati se s njim putem SPI -a, slijedite ovaj vodič na web stranicu Sparkfun i vratite se kad završite. https://learn.sparkfun.com/tutorials/transparent-g… Ako ste odabrali I2C jer sam lemio žice kako je naznačeno sljedećim:
Pi \/ OLED \/
3.3v 3.3v
GND GND
SDA SDA
SCL SCL
Imajte na umu da prozirni OLED može podnijeti samo 3.3v.
Nakon što završite s povezivanjem strujnog kruga, gurnite vrpčani kabel modula kamere u držač trakastog kabela na malini pi izvlačenjem crne stezaljke i uvlačenjem natrag nakon što je vrpčni kabel postavljen na mjesto.
Korak 2: Pristupanje Raspberry Pi -u
Pomoću ssh -a možemo pristupiti svom pi -u sa računara bez povezivanja dodatnog vanjskog miša na tastaturi i monitora. Prvo što trebate učiniti je spojiti SD karticu na računalo adapterom ili ugrađenim portom, a zatim ćete morati otići na ovu vezu https://www.raspberrypi.org/downloads/raspbian/ i preuzeti Raspbian buster sa radnom površinom. Drugo, morate staviti OS na SD karticu koristeći BalenaEtcher, izabrati SD karticu i Raspbian OS i kliknuti "flash". Ovaj proces bi mogao potrajati pa se vratite kad završite. Treće, idite na SD karticu u istraživaču datoteka ili tražilici na Mac -u i stvorite tekstualnu datoteku pod nazivom wpa_supplicant, obavezno izbrišite ekstenziju.txt i dodajte.conf, u datoteku zalijepite sljedeće:
zemlja = SAD
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}
Morate unijeti svoje WiFi ime i lozinku na odgovarajućim mjestima i u zemlji ako niste u SAD -u. Imajte na umu da se Raspberry Pi može povezati samo na mrežu od 2,4 GHz, što znači da će se i vaše računalo morati povezati s tom mrežom. Nakon što stvorite praznu tekstualnu datoteku bez nastavka pod nazivom ssh, a zatim izvadite SD karticu. Tada ćete morati instalirati PuTTY https://www.putty.org/ koji ćete koristiti za omogućavanje ssh -a. Nakon instaliranja unesite IP adresu svog malina pi, možete saznati o čemu se radi tako što ćete se prijaviti na web stranicu usmjerivača i pogledati povezane uređaje.
Nakon što dobijete pristup Raspberry Pi-u, od vas će se tražiti da se prijavite, zadano korisničko ime je "pi", a lozinka "malina". Upišite sudo raspi-config, a zatim idite na opcije povezivanja i omogućite kameru, ssh i i2c, zatim kliknite završi i upišite sudo reboot. Sada ste spremni za ssh u raspberry pi, samo instalirajte Remote Desktop i unesite IP adresu vašeg malina pi i sada ste spremni da ssh u malinu pi.
Korak 3: Vrijeme kodiranja
Odlučio sam kodirati ovaj program u pythonu pa provjerite imate li na radnoj površini instaliran python3.7 ili 3.8. Ovaj kôd radi pomoću servera i klijenta, pri čemu je sever vaše računalo. Klijent ili malina pi će snimiti sliku i učitati je u dropbox koji preuzima server koji zatim pokreće obradu slike i prepoznavanje teksta na slici. Morat ćete nabaviti wolframalpha, dropbox i openweathermap app-id da bi ovo funkcioniralo, sve što trebate učiniti je otići na registraciju web stranica i to će vam dati app-id. a zatim ih unesite na odgovarajuća mjesta određena komentarima u kodu. Provjerite je li pip instalirao sve i instalirao Tesseract OCR i OpenCV. Napravite python datoteku sa imenom Server.py na svom računaru i datoteku sa imenom client.py na malini pi, a zatim kopirajte i zalepite kôd. Ali znajte da što su hrabriji znakovi i bljeđa pozadina to su rezultati bolji, to je slučaj sa svakim softverom za prepoznavanje teksta.
Sve veze za registraciju za ID aplikacije \/
www.wolframalpha.com/
openweathermap.org/api
www.dropbox.com/developers/documentation
Obavezno instalirajte Tesseract OCR i 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 kao np import wolframalpha import socket vrijeme uvoza
dbx = dropbox. Dropbox ("dropboxAPIkey")
s = socket.socket (socket. AF_INET, socket. SOCK_STREAM)
app_id = "ID aplikacije"
host = socket.gethostname ()
port = 60567 print (host) s.bind ((host, port)) s.listen (2)
dok je True:
c, addr = s.accept () print (f'Dobio vezu iz: {addr} ') break
dok je True:
dok je True: time.sleep (13.7) metapodaci, f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Slika je preuzeta!") image = cv2.imread ("Image.jpg") Image = cv2.resize (image, (640, 480), interpolation = cv2. INTER_AREA) image68 = cv2.rotate (Image, cv2. ROTATE_90_COUNTERCLOCKWISE) siva = cv2.cvtBoja (image68, cv2. COLOR_BGR2GRAY)
def remove_noise (sivo):
return cv2.medianBlur (sivo, 5) def prag (sivo): povratak cv2.threshold (sivo, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (sivo): kernel = np.ones ((5, 5), np.uint8) return cv2.dilate (sivo, jezgro, iteracije = 1) d = pytesseract.image_to_data (sivo, output_type = Output. DICT)
n_kutije = len (d ['tekst'])
za i u rasponu (n_boks): if int (d ['conf'] )> 60: (x, y, w, h) = (d ['lijevo'] , d ['gore'] , d ['širina'] , d ['visina'] ) siva = cv2.pravokutnik (siva, (x, y), (x + w, y + h), (0, 255, 0), 2) prekinite pytesseract.pytesseract.tesseract_cmd = r "C: / Program Files / Tesseract-OCR / tesseract.exe" text = pytesseract.image_to_string (sivo) print (text) while True: text2 = " "if len (text)> = 2: c.send (bytes (text," utf-8 ")) if len (text) = 2: query = text client = wolframalpha. Client (app_id) res = client.query (upit) 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:
uvoz dropboximport picameraimport vrijeme iz luma.core.interface.serial uvoz i2c iz luma.core.render uvoz platno sa luma.oled.device uvoz ssd1306, ssd1325, ssd1331, sh1106 uvoz utičnice datum i vrijeme iz vremena uvoza spavanje uvoz pyowm serijski = i2c (port = 1, adresa = 0x3C) uređaj = ssd1306 (serijski, rotiraj = 1) kamera = pikamera. PiCamera () dropbox_access_token = "" #Vaš dropbox-id ponovo 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 adresa vašeg računarskog porta = 60567 s.connect ((host, port)) msg1 = "" owm = pyowm. OWM ("")#app-id za openweathermap num = ["05", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "00"] cdt = datetime.datetime.now () min1 = str (cdt.minute) datum = str (cdt.day) + "/" + str (cdt. mjesec) + "/" + str (cdt.godina) obs = owm.weather_at_place ("")#vaš grad i država u nizu format weather = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) dok je True: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) sa platnom (uređaj) kao draw: 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 ") ako je min1 u broju: obs = owm.weather_at_place (" ")#vaš grad i država ponovo u string formatu
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") ako min1 nije u broju: 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 račun povezan") klijent. 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) sa platnom (uređaj) kao crtanje: 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 = " bijelo ") draw.text ((0, 9), date, fill = "bijelo") ako je min1 u broju: obs = owm.weather_at_place ("")#vaš grad i država ponovo u string formatu
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") ako min1 nije u broju: 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) sa platnom (uređaj) kao draw: 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") ako je min1 u broju: obs = owm.weather_at_place ("") #vaš grad i država ponovo u string formatu
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") ako min1 nije u broju: 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) sa platnom (uređaj) kao draw: 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") ako je min1 u broju: obs = owm.weather_at_place ("")#vaš grad i država ponovo u string formatu
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") ako min1 nije u broju: obs = owm.weather_at_place ("")#vaš grad i država ponovo u string formatu
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") ako min1 nije u broju: 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) sa platnom (uređaj) kao draw: 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") ako je min1 u broju: obs = owm.weather_at_place ("") #vaš grad i država ponovo u string formatu
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") ako min1 nije u broju: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) client.files_delete (dropbox_path) print ("Datoteke izbrisane")
P. S. Ja sam programer amater pa vas molim da ne dovodite u pitanje moje užasne metode programiranja.
Korak 4: Spojite sve zajedno
Kada završite sve ostalo, praktično ste završili, sve što vam preostaje je da pričvrstite malinu pi kameru i ekran na čaše. To možete učiniti pomoću dvostranog ljepila spomenutog u potrošnom materijalu ili možete koristiti bilo koju metodu za koju smatrate da je potrebna. Možda ste i primijetili da u ovoj lekciji nigdje nisam spomenuo bateriju, jer sam planirao buduće nadogradnje ovih naočala i nisam ih želio staviti sada. Ali ako ga želite priključiti, trebat će vam krug punjača li-po od amazona
Ako vam se ovo svidjelo i želite vidjeti više, pokrenuo sam YouTube kanal i nadam se da ću i tamo objavljivati vodiče. Evo linka:
www.youtube.com/channel/UCGqcWhHXdZf231rLe…
Bog spašava!
Jovan 3:16 "Jer Bog je toliko zavoleo svet da je dao svog jedinog Sina koji uvek veruje u Njega neće propasti, već će imati život večni."
Preporučuje se:
Pametne naočare (ispod 10 USD !!!): 8 koraka (sa slikama)
Pametne naočare (ispod 10 USD !!!): Zdravo! Svima su nam poznate pametne naočale poput one koja se zove E.D.I.T.H. koju je napravio naš voljeni lik Tony Stark, a koja je kasnije proslijeđena Peteru Parkeru. Danas ću napraviti jedno takvo pametno staklo koje će koštati i ispod 10 USD! Nisu baš
Pametne naočare: 6 koraka
Pametne naočare: Zdravo svima! Danas ću s vama podijeliti nešto što sam dugo želio DIY pametne naočale napravljene samo oko 25 USD Sada omogućujem DIE - Učinite to izuzetno
Pametne naočare DIY - Arduino/ESP: 5 koraka
DIY pametne naočale - Arduino/ESP: Nova verzija dostupna je ovdje: [YouTube] Zdravo momci! Ovdje sam da vam pokažem svoj DIY projekt i potaknem vas da to sami učinite! Projekt su prave pametne naočale koje svako može napraviti kod kuće .Svu šifru možete pronaći ovdje i izvore: [GitHub] I ja
Napravite sami pametne naočare za proširenu stvarnost pomoću Arduina: 7 koraka
DIY Pametne naočare za proširenu stvarnost koristeći Arduino: Kako tehnologija brzo raste i integrira se u sve aspekte života ljudi, dizajneri i programeri pokušali su ljudima pružiti ugodnije iskustvo tehnologije. Jedan od tehnoloških trendova koji imaju za cilj olakšati život je nošenje
Naočare s tekućim kristalima za ambliopiju (naočare za vježbanje naizmjenične okluzije) [ATtiny13]: 10 koraka (sa slikama)
Naočare s tekućim kristalima za ambliopiju (naočale za izmjenu okluzije) [ATtiny13]: ambliopija (lijeno oko), poremećaj vida koji pogađa približno 3% populacije, obično se liječi jednostavnim okularima ili kapima atropina. Nažalost, te metode liječenja zatvaraju jače oko na duge, neprekinute vremenske periode, bez