Sadržaj:

Pametne naočare: 4 koraka
Pametne naočare: 4 koraka

Video: Pametne naočare: 4 koraka

Video: Pametne naočare: 4 koraka
Video: 4 точки спасут мозг, сосуды от стресса и снимут напряжение 2024, Novembar
Anonim
Pametne naočare
Pametne naočare
Pametne naočare
Pametne naočare

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

Ožičenje kruga!
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

Coding Time!
Coding Time!

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

Sve zajedno!
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: