Isi kandungan:

Cermin Mata Pintar: 4 Langkah
Cermin Mata Pintar: 4 Langkah

Video: Cermin Mata Pintar: 4 Langkah

Video: Cermin Mata Pintar: 4 Langkah
Video: Waspadalah kalau ketemu orang yang pake kacamata ini. 2024, Julai
Anonim
Cermin Mata Pintar
Cermin Mata Pintar
Cermin Mata Pintar
Cermin Mata Pintar

Halo semua hari ini saya akan menunjukkan kepada anda cara membuat Cermin Mata Pintar di rumah! Salah satu perkara paling hebat mengenai cermin mata pintar adalah betapa berfaedah untuk memiliki sesuatu seperti ini dalam dunia teknologi masa kini dan bagaimana tidak ada satu versi cermin mata pintar sahaja kerana semuanya mempunyai ciri-ciri luar biasa dan sebilangan besar aplikasi yang dapat disatukan pada masa hadapan. Ciri-ciri cermin mata pintar ini termasuk memberitahu waktu, memberitahu anda suhu setiap 5 minit, antara 5 minit itu bertukar antara suhu tinggi dan rendah yang diharapkan untuk hari itu, ia juga memberitahu anda tarikhnya. Tetapi ciri utamanya adalah bahawa ia mengambil gambar setiap 10 saat dan kemudian menganalisis gambar itu untuk teks di mana ia akan mengembalikan maklumat berguna mengenainya, jika ia menemui soalan maka ia akan menjawabnya menggunakan wolfram, atau jika ia menemukan persamaan matematik ia akan menyelesaikannya!

Bekalan:

Bekalan yang diperlukan untuk projek ini merangkumi yang berikut:

1) Raspberry Pi 0 W (Dari vilros.com)

2) Paparan OLED 128x64 yang jelas (Dari Sparkfun.com)

3) Modul kamera yang diformat untuk Raspberry Pi 0 W (Dari amazon.com)

4) Sebarang gelas pilihan anda

5) Wayar

6) Pateri pematerian

7) Solder bebas plumbum (kerana anda tidak mahu mati kerana plumbum)

8) pelekat 2 hala

9) Kad SD min 8gb

10) sambungan komputer dan internet

Dengan andaian anda sudah mempunyai komputer dan sambungan internet, kos cermin mata ini akan mencapai sekitar $ 130.00

Langkah 1: Pendawaian Litar

Pendawaian Litar!
Pendawaian Litar!

Untuk memaparkan teks di layar yang akan anda sambungkan ke OLED melalui I2C atau SPI, saya memilih I2C kerana ia adalah yang lebih selesa saya gunakan tetapi jika anda ingin menyambungnya melalui SPI, ikuti tutorial ini di laman web Sparkfun dan kembali ke sini apabila anda selesai. https://learn.sparkfun.com/tutorials/transparent-g… Sekiranya anda memilih I2C kerana saya mempunyai kabel solder seperti yang ditunjukkan oleh yang berikut:

Pi / / OLED / /

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Harap maklum bahawa OLED yang jelas hanya dapat menangani 3.3v.

Setelah selesai menyambungkan litar, geser kabel pita modul kamera ke dalam pemegang kabel pita pada pi raspberry dengan mengeluarkan penjepit hitam dan meluncurkannya kembali setelah kabel pita dipasang.

Langkah 2: Mengakses Raspberry Pi

Dengan menggunakan ssh kita dapat mengakses pi dengan komputer kita tanpa menyambungkan tetikus dan monitor papan kekunci luaran tambahan. Perkara pertama yang anda lakukan ialah menyambungkan kad SD anda ke PC anda dengan penyesuai atau port terpasang, maka anda perlu menuju ke pautan ini https://www.raspberrypi.org/downloads/raspbian/ dan memuat turun Raspbian buster dengan desktop. Kedua, anda harus meletakkan OS ke kad SD menggunakan BalenaEtcher pilih kad SD anda dan OS Raspbian dan klik "flash" proses ini mungkin memerlukan sedikit masa sehingga kembali apabila anda selesai. Ketiga pergi ke kad SD dalam penjelajah fail atau pencari di mac dan buat fail teks bernama wpa_supplicant pastikan untuk menghapus pelanjutan.txt dan tambahkan.conf, dalam fail tampal yang berikut:

negara = AS

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}

Anda harus memasukkan nama dan kata laluan WiFi anda di tempat dan negara yang sesuai jika anda tidak berada di AS. Perlu diingat bahawa Raspberry Pi hanya dapat menyambung ke rangkaian 2.4Ghz yang bermaksud komputer anda juga harus menyambung ke rangkaian tersebut. Setelah membuat fail teks kosong tanpa perluasan yang disebut ssh dan kemudian keluarkan kad SD anda. Anda kemudian perlu memasang PuTTY https://www.putty.org/ yang akan anda gunakan untuk mengaktifkan ssh. Setelah dipasang masukkan alamat IP dari raspberry pi anda, anda dapat mengetahui apa itu dengan pergi ke laman web penghala anda log masuk dan melihat peranti yang disambungkan.

Setelah anda mendapat akses ke Raspberry Pi, ia akan meminta anda log masuk, nama pengguna lalai adalah "pi" dan kata laluan adalah "raspberry". Ketik sudo raspi-config kemudian pergi ke pilihan antara muka dan aktifkan kamera, ssh, dan i2c, kemudian klik selesai dan ketik sudo reboot. Sekarang anda sudah bersedia untuk masuk ke raspberry pi, teruskan dan pasangkan Remote Desktop dan masukkan alamat IP raspberry pi anda dan anda sekarang pandai memasukkan raspberry pi.

Langkah 3: Masa Pengekodan

Masa Pengekodan!
Masa Pengekodan!

Saya telah memilih untuk mengekod program ini dalam python jadi pastikan anda telah memasang python3.7 atau 3.8 pada desktop anda. Kod ini berfungsi dengan menggunakan pelayan dan pelanggan, sementara komputer anda. Pelanggan atau raspberry pi akan mengambil gambar dan memuat naiknya ke dropbox yang diambil oleh pelayan yang kemudian menjalankan pemprosesan gambar dan pengecaman teks pada gambar. Anda mesti mendapatkan wolframalpha, dropbox, dan open -athermap app-id agar ini berfungsi, yang perlu anda lakukan ialah pergi ke laman web pendaftaran dan ini akan memberikan anda aplikasi-id. dan kemudian memasukkannya ke tempat yang sesuai yang ditentukan oleh komen dalam kod. Pastikan anda telah memasang semuanya dan memasang Tesseract OCR dan OpenCV. Buat fail python bernama Server.py di komputer anda dan fail bernama client.py pada raspberry pi dan kemudian salin dan tampal kodnya. Tetapi ketahui bahawa semakin berani watak-wataknya dan semakin latar belakangnya semakin baik hasilnya, ini berlaku pada setiap perisian pengenalan teks.

Semua pautan untuk mendaftar untuk aplikasi-id / /

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/dokumentasi

Pastikan anda memasang Tesseract OCR dan OpenCV / /

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Pelayan.py:

import dropbox dari PIL import Impor cv2 import pytesseract dari pytesseract import Output import numpy sebagai np import wolframalpha import socket import time

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "ID Apl"

hos = socket.gethostname ()

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

Walaupun Betul:

c, addr = s.accept () print (f'Got connection from: {addr} ') break

Walaupun Betul:

sementara True: time.sleep (13.7) metadata, f = dbx.files_download ("/ dropbox_API / Image.jpg") keluar = terbuka ("Image.jpg", 'wb') out.write (f.content) keluar. tutup () cetak ("Gambar dimuat!") image = cv2.imread ("Image.jpg") Image = cv2.resize (gambar, (640, 480), interpolasi = cv2. INTER_AREA) image68 = cv2.rotate (Gambar, cv2. ROTATE_90_COUNTERCLOCKWISE) kelabu = cv2.cvtColor (gambar68, cv2. COLOR_BGR2GRAY)

def remove_noise (kelabu):

kembali cv2.medianBlur (kelabu, 5) ambang def (kelabu): kembali cv2.threshold (kelabu, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (kelabu): kernel = np.ones ((5, 5), np.uint8) kembali cv2.dilate (kelabu, kernel, lelaran = 1) d = pytesseract.image_to_data (kelabu, output_type = Output. DICT)

n_boxes = len (d ['text'])

untuk i dalam julat (n_boxes): jika int (d ['conf'] )> 60: (x, y, w, h) = (d ['kiri'] , d ['atas'] , d ['lebar'] , d ['tinggi'] ) kelabu = cv2. segi empat tepat (kelabu, (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 (kelabu) cetakan (teks) sementara Benar: teks2 = " "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")) jika len (teks) <= 1: c. Hantar (bait (teks2, "utf-8")) masa. Tidur (7.5) rehat

Pelanggan.py:

import dropboximport picameraimport time dari luma.core.interface.serial import i2c dari luma.core.render import kanvas dari luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106 import socket import datetime dari waktu import sleep import pyowm serial = i2c (port = 1, address = 0x3C) device = ssd1306 (serial, rotate = 1) camera = picamera. PiCamera () dropbox_access_token = "" # Dropbox-id anda lagi 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 alamat port pc anda = 60567 s.connect ((host, port)) msg1 = "" owm = pyowm. OWM ("") # app-id untuk 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. bulan) + "/" + str (cdt.year) obs = owm.weather_at_place ("") # bandar dan negara anda dalam format rentetan cuaca = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) sementara True: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) dengan kanvas (peranti) sebagai draw: draw.text ((0, 0), hour, fill = "white") draw.text ((11, 0), ":", isi = "putih") draw.text ((15, 0), min1, isi = "putih") draw.text ((0, 9), "_", isi = "putih") draw.text ((0, 9), tarikh, isi = "putih ") jika min1 dalam angka: obs = owm.weather_at_place (" ") # bandar dan negara anda dalam format rentetan lagi

cuaca = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", isi = "putih") draw.text ((40, 0), temp, isi = "putih") jika min1 tidak dalam angka: draw.text ((40, 0), temp2, isi = "putih") draw.text ((32, 0), "F", isi = "putih") camera.start_preview () time.sleep (2) camera.capture ("/ home / pi / Image.jpg") camera.stop_preview client = dropbox. Dropbox (dropbox_access_token) cetak ("[KEJAYAAN] akaun dropbox dipautkan") klien. files_upload (open (computer_path, "rb"). read (), dropbox_path) print ("[UPLOADED] {}". format (computer_path)) full_msg = "" time.sleep (5) msg = s.recv (100) jika len (msg)> = 2: full_msg + = msg.decode ("utf-8") print (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) dengan kanvas (peranti) sebagai draw: draw.text ((0, 19), full_msg, fill = "white") draw.text ((0, 0), hour, fill = "white") draw.text ((11, 0), ":", isi = "putih") draw.text ((15, 0), min1, isi = "putih") draw.text ((0, 9), "_", isi = " putih ") draw.text ((0, 9), tarikh, isi = "putih") jika min1 dalam angka: obs = owm.weather_at_place ("") # bandar dan negara anda dalam format rentetan lagi

cuaca = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", isi = "putih") draw.text ((40, 0), temp, isi = "putih") jika min1 tidak dalam angka: draw.text ((40, 0), temp3, isi = "putih") draw.text ((32, 0), "F", isi = "putih") jika len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) dengan kanvas (peranti) sebagai draw: draw.text ((0, 0 draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, isi = "putih") draw. teks ((0, 9), "_", isi = "putih") draw.text ((0, 9), tarikh, isi = "putih") jika min1 dalam angka: obs = owm.weather_at_place ("") # bandar dan negara anda dalam format rentetan lagi

cuaca = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", isi = "putih") draw.text ((40, 0), temp, isi = "putih") jika min1 tidak dalam angka: draw.text ((40, 0), temp3, isi = "putih") draw.text ((32, 0), "F", isi = "putih") 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) dengan kanvas (peranti) sebagai draw: draw.text ((0, 19., full_msg, isi = "putih") draw.text ((0, 29), full_msg2, isi = "putih") draw.text ((0, 0), jam, isi = "putih") draw.text ((11, 0), ":", isi = "putih") draw.text ((15, 0), min1, isi = "putih") draw.text ((0, 9), "_", isi = "white") draw.text ((0, 9), date, fill = "white") jika min1 dalam angka: obs = owm.weather_at_place ("") # bandar dan negara anda dalam format rentetan lagi

cuaca = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", isi = "putih") draw.text ((40, 0), temp, isi = "putih") jika min1 tidak dalam angka: obs = owm.weather_at_place ("") # bandar dan negara anda dalam format rentetan lagi

cuaca = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", isi = "putih") draw.text ((40, 0), temp, isi = "putih") jika min1 tidak dalam angka: draw.text ((40, 0), temp3, isi = "putih") draw.text ((32, 0), "F", isi = "putih") jika len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) dengan kanvas (peranti) sebagai draw: draw.text ((0, 0 draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, isi = "putih") draw. teks ((0, 9), "_", isi = "putih") draw.text ((0, 9), tarikh, isi = "putih") jika min1 dalam angka: obs = owm.weather_at_place ("") # bandar dan negara anda dalam format rentetan lagi

cuaca = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", isi = "putih") draw.text ((40, 0), temp, isi = "putih") jika min1 tidak dalam angka: draw.text ((40, 0), temp3, isi = "putih") draw.text ((32, 0), "F", isi = "putih") time.sleep (7) client.files_delete (dropbox_path) cetak ("Fail dihapuskan")

P. S. Saya seorang pengaturcara amatur, jadi jangan mempersoalkan kaedah pengaturcaraan saya yang mengerikan.

Langkah 4: Menggabungkan Semuanya

Menggabungkan Semuanya!
Menggabungkan Semuanya!

Setelah anda menyelesaikan semua perkara yang praktikal anda lakukan, anda hanya perlu melampirkan kamera dan paparan raspberry pi ke cermin mata. Anda boleh melakukannya dengan menggunakan pelekat dua sisi yang disebutkan dalam persediaan atau anda boleh menggunakan kaedah yang difikirkan perlu. Anda juga mungkin menyedari bahawa saya tidak menyebut bateri di mana-mana dalam pelajaran ini kerana saya telah merancang peningkatan masa depan untuk cermin mata ini dan tidak mahu memasangnya sekarang. Tetapi jika anda ingin melampirkannya, anda memerlukan litar pengecas li-po dari amazon

Sekiranya anda menikmati ini dan ingin melihat lebih banyak lagi, saya telah memulakan saluran YouTube dan semoga saya juga akan menghantar tutorial di sana. Inilah pautan:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Tuhan Selamatkan!

Yohanes 3:16 "Sebab Tuhan sangat mengasihi dunia sehingga Dia memberikan satu-satunya Putra-Nya yang selalu percaya kepada-Nya tidak akan binasa tetapi mempunyai kehidupan yang kekal."

Disyorkan: