Mục lục:

Kính thông minh: 4 bước
Kính thông minh: 4 bước

Video: Kính thông minh: 4 bước

Video: Kính thông minh: 4 bước
Video: KÍNH MẮT dành cho Giới Thượng Lưu và các Ngôi Sao Hollywood có gì ĐẶC BIỆT ??! | NHATO Review 2024, Tháng bảy
Anonim
Kính thông minh
Kính thông minh
Kính thông minh
Kính thông minh

Xin chào các bạn hôm nay mình sẽ hướng dẫn các bạn cách làm Kính thông minh tại nhà nhé! Một trong những điều tuyệt vời nhất về kính thông minh là lợi ích của việc có một thứ như thế này trong thế giới công nghệ ngày nay và việc không chỉ có một phiên bản kính thông minh vì tất cả đều có các tính năng tuyệt vời và vô số ứng dụng có thể được tích hợp trong tương lai. Các tính năng của những chiếc kính thông minh này bao gồm cho biết thời gian, cho bạn biết nhiệt độ cứ sau 5 phút, giữa 5 phút đó, nó hoán đổi giữa nhiệt độ cao và thấp dự kiến cho ngày đó, nó cũng cho bạn biết ngày tháng. Nhưng tính năng chính của nó là cứ 10 giây lại chụp một bức ảnh và sau đó phân tích bức ảnh đó để tìm văn bản, trong đó nó sẽ trả về thông tin hữu ích về nó, nếu nó tìm thấy câu hỏi thì nó sẽ trả lời nó bằng cách sử dụng wolfram hoặc nếu nó tìm thấy một phương trình toán học. nó sẽ giải quyết nó!

Quân nhu:

Các nguồn cung cấp cần thiết cho dự án này sẽ bao gồm:

1) Raspberry Pi 0 W (Từ vilros.com)

2) Màn hình OLED 128x64 rõ ràng (Từ Sparkfun.com)

3) Một mô-đun máy ảnh được định dạng cho Raspberry Pi 0 W (Từ amazon.com)

4) Bất kỳ loại kính nào bạn lựa chọn

5) Dây điện

6) Sắt hàn

7) Chất hàn không chì (vì bạn không muốn chết vì chì)

8) keo 2 chiều

9) Thẻ SD tối thiểu 8gb

10) máy tính và kết nối internet

Giả sử bạn đã có máy tính và kết nối internet, giá của những chiếc kính này sẽ vào khoảng $ 130,00

Bước 1: Đấu dây mạch

Đấu dây mạch!
Đấu dây mạch!

Để hiển thị văn bản trên màn hình, bạn sẽ phải kết nối với OLED qua I2C hoặc SPI, tôi chọn I2C vì nó là cái tôi thấy thoải mái hơn khi sử dụng nhưng nếu bạn muốn kết nối với nó qua SPI, hãy làm theo hướng dẫn này trên trang web Sparkfun và quay lại đây khi bạn hoàn tất. https://learn.sparkfun.com/tutorials/transparent-g… Nếu bạn đã chọn I2C vì tôi đã hàn các dây như được chỉ ra bằng cách sau:

Pi / / OLED / /

3.3 v 3.3 v

GND GND

SDA SDA

SCL SCL

Xin lưu ý rằng màn hình OLED rõ ràng chỉ có thể xử lý 3.3v.

Sau khi bạn kết nối xong mạch, hãy trượt cáp ruy-băng của mô-đun máy ảnh vào giá đỡ cáp ruy-băng trên mâm xôi pi bằng cách kéo kẹp màu đen ra và trượt lại khi cáp ruy-băng vào đúng vị trí.

Bước 2: Truy cập Raspberry Pi

Sử dụng ssh, chúng ta có thể truy cập số pi bằng máy tính của mình mà không cần kết nối thêm chuột và màn hình bàn phím bên ngoài. Điều đầu tiên bạn làm là kết nối thẻ SD với PC bằng bộ điều hợp hoặc cổng tích hợp, sau đó bạn cần truy cập liên kết này https://www.raspberrypi.org/downloads/raspbian/ và tải xuống Raspbian buster với máy tính để bàn. Thứ hai, bạn phải đặt hệ điều hành vào thẻ SD bằng cách sử dụng BalenaEtcher chọn thẻ SD của bạn và hệ điều hành Raspbian và nhấp vào "flash" quá trình này có thể mất một chút thời gian vì vậy hãy quay lại khi bạn hoàn tất. Thứ ba, truy cập thẻ SD trong trình khám phá tệp hoặc công cụ tìm trên mac và tạo tệp văn bản có tên wpa_supplicant, đảm bảo xóa phần mở rộng.txt và thêm.conf, trong tệp, dán nội dung sau:

country = US

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}

Bạn sẽ phải nhập tên và mật khẩu WiFi của mình ở các địa điểm và quốc gia tương ứng nếu bạn không ở Hoa Kỳ. Hãy nhớ rằng Raspberry Pi chỉ có thể kết nối với mạng 2.4Ghz có nghĩa là máy tính của bạn cũng sẽ phải kết nối với mạng đó. Sau khi tạo một tệp văn bản trống không có phần mở rộng được gọi là ssh và sau đó đẩy thẻ SD của bạn ra. Sau đó, bạn sẽ cần cài đặt PuTTY https://www.putty.org/, đây là những gì bạn sẽ sử dụng để kích hoạt ssh. Sau khi cài đặt, hãy nhập địa chỉ IP của raspberry pi của bạn, bạn có thể tìm ra nó là gì bằng cách truy cập trang web bộ định tuyến của bạn đăng nhập và xem các thiết bị được kết nối.

Sau khi bạn có quyền truy cập vào Raspberry Pi, nó sẽ yêu cầu bạn đăng nhập, tên người dùng mặc định là "pi" và mật khẩu là "raspberry". Gõ sudo raspi-config, sau đó chuyển đến tùy chọn giao diện và bật camera, ssh và i2c, sau đó bấm hoàn tất và gõ sudo khởi động lại. Bây giờ bạn đã sẵn sàng để ssh vào raspberry pi, hãy tiếp tục và cài đặt Remote Desktop và nhập địa chỉ IP của raspberry pi và bây giờ bạn đã có thể ssh vào raspberry pi.

Bước 3: Thời gian mã hóa

Thời gian mã hóa!
Thời gian mã hóa!

Tôi đã chọn viết mã chương trình này bằng python, vì vậy hãy đảm bảo rằng bạn đã cài đặt python3.7 hoặc 3.8 trên máy tính để bàn của mình. Mã này hoạt động bằng cách sử dụng máy chủ và máy khách, máy chủ là máy tính của bạn. Ứng dụng khách hoặc raspberry pi sẽ chụp ảnh và tải ảnh đó lên dropbox. Đây là ảnh được truy xuất bởi máy chủ, sau đó chạy xử lý ảnh và nhận dạng văn bản trên ảnh. Bạn sẽ phải có một wolframalpha, dropbox và openweathermap app-id để điều này hoạt động, tất cả những gì bạn phải làm là truy cập đăng ký trang web và nó sẽ cung cấp cho bạn một id ứng dụng. và sau đó nhập chúng vào các vị trí tương ứng được xác định bởi các chú thích trong mã. Đảm bảo rằng bạn đã cài đặt pip mọi thứ và cài đặt Tesseract OCR và OpenCV. Tạo tệp python có tên Server.py trên máy tính của bạn và tệp có tên client.py trên raspberry pi, sau đó sao chép và dán mã. Nhưng hãy biết rằng các ký tự càng đậm và nền càng trắng thì kết quả càng tốt, đây là trường hợp của mọi phần mềm nhận dạng văn bản.

Tất cả các liên kết để đăng ký id ứng dụng / /

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Đảm bảo rằng bạn cài đặt Tesseract OCR và OpenCV / /

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

nhập dropbox từ nhập PIL Nhập hình ảnh cv2 nhập pytesseract từ nhập pytesseract Nhập đầu ra numpy dưới dạng np nhập thời gian nhập ổ cắm nhập wolframalpha

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "ID ứng dụng"

host = socket.gethostname ()

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

trong khi Đúng:

c, addr = s.accept () print (f'Got kết nối từ: {addr} ') break

trong khi Đúng:

trong khi siêu dữ liệu 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 ("Đã tải xuống hình ảnh!") image = cv2.imread ("Image.jpg") Image = cv2.resize (image, (640, 480), interpolation = cv2. INTER_AREA) image68 = cv2.rotate (Hình ảnh, cv2. ROTATE_90_COUNTERCLOCKWISE) xám = cv2.cvtColor (image68, cv2. COLOR_BGR2GRAY)

def remove_noise (xám):

trả về cv2.medianBlur (xám, 5) xác định ngưỡng (xám): trả về cv2.threshold (xám, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (xám): kernel = np.ones ((5, 5), np.uint8) trả về cv2.dilate (màu xám, hạt nhân, lần lặp = 1) d = pytesseract.image_to_data (màu xám, output_type = Output. DICT)

n_boxes = len (d ['text'])

for i in range (n_boxes): if int (d ['conf'] )> 60: (x, y, w, h) = (d ['left'] , d ['top'] , d ['width'] , d ['height'] ) 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 (xám) print (text) trong khi True: text2 = " "if len (text)> = 2: c.send (byte (text," utf-8 ")) if len (text) = 2: query = text client = wolframalpha. Client (app_id) res = client.query (truy vấn) answer = next (res.results).text answer1 = answer.partition ('\ n') [0] print (answer1) c.send (byte (answer1, "utf-8")) if len (text) <= 1: c.send (byte (text2, "utf-8")) time.sleep (7,5) ngắt

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 daytime from time import sleep import pyowm serial = i2c (port = 1, address = 0x3C) device = ssd1306 (serial, xoay = 1) camera = picamera. PiCamera () dropbox_access_token = "" # Lại dropbox-id của bạn 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 address of your pc port = 60567 s.connect ((host, port)) msg1 = "" owm = pyowm. OWM ("") # app-id cho 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. tháng) + "/" + str (cdt.year) obs = owm.weather_at_place ("") # thị trấn và quốc gia của bạn ở định dạng chuỗi weather = obs.get_weather () temp2 = str (weather.get_tempeosystem ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_tempether (" fahrenheit ") [" temp_min "]) trong khi True: cdt = datetime.datetime.now () min1 = str (cdt.minute) giờ = str (cdt.hour) với canvas (thiết bị) dưới dạng 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 ") if min1 in num: obs = owm.weather_at_place (" ") # thị trấn và quốc gia của bạn ở định dạng chuỗi lại

thời tiết = obs.get_weather ()

temp = str (weather.get_tempeosystem ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") nếu min1 không có trong num: draw.text ((40, 0), temp2, fill = "white") draw.text ((32, 0), "F", fill = "trắng") camera.start_preview () time.sleep (2) camera.capture ("/ home / pi / Image.jpg") camera.stop_preview client = dropbox. Dropbox (dropbox_access_token) print ("[SUCCESS] tài khoản dropbox được liên kết"). 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) với canvas (thiết bị) dưới dạng 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 = " trắng ") draw.text ((0, 9), ngày tháng, điền = "white") if min1 in num: obs = owm.weather_at_place ("") # thị trấn và quốc gia của bạn ở định dạng chuỗi một lần nữa

thời tiết = obs.get_weather ()

temp = str (weather.get_tempeosystem ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") nếu min1 không có trong num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "trắng") if len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) với canvas (device) là draw: draw.text ((0, 0), giờ, điền = "trắng") draw.text ((11, 0), ":", fill = "trắng") draw.text ((15, 0), min1, fill = "white") vẽ. text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("") # thị trấn và quốc gia của bạn ở định dạng chuỗi một lần nữa

thời tiết = obs.get_weather ()

temp = str (weather.get_tempether ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") nếu min1 không có trong num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "trắng") 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) giờ = str (cdt.hour) với canvas (thiết bị) là 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 ("") # thị trấn và quốc gia của bạn ở định dạng chuỗi lại

thời tiết = obs.get_weather ()

temp = str (weather.get_tempeosystem ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") nếu min1 không phải ở num: obs = owm.weather_at_place ("") # thị trấn và quốc gia của bạn ở định dạng chuỗi một lần nữa

thời tiết = obs.get_weather ()

temp = str (weather.get_tempether ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") nếu min1 không có trong num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "trắng") if len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) với canvas (device) dưới dạng draw: draw.text ((0, 0), giờ, điền = "trắng") draw.text ((11, 0), ":", fill = "trắng") draw.text ((15, 0), min1, fill = "white") vẽ. text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("") # thị trấn và quốc gia của bạn ở định dạng chuỗi một lần nữa

thời tiết = obs.get_weather ()

temp = str (weather.get_tempether ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") nếu min1 không có trong num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "trắng") time.sleep (7) client.files_delete (dropbox_path) print ("Tệp đã bị xóa")

P. S. Tôi là một lập trình viên nghiệp dư vì vậy xin đừng thắc mắc về phương pháp lập trình khủng khiếp của tôi.

Bước 4: Kết hợp tất cả lại với nhau

Để tất cả chúng cùng nhau!
Để tất cả chúng cùng nhau!

Khi bạn đã hoàn thành mọi thứ khác, bạn thực tế đã làm xong tất cả những gì bạn còn lại phải làm là gắn máy ảnh mâm xôi pi và màn hình vào kính. Bạn có thể làm điều này bằng cách sử dụng keo hai mặt được đề cập trong các nguồn cung cấp hoặc bạn có thể sử dụng bất kỳ phương pháp nào bạn cho là cần thiết. Bạn cũng có thể nhận thấy rằng tôi đã không đề cập đến pin ở bất kỳ đâu trong bài học này bởi vì tôi có kế hoạch nâng cấp trong tương lai cho những chiếc kính này và không muốn gắn một chiếc vào ngay bây giờ. Nhưng nếu bạn muốn gắn một cái, bạn sẽ cần một mạch sạc li-po từ amazon

Nếu bạn thích điều này và muốn xem thêm, tôi đã bắt đầu một kênh YouTube và hy vọng sẽ đăng các hướng dẫn trên đó. Đây là liên kết:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Chúa cứu rỗi!

Giăng 3:16 "Vì Đức Chúa Trời yêu thương thế gian, đến nỗi đã ban Con Một của Ngài, Đấng hằng tin vào Ngài sẽ không bị hư mất mà được sự sống đời đời."

Đề xuất: