Índice:
- Etapa 1: Fiação do circuito
- Etapa 2: Acessando o Raspberry Pi
- Etapa 3: Tempo de codificação
- Etapa 4: Juntando tudo
Vídeo: Óculos inteligentes: 4 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:34
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
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
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
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:
Óculos inteligentes (menos de $ 10 !!!): 8 etapas (com fotos)
Óculos inteligentes (menos de $ 10 !!!): Olá! Todos nós estamos familiarizados com os óculos inteligentes, como aquele chamado E.D.I.T.H. feito pelo nosso querido personagem Tony Stark que mais tarde foi passado para Peter Parker. Hoje vou construir um vidro tão inteligente que custa menos de US $ 10! Eles não são exatamente
Óculos inteligentes: 6 etapas
Óculos inteligentes: Olá a todos !! Hoje vou compartilhar com vocês algo que eu queria há muito tempo. Óculos inteligentes faça você mesmo com cerca de 25 $ Agora vamos MORRER - Faça Extremamente
Óculos inteligentes faça você mesmo - Arduino / ESP: 5 etapas
Óculos inteligentes DIY - Arduino / ESP: A nova versão está disponível aqui: [YouTube] Ei pessoal! Estou aqui para mostrar meu projeto DIY e encorajá-los a fazer você mesmo! O projeto são óculos realmente inteligentes que todos podem fazer em casa .Todo o código pode ser encontrado aqui e recursos: [GitHub] Eu também
Óculos inteligentes de realidade aumentada DIY usando Arduino: 7 etapas
Óculos inteligentes de realidade aumentada DIY usando Arduino: como a tecnologia está crescendo rapidamente e se integrando a todos os aspectos da vida das pessoas, designers e desenvolvedores tentaram fornecer uma experiência mais agradável de tecnologia para as pessoas. Uma das tendências da tecnologia que visa facilitar a vida é o desgaste
Óculos de cristal líquido para ambliopia (óculos de treinamento de oclusão alternada) [ATtiny13]: 10 etapas (com fotos)
Óculos de cristal líquido para ambliopia (óculos de treinamento de oclusão alternada) [ATtiny13]: Ambliopia (olho preguiçoso), um distúrbio da visão que afeta aproximadamente 3% da população, geralmente tratado com simples colírios ou colírios de atropina. Infelizmente, esses métodos de tratamento obstruem o olho mais forte por longos e ininterruptos períodos de tempo, não