فهرست مطالب:

عینک هوشمند: 4 مرحله
عینک هوشمند: 4 مرحله

تصویری: عینک هوشمند: 4 مرحله

تصویری: عینک هوشمند: 4 مرحله
تصویری: وقتی استاد عینک هوشمند جیمز باند رو می‌دزدد 2024, جولای
Anonim
عینک هوشمند
عینک هوشمند
عینک هوشمند
عینک هوشمند

سلام به همه امروز من قصد دارم نحوه ساخت عینک هوشمند در خانه را به شما نشان دهم! یکی از بزرگترین نکات در مورد عینک های هوشمند این است که داشتن چنین چیزی در دنیای فناوری امروز چقدر مفید است و اینکه تنها یک نسخه از عینک های هوشمند وجود ندارد زیرا همه آنها دارای ویژگی های شگفت انگیز و تعداد بی نهایت برنامه های کاربردی هستند که می توانند یکپارچه شوند. در آینده. ویژگی های این عینک های هوشمند عبارتند از زمان گفتن ، گفتن درجه حرارت هر 5 دقیقه ، بین آن 5 دقیقه بین دمای بالا و پایین مورد انتظار برای آن روز عوض می شود ، همچنین تاریخ را نیز به شما می گوید. اما ویژگی اصلی آن این است که هر 10 ثانیه یک عکس می گیرد و سپس آن تصویر را برای متنی تجزیه و تحلیل می کند که در آن اطلاعات مفیدی در مورد آن باز می گرداند ، اگر س findsالی پیدا کرد ، با استفاده از wolfram به آن پاسخ می دهد ، یا اگر معادله ریاضی پیدا می کند. آن را حل خواهد کرد!

تدارکات:

لوازم مورد نیاز این پروژه شامل موارد زیر است:

1) Raspberry Pi 0 W (از vilros.com)

2) صفحه نمایش OLED روشن 128x64 (از Sparkfun.com)

3) یک ماژول دوربین فرمت شده برای رزبری پای 0 وات (از amazon.com)

4) هر لیوان به انتخاب شما

5) سیم

6) آهن لحیم کاری

7) لحیم بدون سرب (زیرا نمی خواهید از سرب بمیرید)

8) چسب دو طرفه

9) کارت SD حداقل 8 گیگابایت

10) اتصال به کامپیوتر و اینترنت

با فرض اینکه شما در حال حاضر یک کامپیوتر و اینترنت دارید هزینه این عینک ها حدود 130.00 دلار خواهد بود

مرحله 1: سیم کشی مدار

سیم کشی مدار!
سیم کشی مدار!

برای نمایش متن روی صفحه ای که قصد دارید از طریق I2C یا SPI به OLED متصل شوید ، I2C را انتخاب می کنم زیرا از آن راحت تر استفاده می کنم ، اما اگر تمایل به اتصال از طریق SPI دارید ، این آموزش را دنبال کنید. وب سایت Sparkfun و وقتی کارتان تمام شد به اینجا برگردید. https://learn.sparkfun.com/tutorials/transparent-g… اگر I2C را انتخاب کرده اید ، زیرا سیمها را لحیم کرده ام ، همانطور که در زیر نشان داده شده است:

Pi \/ OLED \/

3.3 ولت 3.3 ولت

GND GND

SDA SDA

SCL SCL

لطفاً توجه داشته باشید که OLED روشن فقط می تواند 3.3 ولت را کنترل کند.

پس از اتمام اتصال مدار ، کابل روبان ماژول دوربین را با بیرون کشیدن گیره سیاه و کشیدن آن به عقب به محض قرار گرفتن کابل روبان ، داخل نگهدارنده کابل روبان روی رزبری pi بکشید.

مرحله 2: دسترسی به Raspberry Pi

با استفاده از ssh می توانیم بدون اتصال ماوس و مانیتور اضافی صفحه کلید خارجی با کامپیوتر خود به pi خود دسترسی پیدا کنیم. اولین کاری که انجام می دهید این است که کارت SD خود را با آداپتور یا پورت داخلی به رایانه خود وصل کنید ، سپس باید به این لینک مراجعه کنید https://www.raspberrypi.org/downloads/raspbian/ و Raspbian buster را بارگیری کنید. با دسکتاپ در مرحله دوم باید سیستم عامل را روی کارت SD با استفاده از BalenaEtcher قرار دهید و کارت SD و Raspbian OS خود را انتخاب کرده و روی "فلش" کلیک کنید ، این فرآیند ممکن است مدتی طول بکشد ، پس از اتمام کار مجدداً برگردید. سوم به کارت SD در فایل اکسپلورر یا یاب در مک بروید و یک فایل متنی با نام wpa_supplicant ایجاد کنید ، مطمئن شوید که پسوند.txt را حذف کرده و.conf را اضافه کنید ، در فایل موارد زیر را وارد کنید:

کشور = آمریکا

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 خود را در مکانها و کشور مربوطه وارد کنید. به خاطر داشته باشید که رزبری پای فقط می تواند به شبکه 2.4 گیگاهرتز متصل شود ، به این معنی که رایانه شما نیز باید به آن شبکه متصل شود. پس از ایجاد یک فایل متنی خالی و بدون پسوند به نام ssh و سپس کارت SD خود را خارج کنید. سپس باید PuTTY https://www.putty.org/ را نصب کنید که برای فعال کردن ssh از آن استفاده خواهید کرد. پس از نصب آدرس IP تمشک pi خود را وارد کنید ، می توانید با ورود به وب سایت روترهای خود و مشاهده دستگاه های متصل به آن پی ببرید.

پس از دسترسی به Raspberry Pi از شما می خواهد وارد شوید ، نام کاربری پیش فرض "pi" و رمز عبور "تمشک" است. sudo raspi-config را تایپ کنید ، سپس به گزینه های واسط بروید و دوربین ، ssh و i2c را فعال کنید ، سپس روی Finish کلیک کنید و sudo reboot را تایپ کنید. اکنون شما آماده اس اس اس به رزبری پی هستید ، پیش بروید و Remote Desktop را نصب کرده و آدرس IP تمشک پای خود را وارد کنید و اکنون خوب است که به رزبری پای ssh کنید.

مرحله 3: زمان برنامه نویسی

زمان برنامه نویسی!
زمان برنامه نویسی!

من کدگذاری این برنامه را در پایتون انتخاب کردم ، بنابراین مطمئن شوید که python3.7 یا 3.8 را بر روی دسکتاپ خود نصب کرده اید. این کد با استفاده از یک سرور و یک سرویس گیرنده کار می کند ، که البته رایانه شما است. کلاینت یا raspberry pi یک عکس می گیرد و در dropbox بارگذاری می کند که توسط سرور بازیابی می شود و سپس پردازش تصویر و تشخیص متن را روی تصویر اجرا می کند. برای کارکردن باید برنامه wolframalpha ، dropbox و openweathermap را دریافت کنید ، تنها کاری که باید انجام دهید این است که به ثبت نام وب سایت ها بروید و یک شناسه برنامه به شما می دهد. و سپس آنها را در مکانهای مربوطه که توسط نظرات موجود در کد تعیین شده اند وارد کنید. مطمئن شوید که همه چیز را pip نصب کرده اید و Tesseract OCR و OpenCV را نصب کرده اید. یک فایل پایتون به نام Server.py روی رایانه خود و یک فایل با نام client.py روی raspberry pi ایجاد کنید و سپس کد را کپی و جایگذاری کنید. اما بدانید که هرچه شخصیتهای جسورتر و زمینه سفیدتر نتایج بهتری داشته باشند ، این امر در مورد هر نرم افزار تشخیص متن صدق می کند.

همه پیوندهای ثبت نام برای شناسه برنامه \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

مطمئن شوید که Tesseract OCR و OpenCV را نصب کرده اید \/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

server.py:

وارد کردن dropbox از PIL وارد کردن تصویر وارد کردن cv2 وارد کردن pytesseract از pytesseract وارد کردن خروجی وارد کردن numpy به عنوان np واردات wolframalpha واردات زمان واردات سوکت

dbx = dropbox. Dropbox ("dropboxAPIkey")

s = socket.socket (سوکت. AF_INET ، سوکت. SOCK_STREAM)

app_id = "شناسه برنامه"

host = socket.gethostname ()

بندر = 60567 چاپ (میزبان) s.bind ((میزبان ، بندر)) s. گوش دادن (2)

در حالی که True:

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

در حالی که True:

while 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 ("تصویر بارگیری شد!") image = cv2.imread ("Image.jpg") Image = cv2.resize (image، (640، 480)، interpolation = cv2. INTER_AREA) image68 = cv2.rotate (Image ، cv2. ROTATE_90_COUNTERCLOCKWISE) خاکستری = cv2.cvt رنگ (تصویر 68 ، cv2. COLOR_BGR2GRAY)

def remove_noise (خاکستری):

return cv2.medianBlur (خاکستری ، 5) def thresholding (خاکستری): بازگشت cv2.threshold (خاکستری ، 0 ، 255 ، cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] دفع (خاکستری): هسته = np.ones ((5 ، 5) ، np.uint8) بازگرداندن cv2.dilate (خاکستری ، هسته ، تکرارها = 1) d = pytesseract.image_to_data (خاکستری ، نوع خروجی = خروجی DICT)

n_boxes = len (d ['text'])

برای i در محدوده (n_boxes): if int (d ['conf'] )> 60: (x، y، w، h) = (d ['left'] ، d ['top'] ، d ['width'] ، d ['height'] ) خاکستری = cv2. مستطیل (خاکستری ، (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) 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 (بایت (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 واردات زمان ورود سوکت از زمان وارد کردن خواب واردات pyowm سریال = 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 = "" #ip آدرس پورت کامپیوتر شما = 60567 s.connect ((host، port)) msg1 = "" owm = pyowm. OWM ("")#app-id for 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 ماه) + "/" + str (cdt.year) obs = owm.weather_at_place ("")#شهر و کشور شما در قالب رشته weather = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te 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: 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 (" ")#شهر و کشور شما دوباره در قالب رشته

آب و هوا = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32، 0)، "F"، fill = "white") draw.text ((40، 0)، temp، fill = "سفید") اگر min1 به شماره نباشد: draw.text ((40 ، 0) ، temp2 ، fill = "سفید") draw.text ((32 ، 0) ، "F" ، fill = "سفید") camera.start_preview () time.sleep (2) camera.capture ("/home/pi/Image.jpg") camera.stop_preview client = dropbox. Dropbox (dropbox_access_token) مشتری ("[SUCCESS] dropbox account linked") کلاینت. 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) با بوم (دستگاه) بصورت 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 = " سفید ") draw.text ((0 ، 9) ، تاریخ ، پر کردن = "سفید") اگر min1 در num: obs = owm.weather_at_place ("")#شهر و کشور شما دوباره در قالب رشته

آب و هوا = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32، 0)، "F"، fill = "white") draw.text ((40، 0)، temp، fill = "سفید") اگر min1 به شماره نباشد: draw.text ((40 ، 0) ، temp3 ، fill = "سفید") draw.text ((32 ، 0) ، "F" ، fill = "سفید") if len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) with canvas (device) as draw: draw.text ((0، 0)، hour، fill = "white") 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") if min1 in num: obs = owm.weather_at_place ("") #شهر و روستای شما دوباره در قالب رشته

آب و هوا = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32، 0)، "F"، fill = "white") draw.text ((40، 0)، temp، fill = "سفید") اگر min1 به شماره نباشد: draw.text ((40 ، 0) ، temp3 ، fill = "سفید") draw.text ((32 ، 0) ، "F" ، fill = "سفید") time.sleep (5.4) full_msg1 = "" msg1 = s.recv (100) if len (msg1)> = 2: full_msg1 += msg1.decode ("utf-8") full_msg2 = ("\ n". پیوستن به (textwrap.wrap (full_msg1، 9))) cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) with canvas (device) as 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) ، ":" ، پر = "سفید") draw.text ((15 ، 0) ، min1 ، fill = "سفید") draw.text ((0 ، 9) ، "_" ، پر کنید = "سفید") draw.text ((0 ، 9) ، تاریخ ، پر کردن = "سفید") اگر min1 در num: obs = owm.weather_at_place ("")#شهر و کشور شما دوباره در قالب رشته

آب و هوا = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32، 0)، "F"، fill = "white") draw.text ((40، 0)، temp، fill = "white") اگر min1 به شماره نباشد: obs = owm.weather_at_place ("")#شهر و کشور خود را دوباره در قالب رشته

آب و هوا = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32، 0)، "F"، fill = "white") draw.text ((40، 0)، temp، fill = "سفید") اگر min1 به شماره نباشد: draw.text ((40 ، 0) ، temp3 ، fill = "سفید") draw.text ((32 ، 0) ، "F" ، fill = "سفید") if len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) with canvas (device) as draw: draw.text ((0، 0)، hour، fill = "white") 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") if min1 in num: obs = owm.weather_at_place ("") #شهر و روستای شما دوباره در قالب رشته

آب و هوا = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32، 0)، "F"، fill = "white") draw.text ((40، 0)، temp، fill = "سفید") اگر min1 نه در num: draw.text ((40 ، 0) ، temp3 ، fill = "سفید") draw.text ((32 ، 0) ، "F" ، fill = "سفید") time.sleep (7) client.files_delete (dropbox_path) print ("حذف فایل ها")

P. S. من یک برنامه نویس آماتور هستم بنابراین لطفاً روشهای برنامه نویسی وحشتناک من را زیر سوال نبرید.

مرحله 4: همه چیز را با هم ترکیب کنید

همه اش را بگذار کنار هم!
همه اش را بگذار کنار هم!

پس از اتمام کارهای دیگر ، عملاً کار شما تمام شده است و باید دوربین تمشک pi را وصل کرده و روی شیشه ها نمایش دهید. می توانید این کار را با استفاده از چسب دو طرفه که در لوازم ذکر شده است انجام دهید یا می توانید از هر روشی که فکر می کنید ضروری است استفاده کنید. همچنین ممکن است متوجه شده باشید که من در این درس به باتری اشاره نکرده ام ، زیرا به روز رسانی های بعدی برای این شیشه ها برنامه ریزی شده است و نمی خواهم در حال حاضر آن را وصل کنم. اما اگر می خواهید یکی را وصل کنید ، به مدار شارژر li-po از amazon نیاز دارید

اگر از این کار لذت بردید و می خواهید چیزهای بیشتری ببینید ، من یک کانال YouTube راه اندازی کرده ام و امیدوارم آموزش هایی را در آنجا نیز ارسال کنم. اینم لینکش:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

خدا نجات می دهد!

یوحنا 3:16 "زیرا خدا جهان را آنقدر دوست داشت که پسر یگانه خود را داد ، کسی که تا به حال به او ایمان داشته باشد هلاک نمی شود بلکه زندگی ابدی دارد."

توصیه شده: