Table des matières:

Lunettes intelligentes : 4 étapes
Lunettes intelligentes : 4 étapes

Vidéo: Lunettes intelligentes : 4 étapes

Vidéo: Lunettes intelligentes : 4 étapes
Vidéo: Умные очки Ray-Ban Meta Smart Glasses 2024, Novembre
Anonim
Lunettes Intelligentes
Lunettes Intelligentes
Lunettes Intelligentes
Lunettes Intelligentes

Bonjour à tous, aujourd'hui je vais vous montrer comment fabriquer des Smart Glasses à la maison ! L'une des plus grandes choses à propos des lunettes intelligentes est à quel point il est avantageux d'avoir quelque chose comme ça dans le monde de la technologie d'aujourd'hui et comment il n'y a pas qu'une seule version de lunettes intelligentes car toutes ont des fonctionnalités étonnantes et un nombre infini d'applications qui pourraient être intégrées à l'avenir. Les caractéristiques de ces lunettes intelligentes incluent l'affichage de l'heure, vous indiquant la température toutes les 5 minutes, entre ces 5 minutes, il bascule entre la température haute et basse attendue pour ce jour-là, il vous indique également la date. Mais sa principale caractéristique est qu'il prend une photo toutes les 10 secondes, puis analyse cette image pour le texte dans lequel il renverra des informations utiles à ce sujet, s'il trouve une question, il y répondra en utilisant wolfram, ou s'il trouve une équation mathématique ça va le résoudre !

Fournitures:

Les fournitures nécessaires à ce projet comprendront les éléments suivants:

1) Un Raspberry Pi 0 W (De vilros.com)

2) Un écran OLED 128x64 clair (de Sparkfun.com)

3) Un module de caméra formaté pour Raspberry Pi 0 W (de amazon.com)

4) Tous les verres de votre choix

5) Fils

6) Fer à souder

7) Soudure sans plomb (parce que vous ne voulez pas mourir du plomb)

8) Adhésif 2 voies

9) Carte SD d'au moins 8 Go

10) ordinateur et connexion internet

En supposant que vous ayez déjà un ordinateur et une connexion Internet, le coût de ces lunettes s'élèvera à environ 130,00 $

Étape 1: Câblage du circuit

Câblage du circuit !
Câblage du circuit !

Afin d'afficher du texte sur l'écran que vous allez devoir vous connecter à l'OLED via I2C ou SPI, je choisis I2C car c'est celui que je suis le plus à l'aise d'utiliser mais si vous avez envie de vous y connecter via SPI allez suivre ce tutoriel sur le site Sparkfun et revenez ici lorsque vous avez terminé. https://learn.sparkfun.com/tutorials/transparent-g… Si vous avez choisi I2C car j'ai soudé les fils comme indiqué par ce qui suit:

Pi \/ OLED \/

3.3v 3.3v

TERRE TERRE

SDA SDA

SCL SCL

Veuillez noter que l'OLED transparent ne peut gérer que 3.3v.

Une fois que vous avez terminé de connecter le circuit, faites glisser le câble plat du module de caméra dans le support de câble plat du raspberry pi en tirant sur la pince noire et en la faisant glisser une fois le câble plat en place.

Étape 2: Accéder au Raspberry Pi

En utilisant ssh, nous pouvons accéder à notre pi avec notre PC sans connecter un clavier, une souris et un moniteur externes supplémentaires. La première chose à faire est de connecter votre carte SD à votre PC avec un adaptateur ou un port intégré, puis vous devrez vous rendre sur ce lien https://www.raspberrypi.org/downloads/raspbian/ et télécharger Raspbian buster avec bureau. Deuxièmement, vous devez mettre le système d'exploitation sur la carte SD à l'aide de BalenaEtcher, sélectionnez votre carte SD et le système d'exploitation Raspbian et cliquez sur "flash". Ce processus peut prendre un certain temps, alors revenez lorsque vous avez terminé. Troisièmement, accédez à la carte SD dans l'explorateur de fichiers ou le Finder sur mac et créez un fichier texte nommé wpa_supplicant, assurez-vous de supprimer l'extension.txt et d'ajouter.conf, dans le fichier, collez ce qui suit:

