Índice:

Óculos inteligentes: 4 etapas
Óculos inteligentes: 4 etapas

Vídeo: Óculos inteligentes: 4 etapas

Vídeo: Óculos inteligentes: 4 etapas
Vídeo: ETAPAS DO USO DE ÓCULOS DE GRAU 😂 2024, Julho
Anonim
Óculos inteligentes
Óculos inteligentes
Óculos inteligentes
Óculos inteligentes

Olá a todos hoje vou mostrar a vocês como fazer Óculos Inteligentes em casa! Uma das melhores coisas sobre os óculos inteligentes é o quão benéfico é ter algo assim no mundo atual da tecnologia e como não há apenas uma versão dos óculos inteligentes, pois todos têm recursos incríveis e um número infinito de aplicativos que podem ser integrados no futuro. As características desses óculos inteligentes incluem dizer o tempo, informando a temperatura a cada 5 minutos, entre esses 5 minutos ele alterna entre a temperatura alta e baixa esperada para aquele dia, e também informa a data. Mas sua principal característica é que ele tira uma foto a cada 10 segundos e então analisa essa imagem em busca de texto no qual retornará informações úteis sobre ela, se encontrar uma pergunta, ele irá respondê-la usando wolfram, ou se encontrar uma equação matemática vai resolver!

Suprimentos:

Os suprimentos necessários para este projeto incluirão o seguinte:

1) A Raspberry Pi 0 W (de vilros.com)

2) Uma tela OLED nítida de 128x64 (de Sparkfun.com)

3) Um módulo de câmera formatado para Raspberry Pi 0 W (da amazon.com)

4) Quaisquer óculos de sua escolha

5) Fios

6) Ferro de soldar

7) Solda sem chumbo (porque você não quer morrer com chumbo)

8) adesivo de 2 vias

9) Cartão SD mínimo de 8 gb

10) computador e conexão com a internet

Supondo que você já tenha um computador e conexão à Internet, o custo desses óculos será em torno de $ 130,00

Etapa 1: Fiação do circuito

Fiação do circuito!
Fiação do circuito!

Para exibir texto na tela, você terá que se conectar ao OLED via I2C ou SPI, eu escolho I2C porque é o que me sinto mais confortável para usar, mas se você quiser se conectar a ele via SPI, siga este tutorial em o site Sparkfun e volte aqui quando terminar. https://learn.sparkfun.com/tutorials/transparent-g… Se você escolheu I2C, pois soldei os fios conforme indicado pelo seguinte:

Pi / / OLED / /

3,3v 3,3v

GND GND

SDA SDA

SCL SCL

Observe que o OLED transparente só pode lidar com 3,3v.

Depois de terminar de conectar o circuito, deslize o cabo de fita do módulo da câmera no suporte do cabo de fita no raspberry pi puxando o grampo preto e deslizando-o de volta assim que o cabo de fita estiver no lugar.

Etapa 2: Acessando o Raspberry Pi

Usando ssh podemos acessar nosso pi com nosso pc sem conectar um teclado externo, mouse e monitor. A primeira coisa que você faz é conectar seu cartão SD em seu PC com um adaptador ou uma porta embutida, então você vai precisar acessar este link https://www.raspberrypi.org/downloads/raspbian/ e baixar Raspbian buster com área de trabalho. Em segundo lugar, você tem que colocar o sistema operacional no cartão SD usando BalenaEtcher, selecione seu cartão SD e o sistema operacional Raspbian e clique em "flash", este processo pode levar algum tempo, então volte quando terminar. Em terceiro lugar, vá para o cartão SD no explorador de arquivos ou localizador no mac e crie um arquivo de texto chamado wpa_supplicant, certifique-se de excluir a extensão.txt e adicione.conf, no arquivo, cole o seguinte:

país = EUA

ctrl_interface = DIR = / var / run / wpa_supplicant GROUP = netdev update_config = 1 rede = {ssid = "WIFI_SSID" scan_ssid = 1 psk = "WIFI_PASSWORD" key_mgmt = WPA-PSK}

Terá de introduzir o seu nome e palavra-passe WiFi nos locais e países correspondentes, se não estiver nos EUA. Lembre-se de que o Raspberry Pi só pode se conectar a uma rede de 2,4 GHz, o que significa que seu PC também terá que se conectar a essa rede. Depois crie um arquivo de texto vazio sem extensão chamado ssh e ejete o cartão SD. Em seguida, você precisará instalar o PuTTY https://www.putty.org/, que é o que você usará para habilitar o ssh. Uma vez instalado, digite o endereço IP do seu raspberry pi, você pode descobrir o que é acessando o site do seu roteador, fazendo login e olhando os dispositivos conectados.

Depois de obter acesso ao Raspberry Pi, ele solicitará que você faça o login, o nome de usuário padrão é "pi" e a senha é "raspberry". Digite sudo raspi-config, vá para as opções de interface e habilite a câmera, ssh e i2c, clique em terminar e digite sudo reboot. Agora você está pronto para fazer SSH no raspberry pi, vá em frente e instale a Área de Trabalho Remota e digite o endereço IP do raspberry pi e agora você está pronto para fazer SSH no raspberry pi.

Etapa 3: Tempo de codificação

Tempo de codificação!
Tempo de codificação!

Escolhi codificar este programa em python, portanto, certifique-se de ter o python3.7 ou 3.8 instalado em sua área de trabalho. Este código funciona usando um servidor e um cliente, sendo o servidor o seu pc. O cliente ou raspberry pi irá tirar uma foto e carregá-la para a caixa de depósito que é recuperada pelo servidor, que então executa o processamento de imagem e o reconhecimento de texto na imagem. Você terá que obter um wolframalpha, dropbox e openweathermap app-id para que isso funcione, tudo o que você precisa fazer é acessar o site de inscrição e ele lhe dará um app-id. e, em seguida, insira-os em locais correspondentes determinados pelos comentários no código. Certifique-se de ter o pip instalado tudo e instalado Tesseract OCR e OpenCV. Crie um arquivo python denominado Server.py no seu pc e um arquivo denominado client.py no raspberry pi e, a seguir, copie e cole o código. Mas saiba que quanto mais ousados os caracteres e mais branco o fundo, melhores são os resultados, esse é o caso de todos os softwares de reconhecimento de texto.

Todos os links para se inscrever em um app-id / /

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Certifique-se de instalar Tesseract OCR e 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 import time

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "App-ID"

host = socket.gethostname ()

porta = 60567 imprimir (host) s.bind ((host, porta)) s.listen (2)

enquanto verdadeiro:

c, addr = s.accept () print (f'Got conexão de: {addr} ') break

enquanto verdadeiro:

enquanto True: time.sleep (13.7) metadata, f = dbx.files_download ("/ dropbox_API / Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Imagem baixada!") image = cv2.imread ("Image.jpg") Image = cv2.resize (imagem, (640, 480), interpolação = cv2. INTER_AREA) image68 = cv2.rotate (Imagem, cv2. ROTATE_90_COUNTERCLOCKWISE) grey = cv2.cvtColor (image68, cv2. COLOR_BGR2GRAY)

def remove_noise (cinza):

return cv2.medianBlur (grey, 5) def thresholding (grey): return cv2.threshold (grey, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (grey): kernel = np.ones ((5, 5), np.uint8) return cv2.dilate (cinza, kernel, iterações = 1) d = pytesseract.image_to_data (cinza, output_type = Output. DICT)

n_boxes = len (d ['texto'])

para i no intervalo (n_boxes): if int (d ['conf'] )> 60: (x, y, w, h) = (d ['left'] , d ['top'] , d ['largura'] , d ['altura'] ) cinza = cv2.retângulo (cinza, (x, y), (x + w, y + h), (0, 255, 0), 2) break pytesseract.pytesseract.tesseract_cmd = r "C: / Arquivos de programas / Tesseract-OCR / tesseract.exe" text = pytesseract.image_to_string (cinza) imprimir (texto) enquanto Verdadeiro: 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 (consulta) 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) break

Client.py:

import dropboximport picameraimport time de luma.core.interface.serial import i2c de 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 = "" #Seu dropbox-id novamente 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 endereço de sua porta pc = 60567 s.connect ((host, porta)) msg1 = "" owm = pyowm. OWM ("") # app-id para openweathermap num = ["05", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "00"] cdt = datetime.datetime.now () min1 = str (cdt.minute) data = str (cdt.day) + "/" + str (cdt. mês) + "/" + str (cdt.year) obs = owm.weather_at_place ("") # sua cidade e país no formato de string weather = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) enquanto True: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) com canvas (dispositivo) como desenho: draw.text ((0, 0), hour, fill = "white") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "branco") draw.text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white ") se min1 em num: obs = owm.weather_at_place (" ") # sua cidade e país em formato de string novamente

weather = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "branco") draw.text ((40, 0), temp, fill = "white") se min1 não estiver em 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) hora = str (cdt.hour) com canvas (dispositivo) como desenho: draw.text ((0, 19), full_msg, fill = "white") draw.text ((0, 0), hour, fill = "white") draw.text ((11, 0), ":", fill = "branco") draw.text ((15, 0), min1, fill = "white") draw.text ((0, 9), "_", fill = " branco ") draw.text ((0, 9), data, preenchimento = "branco") se min1 em num: obs = owm.weather_at_place ("") # sua cidade e país em formato de string novamente

weather = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "branco") draw.text ((40, 0), temp, fill = "white") se min1 não estiver em 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) com canvas (dispositivo) como desenhar: draw.text ((0, 0), hora, preencher = "branco") draw.text ((11, 0), ":", preencher = "branco") draw.text ((15, 0), min1, preencher = "branco") desenhar. text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("") #sua cidade e país em formato de string novamente

weather = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "branco") draw.text ((40, 0), temp, fill = "white") se min1 não estiver em 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) se 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) com canvas (dispositivo) como desenho: draw.text ((0, 19), full_msg, fill = "branco") draw.text ((0, 29), full_msg2, fill = "branco") draw.text ((0, 0), hora, fill = "branco") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") draw.text ((0, 9), "_", fill = "branco") draw.text ((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("") # sua cidade e país em formato de string novamente

weather = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "branco") draw.text ((40, 0), temp, fill = "white") se min1 não estiver em num: obs = owm.weather_at_place ("") # sua cidade e país em formato de string novamente

weather = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "branco") draw.text ((40, 0), temp, fill = "white") se min1 não estiver em 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) com canvas (dispositivo) como desenhar: draw.text ((0, 0), hora, preencher = "branco") draw.text ((11, 0), ":", preencher = "branco") draw.text ((15, 0), min1, preencher = "branco") desenhar. text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("") #sua cidade e país em formato de string novamente

weather = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "branco") draw.text ((40, 0), temp, fill = "white") se min1 não estiver em num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) client.files_delete (dropbox_path) print ("Arquivos excluídos")

P. S. Sou um programador amador, então, por favor, não questione meus métodos de programação horríveis.

Etapa 4: Juntando tudo

Juntando tudo!
Juntando tudo!

Depois de terminar tudo o resto, você está praticamente pronto, tudo o que resta fazer é conectar a câmera raspberry pi e o visor aos óculos. Você pode fazer isso usando o adesivo de dupla face mencionado nos suprimentos ou qualquer método que julgar necessário. Você também deve ter percebido que não mencionei uma bateria em nenhuma parte desta lição porque tenho atualizações futuras planejadas para esses óculos e não queria instalar uma agora. Mas se você quiser conectar um, você vai precisar de um circuito de carregador li-po da amazon

Se você gostou e quer ver mais, comecei um canal no YouTube e espero postar tutoriais nele também. Aqui está o link:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Deus salva!

João 3:16 "Porque Deus amou o mundo de tal maneira que deu o seu Filho unigênito, aquele que nele crê não perecerá, mas terá a vida eterna."

Recomendado: