Агуулгын хүснэгт:

Ухаалаг шил: 4 алхам
Ухаалаг шил: 4 алхам

Видео: Ухаалаг шил: 4 алхам

Видео: Ухаалаг шил: 4 алхам
Видео: РАЗДАЕТ WIFI СЛЕДИТ ЗА ЧЕЛОВЕКОМ 4G камера видеонаблюдения 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 хүчдэлтэй ажиллах боломжтой гэдгийг анхаарна уу.

Цахилгаан хэлхээг холбож дууссаны дараа камерын модулийн тууз кабелийг бөөрөлзгөнө pi дээрх тууз кабелийн үүрэнд шургуулж, хар хавчаарыг сугалж, тууз кабель байрлуулсны дараа буцааж шургуулна.

Алхам 2: Raspberry Pi руу нэвтрэх

Ssh ашиглан бид гадны гарны нэмэлт хулгана, дэлгэцийг холбохгүйгээр компьютерт pi -ээрээ нэвтрэх боломжтой болно. Таны хийх ёстой хамгийн эхний зүйл бол SD картаа адаптер эсвэл суулгасан порт ашиглан компьютер дээрээ холбох явдал юм, дараа нь та энэ линк рүү орж https://www.raspberrypi.org/downloads/raspbian/ холбоос руу орж Raspbian buster програмыг татаж авах хэрэгтэй болно. ширээний хамт. Хоёрдугаарт, та BalenaEtcher -ийг ашиглан OS картаа SD карт руу оруулах хэрэгтэй бөгөөд SD карт, Raspbian OS -ээ сонгоод "флаш" дээр дарна уу. Гуравдугаарт, Mac Explorer дээрх файл хайгч эсвэл хайгч дахь 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 -ийг идэвхжүүлэхийн тулд ашиглах болно. Суулгасны дараа бөөрөлзгөнө pi -ийн IP хаягийг оруулна уу, энэ нь чиглүүлэгчийн вэбсайт руу нэвтэрч, холбогдсон төхөөрөмжүүдийг хараад юу болохыг олж мэдэх боломжтой болно.

Та Raspberry Pi-д нэвтэрсний дараа нэвтрэх шаардлагатай болно, хэрэглэгчийн нэр нь "pi" бөгөөд нууц үг нь "бөөрөлзгөнө" байна. Sudo raspi-config гэж бичээд интерфэйсийн сонголтууд руу орж камер, ssh, i2c-ийг идэвхжүүлээд Finish дээр дарж sudo reboot гэж бичнэ үү. Одоо та бөөрөлзгөнө pi руу ssh хийхэд бэлэн боллоо, Remote Desktop -ийг суулгаж, бөөрөлзгөнө pi -ийн IP хаягийг оруулна уу.

Алхам 3: Кодлох цаг

Кодлох цаг!
Кодлох цаг!

Би энэ програмыг python дээр кодлохоор сонгосон тул та ширээний компьютер дээрээ python3.7 эсвэл 3.8 суулгасан эсэхийг шалгаарай. Энэ код нь сервер болон үйлчлүүлэгч ашиглан ажилладаг бөгөөд энэ нь таны компьютер юм. Үйлчлүүлэгч эсвэл бөөрөлзгөнө pi нь зураг аваад түүнийгээ dropbox руу байршуулах бөгөөд үүнийг серверээс авдаг бөгөөд дараа нь зураг дээр зураг боловсруулах, текст таних ажлыг гүйцэтгэдэг. Үүнийг хийхийн тулд та wolframalpha, dropbox, openweathermap апп-id авах шаардлагатай болно, зөвхөн вэбсайтад бүртгүүлэхэд л хангалттай бөгөөд энэ нь танд апп-ID өгөх болно. дараа нь тэдгээрийг кодын тайлбараар тодорхойлсон холбогдох газруудад оруулна уу. Та pip бүх зүйлийг суулгаж, Tesseract OCR болон OpenCV суулгасан эсэхээ шалгаарай. Компьютер дээрээ Server.py нэртэй питон файл, бөөрөлзгөнө pi дээр client.py нэртэй файл үүсгээд кодыг хуулж буулгана уу. Гэхдээ илүү тод дүрүүд, арын дэвсгэр нь илүү цагаан байх тусам үр дүн нь илүү сайн байх болно, энэ нь текст таних програм хангамж бүрт тохиолддог зүйл гэдгийг мэддэг.

Апп-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 импорт Гаралтын импорт wpramalpha импорт сокет импортлох цаг

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "Апп-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. close () print ("Зураг татаж авсан!") image = cv2.imread ("Image.jpg") Image = cv2.resize (зураг, (640, 480), интерполяци = cv2. INTER_AREA) image68 = cv2.rotate (Зураг), cv2. ROTATE_90_COUNTERCLOCKWISE) саарал = cv2.cvtColor (зураг68, cv2. COLOR_BGR2GRAY)

def remove_noise (саарал):

буцах cv2.medianBlur (саарал, 5) def босго (саарал): буцах cv2. босго (саарал, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def өргөжүүлэх (саарал): цөм = np.ones ((5, 5), np.uint8) cv2.dilate (саарал, цөм, давталт = 1) d = pytesseract.image_to_data (саарал, output_type = Гаралт. DICT)

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

i -ийн хувьд (n_boxes): хэрэв 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 (саарал) хэвлэх (текст) байхад 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. илгээнэ үү (байт (текст2, "utf-8")) цаг. Унтах (7.5) завсарлага

Client.py:

luma.core.device -ээс luma.core.device -аас luma.core.render -аас импорт хийх зураг luma.core.interface.serial -аас импортлох dropboximport picameraimport импорт хийх цаг ssd1306, ssd1325, ssd1331, sh1106 импортын сокетийг импортлох импорт pyowm цуврал = i2c 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 for 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")) "te mp_max "]) temp3 = str (цаг агаар зотон (төхөөрөмж) -ийг зурах байдлаар: draw.text ((0, 0), цаг, дүүргэх = "цагаан") draw.text ((11, 0), ":", дүүргэх = "цагаан") 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 = "white") draw.text ((40, 0), temp, бөглөх = "цагаан"), хэрэв 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) хэвлэх ("[АМЖИЛТ] dropbox данс холбогдсон") үйлчлүүлэгч. files_upload (нээлттэй (computer_path, "rb"). read (), dropbox_path) хэвлэх ("[UPLOADED] {}". формат (computer_path)) full_msg = "" time.sleep (5) msg = s.recv (100) if 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), цаг, дүүргэх = "цагаан") draw.text ((11, 0), ":", fill = "цагаан") 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 = "white") 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), ":", дүүргэх = "цагаан") draw.text ((15, 0), мин1, дүүргэх = "цагаан") зурах. текст ((0, 9), "_", бөглөх = "цагаан") draw.text ((0, 9), огноо, бөглөх = "цагаан") хэрэв min1 in in: obs = owm.weather_at_place ("") #танай хот, улсыг дахин string хэлбэрээр

цаг агаар = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") 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) with canvas (device) as draw: draw.text ((0, 19), full_msg, fill = "цагаан") draw.text ((0, 29), full_msg2, fill = "цагаан") draw.text ((0, 0), цаг, дүүргэх = "цагаан") draw.text ((11, 0), ":", fill = "цагаан") draw.text ((15, 0), min1, fill = "цагаан") draw.text ((0, 9), "_", бөглөх = "цагаан") draw.text ((0, 9), огноо, бөглөх = "цагаан") хэрэв min1 in in number: 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, бөглөх = "цагаан") хэрэв 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, дүүргэх = "цагаан"), хэрэв 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)), цаг, дүүргэх = "цагаан") draw.text ((11, 0), ":", дүүргэх = "цагаан") draw.text ((15, 0), мин1, дүүргэх = "цагаан") зурах. текст ((0, 9), "_", бөглөх = "цагаан") draw.text ((0, 9), огноо, бөглөх = "цагаан") хэрэв min1 in in: obs = owm.weather_at_place ("") #танай хот, улсыг дахин string хэлбэрээр

цаг агаар = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") 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 "Бурхан ертөнцийг маш их хайрласан тул Түүнд итгэдэг цорын ганц Хүүдээ мөхөхгүй, харин мөнх амьдралтай болно."

Зөвлөмж болгож буй: