Sadržaj:
- Korak 1: Ožičenje kruga
- Korak 2: Pristupanje Raspberry Pi
- Korak 3: Vrijeme kodiranja
- Korak 4: Sve zajedno
Video: Pametne naočale: 4 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:31
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 ovakvo nešto 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 bi se mogle integrirati u budućnosti. Značajke ovih pametnih naočala 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. No, njegova glavna značajka je da fotografira 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 to će to riješiti!
Pribor:
Opskrba potrebna za ovaj projekt uključivat će sljedeće:
1) A Raspberry Pi 0 W (s vilros.com)
2) Jasan OLED zaslon 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čunalo 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
Kako 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, no ako se želite povezati 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 ste dovršili povezivanje strujnog kruga, gurnite vrpčani kabel modula kamere u držač vrpčnog kabela na malini pi izvlačenjem crne stezaljke i uvlačenjem natrag kad vrpčni kabel sjedne na mjesto.
Korak 2: Pristupanje Raspberry Pi
Pomoću ssh -a možemo pristupiti svom pi -u s računala bez povezivanja dodatnog vanjskog miša s tipkovnicom i monitora. Prvo što trebate učiniti je spojiti SD karticu na računalo adapterom ili ugrađenim priključkom, 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 pomoću BalenaEtcher -a, odaberite svoju SD karticu i Raspbian OS i kliknite "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, svakako obriš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 spojiti 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/ što ć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 mjesto 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 sučelja i omogućite kameru, ssh i i2c, zatim kliknite dovrš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 poslužitelja i klijenta, pri čemu je sjever vaše računalo. Klijent ili malina pi snimit će sliku i prenijeti je u dropbox koji preuzima poslužitelj 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 jeste li sve instalirali i instalirali Tesseract OCR i OpenCV. Napravite python datoteku pod imenom Server.py na svom računalu i datoteku client.py na malini pi, a zatim kopirajte i zalijepite kôd. No, 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 istina:
c, addr = s.accept () print (f'Dobio vezu iz: {addr} ') break
dok je istina:
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.prag (sivo, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (sivo): kernel = np.ones ((5, 5), np.uint8) return cv2.dilate (sivo, jezgra, iteracije = 1) d = pytesseract.image_to_data (sivo, output_type = Output. DICT)
n_kutije = len (d ['tekst'])
za i u rasponu (n_kutije): ako je 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 (sivi) 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 s luma.oled.device uvoz ssd1306, ssd1325, ssd1331, sh1106 uvoz utičnice datum i vrijeme iz vremena uvoz spavanje uvoz pyowm serijski = i2c (port = 1, adresa = 0x3C) uređaj = ssd1306 (serijski, zakretanje = 1) kamera = pikamera. PiCamera () dropbox_access_token = "" #Opet vaš dropbox-id 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) date = 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) s 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 ponovno u nizu
vrijeme = 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) s platnom (uređaj) kao draw: 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 ponovno u nizu
vrijeme = 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") ako je len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) s 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 ("") #ponovno vaš grad i zemlja u string formatu
vrijeme = 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) s 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") if min1 in num: obs = owm.weather_at_place ("")#vaš grad i država ponovno u nizu
vrijeme = 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 ponovno u nizu
vrijeme = 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") ako je len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) s 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 ("") #ponovno vaš grad i zemlja u string formatu
vrijeme = 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 nemojte dovoditi u pitanje moje užasne metode programiranja.
Korak 4: Sve zajedno
Nakon što završite sve ostalo, praktički ste završili, samo vam preostaje da pričvrstite malinu pi kameru i zaslon na čaše. To možete učiniti pomoću dvostranog ljepila spomenutog u potrošnom materijalu ili možete koristiti bilo koje metode za koje smatrate da su potrebne. Možda ste i primijetili da u ovoj lekciji nigdje nisam spomenuo bateriju jer sam planirao buduće nadogradnje ovih naočala i nisam je želio sada pričvrstiti. 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, otvorio sam YouTube kanal i nadam se da ću i tamo objavljivati tutoriale. Evo linka:
www.youtube.com/channel/UCGqcWhHXdZf231rLe…
Bog spašava!
Ivan 3:16 "Jer Bog je toliko ljubio svijet da je dao svoga Sina Jedinorođenca koji tako vjeruje u Njega neće propasti, nego će imati život vječni."
Preporučeni:
DIY FPV naočale: 6 koraka
DIY FPV zaštitne naočale: Jeste li ikada vidjeli one coooooooooostly fpv sustave koje imaju momci na flitetestu. Pa zavidio sam im što imaju tako velike stvari. Znao sam za raspon mobilnih telefona i moć video poziva ili Skypea ili slično. Pa sam odlučio vratiti svoj novac
Pametne naočale (ispod 10 USD !!!): 8 koraka (sa slikama)
Pametne naočale (ispod 10 USD !!!): Zdravo! Svima su nam poznate pametne naočale poput one po imenu E.D.I.T.H. napravio naš voljeni lik Tony Stark koji je kasnije prenio Peteru Parkeru. Danas ću napraviti jedno takvo pametno staklo koje će koštati i ispod 10 USD! Nisu baš
Pametne naočale: 6 koraka
Pametne naočale: Bok 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čale DIY - Arduino/ESP: 5 koraka
DIY pametne naočale - Arduino/ESP: Nova verzija dostupna je ovdje: [YouTube] Hej dečki! Ovdje sam da vam pokažem svoj DIY projekt i potaknem vas da to sami učinite! Projekt su prave pametne naočale koje svatko može napraviti kod kuće .Svu šifru možete pronaći ovdje i izvore: [GitHub] Ja također
Napravite pametne naočale za proširenu stvarnost pomoću Arduina: 7 koraka
DIY Pametne naočale za proširenu stvarnost pomoću Arduina: 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