Оглавление:

Умные очки: 4 шага
Умные очки: 4 шага

Видео: Умные очки: 4 шага

Видео: Умные очки: 4 шага
Видео: Сделал умные очки ∫ ИНСТРУКЦИЯ СХЕМА СОВЕТЫ 2024, Июль
Anonim
Умные очки
Умные очки
Умные очки
Умные очки

Всем привет, сегодня я покажу вам, как сделать умные очки в домашних условиях! Одна из величайших особенностей умных очков заключается в том, насколько выгодно иметь что-то подобное в современном мире технологий и что не существует только одной версии умных очков, поскольку все они обладают удивительными функциями и бесконечным количеством приложений, которые можно интегрировать. в будущем. Эти умные очки включают в себя время, сообщающее вам температуру каждые 5 минут, между этими 5 минутами они меняют ожидаемую высокую и низкую температуру на этот день, а также сообщает вам дату. Но его главная особенность заключается в том, что он делает снимок каждые 10 секунд, а затем анализирует это изображение на предмет текста, в котором он возвращает полезную информацию о нем, если он найдет вопрос, он ответит на него, используя вольфрам, или если он найдет математическое уравнение это решит это!

Запасы:

Поставки, необходимые для этого проекта, будут включать следующее:

1) Raspberry Pi 0 Вт (с сайта vilros.com)

2) Четкий OLED-дисплей 128x64 (с сайта Sparkfun.com)

3) Модуль камеры, отформатированный для Raspberry Pi 0 W (с сайта amazon.com)

4) Любые очки на ваш выбор

5) Провода

6) Паяльник

7) Бессвинцовый припой (потому что вы не хотите умирать от свинца)

8) двухсторонний клей

9) SD-карта мин. 8 ГБ

10) компьютер и подключение к Интернету

Если у вас уже есть компьютер и подключение к Интернету, стоимость этих очков составит около 130 долларов.

Шаг 1: Подключение схемы

Подключение схемы!
Подключение схемы!

Чтобы отобразить текст на экране, который вы собираетесь подключиться к OLED через I2C или SPI, я выбираю I2C, поскольку это тот, который мне удобнее использовать, но если вы чувствуете, что подключиться к нему через SPI, следуйте этому руководству по веб-сайт Sparkfun и вернитесь сюда, когда закончите. https://learn.sparkfun.com/tutorials/transparent-g … Если вы выбрали I2C, поскольку я припаял провода, как показано ниже:

Пи / / OLED / /

3,3 В 3,3 В

GND GND

ПДД ПДД

SCL SCL

Обратите внимание, что прозрачный OLED-дисплей может обрабатывать только 3,3 В.

После того, как вы закончили подключение схемы, вставьте ленточный кабель модуля камеры в держатель ленточного кабеля на raspberry pi, вытащив черный зажим и задвинув его обратно, как только ленточный кабель будет на месте.

Шаг 2: доступ к Raspberry Pi

Используя ssh, мы можем получить доступ к нашему пи с нашего компьютера, не подключая дополнительную внешнюю клавиатуру, мышь и монитор. Первое, что вам нужно сделать, это подключить SD-карту к компьютеру с помощью адаптера или встроенного порта, затем вам нужно будет перейти по этой ссылке https://www.raspberrypi.org/downloads/raspbian/ и загрузить Raspbian buster. с рабочим столом. Во-вторых, вы должны установить ОС на SD-карту с помощью BalenaEtcher, выбрать SD-карту и ОС Raspbian и нажать «flash», этот процесс может занять некоторое время, поэтому вернитесь, когда закончите. В-третьих, перейдите на SD-карту в файловом проводнике или поисковике на 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}

Вам нужно будет ввести свое имя и пароль Wi-Fi в соответствующих местах и в соответствующей стране, если вы не находитесь в США. Имейте в виду, что Raspberry Pi может подключаться только к сети 2,4 ГГц, что означает, что ваш компьютер также должен будет подключаться к этой сети. После создайте пустой текстовый файл без расширения с именем ssh, а затем извлеките SD-карту. Затем вам нужно будет установить PuTTY https://www.putty.org/, который вы будете использовать для включения ssh. После установки введите IP-адрес вашего raspberry pi, вы можете выяснить, что это такое, зайдя на сайт своего маршрутизатора, войдя в систему и посмотрев на подключенные устройства.

После того, как вы получите доступ к Raspberry Pi, он попросит вас войти в систему, имя пользователя по умолчанию - «пи», а пароль - «малина». Введите sudo raspi-config, затем перейдите к параметрам взаимодействия и включите камеру, ssh и i2c, затем нажмите «Готово» и введите sudo reboot. Теперь вы готовы подключиться по ssh к raspberry pi, продолжайте и устанавливайте Remote Desktop и введите IP-адрес вашего raspberry pi, и теперь вы можете использовать ssh в raspberry pi.

Шаг 3: Время кодирования

Время кодирования!
Время кодирования!

Я решил закодировать эту программу на python, поэтому убедитесь, что на вашем рабочем столе установлен python3.7 или 3.8. Этот код работает с использованием сервера и клиента, причем сервером является ваш компьютер. Клиент или Raspberry Pi сделает снимок и загрузит его в dropbox, который загружается сервером, который затем запускает обработку изображений и распознавание текста на изображении. Вам нужно будет получить идентификатор приложения wolframalpha, dropbox и openweathermap, чтобы это работало, все, что вам нужно сделать, это зайти на сайт регистрации, и он предоставит вам идентификатор приложения. а затем введите их в соответствующие места, определенные комментариями в коде. Убедитесь, что вы установили все и установили Tesseract OCR и OpenCV. Создайте файл python с именем Server.py на своем компьютере и файл с именем client.py на raspberry pi, а затем скопируйте и вставьте код. Но знайте, что чем жирнее символы и белее фон, тем лучше результаты, это относится к любому программному обеспечению для распознавания текста.

Все ссылки для подписки на app-id / /

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 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 ()

порт = 60567 печать (хост) s.bind ((хост, порт)) s.listen (2)

в то время как True:

c, addr = s.accept () print (f'Получено соединение от: {addr} ') break

в то время как True:

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 (image, (640, 480), interpolation = cv2. INTER_AREA) image68 = cv2.rotate (Image, cv2. ROTATE_90_COUNTERCLOCKWISE) серый = cv2.cvtColor (image68, cv2. COLOR_BGR2GRAY)

def remove_noise (серый):

return cv2.medianBlur (серый, 5) def порог (серый): return cv2.threshold (серый, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (серый): kernel = np.ones ((5, 5), np.uint8) return 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 ['width'] , d ['height'] ) серый = cv2.rectangle (серый, (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 (серый) 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 (текст) <= 1: c.send (bytes (text2, "utf-8")) time.sleep (7.5) break

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, rotate = 1) camera = picamera. 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-адрес вашего ПК port = 60567 s.connect ((host, port)) msg1 = "" owm = pyowm. OWM ("") # идентификатор приложения для 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. month) + "/" + str (cdt.year) obs = owm.weather_at_place ("") # ваш город и страна в строковом формате 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) с холстом (устройством) в качестве рисования: 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_tempera ("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 («[УСПЕХ] привязана учетная запись 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) hour = str (cdt.hour) с холстом (устройством) в качестве рисования: 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), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("") # снова ваш город и страна в строковом формате

weather = obs.get_weather ()

temp = str (weather.get_tempera ("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) hour = str (cdt.hour) с canvas (device) как draw: draw.text ((0, 0), час, 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_tempera ("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) если 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) с холстом (устройством) как 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_tempera ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") if min1 не в num: obs = owm.weather_at_place ("") # ваш город и страна снова в строковом формате

weather = obs.get_weather ()

temp = str (weather.get_tempera ("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) hour = str (cdt.hour) с canvas (device) как draw: draw.text ((0, 0), час, 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_tempera ("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: Собираем все вместе

Собираем все вместе!
Собираем все вместе!

Как только вы закончите все остальное, вы практически закончили, все, что вам осталось сделать, это прикрепить камеру Raspberry Pi и дисплей к очкам. Вы можете сделать это, используя двухсторонний клей, упомянутый в расходных материалах, или можете использовать любые методы, которые считаете необходимыми. Вы также могли заметить, что я нигде не упомянул батарею в этом уроке, потому что у меня запланированы будущие обновления для этих очков, и я не хотел устанавливать их прямо сейчас. Но если вы все же хотите подключить его, вам понадобится схема зарядного устройства li-po от Amazon

Если вам понравилось и вы хотите увидеть больше, я открыл канал на YouTube и, надеюсь, буду публиковать на нем обучающие материалы. Вот ссылка:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Бог спасает!

Иоанна 3:16 «Ибо так возлюбил Бог мир, что отдал Своего единственного Сына, который всегда верит в Него, не погибнет, но будет иметь жизнь вечную».

Рекомендуемые: