Cuprins:

Ochelari inteligenți: 4 pași
Ochelari inteligenți: 4 pași

Video: Ochelari inteligenți: 4 pași

Video: Ochelari inteligenți: 4 pași
Video: Ce activitati sa fac cu copilul pentru a-i stimula vorbirea? 2024, Noiembrie
Anonim
Ochelari Smart
Ochelari Smart
Ochelari Smart
Ochelari Smart

Bună ziua tuturor astăzi, vă voi arăta cum să faceți ochelari Smart acasă! Unul dintre cele mai mari lucruri despre ochelarii inteligenți este cât de benefic este să ai așa ceva în lumea tehnologică de astăzi și cum nu există o singură versiune a ochelarilor inteligenți, deoarece toate au caracteristici uimitoare și un număr infinit de aplicații care ar putea fi integrate în viitor. Caracteristicile acestor ochelari inteligenți includ indicarea timpului, indicându-vă temperatura la fiecare 5 minute, între acele 5 minute schimbă între temperatura așteptată ridicată și scăzută pentru ziua respectivă, vă spune și data. Dar caracteristica sa principală este că face o poză la fiecare 10 secunde și apoi analizează acea imagine pentru text în care va returna informații utile despre aceasta, dacă găsește o întrebare, atunci îi va răspunde folosind wolfram sau dacă găsește o ecuație matematică o va rezolva!

Provizii:

Aprovizionările necesare pentru acest proiect vor include următoarele:

1) A Raspberry Pi 0 W (De la vilros.com)

2) Un ecran OLED clar de 128x64 (de la Sparkfun.com)

3) Un modul de cameră formatat pentru Raspberry Pi 0 W (De la amazon.com)

4) Orice ochelari la alegere

5) Firele

6) Fier de lipit

7) lipire fără plumb (pentru că nu doriți să muriți din plumb)

8) Adeziv cu 2 căi

9) Card SD min de 8 GB

10) computer și conexiune la internet

Presupunând că aveți deja un computer și o conexiune la internet, costul acestor ochelari va ajunge la aproximativ 130,00 USD

Pasul 1: Cablarea circuitului

Cablarea circuitului!
Cablarea circuitului!

Pentru a afișa text pe ecran, veți avea conectarea la OLED prin I2C sau SPI, aleg I2C, deoarece este cel pe care îl folosesc mai confortabil, dar dacă doriți să vă conectați la acesta prin SPI, urmați acest tutorial pe pe site-ul Sparkfun și reveniți aici când ați terminat. https://learn.sparkfun.com/tutorials/transparent-g… Dacă ați ales I2C pentru că am lipit firele, după cum se indică în următoarele:

Pi / / OLED / /

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Vă rugăm să rețineți că OLED clar poate gestiona doar 3.3v.

După ce ați terminat conectarea circuitului, glisați cablul panglică al modulului camerei în suportul pentru cablu panglică de pe zmeura pi scoțând clema neagră și glisând-o înapoi odată ce cablul panglică este în poziție.

Pasul 2: Accesarea Raspberry Pi

Folosind ssh putem accesa pi-ul nostru cu computerul nostru fără a conecta un mouse și tastatură externi suplimentari. Primul lucru pe care îl faceți este să vă conectați cardul SD la computer cu un adaptor sau un port încorporat, apoi va trebui să vă îndreptați către acest link https://www.raspberrypi.org/downloads/raspbian/ și să descărcați Raspbian buster cu desktop. În al doilea rând trebuie să puneți sistemul de operare pe cardul SD folosind BalenaEtcher, selectați cardul SD și sistemul de operare Raspbian și faceți clic pe „flash”, acest proces ar putea dura ceva, așa că reveniți când ați terminat. În al treilea rând, accesați cardul SD din fișierul Explorer sau Finder de pe Mac și creați un fișier text numit wpa_supplicant, asigurați-vă că ștergeți extensia.txt și adăugați.conf, în fișier lipiți următoarele:

country = SUA

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}

Va trebui să introduceți numele și parola WiFi în locurile și țara corespunzătoare dacă nu vă aflați în SUA. Rețineți că Raspberry Pi se poate conecta doar la o rețea de 2,4 Ghz, ceea ce înseamnă că computerul dvs. va trebui să se conecteze și la rețeaua respectivă. După ce creați un fișier text gol fără nicio extensie numită ssh și apoi scoateți cardul SD. Apoi, va trebui să instalați PuTTY https://www.putty.org/, ceea ce veți folosi pentru a activa ssh. Odată instalat, introduceți adresa IP a raspberry pi, vă puteți da seama ce este accesând site-ul routerelor dvs. conectându-vă și uitându-vă la dispozitivele conectate.

După ce obțineți acces la Raspberry Pi, vă va cere să vă conectați, numele de utilizator implicit este „pi” și parola este „zmeură”. Tastați sudo raspi-config apoi accesați opțiunile de interfață și activați camera, ssh și i2c, apoi faceți clic pe Terminare și tastați sudo reboot. Acum sunteți gata să intrați în raspberry pi, mergeți mai departe și instalați Remote Desktop și introduceți adresa IP a raspberry pi și acum sunteți bine să intrați în raspberry pi.

Pasul 3: Timp de codare

Timp de codare!
Timp de codare!

Am ales să codez acest program în python, deci asigurați-vă că aveți python3.7 sau 3.8 instalat pe desktop. Acest cod funcționează utilizând un server și un client, severul fiind computerul dvs. Clientul sau raspberry pi vor face o fotografie și o vor încărca în dropbox, care este recuperată de server, care apoi execută procesarea imaginii și recunoașterea textului pe imagine. Va trebui să obțineți un id de aplicație wolframalpha, dropbox și openweathermap pentru ca acest lucru să funcționeze, tot ce trebuie să faceți este să accesați site-ul web de înscriere și vă va oferi un ID de aplicație. și apoi introduceți-le în locurile corespunzătoare determinate de comentariile din cod. Asigurați-vă că ați instalat pip și ați instalat Tesseract OCR și OpenCV. Creați un fișier python numit Server.py pe computerul dvs. și un fișier numit client.py pe raspberry pi și apoi copiați și lipiți codul. Dar să știți că cu cât personajele sunt mai îndrăznețe și fundalul este mai alb, cu atât rezultatele sunt mai bune, acesta este cazul fiecărui software de recunoaștere a textului.

Toate linkurile pentru a vă înscrie pentru un ID de aplicație / /

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Asigurați-vă că instalați Tesseract OCR și OpenCV / /

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

import dropboxfrom PIL import Image cv2 import pytesseract from pytesseract import Output import numpy as np import wolframalpha import socket time import

dbx = dropbox. Dropbox ("dropboxAPIkey")

s = socket.socket (socket. AF_INET, socket. SOCK_STREAM)

app_id = "ID-ul aplicației"

host = socket.gethostname ()

port = 60567 print (host) s.bind ((host, port)) s.listen (2)

în timp ce este adevărat:

c, addr = s.accept () print (f'Got connection from: {addr} ') break

în timp ce este adevărat:

în timp ce True: metadate time.sleep (13.7), f = dbx.files_download ("/ dropbox_API / Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Imagine descărcată!") image = cv2.imread ("Image.jpg") Image = cv2.resize (imagine, (640, 480), interpolare = cv2. INTER_AREA) image68 = cv2.rotate (Image, cv2. ROTATE_90_COUNTERCLOCKWISE) gri = cv2.cvtColor (imagine68, cv2. COLOR_BGR2GRAY)

def remove_noise (gri):

return cv2.medianBlur (gri, 5) def prag (gri): return cv2.threshold (gri, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (gri): kernel = np.ones ((5, 5), np.uint8) returnează cv2.dilate (gri, nucleu, iterații = 1) d = pytesseract.image_to_data (gri, output_type = Output. DICT)

n_boxes = len (d ['text'])

pentru i în raza (n_boxes): if int (d ['conf'] )> 60: (x, y, w, h) = (d ['left'] , d ['top'] , d ['lățime'] , d ['înălțime'] ) gri = cv2.rectangle (gri, (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 (gri) print (text) în timp ce True: text2 = " "if len (text)> = 2: c.send (bytes (text," utf-8 ")) if len (text) = 2: interogare = 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:

import dropboximport picamera import timp de la luma.core.interface.serial import i2c de la luma.core.render import pânză de la luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106 import socket import datetime din timp import somn import pyowm serial = i2c (port = 1, address = 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 pentru 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. lună) + "/" + str (cdt.year) obs = owm.weather_at_place ("") # orașul și țara dvs. în format șir weather = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) în timp ce True: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) cu pânză (dispozitiv) ca desen: draw.text ((0, 0), hour, fill = "alb") draw.text ((11, 0), ":", fill = "alb") draw.text ((15, 0), min1, fill = "alb") draw.text ((0, 9), "_", fill = "alb") draw.text ((0, 9), data, fill = "alb ") dacă min1 în num: obs = owm.weather_at_place (" ") # orașul și țara dvs. în format șir din nou

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) 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) cu pânză (dispozitiv) ca desen: draw.text ((0, 19), full_msg, fill = "alb") draw.text ((0, 0), ora, fill = "alb") draw.text ((11, 0), ":", fill = "alb") draw.text ((15, 0), min1, fill = "alb") draw.text ((0, 9), "_", fill = " alb ") draw.text ((0, 9), data, completare = "alb") dacă min1 în num: obs = owm.weather_at_place ("") # orașul și țara dvs. în format șir din nou

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") 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 = "white") draw. text ((0, 9), "_", fill = "alb") draw.text ((0, 9), data, fill = "alb") dacă min1 în num: obs = owm.weather_at_place ("") # orașul și țara dvs. din nou în format șir

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) with canvas (device) as 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 = "alb") draw.text ((15, 0), min1, fill = "alb") draw.text ((0, 9), "_", fill = "alb") draw.text ((0, 9), data, fill = "alb") dacă min1 în num: obs = owm.weather_at_place ("") # orașul și țara dvs. în format șir din nou

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 ("") # orașul și țara dvs. în format șir din nou

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") 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 = "white") draw. text ((0, 9), "_", fill = "alb") draw.text ((0, 9), data, fill = "alb") dacă min1 în num: obs = owm.weather_at_place ("") # orașul și țara dvs. din nou în format șir

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 ("Fișiere șterse")

P. S. Sunt programator amator, așa că vă rog să nu puneți la îndoială metodele mele oribile de programare.

Pasul 4: Puneți totul împreună

Punând totul împreună!
Punând totul împreună!

Odată ce ați terminat orice altceva, practic ați terminat tot ce vă mai rămâne de făcut este să atașați aparatul de fotografiat raspberry pi și să îl afișați pe ochelari. Puteți face acest lucru folosind adezivul pe două fețe menționat în consumabile sau puteți utiliza orice metode pe care le considerați necesare. De asemenea, s-ar putea să fi observat că nu am menționat nicio baterie nicăieri în această lecție, pentru că am planificate viitoare actualizări pentru aceste ochelari și nu am vrut să le atașez chiar acum. Dar dacă doriți să atașați unul, veți avea nevoie de un circuit de încărcare li-po de la Amazon

Dacă ți-a plăcut acest lucru și vrei să vezi mai multe, am început un canal YouTube și sper să postez tutoriale și acolo. Iată linkul:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Dumnezeu mântuiește!

Ioan 3:16 „Căci atât de mult a iubit Dumnezeu lumea, încât El L-a dat pe singurul Său Fiu, cel care crede astfel în El nu va pieri, ci va avea o viață veșnică”.

Recomandat: