Съдържание:

Умни очила: 4 стъпки
Умни очила: 4 стъпки

Видео: Умни очила: 4 стъпки

Видео: Умни очила: 4 стъпки
Видео: Щит и меч, 4 серия (реставрация 4К, реж. Владимир Басов, 1967 г.) 2024, Ноември
Anonim
Умни очила
Умни очила
Умни очила
Умни очила

Здравейте на всички днес, ще ви покажа как да си направите Умни очила у дома! Едно от най -големите неща за интелигентните очила е колко е полезно да имате нещо подобно в днешния свят на технологиите и как няма само една версия на интелигентните очила, тъй като всички те имат невероятни функции и безкраен брой приложения, които могат да бъдат интегрирани. в бъдеще. Характеристиките на тези интелигентни очила включват време за разказване, което ви казва температурата на всеки 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 „Защото Бог толкова възлюби света, че даде Своя единороден Син, който винаги вярва в Него, няма да загине, но ще има вечен живот.“

Препоръчано: