Mục lục:

Cat-a-way - Computer Vision Cat Sprinkler: 6 bước (có hình ảnh)
Cat-a-way - Computer Vision Cat Sprinkler: 6 bước (có hình ảnh)

Video: Cat-a-way - Computer Vision Cat Sprinkler: 6 bước (có hình ảnh)

Video: Cat-a-way - Computer Vision Cat Sprinkler: 6 bước (có hình ảnh)
Video: Bị ô tô tông nguy kịch vì chạy xe đạp lạng lách, đánh võng giữa ngã tư 2024, Tháng mười một
Anonim
Cat-a-way - Computer Vision Cat Sprinkler
Cat-a-way - Computer Vision Cat Sprinkler

Vấn đề - Mèo sử dụng khu vườn của bạn làm nhà vệ sinh

Giải pháp - Dành quá nhiều thời gian cho việc thiết kế vòi phun nước cho mèo với tính năng tự động tải lên youtube

Đây không phải là từng bước mà là tổng quan về cấu tạo và một số mã

#BeforeYouCallPETA - Những con mèo vẫn ổn, một vòi phun nước áp suất thấp giống như mưa, chúng có thể chạy nhanh hơn trước khi nó quay xung quanh chúng. Dự án không phải là ngâm một con mèo, mà là để xua chúng đi trước khi chúng xả rác trong vườn của tôi với phiên bản mèo Barkers Eggs.

Bước 1: Các mặt hàng chính bắt buộc

Các mặt hàng chính bắt buộc
Các mặt hàng chính bắt buộc

Raspberry Pi zero & thẻ SD

Máy ảnh Raspberry Pi

Chuyển tiếp

Bộ đếm thời gian 555…. (hoặc arduino và một rơ le khác nếu bộ hẹn giờ 555 của bạn không đến)

Solenoid

Vòi phun nước

Một số loại nhà ở cho thiết bị điện tử

Sẵn sàng đánh một chiếc đinh ẩn dụ bằng một chiếc búa tạ nặng 6 tấn

Một chiếc máy ảnh có độ phân giải quá nhỏ, bạn hầu như không thể nhìn thấy mặt nước, nhưng vẫn có thể nhìn thấy những con mèo đang chạy tìm chỗ ẩn nấp

Bước 2: Hệ thống

Image
Image

1, Máy ảnh Pi phát hiện một vật thể có kích thước như con mèo đang di chuyển trong một vài khung hình máy ảnh (được nêu trong bước tiếp theo)

2, Pi thiết lập vòi phun nước

3, Mèo chạy đi tìm chỗ ẩn nấp

4, Video tự động tải lên youtube xem cho thỏa thích

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

Kết hợp nó lại với nhau
Kết hợp nó lại với nhau

Sử dụng openCV bằng cách sử dụng phép trừ khung, bạn có thể tìm thấy các khu vực của khung thay đổi theo thời gian, bằng cách sử dụng một số chức năng tiện lợi, bạn có thể tìm ra mức độ lớn của những thay đổi này và liệu chúng có tồn tại theo thời gian hay không và quan trọng nhất là tìm hiểu xem chúng có kích thước như mèo hay không.

Có khá nhiều hướng dẫn về phép trừ khung rất chi tiết nếu bạn tìm kiếm nhanh trên google.

Tổng quan về cách mã hoạt động

1, Máy ảnh tiếp tục chụp các khung hình và so sánh chúng với khung hình cuối cùng

2, Nếu một hình dạng có kích thước như mèo được phát hiện, nó được ghi nhận

3, Nếu sự thay đổi kích thước con mèo vẫn tiếp diễn trong khoảng 4 khung hình, pi sử dụng GPIO của nó để cấp nguồn cho rơle khởi động arduino

4, arduino gửi tín hiệu cấp nguồn cho rơ le thứ hai trong 5 giây để kích hoạt điện từ

5, Bộ điện từ khi được cấp điện cho phép nước vào vòi phun nước

6, Trong khi vòi phun nước đang hoạt động, camera sẽ dừng phát hiện và ghi video

7, Video được tải lên Youtube

8, Stills được tải lên dropbox để tinh chỉnh hệ thống

Lưu ý - Tại sao tôi lại sử dụng 2 rơ le và arduino để bật điện từ trong 5 giây…..

1, Pi không thể khởi động và dừng bộ điện từ trong khi quay video vì tập lệnh python tạm dừng cho đến khi video kết thúc, do đó cần có arduino (hoặc bộ đếm thời gian 555) để cho phép bộ điện từ mở và đóng độc lập với tập lệnh trong khi video vẫn đang quay.

2, Rơ le và arduino đầu tiên có thể được thay thế bằng bộ hẹn giờ 555 nhưng điều đó đã không xuất hiện trong bài viết kịp thời cho dự án này, 555 sẽ tiết kiệm rất nhiều thời gian và các bước.

3, Pi không thể kích hoạt điện từ trực tiếp vì Pi GPIO hoạt động trên 3.3v và 51mA tối đa, và điện từ muốn 5V và nhiều hơn 51mA để kích hoạt.

4, Mỗi khung hình có thể được cắt để loại bỏ phát hiện chuyển động ở các khu vực không mong muốn, chẳng hạn như khu vườn neigbors. Nếu không làm được điều này, người hàng xóm sẽ nhìn vào khu vườn của bạn một cách bối rối vì vòi phun nước tắt mỗi khi anh ta muốn đi vào chuồng của mình.

5, Tôi có lẽ đã bỏ lỡ một cái gì đó rõ ràng và lãng phí thời gian của tôi để thiết lập nó như thế này.

Mã bên dưới

import cv2import numpy as np import argparse #cat import time import RPi. GPIO as GPIO import os import dropbox from picamera.array import PiRGBArray from picamera import PiCamera # ------------------ ------------------------------ Tải lên youtube ----------------- ---------------------- def HDtoYoutube (): ctime = time.strftime ("_% H-% M-% S") cdate = time.strftime ("_% d-% m-% Y") vidname = ctime + cdate #Trigger relay GPIO.output (11, True) time.sleep (.5) GPIO.output (11, False) print ("Quay video") thử: #Take Video os.system ('raspivid -w 1640 -h 922 -o vid {0}.h264 -t 15000'.format (vidname)) #Upload to youtube print ("Tải lên YouTube") os. system ('sudo youtube-upload --title = "Cat Got Wet {0}" --client-secret = client_secret.json vid {0}.h264'.format (vidname)) # Xóa tệp video khi hoàn tất os.remove ('vid {0}.h264'.format (vidname)) print ("Video được tải lên và xóa khỏi Pi") ngoại trừ: pass # -------------------- ---------------------------- Chuyển đến hộp kéo thả ------------------- -------------------- def St illsToDropbox (): print ("Đang tải lên chức năng Dropbox") access_token = 'Ah ah ah, bạn không nói từ ma thuật … Ah ah ah, bạn đã không nói từ ma thuật' ctime = time.strftime (" % H:% M:% S ") cdate = time.strftime ("% d-% m-% Y ") try: filename =" /Motion/{0}/DetectedAt_{1}.jpg".format(cdate, ctime) print (filename) client = dropbox.client. DropboxClient (access_token) image = open ("ToDropbox.jpg", 'rb') client.put_file (filename, image) image.close () os.remove ("ToDropbox.jpg ") ngoại trừ: pass # ------------------------------------------ ------ Phát hiện chuyển động ----------------------------------------- def DetectMotion (): #Define vars min_area = 400 tol clear = 25 #change in pixel bluramount = 21 timetoforget = 0.5 kernel = np.ones ((5, 5), np.uint8) #used for dialate MotionCounter = 0 MinTargetArea = 600 # kích thước nhỏ nhất để phát hiện MaxTargetArea = 5000 # Kích thước lớn nhất để phát hiện bây giờ = time.time () then = time.time () #initialise camera camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 10 raw Capture = PiRGBArray (camera, size = (640, 480)) #warmup camera time.sleep (1) # Khung hình đầu tiên củarab & chuẩn bị cho nó để chuyển sang cv2.acumulate weight camera.capture (rawCapture, format = "bgr") avg = rawCapture.array # Cắt bỏ vùng không mong muốn PolyCrop = np.array (

#HowToTriggerRealProgrammersWithBadCode

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

Kết hợp nó lại với nhau
Kết hợp nó lại với nhau
Kết hợp nó lại với nhau
Kết hợp nó lại với nhau
Kết hợp nó lại với nhau
Kết hợp nó lại với nhau

Cắn các thiết bị điện vào một hộp chống thấm, vặn các thứ vào tường và sử dụng nhiều băng keo và keo nóng

Bước 5: Kết quả

Image
Image
Kết quả
Kết quả

Khi nó hoạt động, nó hoạt động

Bước 6: khẳng định sai

Khẳng định sai
Khẳng định sai

Khi không, nó sẽ phun ra bóng mèo, vợ bạn và con gái bạn.

Mẹo chuyên nghiệp - Đặt một công tắc bên cửa để tạm dừng chương trình phát hiện chuyển động….. sau đó quên sử dụng và bị ướt khi đưa thùng ra ngoài.

Hy vọng tôi đã khiến bất kỳ chuyên gia nào trong lĩnh vực lập trình, điện tử và DIY phải chùn tay với tất cả những lỗi tôi có thể mắc phải, và đặc biệt hy vọng bạn thích tất cả những lỗi chính tả của tôi.

Đề xuất: