สารบัญ:

แว่นตาอัจฉริยะ: 4 ขั้นตอน
แว่นตาอัจฉริยะ: 4 ขั้นตอน

วีดีโอ: แว่นตาอัจฉริยะ: 4 ขั้นตอน

วีดีโอ: แว่นตาอัจฉริยะ: 4 ขั้นตอน
วีดีโอ: รีวิว OWNDAYS x HUAWEI Eyewear 2 อัพเกรดแว่นตาอัจฉริยะ ฟังเพลงแบบ Open-ear ได้นานกว่า เบากว่าเดิม 2024, กรกฎาคม
Anonim
แว่นตาอัจฉริยะ
แว่นตาอัจฉริยะ
แว่นตาอัจฉริยะ
แว่นตาอัจฉริยะ

สวัสดีทุกคน วันนี้ฉันจะมาแนะนำวิธีการทำ Smart Glasses ที่บ้าน! สิ่งที่ยอดเยี่ยมที่สุดอย่างหนึ่งเกี่ยวกับแว่นตาอัจฉริยะคือการมีแว่นตาแบบนี้ในโลกของเทคโนโลยีในปัจจุบันจะมีประโยชน์เพียงใด และแว่นตาอัจฉริยะไม่ได้มีเพียงแค่รุ่นเดียว เนื่องจากทุกรุ่นมีคุณสมบัติที่น่าทึ่งและแอปพลิเคชันจำนวนนับไม่ถ้วนที่สามารถผสานรวมเข้าด้วยกันได้ ในอนาคต. คุณสมบัติของแว่นตาอัจฉริยะเหล่านี้รวมถึงการบอกเวลา โดยบอกอุณหภูมิทุกๆ 5 นาที ระหว่าง 5 นาทีนั้นจะสลับระหว่างอุณหภูมิสูงสุดและต่ำสุดที่คาดไว้ในวันนั้น ซึ่งจะบอกวันที่ให้คุณทราบด้วย แต่คุณสมบัติหลักคือ มันจะถ่ายรูปทุก ๆ 10 วินาทีแล้ววิเคราะห์รูปภาพนั้นเพื่อหาข้อความที่จะส่งคืนข้อมูลที่เป็นประโยชน์เกี่ยวกับมัน หากพบคำถามก็จะตอบโดยใช้วุลแฟรมหรือหากพบสมการทางคณิตศาสตร์ มันจะแก้ได้!

เสบียง:

วัสดุที่จำเป็นสำหรับโครงการนี้จะรวมถึงสิ่งต่อไปนี้:

1) Raspberry Pi 0 W (จาก vilros.com)

2) จอแสดงผล OLED ขนาด 128x64 ที่ชัดเจน (จาก Sparkfun.com)

3) โมดูลกล้องที่จัดรูปแบบสำหรับ Raspberry Pi 0 W (จาก amazon.com)

4) แก้วใดก็ได้ตามใจชอบ

5) สายไฟ

6) หัวแร้ง

7) บัดกรีไร้สารตะกั่ว (เพราะคุณไม่ต้องการตายจากตะกั่ว)

8) กาว 2 ทาง

9) การ์ด SD ขั้นต่ำ 8gb

10) การเชื่อมต่อคอมพิวเตอร์และอินเทอร์เน็ต

สมมติว่าคุณมีคอมพิวเตอร์และการเชื่อมต่ออินเทอร์เน็ต ราคาของแว่นตาเหล่านี้จะอยู่ที่ประมาณ $130.00

ขั้นตอนที่ 1: เดินสายวงจร

เดินสายวงจร!
เดินสายวงจร!

เพื่อแสดงข้อความบนหน้าจอที่คุณจะเชื่อมต่อกับ OLED ผ่าน I2C หรือ SPI ฉันเลือก I2C เนื่องจากเป็นสิ่งที่ฉันสะดวกกว่าที่จะใช้ แต่ถ้าคุณรู้สึกอยากเชื่อมต่อผ่าน SPI ให้ทำตามบทช่วยสอนนี้ เว็บไซต์ Sparkfun และกลับมาที่นี่เมื่อคุณทำเสร็จแล้ว https://learn.sparkfun.com/tutorials/transparent-g… หากคุณเลือก I2C เนื่องจากฉันได้บัดกรีสายไฟตามที่ระบุดังต่อไปนี้:

พาย \/ OLED \/

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

โปรดทราบว่า OLED ที่ชัดเจนสามารถรองรับ 3.3v เท่านั้น

หลังจากคุณเชื่อมต่อวงจรเสร็จแล้ว ให้เลื่อนสายแพของโมดูลกล้องเข้าไปในที่ยึดสายแพบนราสเบอร์รี่ pi โดยดึงแคลมป์สีดำออกแล้วเลื่อนกลับเข้าไปใหม่เมื่อสายแพเข้าที่

ขั้นตอนที่ 2: การเข้าถึง Raspberry Pi

การใช้ ssh เราสามารถเข้าถึง pi ของเราด้วยพีซีของเราโดยไม่ต้องเชื่อมต่อเมาส์และจอภาพสำหรับแป้นพิมพ์ภายนอกเพิ่มเติม สิ่งแรกที่คุณทำคือเชื่อมต่อการ์ด SD ของคุณเข้ากับพีซีด้วยอะแดปเตอร์หรือพอร์ตในตัว จากนั้นคุณจะต้องไปที่ลิงก์นี้ https://www.raspberrypi.org/downloads/raspbian/ และดาวน์โหลด Raspbian buster กับเดสก์ท็อป ประการที่สอง คุณต้องใส่ระบบปฏิบัติการลงในการ์ด SD โดยใช้ BalenaEtcher เลือกการ์ด SD และ Raspbian OS ของคุณและคลิก "แฟลช" กระบวนการนี้อาจใช้เวลาสักครู่ ดังนั้นโปรดกลับมาเมื่อคุณทำเสร็จแล้ว ประการที่สามไปที่การ์ด SD ใน file explorer หรือ finder บน mac และสร้างไฟล์ข้อความชื่อ wpa_supplicant อย่าลืมลบนามสกุล.txt และเพิ่ม.conf ในไฟล์ให้วางสิ่งต่อไปนี้:

ประเทศ=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 }

คุณจะต้องป้อนชื่อ WiFi และรหัสผ่านของคุณในสถานที่และประเทศที่เกี่ยวข้อง หากคุณไม่ได้อยู่ในสหรัฐอเมริกา โปรดทราบว่า Raspberry Pi สามารถเชื่อมต่อกับเครือข่าย 2.4Ghz เท่านั้น ซึ่งหมายความว่าพีซีของคุณจะต้องเชื่อมต่อกับเครือข่ายนั้นด้วย หลังจากสร้างไฟล์ข้อความเปล่าที่ไม่มีส่วนขยายที่เรียกว่า ssh แล้วนำการ์ด SD ออก จากนั้นคุณจะต้องติดตั้ง PuTTY https://www.putty.org/ ซึ่งเป็นสิ่งที่คุณจะใช้เพื่อเปิดใช้งาน ssh เมื่อติดตั้งแล้ว ให้ป้อนที่อยู่ IP ของ raspberry pi ของคุณ คุณสามารถทราบได้ว่ามันคืออะไรโดยไปที่เว็บไซต์เราเตอร์ของคุณลงชื่อเข้าใช้และดูอุปกรณ์ที่เชื่อมต่อ

หลังจากที่คุณเข้าถึง Raspberry Pi แล้ว ระบบจะขอให้คุณเข้าสู่ระบบ ชื่อผู้ใช้เริ่มต้นคือ "pi" และรหัสผ่านคือ "raspberry" พิมพ์ sudo raspi-config จากนั้นไปที่ตัวเลือกการเชื่อมต่อและเปิดใช้งานกล้อง ssh และ i2c จากนั้นคลิกเสร็จสิ้นและพิมพ์ sudo reboot ตอนนี้คุณพร้อมที่จะ ssh ลงใน raspberry pi แล้ว ไปข้างหน้าและติดตั้ง Remote Desktop และป้อนที่อยู่ IP ของ raspberry pi ของคุณ และตอนนี้คุณก็พร้อมแล้วที่จะ ssh ลงใน raspberry pi

ขั้นตอนที่ 3: เวลาเข้ารหัส

เวลาเข้ารหัส!
เวลาเข้ารหัส!

ฉันได้เลือกที่จะเขียนโค้ดโปรแกรมนี้ใน python ดังนั้นตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง python3.7 หรือ 3.8 บนเดสก์ท็อปของคุณแล้ว รหัสนี้ทำงานโดยใช้เซิร์ฟเวอร์และไคลเอนต์ เซิร์ฟเวอร์คือพีซีของคุณ ลูกค้าหรือราสเบอร์รี่ pi จะถ่ายภาพและอัปโหลดไปยังดรอปบ็อกซ์ซึ่งเป็นเซิร์ฟเวอร์ที่ดึงข้อมูลจากนั้นจึงเรียกใช้การประมวลผลภาพและการรับรู้ข้อความบนภาพ คุณจะต้องได้รับ wolframalpha, dropbox และ openweathermap app-id เพื่อให้ใช้งานได้ สิ่งที่คุณต้องทำคือไปที่เว็บไซต์ที่สมัครใช้งานและจะให้ app-id แก่คุณ แล้วป้อนลงในตำแหน่งที่เกี่ยวข้องซึ่งกำหนดโดยความคิดเห็นในโค้ด ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง pip ทุกอย่างและติดตั้ง Tesseract OCR และ OpenCV สร้างไฟล์ python ชื่อ Server.py บนพีซีของคุณ และสร้างไฟล์ชื่อ client.py บน raspberry pi จากนั้นคัดลอกและวางโค้ด แต่จงรู้ว่ายิ่งอักขระโดดเด่นยิ่งขึ้นและพื้นหลังสีขาวยิ่งได้ผลลัพธ์ที่ดีเท่านั้น ซึ่งเป็นกรณีของซอฟต์แวร์การจดจำข้อความทุกตัว

ลิงค์ทั้งหมดสำหรับสมัคร app-id \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

ตรวจสอบให้แน่ใจว่าคุณติดตั้ง Tesseract OCR และ OpenCV \/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

นำเข้าดรอปบ็อกซ์จาก PIL นำเข้าอิมเมจ นำเข้า cv2 นำเข้า pytesseract จาก pytesseract นำเข้า นำเข้าเอาต์พุต numpy เป็น np นำเข้า wolframalpha นำเข้าซ็อกเก็ตเวลานำเข้า

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "รหัสแอป"

โฮสต์ = socket.gethostname()

พอร์ต = 60567 พิมพ์ (โฮสต์) s.bind((โฮสต์ พอร์ต)) s.listen (2)

ในขณะที่จริง:

c, addr = s.accept() พิมพ์ (f'Got เชื่อมต่อจาก: {addr}') แตก

ในขณะที่จริง:

ในขณะที่ True: ข้อมูลเมตา time.sleep (13.7) f = dbx.files_download("/dropbox_API/Image.jpg") out = open("Image.jpg", 'wb') out.write(f.content) ออก close() print("Image download!") image = cv2.imread("Image.jpg") Image = cv2.resize(image, (640, 480), interpolation=cv2. INTER_AREA) image68 = cv2.rotate(Image), cv2. ROTATE_90_COUNTERCLOCKWISE) สีเทา = cv2.cvtColor(image68, cv2. COLOR_BGR2GRAY)

def remove_noise(สีเทา):

return cv2.medianBlur(gray, 5) def thresholding(gray): return cv2.threshold(gray, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU)[1] def dilate(gray): เคอร์เนล = np.ones((5, 5), np.uint8) ส่งคืน cv2.dilate(สีเทา, เคอร์เนล, การวนซ้ำ = 1) d = pytesseract.image_to_data(สีเทา, output_type = Output. DICT)

n_boxes = len(d['ข้อความ'])

สำหรับฉันอยู่ในช่วง (n_boxes): if int(d['conf']) > 60: (x, y, w, h) = (d['left'], d['top'], d['width'], d['height']) grey = cv2.rectangle(gray, (x, y), (x + w, y + h), (0, 255, 0), 2) แตก pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" text = pytesseract.image_to_string(gray) print (text) ในขณะที่ True: text2 = " " if len(text) >= 2: c.send(bytes(text, "utf-8")) if len(text) = 2: query = ไคลเอนต์ข้อความ = wolframalpha. Client(app_id) res = client.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) แตก

Client.py:

นำเข้า dropboximport picameraimport เวลาจาก luma.core.interface.serial นำเข้า i2c จาก luma.core.render นำเข้าผ้าใบจาก luma.oled.device นำเข้า ssd1306, ssd1325, ssd1331, sh1106 นำเข้าซ็อกเก็ตนำเข้า datetime จากเวลา นำเข้า sleep นำเข้า pyowm serial = i2c (พอร์ต=1 ที่อยู่=0x3C) อุปกรณ์ = ssd1306(ซีเรียล หมุน=1) กล้อง = picamera. PiCamera() dropbox_access_token= "" # dropbox-id ของคุณอีกครั้ง 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 ของพอร์ตพีซีของคุณ = 60567 s.connect((host, port)) msg1 = " " owm = pyowm. OWM("")#app-id สำหรับ openweathermap num = ["05", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "00"] cdt = datetime.datetime.now() min1 = str(cdt.minute) วันที่ = str(cdt.day) + "/" + str(cdt. เดือน) + "/" + str(cdt.year) obs = owm.weather_at_place("")#เมืองและประเทศของคุณในรูปแบบสตริง weather = obs.get_weather() temp2 = str(weather.get_temperature("ฟาเรนไฮต์")["เท mp_max"]) temp3 = str(weather.get_temperature("fahrenheit")["temp_min"]) while True: cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) ด้วยผ้าใบ (อุปกรณ์) เป็นรูปวาด: 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" ") ถ้า min1 ใน num: obs = owm.weather_at_place("")#เมืองและประเทศของคุณในรูปแบบสตริงอีกครั้ง

สภาพอากาศ = obs.get_weather()

temp = str(weather.get_temperature("ฟาเรนไฮต์")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, เติม = "ขาว") ถ้า min1 ไม่อยู่ใน 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 = dropbox. Dropbox(dropbox_access_token) ไคลเอนต์พิมพ์ ("[สำเร็จ] บัญชีดรอปบ็อกซ์ที่เชื่อมโยง") files_upload(open(computer_path, "rb")).read(), dropbox_path) print("[UPLOADED] {}".format(computer_path)) full_msg = " " time.sleep(5) msg = s.recv(100) ถ้า len(msg) >= 2: full_msg += msg.decode("utf-8") พิมพ์ (full_msg) cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) ด้วยผ้าใบ (อุปกรณ์) วาด: 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 = " สีขาว") draw.text((0, 9), วันที่, เติม = "สีขาว") ถ้า min1 ใน num: obs = owm.weather_at_place("")#เมืองและประเทศของคุณในรูปแบบสตริงอีกครั้ง

สภาพอากาศ = obs.get_weather()

temp = str(weather.get_temperature("ฟาเรนไฮต์")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, เติม = "ขาว") ถ้า min1 ไม่อยู่ใน num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "white") ถ้า len(msg) <= 1: cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) ด้วยผ้าใบ(อุปกรณ์) เมื่อวาด: draw.text((0, 0), ชั่วโมง, เติม = "ขาว") draw.text((11, 0), ":", fill = "white") draw.text((15, 0), min1, fill = "white") วาด text((0, 9), "_", fill = "white") draw.text((0, 9), date, fill = "white") ถ้า min1 ใน num: obs = owm.weather_at_place("") #เมืองและประเทศของคุณในรูปแบบสตริงอีกครั้ง

สภาพอากาศ = obs.get_weather()

temp = str(weather.get_temperature("ฟาเรนไฮต์")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, เติม = "ขาว") ถ้า min1 ไม่อยู่ใน 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) ด้วยผ้าใบ (อุปกรณ์) เมื่อวาด: draw.text((0, 19), full_msg, เติม = "ขาว") draw.text((0, 29), full_msg2, เติม = "ขาว") draw.text((0, 0), ชั่วโมง, เติม = "ขาว") draw.text ((11, 0), ":", เติม = "ขาว") draw.text((15, 0), min1, เติม = "ขาว") draw.text((0, 9), "_" เติม = "สีขาว") draw.text((0, 9), วันที่, เติม = "สีขาว") ถ้า min1 เป็น num: obs = owm.weather_at_place("")#เมืองและประเทศของคุณในรูปแบบสตริงอีกครั้ง

สภาพอากาศ = obs.get_weather()

temp = str(weather.get_temperature("ฟาเรนไฮต์")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, เติม = "ขาว") ถ้า min1 ไม่อยู่ใน num: obs = owm.weather_at_place("")#เมืองและประเทศของคุณในรูปแบบสตริงอีกครั้ง

สภาพอากาศ = obs.get_weather()

temp = str(weather.get_temperature("ฟาเรนไฮต์")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, เติม = "ขาว") ถ้า min1 ไม่อยู่ใน num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "white") ถ้า len(msg1) <= 1: cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) ด้วย canvas(device) as draw: draw.text((0, 0), ชั่วโมง, เติม = "ขาว") draw.text((11, 0), ":", fill = "white") draw.text((15, 0), min1, fill = "white") วาด text((0, 9), "_", fill = "white") draw.text((0, 9), date, fill = "white") ถ้า min1 ใน num: obs = owm.weather_at_place("") #เมืองและประเทศของคุณในรูปแบบสตริงอีกครั้ง

สภาพอากาศ = obs.get_weather()

temp = str(weather.get_temperature("ฟาเรนไฮต์")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, เติม = "ขาว") ถ้า min1 ไม่อยู่ใน num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "white") time.sleep(7) client.files_delete(dropbox_path) พิมพ์ ("ไฟล์ที่ถูกลบ")

ป.ล. ฉันเป็นโปรแกรมเมอร์มือสมัครเล่น ดังนั้นโปรดอย่าตั้งคำถามกับวิธีการเขียนโปรแกรมที่แย่ของฉัน

ขั้นตอนที่ 4: นำทุกอย่างมารวมกัน

วางมันทั้งหมดเข้าด้วยกัน!
วางมันทั้งหมดเข้าด้วยกัน!

เมื่อคุณทำอย่างอื่นเสร็จแล้ว สิ่งที่คุณต้องทำคือติดกล้อง Raspberry Pi และแสดงผลบนแว่นตา คุณสามารถทำได้โดยใช้กาวสองหน้าที่ระบุไว้ในอุปกรณ์สิ้นเปลือง หรือคุณสามารถใช้วิธีการใดๆ ที่คุณคิดว่าจำเป็น คุณอาจสังเกตเห็นว่าฉันไม่ได้พูดถึงแบตเตอรี่ในบทเรียนนี้ เนื่องจากฉันมีแผนจะอัปเกรดแว่นตาเหล่านี้ในอนาคตและไม่ต้องการติดไว้ตอนนี้ แต่ถ้าคุณต้องการแนบ คุณจะต้องมีวงจรชาร์จ li-po จาก amazon

หากคุณชอบสิ่งนี้และต้องการดูเพิ่มเติม ฉันได้เริ่มช่อง YouTube แล้วและหวังว่าจะได้โพสต์บทช่วยสอนไว้ที่นั่นเช่นกัน นี่คือลิงค์:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

พระเจ้าช่วย!

ยอห์น 3:16 “เพราะว่าพระเจ้าทรงรักโลกจนได้ประทานพระบุตรองค์เดียวของพระองค์ ผู้ที่เชื่อในพระองค์จะไม่พินาศ แต่มีชีวิตนิรันดร์”

แนะนำ: