Съдържание:
- Стъпка 1: Окабеляване на веригата
- Стъпка 2: Достъп до Raspberry Pi
- Стъпка 3: Време за кодиране
- Стъпка 4: Съберете всичко заедно
Видео: Умни очила: 4 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:49
Здравейте на всички днес, ще ви покажа как да си направите Умни очила у дома! Едно от най -големите неща за интелигентните очила е колко е полезно да имате нещо подобно в днешния свят на технологиите и как няма само една версия на интелигентните очила, тъй като всички те имат невероятни функции и безкраен брой приложения, които могат да бъдат интегрирани. в бъдеще. Характеристиките на тези интелигентни очила включват време за разказване, което ви казва температурата на всеки 5 минути, между тези 5 минути се сменя между очакваната висока и ниска температура за този ден, също така ви казва и датата. Но основната му характеристика е, че прави снимка на всеки 10 секунди и след това анализира тази картина за текст, в който ще връща полезна информация за нея, ако намери въпрос, тогава ще отговори с помощта на wolfram или ако намери математическо уравнение ще го реши!
Консумативи:
Необходимите материали за този проект ще включват следното:
1) A Raspberry Pi 0 W (От vilros.com)
2) Ясен OLED дисплей 128x64 (от Sparkfun.com)
3) Камерен модул, форматиран за Raspberry Pi 0 W (От amazon.com)
4) Всички чаши по ваш избор
5) Проводници
6) поялник
7) Спойка без олово (защото не искате да умрете от олово)
8) двупосочно лепило
9) SD карта минимум 8gb
10) компютър и интернет връзка
Ако приемем, че вече имате компютър и интернет връзка, цената на тези очила ще достигне около $ 130,00
Стъпка 1: Окабеляване на веригата
За да показвате текст на екрана, който ще трябва да се свържете с OLED чрез I2C или SPI, аз избирам I2C, тъй като това е най -удобното за мен използване, но ако искате да се свържете с него чрез SPI, следвайте този урок на уебсайта на Sparkfun и се върнете тук, когато приключите. https://learn.sparkfun.com/tutorials/transparent-g… Ако сте избрали I2C, тъй като съм запоял проводниците, както е посочено от следното:
Pi \/ OLED \/
3.3v 3.3v
GND GND
SDA SDA
SCL SCL
Моля, обърнете внимание, че ясният OLED може да се справи само с 3.3v.
След като приключите с свързването на веригата, плъзнете лентовия кабел на модула на камерата в държача за лентов кабел на малиновото пи, като издърпате черната скоба и я плъзнете обратно, след като лентовият кабел е на мястото си.
Стъпка 2: Достъп до Raspberry Pi
С помощта на ssh можем да осъществим достъп до нашия pi с нашия компютър, без да свързваме допълнителна външна клавиатурна мишка и монитор. Първото нещо, което правите, е да свържете вашата SD карта към вашия компютър с адаптер или вграден порт, след което ще трябва да се насочите към тази връзка https://www.raspberrypi.org/downloads/raspbian/ и да изтеглите Raspbian buster с десктоп. Второ, трябва да поставите операционната система на SD картата с помощта на BalenaEtcher, да изберете вашата SD карта и Raspbian OS и да кликнете върху „флаш“. Този процес може да отнеме известно време, така че се върнете, когато приключите. Трето, отидете на SD картата в File Explorer или Finder на Mac и създайте текстов файл с име wpa_supplicant, не забравяйте да изтриете разширението.txt и да добавите.conf, във файла поставете следното:
държава = САЩ
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}
Ще трябва да въведете вашето WiFi име и парола на съответните места и държава, ако не сте в САЩ. Имайте предвид, че Raspberry Pi може да се свързва само с 2.4Ghz мрежа, което означава, че вашият компютър също ще трябва да се свърже с тази мрежа. След като създадете празен текстов файл без разширение, наречен ssh, и след това извадете SD картата си. След това ще трябва да инсталирате PuTTY https://www.putty.org/, което ще използвате, за да активирате ssh. След като инсталирате, въведете IP адреса на вашето малиново пи, можете да разберете какво представлява, като отидете на уебсайта на маршрутизаторите си, като влезете и разгледате свързаните устройства.
След като получите достъп до Raspberry Pi, той ще ви помоли да влезете, потребителското име по подразбиране е "pi", а паролата е "raspberry". Въведете sudo raspi-config, след това отидете на опциите за свързване и активирайте camera, ssh и i2c, след което щракнете върху край и въведете sudo reboot. Сега сте готови да влезете в ssh в малиновото пи, продължете и инсталирайте Отдалечен работен плот и въведете IP адреса на своя малинов пи и сега е добре да ssh в малиновото пи.
Стъпка 3: Време за кодиране
Избрах да кодирам тази програма в python, затова се уверете, че имате инсталиран python3.7 или 3.8 на вашия работен плот. Този код работи, като използва сървър и клиент, като северът е вашият компютър. Клиентът или малиновото пи ще направи снимка и ще я качи в dropbox, която се извлича от сървъра, който след това изпълнява обработка на изображения и разпознаване на текст върху изображението. Ще трябва да получите идентификационен номер на приложение на wolframalpha, dropbox и openweathermap, за да работи това, всичко, което трябва да направите, е да отидете на регистрацията на уебсайтове и той ще ви даде идентификатор на приложение. и след това ги въведете на съответните места, определени от коментарите в кода. Уверете се, че сте инсталирали pip и сте инсталирали Tesseract OCR и OpenCV. Създайте python файл с име Server.py на вашия компютър и файл с име client.py на малиново пи и след това копирайте и поставете кода. Но знайте, че колкото по -смели са символите и по -белият фон, толкова по -добри са резултатите, така е при всеки софтуер за разпознаване на текст.
Всички връзки за регистрация за идентификатор на приложение \/
www.wolframalpha.com/
openweathermap.org/api
www.dropbox.com/developers/documentation
Уверете се, че сте инсталирали Tesseract OCR и OpenCV \/
github.com/UB-Mannheim/tesseract/wiki
opencv.org/
Server.py:
import dropboxfrom PIL import Image import cv2 import pytesseract от pytesseract import Извод импортиране numpy като np импортиране wolframalpha време за импортиране на гнездо
dbx = dropbox. Dropbox ("dropboxAPIkey")
s = socket.socket (socket. AF_INET, socket. SOCK_STREAM)
app_id = "App-ID"
хост = socket.gethostname ()
порт = 60567 печат (хост) s.bind ((хост, порт)) s.listen (2)
докато е вярно:
c, addr = s.accept () print (f'Got връзка от: {addr} ') break
докато е вярно:
while True: метаданни time.sleep (13.7), f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Изображението е изтеглено!") image = cv2.imread ("Image.jpg") Image = cv2.resize (изображение, (640, 480), интерполация = cv2. INTER_AREA) image68 = cv2.rotate (Изображение, cv2. ROTATE_90_COUNTERCLOCKWISE) сиво = cv2.cvtColor (изображение68, cv2. COLOR_BGR2GREY)
def remove_noise (сиво):
return cv2.medianBlur (сиво, 5) def праг (сиво): връщане cv2.threshold (сиво, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (сиво): kernel = np.ones ((5, 5), np.uint8) връщане cv2.dilate (сиво, ядро, итерации = 1) d = pytesseract.image_to_data (сиво, output_type = Output. DICT)
n_boxes = len (d ['текст'])
за i в обхвата (n_boxes): if int (d ['conf'] )> 60: (x, y, w, h) = (d ['left'] , d ['top'] , d ['ширина'] , d ['височина'] ) сиво = cv2.правоъгълник (сиво, (x, y), (x + w, y + h), (0, 255, 0), 2) прекъснете pytesseract.pytesseract.tesseract_cmd = r "C: / Program Files / Tesseract-OCR / tesseract.exe" text = pytesseract.image_to_string (сив) 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 (байтове (answer1, "utf-8")) ако len (текст) <= 1: c.send (байтове (текст2, "utf-8")) time.sleep (7.5) почивка
Client.py:
import dropboximport picameraimport time от luma.core.interface.serial импортиране i2c от luma.core.render импортиране на платно от luma.oled.device внос ssd1306, ssd1325, ssd1331, sh1106 импортиране на гнездо за импортиране дата и час от време за импортиране спящ импорт pyowm сериен = i2c (порт = 1, адрес = 0x3C) устройство = ssd1306 (сериен, завъртане = 1) камера = пикамера. PiCamera () dropbox_access_token = "" #Вашият dropbox-id отново 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 адрес на вашия компютър порт = 60567 s.connect ((хост, порт)) msg1 = "" owm = pyowm. OWM ("")#app-id за 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. месец) + "/" + str (cdt.year) obs = owm.weather_at_place ("")#вашият град и държава в низов формат weather = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["те mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) докато True: cdt = datetime.datetime.now () min1 = str (cdt.minute) час = str (cdt.hour) с платно (устройство) като рисунка: draw.text ((0, 0), час, запълване = "бяло") draw.text ((11, 0), ":", fill = "бяло") draw.text ((15, 0), min1, fill = "white") draw.text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white ") ако min1 в num: obs = owm.weather_at_place (" ")#отново вашият град и държава в низов формат
weather = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white"), ако min1 не е в 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 акаунт свързан") клиент. files_upload (open (computer_path, "rb"). read (), dropbox_path) print ("[UPLOADED] {}". format (computer_path)) full_msg = "" time.sleep (5) msg = s.recv (100) ако len (msg)> = 2: full_msg += msg.decode ("utf-8") print (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) час = str (cdt.hour) с платно (устройство) като 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 = " бял ") draw.text ((0, 9), дата, запълване = "бяло"), ако min1 в num: obs = owm.weather_at_place ("")#отново вашият град и държава в низов формат
weather = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white"), ако min1 не е в num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") ако len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) час = str (cdt.hour) с платно (устройство) като 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"), ако min1 в num: obs = owm.weather_at_place ("") #отново вашият град и държава в низов формат
weather = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white"), ако min1 не е в 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) час = str (cdt.hour) с платно (устройство) като 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 ("")#вашият град и държава отново в низов формат
weather = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white"), ако min1 не е в число: obs = owm.weather_at_place ("")#вашият град и държава отново в низов формат
weather = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white"), ако min1 не е в num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") ако len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) час = str (cdt.hour) с платно (устройство) като 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"), ако min1 в num: obs = owm.weather_at_place ("") #отново вашият град и държава в низов формат
weather = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white"), ако min1 не е в num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) client.files_delete (dropbox_path) print ("Файлове изтрити")
P. S. Аз съм любител програмист, така че, моля, не поставяйте под въпрос ужасните ми методи на програмиране.
Стъпка 4: Съберете всичко заедно
След като приключите с всичко останало, на практика всичко, което ви остава, е да прикрепите малиновата камера pi и дисплея към очилата. Можете да направите това, като използвате двустранното лепило, споменато в консумативите, или можете да използвате всички методи, които смятате за необходими. Може също да сте забелязали, че никъде не съм споменавал батерия в този урок, защото съм планирал бъдещи подобрения за тези очила и не исках да я закача в момента. Но ако искате да прикачите такъв, ще ви е необходима схема за зарядно устройство li-po от amazon
Ако това ви хареса и искате да видите повече, стартирах канал в YouTube и се надявам да публикувам уроци и там. Ето линка:
www.youtube.com/channel/UCGqcWhHXdZf231rLe…
Бог спасява!
Йоан 3:16 „Защото Бог толкова възлюби света, че даде Своя единороден Син, който винаги вярва в Него, няма да загине, но ще има вечен живот.“
Препоръчано:
Умни очила (под $ 10 !!!): 8 стъпки (със снимки)
Умни очила (под $ 10 !!!): Здравейте! Всички сме запознати с интелигентните очила като тези на име E.D.I.T.H. направено от нашия любим герой Тони Старк, което по -късно беше предадено на Питър Паркър. Днес ще построя едно такова умно стъкло, което също под 10 долара! Те не са съвсем
Умни очила: 6 стъпки
Умни очила: Здравейте на всички! Днес ще споделя с вас, момчета, нещо, което исках от дълго време Интелигентни очила „Направи си сам“, построени само на около 25 $ Сега позволява DIE - Направете го изключително
Умни очила „Направи си сам“- Arduino/ESP: 5 стъпки
DIY Smart Glasses - Arduino/ESP: Новата версия е достъпна тук: [YouTube] Здравейте, момчета! Тук съм, за да ви покажа моя DIY проект и да ви насърча да го направите сами! Проектът е истински умни очила, които всеки може да направи у дома .Всички код може да се намери тук и ресурси: [GitHub] Аз също
Умни нокти: 5 стъпки
SMART NAILS: Това е теоретичен проект за това как интелигентните нокти биха могли да спасят местоположението на човек за миг. Гвоздеят за палеца има сензор за контакт, който при натискане по определен модел запазва текущото местоположение на мобилния телефон. За да не действа
Очила с течни кристали за амблиопия (Очила за редуване на оклузия) [ATtiny13]: 10 стъпки (със снимки)
Очила с течни кристали за амблиопия (Очила за редуване на оклузия) [ATtiny13]: Амблиопия (мързеливо око), нарушение на зрението, което засяга приблизително 3% от населението, обикновено се лекува с обикновени очила или капки атропин. За съжаление, тези методи на лечение блокират по -силно око за дълги, непрекъснати периоди от време, не