pays=États-Unis

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 }

Vous devrez entrer votre nom et mot de passe WiFi dans les endroits et pays correspondants si vous n'êtes pas aux États-Unis. Gardez à l'esprit que le Raspberry Pi ne peut se connecter qu'à un réseau 2,4 GHz, ce qui signifie que votre ordinateur devra également se connecter à ce réseau. Après avoir créé un fichier texte vide sans extension appelé ssh, puis éjectez votre carte SD. Vous devrez ensuite installer PuTTY https://www.putty.org/, ce que vous utiliserez pour activer ssh. Une fois installé, entrez l'adresse IP de votre raspberry pi, vous pouvez savoir de quoi il s'agit en vous connectant au site Web de votre routeur et en regardant les appareils connectés.

Après avoir accédé au Raspberry Pi, il vous demandera de vous connecter, le nom d'utilisateur par défaut est "pi" et le mot de passe est "raspberry". Tapez sudo raspi-config puis accédez aux options d'interfaçage et activez la caméra, ssh et i2c, puis cliquez sur terminer et tapez sudo reboot. Maintenant, vous êtes prêt à ssh dans le raspberry pi, allez-y et installez Remote Desktop et entrez l'adresse IP de votre raspberry pi et vous êtes maintenant prêt à ssh dans le raspberry pi.

Étape 3: Temps de codage

Temps de codage !
Temps de codage !

J'ai choisi de coder ce programme en python, alors assurez-vous que python3.7 ou 3.8 est installé sur votre bureau. Ce code fonctionne en utilisant un serveur et un client, le serveur étant votre PC. Le client ou raspberry pi prendra une photo et la téléchargera dans la boîte de dépôt qui est récupérée par le serveur qui exécute ensuite le traitement de l'image et la reconnaissance de texte sur l'image. Vous devrez obtenir un identifiant d'application wolframalpha, dropbox et openweathermap pour que cela fonctionne, tout ce que vous avez à faire est de vous inscrire sur les sites Web et cela vous donnera un identifiant d'application. puis entrez-les dans les endroits correspondants déterminés par les commentaires dans le code. Assurez-vous que pip a tout installé et installé Tesseract OCR et OpenCV. Créez un fichier python nommé Server.py sur votre PC et un fichier nommé client.py sur le raspberry pi puis copiez et collez le code. Mais sachez que plus les caractères sont gras et le fond plus blanc meilleurs sont les résultats, c'est le cas de tous les logiciels de reconnaissance de texte.

Tous les liens pour s'inscrire à un app-id \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Assurez-vous d'installer Tesseract OCR et OpenCV \/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Serveur.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"

hôte = socket.gethostname()

port = 60567 print (host) s.bind((host, port)) s.listen(2)

tant que vrai:

c, addr = s.accept() print (f'Connection obtenue depuis: {addr}') break

tant que vrai:

while True: métadonnées 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 téléchargée !") image = cv2.imread("Image.jpg") Image = cv2.resize(image, (640, 480), interpolation=cv2. INTER_AREA) image68 = cv2.rotate(Image, cv2. ROTATE_90_COUNTERCLOCKWISE) gris = cv2.cvtColor(image68, cv2. COLOR_BGR2GRAY)

def remove_noise (gris):

return cv2.medianBlur(gris, 5) seuillage def(gris): return cv2.threshold(gris, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU)[1] def dilate(gris): kernel = np.ones((5, 5), np.uint8) renvoie cv2.dilate(gris, noyau, itérations=1) d = pytesseract.image_to_data(gris, output_type = Output. DICT)

n_boxes = len(d['texte'])

for i in range(n_boxes): if int(d['conf']) > 60: (x, y, w, h) = (d['left'], d['top'], d['largeur'], d['hauteur']) gray = cv2.rectangle(gray, (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(gray) 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(text) <= 1: c.send(bytes(text2, "utf-8")) time.sleep(7.5) pause

Client.py:

importer dropboximport picameraimport time de luma.core.interface.serial importer i2c de luma.core.render importer canvas de luma.oled.device importer ssd1306, ssd1325, ssd1331, sh1106 importer socket importer datetime from time import sleep importer pyowm serial = i2c(port=1, address=0x3C) device = ssd1306(serial, rotate=1) camera = picamera. PiCamera() dropbox_access_token= "" #Your dropbox-id again computer_path=r"/home/pi/Image.jpg" dropbox_path= f"/dropbox_API/Image.jpg" s = socket.socket(socket. AF_INET, socket. SOCK_STREAM) host = ""#adresse ip de votre pc port = 60567 s.connect((host, port)) msg1 = " " owm = pyowm. OWM("")#app-id pour 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. mois) + "/" + str(cdt.année) obs = owm.weather_at_place("")#votre ville et votre pays au format chaîne météo = obs.get_weather() temp2 = str(weather.get_temperature("fahrenheit")["te mp_max"]) temp3 = str(weather.get_temperature("fahrenheit")["temp_min"]) tandis que True: cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) avec canvas(device) comme 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 ") si min1 dans num: obs = owm.weather_at_place("")#votre ville et votre pays au format chaîne à nouveau

météo = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") si min1 n'est pas dans 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) client print("[SUCCESS] compte dropbox lié"). 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) hour = str(cdt.hour) avec canvas(device) comme 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 = " blanc") draw.text((0, 9), date, fill = "blanc") si min1 dans num: obs = owm.weather_at_place("")#votre ville et votre pays au format chaîne à nouveau

météo = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") si min1 n'est pas dans 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) avec canvas(device) comme draw: draw.text((0, 0), heure, 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("") #votre ville et votre pays au format chaîne à nouveau

météo = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") si min1 n'est pas dans 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) hour = str(cdt.hour) avec canvas(device) comme 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("")#votre ville et votre pays au format chaîne à nouveau

météo = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") si min1 n'est pas dans num: obs = owm.weather_at_place("")#votre ville et votre pays au format chaîne à nouveau

météo = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") si min1 n'est pas dans 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) avec canvas(device) comme draw: draw.text((0, 0), heure, 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("") #votre ville et votre pays au format chaîne à nouveau

météo = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") si min1 n'est pas dans num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "white") time.sleep(7) client.files_delete(dropbox_path) print ("Fichiers supprimés")

P. S. Je suis un programmeur amateur, alors ne remettez pas en question mes horribles méthodes de programmation.

Étape 4: Tout assembler

Mettre tous ensemble!
Mettre tous ensemble!

Une fois que vous avez terminé tout le reste, vous avez pratiquement terminé, il ne vous reste plus qu'à attacher la caméra Raspberry Pi et l'écran aux lunettes. Vous pouvez le faire en utilisant l'adhésif double face mentionné dans les fournitures ou vous pouvez utiliser toutes les méthodes que vous jugez nécessaires. Vous avez peut-être également remarqué que je n'ai mentionné aucune batterie dans cette leçon, car j'ai prévu de futures mises à niveau pour ces lunettes et je ne voulais pas en attacher une pour le moment. Mais si vous voulez en attacher un, vous aurez besoin d'un circuit de chargeur li-po d'amazon

Si vous avez apprécié cela et que vous voulez en voir plus, j'ai lancé une chaîne YouTube et j'espère y publier également des tutoriels. Voici le lien:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Dieu sauve !

Jean 3:16 "Car Dieu a tant aimé le monde qu'il a donné son Fils unique, celui qui croit toujours en lui ne périra pas mais aura la vie éternelle."

Conseillé: