Tartalomjegyzék:

Intelligens szemüveg: 4 lépés
Intelligens szemüveg: 4 lépés

Videó: Intelligens szemüveg: 4 lépés

Videó: Intelligens szemüveg: 4 lépés
Videó: Очки с искусственным интеллектом 👨🏻‍💻 #ai #chatgpt #technology 2024, November
Anonim
Intelligens szemüveg
Intelligens szemüveg
Intelligens szemüveg
Intelligens szemüveg

Üdvözlök mindenkit, ma megmutatom, hogyan készítsünk intelligens szemüveget otthon! Az intelligens szemüvegekben az egyik legnagyobb dolog az, hogy milyen előnyös, ha van valami ilyen a mai technológia világában, és hogy nincs csak egy verziója az okos szemüvegnek, mivel mindegyik csodálatos funkciókkal és végtelen számú integrálható alkalmazással rendelkezik. a jövőben. Ezen intelligens szemüvegek jellemzői közé tartozik az idő megmondása, a hőmérséklet 5 percenként történő közlése, az 5 perc között az adott nap várható magas és alacsony hőmérséklete között vált, és a dátumot is. A fő jellemzője azonban az, hogy 10 másodpercenként készít egy képet, majd elemzi azt a szöveget, amelyben hasznos információkat közöl róla, ha talál egy kérdést, akkor válaszol rá wolfram segítségével, vagy ha talál egy matematikai egyenletet az majd megoldja!

Kellékek:

A projekthez szükséges kellékek a következők:

1) A Raspberry Pi 0 W (a vilros.com oldalról)

2) Tiszta 128x64 OLED kijelző (a Sparkfun.com webhelyről)

3) A Raspberry Pi 0 W -ra formázott kamera modul (az amazon.com oldalról)

4) tetszőleges szemüveg

5) Vezetékek

6) Forrasztópáka

7) Ólommentes forrasztóanyag (mert nem akar meghalni az ólomtól)

8) kétirányú ragasztó

9) Min. 8 GB SD kártya

10) számítógép és internet kapcsolat

Feltételezve, hogy már rendelkezik számítógéppel és internetkapcsolattal, ezeknek a szemüvegeknek a ára körülbelül 130,00 USD lesz

Lépés: Az áramkör bekötése

Az áramkör bekötése!
Az áramkör bekötése!

Annak érdekében, hogy szöveget jelenítsen meg a képernyőn, amelyet I2C vagy SPI -n keresztül szeretne csatlakoztatni az OLED -hez, az I2C -t választom, mivel ezt használom kényelmesebben, de ha úgy érzi, hogy SPI -n keresztül szeretne csatlakozni hozzá, kövesse ezt az oktatóanyagot a Sparkfun webhelyet, és ha elkészült, térjen vissza ide. https://learn.sparkfun.com/tutorials/transparent-g… Ha az I2C-t választotta, én forrasztom a vezetékeket az alábbiak szerint:

Pi \/ OLED \/

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Kérjük, vegye figyelembe, hogy az átlátszó OLED csak 3.3V -ot képes kezelni.

Miután befejezte az áramkör csatlakoztatását, csúsztassa a kameramodul szalagkábelét a málna pi szalagkábel -tartójába, húzza ki a fekete bilincset, és csúsztassa vissza, miután a szalagkábel a helyére került.

2. lépés: A Raspberry Pi elérése

Az ssh használatával elérhetjük a pi -t a számítógépünkkel anélkül, hogy külső külső billentyűzet -egeret és monitort csatlakoztatnánk. Először csatlakoztassa SD -kártyáját a számítógéphez adapterrel vagy beépített porttal, majd erre a linkre kell mennie https://www.raspberrypi.org/downloads/raspbian/ és töltse le a Raspbian buster programot asztallal. Másodszor, fel kell tennie az operációs rendszert az SD -kártyára a BalenaEtcher segítségével, válassza ki az SD -kártyát és a Raspbian operációs rendszert, majd kattintson a "flash" gombra, ez a folyamat eltarthat egy ideig, ezért térjen vissza, ha befejezte. Harmadszor nyissa meg az SD -kártyát a fájlkezelőben vagy a Mac -keresőben, és hozzon létre egy wpa_supplicant nevű szöveges fájlt. Ügyeljen arra, hogy törölje a.txt kiterjesztést, és adja hozzá a.conf fájlt, és illessze be a következőt:

ország = 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}

Ha nem az USA -ban tartózkodik, meg kell adnia a WiFi nevét és jelszavát a megfelelő helyeken és országokban. Ne feledje, hogy a Raspberry Pi csak 2,4 GHz -es hálózathoz tud csatlakozni, ami azt jelenti, hogy a számítógépnek is csatlakoznia kell ehhez a hálózathoz. Miután létrehozott egy üres szöveges fájlt, kiterjesztés nélkül, ssh néven, majd vegye ki az SD -kártyát. Ezután telepítenie kell a PuTTY -t https://www.putty.org/, amelyet az ssh engedélyezéséhez fog használni. A telepítés után adja meg a raspberry pi IP -címét, és megtudhatja, mi az, ha belép az útválasztó webhelyére, és bejelentkezik a csatlakoztatott eszközökre.

Miután hozzáfér a Raspberry Pi-hez, be kell jelentkeznie, az alapértelmezett felhasználónév "pi", a jelszó pedig "málna". Írja be a sudo raspi-config parancsot, majd lépjen az interfészbeállításokhoz, és engedélyezze a kamerát, az ssh-t és az i2c-t, majd kattintson a Befejezés gombra, és írja be a sudo reboot parancsot. Most már készen áll arra, hogy belépjen a raspberry pi -be, telepítse a Távoli asztalt, és írja be a málna -pi IP -címét, és most már jó, hogy beléphet a raspberry pi -be.

3. lépés: Kódolási idő

Kódolási idő!
Kódolási idő!

Úgy döntöttem, hogy ezt a programot python -ban kódolom, ezért győződjön meg arról, hogy a python3.7 vagy 3.8 telepítve van az asztalon. Ez a kód szerver és kliens használatával működik, a szerver a számítógép. A kliens vagy a Raspberry pi lefényképezi, és feltölti a dropboxba, amelyet a szerver tölt le, majd futtatja a képfeldolgozást és szövegfelismerést. Ahhoz, hogy ez működjön, meg kell szereznie egy wolframalpha, dropbox és openweathermap alkalmazás-azonosítót, mindössze annyit kell tennie, hogy felkeresi a webhelyek regisztrációját, és megad egy alkalmazás-azonosítót. majd írja be őket a kód megjegyzései által meghatározott megfelelő helyekre. Győződjön meg arról, hogy a pip mindent telepített, és telepítette a Tesseract OCR -t és az OpenCV -t. Hozzon létre egy python fájlt Server.py néven a számítógépén, és egy fájlt client.py a raspberry pi -n, majd másolja és illessze be a kódot. De tudd, hogy minél merészebbek a karakterek és fehér a háttér, annál jobbak az eredmények, ez minden szövegfelismerő szoftver esetében így van.

Minden link az alkalmazás-azonosítóra való regisztrációhoz \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Feltétlenül telepítse a Tesseract OCR -t és az OpenCV -t \/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

import Dropbox a PIL importálásból Image import cv2 import pytesseract from pytesseract import Import output numpy as np import wolframalpha import socket import time

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "Alkalmazásazonosító"

host = socket.gethostname ()

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

míg igaz:

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

míg igaz:

míg Igaz: time.sleep (13.7) metaadatok, f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. bezár () print ("Kép letöltve!") image = cv2.imread ("Image.jpg") Kép = cv2.resize (kép, (640, 480), interpoláció = cv2. INTER_AREA) image68 = cv2.rotate (Kép, cv2. ROTATE_90_COUNTERCLOCKWISE) szürke = cv2.cvtColor (kép68, cv2. COLOR_BGR2GRAY)

def remove_noise (szürke):

return cv2.medianBlur (szürke, 5) def küszöbérték (szürke): return cv2.threshold (szürke, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (szürke): kernel = np.ones ((5, 5), np.uint8) return cv2.dilate (szürke, kernel, iterációk = 1) d = pytesseract.image_to_data (szürke, output_type = Output. DICT)

n_boxes = len (d ['szöveg'])

az i tartományban (n_dobozok): if int (d ['conf'] )> 60: (x, y, w, h) = (d ['bal'] , d ['top'] , d ['szélesség'] , d ['magasság'] ) szürke = cv2.téglalap (szürke, (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 (szürke) nyomtatás (szöveg), míg True: text2 = " "if len (text)> = 2: c.send (byte (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 (byte (answer1, "utf-8")) if len (text) <= 1: c.send (byte (text2, "utf-8")) time.sleep (7.5) szünet

Client.py:

import dropboximport picameraimport idő a luma.core.interface.serial importról port = 1, cím = 0x3C) eszköz = ssd1306 (soros, forgatás = 1) kamera = 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 = ""#a számítógép portjának IP címe = 60567 s.connect ((gazdagép, port)) msg1 = "" owm = pyowm. OWM ("")#app-id for openweathermap number = ["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. hónap) + "/" + str (cdt.year) obs = owm.weather_at_place ("")#az Ön városa és országa karakterlánc formátumban weather = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]), míg True: cdt = dátum -idő.datetime.now () min1 = str (cdt.minute) óra = str (cdt.hour) vászonnal (eszköz) rajzként: 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 ") ha min1 a számban: obs = owm.weather_at_place (" ")#a város és ország ismét karakterlánc formátumban

időjárás = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "fehér"), ha min1 nincs a számban: 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") kliens. files_upload (open (computer_path, "rb"). read (), dropbox_path) print ("[FELTÖLTETT] {}". formátum (computer_path)) full_msg = "" time.sleep (5) msg = s.recv (100) ha len (msg)> = 2: full_msg += msg.decode ("utf-8") print (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) vászonnal (eszköz) rajzként: 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 = " fehér ") draw.text ((0, 9), dátum, kitöltés = "fehér"), ha min1 a számban: obs = owm.weather_at_place ("")#a város és az ország ismét karakterlánc formátumban

időjárás = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "fehér"), ha min1 nincs a számban: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") ha len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) vászonnal (eszköz) rajzként: 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") ha min1 a számban: obs = owm.weather_at_place ("") #városod és országod ismét string formátumban

időjárás = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "fehér"), ha min1 nincs a számban: 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) vászonnal (eszköz) rajzként: 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 = "fehér") draw.text ((0, 9), dátum, kitöltés = "fehér"), ha min1 a számban: obs = owm.weather_at_place ("")#a város és ország ismét karakterlánc formátumban

időjárás = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "fehér"), ha a min1 nem a számban van: obs = owm.weather_at_place ("")#a város és az ország ismét karakterlánc formátumban

időjárás = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "fehér"), ha min1 nincs a számban: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") ha len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) vászonnal (eszköz) rajzként: 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") ha min1 a számban: obs = owm.weather_at_place ("") #városod és országod ismét string formátumban

időjárás = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "fehér"), ha min1 nincs a számban: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) client.files_delete (dropbox_path) print ("Törölt fájlok")

P. S. Amatőr programozó vagyok, ezért kérlek, ne kérdőjelezd meg a szörnyű programozási módszereimet.

4. lépés: Összerakni

Összerakni!
Összerakni!

Miután elvégezte az összes többit, gyakorlatilag készen áll, és nincs más dolga, mint csatlakoztatni a málna pi kamerát és a kijelzőt a szemüveghez. Ezt megteheti a kellékekben említett kétoldalas ragasztóval, vagy bármilyen szükséges módszerrel. Azt is észrevehette, hogy ebben a leckében sehol nem említettem elemet, mert a jövőben frissítéseket tervezek ezekre a szemüvegekre, és most nem akartam felhelyezni. De ha csatlakoztatni szeretne egyet, szüksége lesz egy li-po töltőáramkörre az Amazon-tól

Ha tetszett ez, és többet szeretne látni, elindítottam egy YouTube -csatornát, és remélhetőleg oktatóanyagokat is közzéteszek ott. Itt a link:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Isten mentsen!

János 3:16 "Mert úgy szerette Isten a világot, hogy egyszülött Fiát adta, aki valaha is hisz benne, nem veszik el, hanem örök élete lesz."

Ajánlott: