Obsah:

Chytré brýle: 4 kroky
Chytré brýle: 4 kroky

Video: Chytré brýle: 4 kroky

Video: Chytré brýle: 4 kroky
Video: Chytré brýle Ray-Ban Stories. Konec soukromí? 2024, Červenec
Anonim
Chytré brýle
Chytré brýle
Chytré brýle
Chytré brýle

Ahoj všichni, dnes vám ukážu, jak si vyrobit chytré brýle doma! Jednou z největších věcí na chytrých brýlích je, jak je prospěšné mít něco takového v dnešním světě technologií a jak neexistuje jen jedna verze chytrých brýlí, protože všechny mají úžasné funkce a nekonečné množství aplikací, které by bylo možné integrovat v budoucnu. Mezi funkce těchto chytrých brýlí patří čas sdělování, sdělující teplotu každých 5 minut, mezi těmito 5 minutami se přepíná mezi očekávanou vysokou a nízkou teplotou pro daný den a také vám sdělí datum. Ale jeho hlavní vlastností je, že každých 10 sekund pořídí obrázek a poté tento obrázek analyzuje na text, ve kterém o něm vrátí užitečné informace, pokud najde otázku, odpoví na ni pomocí wolframu nebo pokud najde matematickou rovnici vyřeší to!

Zásoby:

Dodávky nezbytné pro tento projekt budou zahrnovat následující:

1) A Raspberry Pi 0 W (From vilros.com)

2) Jasný displej OLED 128 x 64 (od Sparkfun.com)

3) Modul kamery naformátovaný pro Raspberry Pi 0 W (od amazon.com)

4) Jakékoli brýle podle vašeho výběru

5) Dráty

6) Páječka

7) Bezolovnatá pájka (protože nechcete zemřít na olovo)

8) 2cestné lepidlo

9) SD karta min. 8 GB

10) připojení k počítači a internetu

Za předpokladu, že již máte počítač a připojení k internetu, náklady na tyto brýle přijdou přibližně na 130,00 USD

Krok 1: Zapojení obvodu

Zapojení obvodu!
Zapojení obvodu!

Chcete -li zobrazit text na obrazovce, kterou budete chtít připojit k OLED přes I2C nebo SPI, volím I2C, protože je to ten, který používám pohodlněji, ale pokud máte pocit, že se k němu chcete připojit pomocí SPI, postupujte podle tohoto tutoriálu na na web Sparkfun a vraťte se sem, až budete hotovi. https://learn.sparkfun.com/tutorials/transparent-g… Pokud jste vybrali I2C, pájím vodiče, jak ukazuje následující:

Pi \/ OLED \/

3,3 V 3,3 V

GND GND

SDA SDA

SCL SCL

Pamatujte, že čistý OLED zvládne pouze 3.3v.

Jakmile připojíte obvod, zasuňte plochý kabel kamerového modulu do držáku plochého kabelu na malinovém pi tak, že vytáhnete černou svorku a zasunete ji zpět, jakmile je plochý kabel na svém místě.

Krok 2: Přístup k Raspberry Pi

Pomocí ssh můžeme přistupovat k našemu pi pomocí našeho počítače bez připojení další externí klávesnice a monitoru. První věc, kterou musíte udělat, je připojit kartu SD k počítači pomocí adaptéru nebo vestavěného portu, pak budete muset přejít na tento odkaz https://www.raspberrypi.org/downloads/raspbian/ a stáhnout Raspbian buster s desktopem. Za druhé, musíte vložit OS na SD kartu pomocí BalenaEtcher vyberte SD kartu a Raspbian OS a klikněte na „flash“, tento proces může nějakou dobu trvat, takže se vraťte, až budete hotovi. Za třetí přejděte na kartu SD v Průzkumníku souborů nebo vyhledávači na počítačích Mac a vytvořte textový soubor s názvem wpa_supplicant, ujistěte se, že jste odstranili příponu.txt a přidali.conf, do souboru vložte následující:

země = USA

ctrl_interface = DIR =/var/run/wpa_supplicant GROUP = netdev update_config = 1 síť = {ssid = "WIFI_SSID" scan_ssid = 1 psk = "WIFI_PASSWORD" key_mgmt = WPA-PSK}

Pokud nejste v USA, budete muset na příslušných místech a zemi zadat své WiFi jméno a heslo. Mějte na paměti, že Raspberry Pi se může připojit pouze k síti 2,4 GHz, což znamená, že se k této síti bude muset připojit i váš počítač. Po vytvoření prázdného textového souboru bez přípony ssh a poté vysuňte kartu SD. Poté budete muset nainstalovat PuTTY https://www.putty.org/, což budete používat k povolení ssh. Po instalaci zadejte IP adresu vašeho Raspberry Pi a můžete zjistit, co to je, když se přihlásíte na web svého routeru a podíváte se na připojená zařízení.

Jakmile získáte přístup k Raspberry Pi, požádá vás o přihlášení, výchozí uživatelské jméno je „pi“a heslo „raspberry“. Zadejte sudo raspi-config, poté přejděte na možnosti rozhraní a povolte kameru, ssh a i2c, poté klikněte na Dokončit a zadejte sudo reboot. Nyní jste připraveni ssh do Raspberry Pi, pokračujte a nainstalujte si vzdálenou plochu a zadejte IP adresu vašeho Raspberry Pi a nyní můžete ssh do Raspberry Pi.

Krok 3: Kódovací čas

Čas kódování!
Čas kódování!

Rozhodl jsem se kódovat tento program v pythonu, takže se ujistěte, že máte na ploše nainstalovaný python3.7 nebo 3.8. Tento kód funguje pomocí serveru a klienta, přičemž sever je váš počítač. Klient nebo malinový pi pořídí obrázek a nahraje jej do schránky, kterou načte server, který poté na obrázku spustí zpracování obrazu a rozpoznávání textu. Aby to fungovalo, budete muset získat wolframalpha, dropbox a openweathermap ID aplikace, vše, co musíte udělat, je zaregistrovat se na webových stránkách a získáte ID aplikace. a poté je vložte na odpovídající místa určená komentáři v kódu. Ujistěte se, že máte vše nainstalované a nainstalované Tesseract OCR a OpenCV. Vytvořte na počítači soubor pythonu s názvem Server.py a na malinovém pi soubor s názvem client.py a poté zkopírujte a vložte kód. Vězte však, že čím odvážnější postavy a bělejší pozadí, tím lepší výsledky, to je případ každého softwaru pro rozpoznávání textu.

Všechny odkazy na registraci ID aplikace \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Ujistěte se, že jste nainstalovali Tesseract OCR a OpenCV \/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

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

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "ID aplikace"

host = socket.gethostname ()

port = 60567 tisk (hostitel) s.bind ((hostitel, port)) s.listen (2)

zatímco pravda:

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

zatímco pravda:

zatímco True: metadata time.sleep (13.7), f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) ven. zavřít () tisk ("Obrázek stažen!") image = cv2.imread ("Image.jpg") Obrázek = cv2.resize (obrázek, (640, 480), interpolace = cv2. INTER_AREA) image68 = cv2.rotate (Obrázek, cv2. ROTATE_90_COUNTERCLOCKWISE) šedá = cv2.cvtColor (image68, cv2. COLOR_BGR2GREY)

def remove_noise (šedá):

return cv2.medianBlur (šedá, 5) def prahování (šedá): návrat cv2.threshold (šedá, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (šedá): jádro = np.ones ((5, 5), np.uint8) return cv2.dilate (šedá, jádro, iterace = 1) d = pytesseract.image_to_data (šedá, output_type = Output. DICT)

n_boxes = len (d ['text'])

pro i v rozsahu (n_boxů): if int (d ['conf'] )> 60: (x, y, w, h) = (d ['left'] , d ['top'] , d ['šířka'] , d ['výška'] ) šedá = cv2. obdélník (šedá, (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 (šedý) tisk (text), zatímco 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 (dotaz) answer = další (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 picameraimport čas z luma.core.interface.serial import i2c from luma.core.render import canvas from luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106 import socket import datetime from time import sleep import pyowm serial = i2c (port = 1, adresa = 0x3C) zařízení = ssd1306 (sériové, otočit = 1) kamera = picamera. PiCamera () dropbox_access_token = "" #Vase dropbox-id opět 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 portu vašeho počítače = 60567 s.connect ((hostitel, port)) msg1 = "" owm = pyowm. OWM ("")#ID aplikace pro 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ěsíc) + "/" + str (cdt.rok) obs = owm.weather_at_place ("")#vaše město a země ve formátu řetězce weather = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) while True: cdt = datetime.datetime.now () min1 = str (cdt.minute) hodina = str (cdt.hour) s canvas (zařízení) jako 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 ") if min1 in num: obs = owm.weather_at_place (" ")#your town and country again in string format again

počasí = 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 ("[ÚSPĚCH] propojený účet schránky"). files_upload (otevřeno (cesta_počítače, „rb“). čtení (), cesta_krabici) tisk („[UPLOADED] {}“. formát (cesta_počítače)) full_msg = "" time.sleep (5) msg = s.recv (100) pokud len (msg)> = 2: full_msg += msg.decode ("utf-8") print (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) hodina = str (cdt.hour) s plátnem (zařízením) jako 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 = " bílá ") draw.text ((0, 9), datum, výplň = "bílý") pokud min1 v num: obs = owm.weather_at_place ("")#vaše město a země opět ve formátu řetězce

počasí = 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 = "white") draw.text ((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("") #vaše město a země opět ve formátu řetězců

počasí = 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) hodina = str (cdt.hour) s plátnem (zařízením) jako 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), "_", vyplnit = "white") draw.text ((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("")#your town and country again in string format

počasí = 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 ("")#your town and country again in string format again

počasí = 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") pokud len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hodina = str (cdt.hour) s canvas (zařízení) jako 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") if min1 in num: obs = owm.weather_at_place ("") #vaše město a země opět ve formátu řetězců

počasí = 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) tisk ("Soubory smazány")

P. S. Jsem amatérský programátor, takže prosím nezpochybňujte mé strašné metody programování.

Krok 4: Dát to všechno dohromady

Dát to všechno dohromady!
Dát to všechno dohromady!

Jakmile máte hotovo vše ostatní, jste prakticky hotovi, zbývá vám jen nasadit malinový pi fotoaparát a displej na brýle. Můžete to provést pomocí oboustranného lepidla uvedeného v dodávkách nebo můžete použít jakékoli metody, které považujete za nutné. Také jste si možná všimli, že jsem se v této lekci nikde nezmínil o baterii, protože jsem pro tyto brýle plánoval budoucí upgrady a nechtěl jsem je hned připojit. Ale pokud ho chcete připojit, budete potřebovat nabíjecí obvod li-po od Amazonu

Pokud se vám to líbilo a chcete vidět více, založil jsem kanál YouTube a doufám, že tam zveřejním také návody. Tady je odkaz:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Bůh zachraňuje!

Jan 3:16 „Neboť Bůh tak miloval svět, že dal svého jediného Syna, ten, kdo v Něho věří, nezahyne, ale bude mít věčný život“.

Doporučuje: