Inhaltsverzeichnis:
- Schritt 1: Verdrahtung der Schaltung
- Schritt 2: Zugriff auf den Raspberry Pi
- Schritt 3: Codierungszeit
- Schritt 4: Alles zusammenfügen
Video: Intelligente Brillen: 4 Schritte
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:15
Hallo zusammen, heute zeige ich euch, wie man Smart Glasses zu Hause herstellt! Eines der großartigsten Dinge an Datenbrillen ist, wie vorteilhaft es in der heutigen Technologiewelt ist, so etwas zu haben und dass es nicht nur eine Version von Datenbrillen gibt, da alle erstaunliche Funktionen und eine unendliche Anzahl von Anwendungen haben, die integriert werden können in der Zukunft. Zu den Funktionen dieser Smart Glasses gehören die Zeitanzeige, die alle 5 Minuten die Temperatur anzeigt, zwischen diesen 5 Minuten zwischen der erwarteten hohen und der niedrigen Temperatur für diesen Tag wechselt und Ihnen auch das Datum anzeigt. Aber sein Hauptmerkmal ist, dass es alle 10 Sekunden ein Bild aufnimmt und dann dieses Bild auf Text analysiert, in dem es nützliche Informationen darüber zurückgibt. Wenn es eine Frage findet, wird es sie mit Wolfram beantworten oder wenn es eine mathematische Gleichung findet es wird es lösen!
Lieferungen:
Die für dieses Projekt erforderlichen Materialien umfassen Folgendes:
1) Ein Raspberry Pi 0 W (von vilros.com)
2) Ein klares 128x64-OLED-Display (von Sparkfun.com)
3) Ein für Raspberry Pi 0 W formatiertes Kameramodul (von amazon.com)
4) Eine beliebige Brille Ihrer Wahl
5) Drähte
6) Lötkolben
7) Bleifreies Lot (weil Sie nicht an Blei sterben wollen)
8) 2-Wege-Klebstoff
9) SD-Karte min von 8 GB
10) Computer- und Internetverbindung
Vorausgesetzt, Sie haben bereits einen Computer und eine Internetverbindung, belaufen sich die Kosten für diese Brille auf etwa 130,00 USD
Schritt 1: Verdrahtung der Schaltung
Um Text auf dem Bildschirm anzuzeigen, den Sie über I2C oder SPI mit dem OLED verbinden müssen, wähle ich I2C, da ich es am bequemsten verwende die Sparkfun-Website und kehren Sie hierher zurück, wenn Sie fertig sind. https://learn.sparkfun.com/tutorials/transparent-g… Wenn Sie I2C gewählt haben, habe ich die Drähte wie folgt gelötet:
Pi \/ OLED \/
3.3v 3.3v
GND GND
SDA SDA
SCL SCL
Bitte beachten Sie, dass die klare OLED nur 3,3 V verarbeiten kann.
Nachdem Sie den Stromkreis angeschlossen haben, schieben Sie das Flachbandkabel des Kameramoduls in die Flachbandkabelhalterung am Himbeer-Pi, indem Sie die schwarze Klemme herausziehen und nach dem Anbringen des Flachbandkabels wieder einschieben.
Schritt 2: Zugriff auf den Raspberry Pi
Mit ssh können wir mit unserem PC auf unser Pi zugreifen, ohne eine zusätzliche externe Tastatur, Maus und einen Monitor anzuschließen. Als Erstes schließen Sie Ihre SD-Karte mit einem Adapter oder einem eingebauten Anschluss an Ihren PC an. Dann müssen Sie zu diesem Link https://www.raspberrypi.org/downloads/raspbian/ gehen und Raspbian Buster herunterladen mit Schreibtisch. Zweitens müssen Sie das Betriebssystem mit BalenaEtcher auf die SD-Karte legen. Wählen Sie Ihre SD-Karte und das Raspbian-Betriebssystem aus und klicken Sie auf "Flash". Dieser Vorgang kann einige Zeit dauern. Kommen Sie also zurück, wenn Sie fertig sind. Drittens gehen Sie zur SD-Karte im Datei-Explorer oder -Finder auf dem Mac und erstellen Sie eine Textdatei namens wpa_supplicant. Löschen Sie die.txt-Erweiterung und fügen Sie.conf hinzu. Fügen Sie in der Datei Folgendes ein:
Land=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 }
Sie müssen Ihren WLAN-Namen und Ihr Passwort an den entsprechenden Orten und im Land eingeben, wenn Sie sich nicht in den USA befinden. Denken Sie daran, dass sich der Raspberry Pi nur mit einem 2,4-GHz-Netzwerk verbinden kann, was bedeutet, dass Ihr PC auch eine Verbindung zu diesem Netzwerk herstellen muss. Nachdem Sie eine leere Textdatei ohne Erweiterung namens ssh erstellt haben, und dann Ihre SD-Karte auswerfen. Sie müssen dann PuTTY https://www.putty.org/ installieren, mit dem Sie ssh aktivieren. Geben Sie nach der Installation die IP-Adresse Ihres Raspberry Pi ein. Sie können herausfinden, was es ist, indem Sie sich auf der Website Ihres Routers anmelden und die angeschlossenen Geräte ansehen.
Nachdem Sie Zugriff auf den Raspberry Pi erhalten haben, werden Sie aufgefordert, sich anzumelden. Der Standardbenutzername ist "pi" und das Passwort ist "raspberry". Geben Sie sudo raspi-config ein, gehen Sie dann zu den Schnittstellenoptionen und aktivieren Sie Kamera, ssh und i2c, klicken Sie dann auf Fertig stellen und geben Sie sudo reboot ein. Jetzt sind Sie bereit, in den Himbeer-Pi zu ssh, installieren Sie Remote Desktop und geben Sie die IP-Adresse Ihres Himbeer-Pi ein.
Schritt 3: Codierungszeit
Ich habe mich entschieden, dieses Programm in Python zu codieren, also stellen Sie sicher, dass Sie Python3.7 oder 3.8 auf Ihrem Desktop installiert haben. Dieser Code funktioniert mit einem Server und einem Client, wobei der Server Ihr PC ist. Der Client oder Raspberry Pi nimmt ein Bild auf und lädt es in die Dropbox hoch, die vom Server abgerufen wird, der dann die Bildverarbeitung und Texterkennung für das Bild ausführt. Sie müssen eine Wolframalpha-, Dropbox- und Openweathermap-App-ID erhalten, damit dies funktioniert. und geben Sie sie dann an den entsprechenden Stellen ein, die durch die Kommentare im Code bestimmt werden. Stellen Sie sicher, dass pip alles installiert und Tesseract OCR und OpenCV installiert hat. Erstellen Sie eine Python-Datei namens Server.py auf Ihrem PC und eine Datei namens client.py auf dem Himbeer-Pi und kopieren Sie dann den Code und fügen Sie ihn ein. Aber wissen Sie, dass die Ergebnisse umso besser sind, je kräftiger die Zeichen und weißer der Hintergrund ist, dies ist bei jeder Texterkennungssoftware der Fall.
Alle Links zur Anmeldung für eine App-ID \/
www.wolframalpha.com/
openweathermap.org/api
www.dropbox.com/developers/documentation
Stellen Sie sicher, dass Sie Tesseract OCR und OpenCV installieren \/
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 as np import wolframalpha import socket import time
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)
während Wahr:
c, addr = s.accept() print (f'Verbindung erhalten von: {addr}') break
während Wahr:
while True: time.sleep(13.7) Metadaten, f = dbx.files_download("/dropbox_API/Image.jpg") out = open("Image.jpg", 'wb') out.write(f.content) out. close() print("Image heruntergeladen!") image = cv2.imread("Image.jpg") Image = cv2.resize(image, (640, 480), interpolation=cv2. INTER_AREA) image68 = cv2.rotate(Image, cv2. ROTATE_90_COUNTERCLOCKWISE) grau = cv2.cvtColor(image68, cv2. COLOR_BGR2GRAY)
def remove_noise(grau):
return cv2.medianBlur(gray, 5) defthresholding(gray): return cv2.threshold(gray, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU)[1] def dilate(gray): kernel = np.ones((5, 5), np.uint8) return cv2.dilate(gray, kernel, iterations=1) d = pytesseract.image_to_data(gray, output_type = Output. DICT)
n_boxes = len(d['text'])
for i in range(n_boxes): if int(d['conf']) > 60: (x, y, w, h) = (d['left'], d['top'], d['width'], d['height']) grey = cv2.rectangle(gray, (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(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) Pause
Client.py:
import dropboximport picameraimport time from 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, address=0x3C) device = ssd1306(serial, rotation=1) camera = picamera. PiCamera() dropbox_access_token= "" #Ihre Dropbox-ID wieder 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-Adresse Ihres PC-Ports = 60567 s.connect((Host, Port)) msg1 = " " owm = pyowm. OWM("")#app-id for 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. Monat) + "/" + str(cdt.year) obs = owm.weather_at_place("")#your town and country in string format weather = obs.get_weather() temp2 = str(weather.get_temperature("fahrenheit")["te mp_max"]) temp3 = str(weather.get_temperature("fahrenheit")["temp_min"]) während True: cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) mit canvas(device) als 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("")#Ihre Stadt und Ihr Land wieder im String-Format
Wetter = obs.get_weather()
temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") wenn min1 nicht 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) mit canvas(device) als 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 = " weiß") draw.text((0, 9), Datum, Füllung = "white") if min1 in num: obs = owm.weather_at_place("")#Ihre Stadt und Ihr Land wieder im String-Format
Wetter = obs.get_weather()
temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") wenn min1 nicht 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), Stunde, 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("") #deine Stadt und dein Land wieder im String-Format
Wetter = obs.get_weather()
temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") wenn min1 nicht 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 = "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("")#Ihre Stadt und Ihr Land wieder im String-Format
Wetter = 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("")#Ihre Stadt und Ihr Land wieder im String-Format
Wetter = obs.get_weather()
temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") wenn min1 nicht 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) mit canvas(device) als draw: draw.text((0, 0), Stunde, 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("") #deine Stadt und dein Land wieder im String-Format
Wetter = obs.get_weather()
temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") wenn min1 nicht 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 ("Dateien gelöscht")
PS Ich bin ein Amateurprogrammierer, also hinterfrage bitte nicht meine schrecklichen Programmiermethoden.
Schritt 4: Alles zusammenfügen
Wenn Sie alles andere erledigt haben, müssen Sie praktisch nur noch die Himbeer-Pi-Kamera und das Display an der Brille befestigen. Sie können dies tun, indem Sie den im Zubehör erwähnten doppelseitigen Klebstoff verwenden oder alle Methoden anwenden, die Sie für erforderlich halten. Sie haben vielleicht auch bemerkt, dass ich in dieser Lektion nirgendwo eine Batterie erwähnt habe, weil ich zukünftige Upgrades für diese Brille geplant habe und jetzt keine anbringen möchte. Aber wenn Sie einen anschließen möchten, benötigen Sie eine Li-Po-Ladeschaltung von Amazon
Wenn Ihnen das gefallen hat und Sie mehr sehen möchten, habe ich einen YouTube-Kanal gestartet und werde dort hoffentlich auch Tutorials veröffentlichen. Hier ist der Link:
www.youtube.com/channel/UCGqcWhHXdZf231rLe…
Gott schützt!
Johannes 3:16 „Denn so sehr hat Gott die Welt geliebt, dass er seinen einzigen Sohn gab, der immer an ihn glaubt, der wird nicht verloren gehen, sondern ein ewiges Leben haben.“
Empfohlen:
Intelligente Brillen (unter $ 10 !!!) - Gunook
Intelligente Brillen (unter 10 $!!!): Hallo! Wir alle kennen Smart Glasses wie die E.D.I.T.H. gemacht von unserem geliebten Charakter Tony Stark, der später an Peter Parker weitergegeben wurde. Heute werde ich ein solches Smart Glass bauen, das auch unter 10 US-Dollar liegt! Sie sind nicht ganz
Intelligente LED-Schreibtischlampe - Intelligente Beleuchtung mit Arduino - Neopixels-Arbeitsbereich - Gunook
Intelligente LED-Schreibtischlampe | Intelligente Beleuchtung mit Arduino | Neopixels Workspace: Heutzutage verbringen wir viel Zeit zu Hause, lernen und arbeiten virtuell. Warum also nicht unseren Arbeitsplatz mit einem benutzerdefinierten und intelligenten Beleuchtungssystem auf Arduino- und Ws2812b-LED-Basis vergrößern. Hier zeige ich Ihnen, wie Sie Ihren Smart bauen Schreibtisch-LED-Leuchte, die
Intelligente Brillen - Gunook
Smart Glasses: Hallo allerseits !!Heute werde ich mit euch teilen, was ich schon lange wollte
Intelligente Lektion: 6 Schritte
Smart Lesson: O projeto Smart Lesson visa criar um produto no qual os professores possam utilizar como um conteúdo a mais para ensinar seus alunos os levando a um nível de aprendizado muito superior por conseguir de mostrar…;dos conteguir
GRaCE - Leuchtende abnehmbare und ansteckbare Brillen - Gunook
GRaCE - Glowing Removable and Clipable Eyewear: GRaCe (oder Glowing Removable and Clipable Eyewear) ist ein Prototyp, den ich für diejenigen gemacht habe, die mit ihren Händen in einer dunklen Umgebung, wie einem Computerturm oder einem Objekt mit wenig Umgebungslicht, sehr aktiv sind Innerhalb. GRaCE wurde mit