Spisu treści:

Inteligentne okulary: 4 kroki
Inteligentne okulary: 4 kroki

Wideo: Inteligentne okulary: 4 kroki

Wideo: Inteligentne okulary: 4 kroki
Wideo: 5 Best Smart Glasses 2024 | Top 5 Smart Glasses 2024 2024, Listopad
Anonim
Inteligentne okulary
Inteligentne okulary
Inteligentne okulary
Inteligentne okulary

Witam wszystkich, dzisiaj pokażę wam jak zrobić Smart Glasses w domu! Jedną z największych zalet inteligentnych okularów jest to, jak korzystne jest posiadanie czegoś takiego w dzisiejszym świecie technologii oraz to, że nie ma tylko jednej wersji inteligentnych okularów, ponieważ wszystkie mają niesamowite funkcje i nieskończoną liczbę aplikacji, które można zintegrować w przyszłości. Funkcje tych inteligentnych okularów obejmują informowanie o czasie, informowanie o temperaturze co 5 minut, między tymi 5 minutami, w których przełącza się między oczekiwaną wysoką i niską temperaturą na ten dzień, podaje również datę. Ale jego główną cechą jest to, że robi zdjęcie co 10 sekund, a następnie analizuje to zdjęcie pod kątem tekstu, w którym zwróci przydatne informacje na jego temat, jeśli znajdzie pytanie, odpowie na nie za pomocą wolframu lub jeśli znajdzie równanie matematyczne rozwiąże to!

Kieszonkowe dzieci:

Dostawy niezbędne do realizacji tego projektu obejmą:

1) Raspberry Pi 0 W (od vilros.com)

2) Przejrzysty wyświetlacz OLED 128x64 (od Sparkfun.com)

3) Moduł kamery sformatowany dla Raspberry Pi 0 W (od amazon.com)

4) Dowolne okulary do wyboru

5) Przewody

6) Lutownica

7) Lut bezołowiowy (ponieważ nie chcesz umrzeć od ołowiu)

8) Klej dwukierunkowy

9) karta SD min 8 GB

10) połączenie komputerowe i internetowe

Zakładając, że masz już komputer i połączenie z Internetem, koszt tych okularów wyniesie około 130,00 USD

Krok 1: Okablowanie obwodu

Okablowanie obwodu!
Okablowanie obwodu!

Aby wyświetlić tekst na ekranie, będziesz mieć połączenie z OLED przez I2C lub SPI, wybieram I2C, ponieważ jest to ten, z którego wygodniej się korzystam, ale jeśli masz ochotę połączyć się z nim przez SPI, postępuj zgodnie z tym samouczkiem stronę Sparkfun i wróć tutaj, gdy skończysz. https://learn.sparkfun.com/tutorials/transparent-g… Jeśli wybrałeś I2C to przylutowałem przewody jak wskazano poniżej:

Pi \/ OLED \/

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Należy pamiętać, że przezroczysty OLED może obsługiwać tylko 3,3 V.

Po zakończeniu podłączania obwodu, wsuń kabel taśmowy modułu kamery do uchwytu kabla taśmowego na raspberry pi, wyciągając czarny zacisk i wsuwając go z powrotem, gdy kabel taśmowy jest na swoim miejscu.

Krok 2: Dostęp do Raspberry Pi

Używając ssh możemy uzyskać dostęp do naszego pi z naszego komputera bez podłączania dodatkowej zewnętrznej klawiatury i monitora. Pierwszą rzeczą, którą robisz, jest podłączenie karty SD do komputera za pomocą adaptera lub wbudowanego portu, a następnie musisz przejść do tego linku https://www.raspberrypi.org/downloads/raspbian/ i pobrać Raspbian buster z pulpitem. Po drugie, musisz umieścić system operacyjny na karcie SD za pomocą BalenaEtcher, wybierz kartę SD i system Raspbian i kliknij "flash", ten proces może trochę potrwać, więc wróć, kiedy skończysz. Po trzecie przejdź do karty SD w eksploratorze plików lub w wyszukiwarce plików na Macu i utwórz plik tekstowy o nazwie wpa_supplicant, usuń rozszerzenie.txt i dodaj.conf, w pliku wklej następujące elementy:

kraj=USA

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 }

Będziesz musiał podać nazwę Wi-Fi i hasło w odpowiednich miejscach i kraju, jeśli nie jesteś w USA. Pamiętaj, że Raspberry Pi może łączyć się tylko z siecią 2,4 Ghz, co oznacza, że Twój komputer również będzie musiał łączyć się z tą siecią. Po utworzeniu pustego pliku tekstowego bez rozszerzenia o nazwie ssh, a następnie wysuń kartę SD. Następnie będziesz musiał zainstalować PuTTY https://www.putty.org/, którego użyjesz do włączenia ssh. Po zainstalowaniu wprowadź adres IP swojego raspberry pi, możesz dowiedzieć się, co to jest, logując się na stronie routera i patrząc na podłączone urządzenia.

Po uzyskaniu dostępu do Raspberry Pi zostaniesz poproszony o zalogowanie się, domyślna nazwa użytkownika to „pi”, a hasło to „raspberry”. Wpisz sudo raspi-config, a następnie przejdź do opcji interfejsu i włącz aparat, ssh i i2c, a następnie kliknij Zakończ i wpisz sudo reboot. Teraz jesteś gotowy do ssh do raspberry pi, śmiało zainstaluj Remote Desktop i wprowadź adres IP swojego raspberry pi, a teraz możesz ssh do raspberry pi.

Krok 3: Czas kodowania

Czas kodowania!
Czas kodowania!

Zdecydowałem się zakodować ten program w pythonie, więc upewnij się, że masz zainstalowany na pulpicie python 3.7 lub 3.8. Ten kod działa przy użyciu serwera i klienta, przy czym serwerem jest twój komputer. Klient lub raspberry pi zrobi zdjęcie i prześle je do Dropbox, który jest pobierany przez serwer, który następnie uruchamia przetwarzanie obrazu i rozpoznawanie tekstu na obrazie. Będziesz musiał zdobyć identyfikator aplikacji wolframalpha, dropbox i openweathermap, aby to zadziałało, wszystko, co musisz zrobić, to przejść do rejestracji na stronach internetowych, a otrzymasz identyfikator aplikacji. a następnie wprowadź je w odpowiednie miejsca określone przez komentarze w kodzie. Upewnij się, że pip zainstalował wszystko i zainstalował Tesseract OCR i OpenCV. Utwórz plik Pythona o nazwie Server.py na komputerze i plik o nazwie client.py na raspberry pi, a następnie skopiuj i wklej kod. Ale wiedz, że im odważniejsze znaki i bielsze tło, tym lepsze wyniki, tak jest w przypadku każdego oprogramowania do rozpoznawania tekstu.

Wszystkie linki do rejestracji w celu uzyskania identyfikatora aplikacji \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Upewnij się, że zainstalowałeś Tesseract OCR i OpenCV \/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

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

dbx = dropbox. Dropbox("dropboxAPIkey")

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

app_id = "Identyfikator aplikacji"

host = gniazdo.getnazwahosta()

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

podczas gdy prawda:

c, addr = s.accept() print (f'Połączono z: {addr}') break

podczas gdy prawda:

while 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("Obraz pobrany!") image = cv2.imread("Obraz.jpg") Obraz = cv2.resize(obraz, (640, 480), interpolation=cv2. INTER_AREA) image68 = cv2.rotate(Obraz, cv2. ROTATE_90_COUNTERCLOCKWISE) szary = cv2.cvtColor (image68, cv2. COLOR_BGR2GRAY)

def remove_noise(szary):

return cv2.medianBlur(szary, 5) def thresholding(szary): return cv2.threshold(szary, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU)[1] def dilate(szary): kernel = np.ones((5, 5), np. uint8) return cv2.dilate (szary, jądro, iteracje = 1) d = pytesseract.image_to_data (szary, output_type = Output. DICT)

n_pudełek = dł(d['tekst'])

for i in range(n_boxes): if int(d['conf']) > 60: (x, y, w, h) = (d['left'], d['top'], d['szerokość'], d['wysokość']) szary = cv2.rectangle(szary, (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(gray) 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(zapytanie) 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

Klient.py:

import dropboximport picameraimport czas z luma.core.interface.serial import i2c z luma.core.render import canvas z luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106 import socket import datetime od czasu import sleep import pyowm serial = i2c(port=1, adres=0x3C) urządzenie = ssd1306(szeregowy, obrót=1) kamera = picamera. PiCamera() dropbox_access_token= "" #Twój dropbox-id ponownie computer_path=r"/home/pi/Image.jpg" dropbox_path= f"/dropbox_API/Image.jpg" s = socket.socket(socket. AF_INET, socket. SOCK_STREAM) host = ""#adres ip portu twojego komputera = 60567 s.connect((host, port)) msg1 = " " owm = pyowm. OWM("")#app-id dla 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. miesiąc) + "/" + str(cdt.year) obs = owm.weather_at_place("")#Twoje miasto i kraj w formacie string 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) hour = str(cdt.hour) z canvas(device) jako draw: draw.text((0, 0), godzina, fill = "biały") draw.text((11, 0), ":", fill = "biały") draw.text((15, 0), min1, fill = "biały") draw.text((0, 9), "_", fill = "biały") draw.text((0, 9), data, fill = "biały ") if min1 in num: obs = owm.weather_at_place("")#twoje miasto i kraj ponownie w formacie ciągu

pogoda = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "biały") draw.text((40, 0), temp, fill = "biały") 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 klient = dropbox. Dropbox(dropbox_access_token) print("[SUKCES] połączone z kontem dropbox") klient. files_upload(open(ścieżka_komputera, "rb").read(), dropbox_path) print("[PRZESŁANO] {}".format(ścieżka_komputera)) 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) z canvas(device) as draw: draw.text((0, 19), full_msg, fill = "white") draw.text((0, 0), hour, fill = "white") draw.text((11, 0), ":", fill = "biały") draw.text((15, 0), min1, fill = "biały") draw.text((0, 9), "_", fill = " biały") narysuj.tekst((0, 9), data, wypełnienie = "biały") if min1 in num: obs = owm.weather_at_place("")#twoje miasto i kraj ponownie w formacie ciągu

pogoda = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "biały") draw.text((40, 0), temp, fill = "biały") 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 = "biały") draw.text((0, 9), data, fill = "biały") if min1 in num: obs = owm.weather_at_place("") #Twoje miasto i kraj ponownie w formacie ciągu

pogoda = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "biały") draw.text((40, 0), temp, fill = "biały") 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 = "biały") draw.text((15, 0), min1, fill = "biały") draw.text((0, 9), "_", fill = "biały") draw.text((0, 9), data, fill = "biały") if min1 in num: obs = owm.weather_at_place("")#twoje miasto i kraj ponownie w formacie ciągu

pogoda = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "biały") draw.text((40, 0), temp, fill = "white") if min1 not in num: obs = owm.weather_at_place("")#twoje miasto i kraj ponownie w formacie ciągu

pogoda = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "biały") draw.text((40, 0), temp, fill = "biały") 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 = "biały") draw.text((0, 9), data, fill = "biały") if min1 in num: obs = owm.weather_at_place("") #Twoje miasto i kraj ponownie w formacie ciągu

pogoda = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "biały") draw.text((40, 0), temp, fill = "biały") 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 ("Pliki usunięte")

PS Jestem programistą amatorem, więc proszę nie kwestionuj moich okropnych metod programowania.

Krok 4: Złóż wszystko razem

Kładąc wszystko razem!
Kładąc wszystko razem!

Gdy skończysz wszystko inne, praktycznie skończysz, wszystko, co musisz zrobić, to przymocować kamerę raspberry pi i wyświetlacz do okularów. Możesz to zrobić za pomocą dwustronnego kleju wymienionego w dostawach lub możesz użyć dowolnych metod, które uznasz za konieczne. Być może zauważyłeś również, że nigdzie nie wspomniałem o baterii w tej lekcji, ponieważ mam zaplanowane przyszłe aktualizacje dla tych okularów i nie chciałem ich teraz podłączać. Ale jeśli chcesz go podłączyć, będziesz potrzebować obwodu ładowarki li-po z amazon

Jeśli podobało Ci się to i chcesz zobaczyć więcej, założyłem kanał na YouTube i mam nadzieję, że będę tam również zamieszczać samouczki. Tutaj jest link:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Bóg ratuje!

Jana 3:16 „Albowiem tak Bóg umiłował świat, że Syna swego Jednorodzonego dał, kto tak zawsze w Niego wierzy, nie zginie, ale będzie miał życie wieczne”.

Zalecana: