Мазмуну:

Акылдуу көз айнек: 4 кадам
Акылдуу көз айнек: 4 кадам

Video: Акылдуу көз айнек: 4 кадам

Video: Акылдуу көз айнек: 4 кадам
Video: Мына сага фигура. Айгерим Расул кызы🍑🍑🍑🔥🔥🔥🍆🍆🍆 #bulbul #кыргызчаырлар #бишкек #кыргызстан #хит 2024, Июль
Anonim
Акылдуу көз айнек
Акылдуу көз айнек
Акылдуу көз айнек
Акылдуу көз айнек

Баарыңарга салам, мен бүгүн үйдө акылдуу көз айнекти кантип жасоону көрсөтөм! Акылдуу көз айнектин эң сонун нерселеринин бири - азыркы технологиялар дүйнөсүндө ушундай нерсеге ээ болуу канчалык пайдалуу жана акылдуу көз айнектин бир эле версиясы жок, анткени баары укмуштуудай өзгөчөлүктөргө жана чексиз тиркемелерге ээ. келечекте. Бул акылдуу көз айнектин өзгөчөлүктөрүнө убакытты айтуу, температураны ар 5 мүнөт сайын айтып туруу кирет, ошол 5 мүнөттүн ортосунда ал ошол күн үчүн күтүлгөн жогорку жана төмөнкү температуранын ортосунда алмашат, ал ошондой эле датаны айтат. Бирок анын негизги өзгөчөлүгү - бул ар бир 10 секундда сүрөт тартып, анан ал сүрөттү ал үчүн пайдалуу маалыматты кайтарып бере турган текст үчүн анализдейт, эгер суроо табылса, анда вольфрамды колдонуп жооп берет, же математикалык теңдемени тапса. аны чечет!

Берилиштер:

Бул долбоор үчүн керектүү жабдуулар төмөнкүлөрдү камтыйт:

1) Raspberry Pi 0 W (vilros.com сайтынан)

2) Таза 128x64 OLED дисплейи (Sparkfun.com сайтынан)

3) Raspberry Pi 0 W үчүн форматталган камера модулу (amazon.com сайтынан)

4) Каалаган стакандар

5) Зымдар

6) ширетүүчү темир

7) Коргошунсуз акысыз (анткени сиз коргошундан өлгүңүз келбейт)

8) 2 тараптуу клей

9) SD карта 8gb мин

10) компьютер жана интернет байланышы

Сизде компьютер жана интернет байланышы бар деп ойлосок, бул көз айнектин баасы болжол менен $ 130.00гө жетет

1 -кадам: Райондун зымдарын тартуу

Цирктин зымдары!
Цирктин зымдары!

Текстти экранда көрсөтүү үчүн I2C же SPI аркылуу OLEDге туташкыңыз келет, мен I2Cди тандап алам, анткени бул мен үчүн ыңгайлуураак, бирок эгер сиз ага SPI аркылуу туташкыңыз келсе, анда бул окуу куралын аткарыңыз Sparkfun веб -сайты жана бүткөндөн кийин бул жерге кайтып келиңиз. https://learn.sparkfun.com/tutorials/transparent-g… Эгерде сиз I2Cди тандап алган болсоңуз, анда мен зымдарды төмөндөгүдөй көрсөтөм:

Pi \/ OLED \/

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Сураныч, так OLED 3.3v менен гана иштей алат.

Районду туташтырып бүткөндөн кийин, камера модулунун лента кабелин кара кыскычты сууруп алып, лента кабелинин кармагычына лента кабели орногондон кийин кайра жылдырыңыз.

2 -кадам: Raspberry Piге кирүү

Sshти колдонуу менен биз кошумча тышкы клавиатура чычканына жана мониторуна туташпай туруп, компьютерибиз менен piге кире алабыз. Сиз жасай турган биринчи нерсе - SD картаңызды адаптер же орнотулган порт менен компьютериңизге туташтыруу, андан кийин бул шилтемеге өтүшүңүз керек болот https://www.raspberrypi.org/downloads/raspbian/ жана Raspbian busterди жүктөп алыңыз рабочий стол менен. Экинчиден, BalenaEtcherдин жардамы менен ОСти SD картка салып, SD картаны жана Raspbian OSти тандап, "жаркылдатуу" баскычын чыкылдатыңыз, бул процесс бир аз убакытты алышы мүмкүн, андыктан бүткөндөн кийин кайра келиңиз. Үчүнчүсү, Macтын файл изилдөөчүсү же тапкычындагы SD картага өтүңүз жана wpa_supplicant аттуу текст файлын түзүңүз.txt кеңейтүүсүн жок кылып,.conf файлын кошуңуз, файлга төмөнкүлөрдү чаптаңыз:

өлкө = АКШ

ctrl_interface = DIR =/var/run/wpa_supplicant GROUP = netdev update_config = 1 тармак = {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'ге кирүү мүмкүнчүлүгүнө ээ болгондон кийин, ал сизден кирүүнү суранат, демейки колдонуучу аты "pi" жана сырсөз "малина". Sudo raspi-config териңиз, андан кийин интерфейс параметрлерине өтүңүз жана камераны, ssh жана i2cти иштетиңиз, андан кийин аяктоону чыкылдатыңыз жана sudo reboot териңиз. Эми сиз малина пи -ге кирүүгө даярсыз, улантыңыз жана Remote Desktopту орнотуп, малина пиңиздин IP дарегин киргизиңиз, эми малина пи -ге ssh киргизгениңиз жакшы.

3 -кадам: коддоо убактысы

Коддоо убактысы!
Коддоо убактысы!

Мен бул программаны pythonдо коддоону чечтим, андыктан столго python3.7 же 3.8 орнотулганын текшериңиз. Бул код сервер менен кардарды колдонуу менен иштейт, бул сиздин компьютериңиз. Клиент же малина пи сүрөткө тартып, аны түшүрүү кутусуна жүктөйт, ал сервер тарабынан алынат, андан кийин сүрөттү иштетүүнү жана текстти таанууну иштетет. Мунун иштеши үчүн сизге wolframalpha, dropbox жана openweathermap тиркемеси керек болот, болгону веб-сайттарга катталууңуз керек, ал сизге колдонмонун идентификаторун берет. анан аларды коддогу комментарийлер менен аныкталган тиешелүү жерлерге киргизиңиз. Пиптин бардыгын орнотуп, Tesseract OCR жана OpenCV орнотконуңузду текшериңиз. Компьютериңизде Server.py аттуу питон файлын жана малина piде client.py аттуу файлды түзүп, андан кийин кодду көчүрүп чаптаңыз. Бирок билиңиз, каармандар канчалык тайманбас жана фону ак болсо, натыйжалар ошончолук жакшы болот, бул ар бир текстти таануу программасында.

Колдонмонун идентификаторуна катталуу үчүн бардык шилтемелер \/

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 импорттоо Чыгуу импорт wpramalpha импорт сокет импорт убактысы катары

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "App-ID"

хост = socket.gethostname ()

порт = 60567 басып чыгаруу (хост) s.bind ((хост, порт)) s. угуу (2)

чын болсо:

c, addr = s.accept () print (f'Байланыш бар: {addr} ') тыныгуу

чын болсо:

while True: time.sleep (13.7) метадайындары, f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. жабуу () басып чыгаруу ("Сүрөт жүктөлдү!") image = cv2.imread ("Image.jpg") Сүрөт = cv2.resize (сүрөт, (640, 480), интерполяция = cv2. INTER_AREA) image68 = cv2.rotate (Сүрөт, cv2. ROTATE_90_COUNTERCLOCKWISE) боз = cv2.cvtColor (image68, cv2. COLOR_BGR2GRAY)

def remove_noise (боз):

кайтаруу cv2.medianBlur (боз, 5) def босогосу (боз): кайтаруу cv2. босого (боз, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (боз): ядро = np.ones ((5, 5), np.uint8) cv2.dilate кайтаруу (боз, ядро, кайталоолор = 1) d = pytesseract.image_to_data (боз, output_type = Output. DICT)

n_boxes = len (d ['текст'])

i үчүн диапазондо (n_boxes): if int (d ['conf'] )> 60: (x, y, w, h) = (d ['left'] , d ['top'] , d ['туурасы'] , d ['бийиктиги'] ) боз = 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 (grey) print (text) while True: text2 = " "if len (text)> = 2: c.send (байт (текст," utf-8 ")) if len (text) = 2: query = text client = wolframalpha. Client (app_id) res = client.query (суроо) жооп = кийинки (res.results).тексттик жооп1 = answer.partition ('\ n') [0] print (answer1) c.send (байт (answer1, "utf-8")) if len (text) <= 1: c.send (байт (text2, "utf-8")) time.sleep (7.5) тыныгуу

Client.py:

luma.core.device luma.core.device импорттук кенепти luma.oled.device импорттоо svd1306, ssd1325, ssd1331, s1d1331, sh1106 импорт сокет импорттук убактысынан импорттук уйку импорту pyowm serial = i2c (luma.core.interface.serial импорт port = 1, address = 0x3C) device = ssd1306 (serial, rotate = 1) camera = 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 = "" pc портуңуздун #ip дареги = 60567 s.connect ((хост, порт)) 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 ("")#шаарыңыз жана өлкөңүз сап форматында аба ырайы = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit")] "те mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) True, ал эми cdt = datetime.datetime.now () min1 = str (cdt.minute) саат = str (cdt.hour) кенеп менен (түзмөк) тартуу катары: draw.text ((0, 0), саат, толтуруу = "ак") draw.text ((11, 0), ":", fill = "ак") draw.text ((15, 0), мин1, толтуруу = "ак") draw.text ((0, 9), "_", толтуруу = "ак") draw.text ((0, 9), дата, толтуруу = "ак ") эгерде min1 саны: obs = owm.weather_at_place (" ")#сиздин шаар менен өлкөңүз дагы сап форматында

аба ырайы = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "ак") draw.text ((40, 0), temp, толтуруу = "ак") эгерде min1 санда болбосо: draw.text ((40, 0), temp2, fill = "ак") draw.text ((32, 0), "F", толтуруу = "ак") camera.start_preview () time.sleep (2) camera.capture ("/home/pi/Image.jpg") camera.stop_preview client = dropbox. Dropbox (dropbox_access_token) print ("[SUCCESS] dropbox account linked") client. 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.text ((0, 19), full_msg, fill = "white") draw.text ((0, 0), саат, толтуруу = "ак") draw.text ((11, 0), ":", толтуруу = "ак") draw.text ((15, 0), min1, fill = "ак") draw.text ((0, 9), "_", толтуруу = " ак ") draw.text ((0, 9), дата, толтуруу = "ак") эгерде min1 саны: obs = owm.weather_at_place ("")#сиздин шаар жана өлкө кайра формат форматында

аба ырайы = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "ак") draw.text ((40, 0), temp, толтуруу = "ак") эгерде 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) canvas (device) with draw: draw.text ((0, 0)), саат, толтуруу = "ак") draw.text ((11, 0), ":", fill = "ак") draw.text ((15, 0), min1, fill = "ак") тартуу. текст ((0, 9), "_", толтуруу = "ак") draw.text ((0, 9), дата, толтуруу = "ак"), эгерде min1 саны: obs = owm.weather_at_place ("") #шаарыңыз менен өлкөңүз кайра стринг форматында

аба ырайы = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "ак") draw.text ((40, 0), temp, толтуруу = "ак") эгерде 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".join (textwrap.wrap (full_msg1, 9))) cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) холст менен (түзмөк) тартуу: draw.text ((0, 19), full_msg, fill = "ак") draw.text ((0, 29), full_msg2, fill = "ак") draw.text ((0, 0), саат, толтуруу = "ак") draw.text ((11, 0), ":", толтуруу = "ак") draw.text ((15, 0), min1, fill = "ак") draw.text ((0, 9), "_", толтуруу = "ак") draw.text ((0, 9), дата, толтуруу = "ак"), эгерде min1 in num: obs = owm.weather_at_place ("")#шаарыңыз менен өлкөңүз дагы сап форматында

аба ырайы = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "ак") draw.text ((40, 0), temp, толтуруу = "ак") эгерде min1 санга кирбесе: obs = owm.weather_at_place ("")#шаарыңыз менен өлкөңүз дагы сап форматында

аба ырайы = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "ак") draw.text ((40, 0), temp, толтуруу = "ак") эгерде 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) canvas (device) with draw: draw.text ((0, 0)), саат, толтуруу = "ак") draw.text ((11, 0), ":", fill = "ак") draw.text ((15, 0), min1, fill = "ак") тартуу. текст ((0, 9), "_", толтуруу = "ак") draw.text ((0, 9), дата, толтуруу = "ак"), эгерде min1 саны: obs = owm.weather_at_place ("") #шаарыңыз менен өлкөңүз кайра стринг форматында

аба ырайы = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "ак") draw.text ((40, 0), temp, толтуруу = "ак") эгерде min1 санда болбосо: draw.text ((40, 0), temp3, fill = "ак") draw.text ((32, 0), "F", fill = "ак") time.sleep (7) client.files_delete (dropbox_path) басып чыгаруу ("Файлдар жок кылынды")

P. S. Мен үйрөнчүк программистмин, андыктан сураныч, менин коркунучтуу программалоо ыкмаларыма шек келтирбеңиз.

4 -кадам: Бардыгын бириктирүү

Баарын бириктирүү!
Баарын бириктирүү!

Калганын бүтүргөндөн кийин, иш жүзүндө бүткөндөн кийин, малина пи камерасын жана дисплейди стакандарга жабыштыруу гана калды. Сиз муну жабдууларда айтылган эки тараптуу желимди колдонуу менен же керектүү деп эсептеген ар кандай ыкмаларды колдонуп жасай аласыз. Сиз бул сабакта эч качан батарейка жөнүндө айтпаганымды байкагандырсыз, анткени мен келечекте бул көз айнекти жаңыртууну пландап жатам жана азыр аны кошууну каалаган жокмун. Бирок, эгерде сиз тиркөөнү кааласаңыз, анда Amazon үчүн li-po заряддагыч схемасы керек болот

Эгер сизге бул жакты жана дагы көргүңүз келсе, мен YouTube каналын ачтым жана ал жерде үйрөткүчтөрдү жайгаштырам деп үмүттөнөм. Бул жерде шилтеме:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Кудай сактасын!

ЖАКАН жазган Жакшы Кабар 3:16 "Кудай дүйнөнү ушунчалык сүйгөндүктөн, Өзүнүн жалгыз Уулун берди, Ага эч качан ишенген адам өлбөйт, бирок түбөлүк өмүргө ээ болот."

Сунушталууда: