Innehållsförteckning:

Smarta glasögon: 4 steg
Smarta glasögon: 4 steg

Video: Smarta glasögon: 4 steg

Video: Smarta glasögon: 4 steg
Video: Камера-ЛАМПА со слежением и определением человека. 2024, Juli
Anonim
Smarta glasögon
Smarta glasögon
Smarta glasögon
Smarta glasögon

Hej alla idag jag ska visa er hur man gör smarta glasögon hemma! En av de största sakerna med smarta glasögon är hur fördelaktigt det är att ha något liknande i dagens teknikvärld och att det inte bara finns en version av smarta glasögon, eftersom alla har fantastiska funktioner och ett oändligt antal applikationer som kan integreras i framtiden. Funktionerna i dessa smarta glasögon inkluderar beräkningstid, berättar temperaturen var 5: e minut, mellan dessa 5 minuter växlar den mellan förväntad hög och låg temperatur för den dagen, det berättar också datumet. Men dess huvudsakliga funktion är att den tar en bild var tionde sekund och sedan analyserar den bilden för text där den kommer att ge användbar information om den, om den hittar en fråga kommer den att svara på den med hjälp av wolfram, eller om den hittar en matematisk ekvation det kommer att lösa det!

Tillbehör:

De förnödenheter som behövs för detta projekt kommer att innehålla följande:

1) En Raspberry Pi 0 W (Från vilros.com)

2) En tydlig 128x64 OLED -skärm (Från Sparkfun.com)

3) En kameramodul formaterad för Raspberry Pi 0 W (Från amazon.com)

4) Valfria glasögon

5) Ledningar

6) Lödkolv

7) Blyfritt löd (för att du inte vill dö av bly)

8) 2 -vägs lim

9) Minst 8 GB SD -kort

10) dator och internetanslutning

Förutsatt att du redan har en dator och internetuppkoppling kommer kostnaden för dessa glasögon att uppgå till cirka $ 130,00

Steg 1: Anslut kretsen

Anslut kretsen!
Anslut kretsen!

För att visa text på skärmen måste du ansluta till OLED via I2C eller SPI, jag väljer I2C eftersom det är den jag är bekvämare att använda men om du känner för att ansluta till den via SPI, följ den här självstudien på Sparkfun -webbplatsen och kom tillbaka hit när du är klar. https://learn.sparkfun.com/tutorials/transparent-g… Om du har valt I2C eftersom jag har lödt trådarna enligt följande:

Pi \/ OLED \/

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Observera att den klara OLED bara klarar 3,3v.

När du är klar med att ansluta kretsen, skjut in bandkabeln på kameramodulen i bandkabelhållaren på hallon pi genom att dra ut den svarta klämman och skjuta tillbaka den när bandkabeln är på plats.

Steg 2: Åtkomst till Raspberry Pi

Med ssh kan vi komma åt vår pi med vår dator utan att ansluta en extra extern tangentbordsmus och bildskärm. Det första du gör är att ansluta ditt SD -kort till din dator med en adapter eller en inbyggd port, sedan måste du gå till den här länken https://www.raspberrypi.org/downloads/raspbian/ och ladda ner Raspbian buster med skrivbordet. För det andra måste du sätta in operativsystemet på SD -kortet med BalenaEtcher, välj ditt SD -kort och Raspbian -operativsystemet och klicka på "flash", den här processen kan ta lite tid så kom tillbaka när du är klar. Tredje gå till SD -kortet i filutforskaren eller sökaren på mac och skapa en textfil med namnet wpa_supplicant, se till att ta bort.txt -tillägget och lägg till.conf i filen klistra in följande:

land = USA

ctrl_interface = DIR =/var/run/wpa_supplicant GROUP = netdev update_config = 1 nätverk = {ssid = "WIFI_SSID" scan_ssid = 1 psk = "WIFI_PASSWORD" key_mgmt = WPA-PSK}

Du måste ange ditt WiFi -namn och lösenord på motsvarande platser och land om du inte är i USA. Tänk på att Raspberry Pi bara kan ansluta till ett 2,4 GHz -nätverk, vilket betyder att din dator också måste ansluta till det nätverket. Efter att ha skapat en tom textfil utan tillägg som heter ssh och mata ut ditt SD -kort. Du kommer då att behöva installera PuTTY https://www.putty.org/ vilket är vad du kommer att använda för att aktivera ssh. När du har installerat anger du IP -adressen för din hallon pi, du kan ta reda på vad det är genom att gå till din routers webbplats och logga in och titta på de anslutna enheterna.

När du har tillgång till Raspberry Pi kommer den att be dig logga in, standard användarnamn är "pi" och lösenordet "hallon". Skriv sudo raspi-config och gå sedan till gränssnittsalternativ och aktivera kamera, ssh och i2c, klicka sedan på Slutför och skriv sudo reboot. Nu är du redo att ssh in i hallon pi, fortsätt och installera Remote Desktop och ange din hallon pis IP -adress och du är nu bra att ssh in i hallon pi.

Steg 3: Kodningstid

Kodningstid!
Kodningstid!

Jag har valt att koda detta program i python så se till att du har python3.7 eller 3.8 installerat på skrivbordet. Denna kod fungerar genom att använda en server och en klient, avgränsaren är din dator. Klienten eller hallon pi tar en bild och laddar upp den till dropbox som hämtas av servern som sedan kör bildbehandling och textigenkänning på bilden. Du måste få en wolframalpha, dropbox och openweathermap app-id för att detta ska fungera. Allt du behöver göra är att gå till webbplatsens registrering och det kommer att ge dig en app-id. och mata in dem på motsvarande platser som bestäms av kommentarerna i koden. Se till att du har pip installerat allt och installerat Tesseract OCR och OpenCV. Skapa en python -fil med namnet Server.py på din dator och en fil som heter client.py på hallon -pi och kopiera sedan och klistra in koden. Men vet att ju djärvare karaktärer och vitare bakgrund desto bättre resultat, så är fallet med varje textigenkänningsprogramvara.

Alla länkar för att registrera dig för ett app-id \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Se till att du installerar Tesseract OCR och OpenCV \/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

import dropbox från PIL import Bildimport cv2 import pytesseract från pytesseract import Utmatning import numpy som np import wolframalpha import socket importtid

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "App-ID"

host = socket.gethostname ()

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

medan det är sant:

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

medan det är sant:

medan True: time.sleep (13.7) metadata, f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Bild nedladdad!") image = cv2.imread ("Image.jpg") Image = cv2.resize (bild, (640, 480), interpolation = cv2. INTER_AREA) image68 = cv2.rotate (Bild, cv2. ROTATE_90_COUNTERCLOCKWISE) grå = cv2.cvtColor (image68, cv2. COLOR_BGR2GRAY)

def remove_noise (grå):

return cv2.medianBlur (grå, 5) def tröskelvärde (grå): return cv2.threshold (grå, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (grå): kernel = np.ones ((5, 5), np.uint8) return cv2.dilate (grå, kärna, iterationer = 1) d = pytesseract.image_to_data (grå, output_type = Output. DICT)

n_boxes = len (d ['text'])

för i inom intervall (n_boxar): om int (d ['conf'] )> 60: (x, y, w, h) = (d ['vänster'] , d ['överst'] , d ['bredd'] , d ['höjd'] ) grå = cv2.rektangel (grå, (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 (grå) print (text) medan 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 (fråga) svar = nästa (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) paus

Client.py:

importera dropboximport picameraimporttid från luma.core.interface.serialimport i2c från luma.core.render importduk från luma.oled.enhetimport ssd1306, ssd1325, ssd1331, sh1106 import socket importdatetime från tid import sleep import pyowm serial = i2c (port = 1, adress = 0x3C) enhet = ssd1306 (seriell, rotera = 1) kamera = picamera. PiCamera () dropbox_access_token = "" #Din dropbox-id igen 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 -adress för din datorport = 60567 s.connect ((host, port)) msg1 = "" owm = pyowm. OWM ("")#app-id för 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. månad) + "/" + str (cdt.year) obs = owm.weather_at_place ("")#din stad och land i strängformat weather = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) medan True: cdt = datetime.datetime.now () min1 = str (cdt.minute) timme = str (cdt.hour) med canvas (enhet) som draw: draw.text ((0, 0), hour, fill = "white") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "vit") draw.text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white ") if min1 in num: obs = owm.weather_at_place (" ")#din stad och land i strängformat igen

väder = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "vit") om min1 inte i 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 -konto länkat") klient. 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) med duk (enhet) som dragning: draw.text ((0, 19), full_msg, fill = "vit") draw.text ((0, 0), timme, fill = "vit") draw.text ((11, 0), ":", fyll = "vit") draw.text ((15, 0), min1, fill = "vit") draw.text ((0, 9), "_", fill = " vit ") draw.text ((0, 9), datum, fyll = "vit") om min1 i num: obs = owm.weather_at_place ("")#din stad och land i strängformat igen

väder = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "vit") om min1 inte i 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), timme, fill = "vit") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") draw. text ((0, 9), "_", fill = "vit") draw.text ((0, 9), datum, fyll = "vit") om min1 i num: obs = owm.weather_at_place ("") #din stad och land i strängformat igen

väder = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "vit") om min1 inte i 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". gå med (textwrap.wrap (full_msg1, 9))) cdt = datetime.datetime.now () min1 = str (cdt.minute) timme = str (cdt.hour) med canvas (enhet) som draw: draw.text ((0, 19), full_msg, fill = "vit") draw.text ((0, 29), full_msg2, fill = "vit") draw.text ((0, 0), timme, fill = "vit") draw.text ((11, 0), ":", fyll = "vit") draw.text ((15, 0), min1, fill = "vit") draw.text ((0, 9), "_", fyll = "vit") draw.text ((0, 9), datum, fyll = "vit") om min1 i num: obs = owm.weather_at_place ("")#din stad och land i strängformat igen

väder = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "vit") om min1 inte i num: obs = owm.weather_at_place ("")#din stad och land i strängformat igen

väder = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "vit") om min1 inte i 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), timme, fill = "vit") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") draw. text ((0, 9), "_", fill = "vit") draw.text ((0, 9), datum, fyll = "vit") om min1 i num: obs = owm.weather_at_place ("") #din stad och land i strängformat igen

väder = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "vit") om min1 inte i num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) client.files_delete (dropbox_path) print ("Filer raderade")

P. S. Jag är en amatörprogrammerare så snälla ifrågasätt inte mina hemska programmeringsmetoder.

Steg 4: Sätt ihop allt

Få alltid att falla på plats!
Få alltid att falla på plats!

När du har avslutat allt annat är du praktiskt taget klar, allt du har kvar att göra är att fästa hallon Pi -kameran och displayen på glasögonen. Du kan göra detta genom att använda det dubbelsidiga limet som nämns i tillbehören eller så kan du använda alla metoder du tycker är nödvändiga. Du kanske också har märkt att jag inte har nämnt ett batteri någonstans i den här lektionen, det är för att jag har framtida uppgraderingar planerade för dessa glasögon och inte ville ansluta ett just nu. Men om du vill koppla en så behöver du en li-po laddarkrets från Amazon

Om du tyckte om detta och vill se mer, har jag startat en YouTube -kanal och kommer förhoppningsvis att lägga upp självstudier där också. Här är länken:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Gud räddar!

Johannes 3:16 "Ty så älskade Gud världen att han gav sin enda son den som alltid tror på honom inte ska förgås utan ha ett evigt liv."

Rekommenderad: