สารบัญ:

Cat-a-way - Computer Vision Cat Sprinkler: 6 ขั้นตอน (พร้อมรูปภาพ)
Cat-a-way - Computer Vision Cat Sprinkler: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Cat-a-way - Computer Vision Cat Sprinkler: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Cat-a-way - Computer Vision Cat Sprinkler: 6 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: How to make a Cat Repellent for Under $15 in Parts! 2024, มิถุนายน
Anonim
Cat-a-way - คอมพิวเตอร์วิชั่น Cat Sprinkler
Cat-a-way - คอมพิวเตอร์วิชั่น Cat Sprinkler

ปัญหา - แมวใช้สวนของคุณเป็นห้องน้ำ

วิธีแก้ปัญหา - ใช้เวลามากเกินไปในการออกแบบสปริงเกลอร์แมวด้วยคุณสมบัติอัปโหลด youtube อัตโนมัติ

นี่ไม่ใช่ทีละขั้นตอน แต่เป็นภาพรวมของการก่อสร้างและรหัสบางส่วน

#BeforeYouCallPETA - แมวสบายดี เพราะเป็นสปริงเกอร์แรงดันต่ำเหมือนสายฝน ที่พวกมันวิ่งได้เร็วกว่าที่มันจะหมุนรอบตัวพวกมัน โปรเจ็กต์นี้ไม่ใช่การแช่แมว แต่เพื่อเอาพวกมันออกไปก่อนที่พวกมันจะทิ้งขยะในสวนของฉันด้วย Barkers Eggs เวอร์ชั่นแมว

ขั้นตอนที่ 1: รายการหลักที่จำเป็น

รายการหลักที่จำเป็น
รายการหลักที่จำเป็น

Raspberry Pi zero & การ์ด SD

กล้อง Raspberry Pi

รีเลย์

555 จับเวลา…. (หรือ Arduino และรีเลย์อื่นหากตัวจับเวลา 555 ของคุณไม่มาถึง)

โซลินอยด์

สปริงเกลอร์

ที่อยู่อาศัยบางชนิดสำหรับอุปกรณ์อิเล็กทรอนิกส์

ความเต็มใจที่จะตอกตะปูเปรียบเทียบด้วยค้อนเลื่อนขนาด 6 ตัน

กล้องความละเอียดน้อยจนแทบไม่เห็นน้ำ แต่ยังเห็นแมววิ่งหาที่กำบัง

ขั้นตอนที่ 2: ระบบ

Image
Image

1, กล้อง Pi ตรวจพบวัตถุขนาดแมวที่เคลื่อนไหวสำหรับเฟรมกล้องสองสามเฟรม (อธิบายในขั้นตอนต่อไป)

2, Pi ออกสปริงเกอร์

3 แมววิ่งหาที่กำบัง

4 อัปโหลดวิดีโอไปยัง youtube โดยอัตโนมัติเพื่อความเพลิดเพลินในการรับชม

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

เอามารวมกัน
เอามารวมกัน

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

มีบทแนะนำเกี่ยวกับการลบเฟรมค่อนข้างน้อยซึ่งมีรายละเอียดมากหากคุณทำการค้นหาโดย Google อย่างรวดเร็ว

ภาพรวมวิธีการทำงานของโค้ด

1, กล้องยังคงถ่ายเฟรมและเปรียบเทียบกับเฟรมสุดท้าย

2 ถ้าตรวจพบรูปร่างขนาดแมว จะสังเกตเห็น

3 หากการเปลี่ยนแปลงขนาดของแมวยังคงมีอยู่ประมาณ 4 เฟรม pi จะใช้ GPIO เพื่อถ่ายทอดพลังงานเพื่อเริ่ม Arduino

4, Arduino ส่งสัญญาณไปยังรีเลย์ตัวที่สองเป็นเวลา 5 วินาทีซึ่งเปิดใช้งานโซลินอยด์

5, โซลินอยด์เมื่อขับเคลื่อนช่วยให้น้ำไปยังสปริงเกลอร์

6 ในขณะที่สปริงเกอร์กำลังทำงานอยู่ กล้องจะหยุดตรวจจับและบันทึกวิดีโอ

7, วิดีโอถูกอัปโหลดไปยัง Youtube

8, อัปโหลดภาพนิ่งไปยังดรอปบ็อกซ์สำหรับระบบปรับแต่งอย่างละเอียด

หมายเหตุ - ทำไมฉันถึงลงเอยด้วยการใช้รีเลย์ 2 ตัวและ Arduino เพื่อเปิดโซลินอยด์เป็นเวลา 5 วินาที…..

1, pi ไม่สามารถเริ่มและหยุดโซลินอยด์ขณะบันทึกวิดีโอเนื่องจาก python scrips หยุดชั่วคราวจนกว่าวิดีโอจะเสร็จสิ้น ดังนั้นจึงจำเป็นต้องใช้ Arduino (หรือ 555 timer) เพื่อให้โซลินอยด์เปิดและปิดโดยอิสระกับสคริปต์ในขณะที่ วิดีโอยังคงบันทึกอยู่

2, รีเลย์และ Arduino ตัวแรกสามารถแทนที่ด้วยตัวจับเวลา 555 ตัว แต่มาไม่ทันสำหรับโครงการนี้ 555 จะช่วยประหยัดเวลาและขั้นตอนได้มาก

3, pi ไม่สามารถกระตุ้นโซลินอยด์ได้โดยตรงเนื่องจาก Pi GPIO ทำงานบนสูงสุด 3.3v และ 51mA และโซลินอยด์ต้องการ 5V และมากกว่า 51mA เพื่อทริกเกอร์

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

5 ฉันอาจพลาดบางสิ่งที่ชัดเจนและเสียเวลาตั้งค่าเช่นนี้

รหัสด้านล่าง

นำเข้า cv2import numpy เป็น np นำเข้า argparse #cat เวลานำเข้า นำเข้า RPi. GPIO เป็น GPIO นำเข้าระบบปฏิบัติการ ดรอปบ็อกซ์จาก picamera.array นำเข้า PiRGBArray จาก picamera นำเข้า PiCamera # ------------------ ------------------------------ อัปโหลดไปยัง 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) พิมพ์ ("การถ่ายวิดีโอ") ลอง: #Take Video os.system('raspivid -w 1640 -h 922 -o vid{0}.h264 -t 15000'.format(vidname)) #Upload to youtube print("Uploading to YouTube") os system('sudo youtube-upload --title="Cat Got Wet {0}" --client-secrets=client_secret.json vid{0}.h264'.format(vidname)) #ลบไฟล์วิดีโอเมื่อเสร็จแล้ว os.remove ('vid{0}.h264'.format(vidname)) print("วิดีโอที่อัปโหลดและนำออกจาก Pi") ยกเว้น: ผ่าน #-------------------- ------------------------------------ ยังคงดรอปบ็อกซ์ -------------------- -------------------- def St illsToDropbox(): print("Uploading Still To Dropbox Function") access_token = 'Ah ah ah คุณไม่ได้พูดคำวิเศษณ์…อ้า อ้า อ้า คุณไม่ได้พูดคำวิเศษณ์' ctime = time.strftime(" %H:%M:%S") cdate = time.strftime("%d-%m-%Y") ลอง: filename = "/Motion/{0}/DetectedAt_{1}.jpg".format(cdate, ctime) พิมพ์ (ชื่อไฟล์) ไคลเอนต์ = dropbox.client. DropboxClient (access_token) รูปภาพ = เปิด ("ToDropbox.jpg", 'rb') client.put_file (ชื่อไฟล์, รูปภาพ) image.close () os.remove ("ToDropbox.jpg") ยกเว้น: ผ่าน #----------------------------- ------ตรวจจับการเคลื่อนไหว----------------------------------------- def DetectMotion(): #Define vars min_area = 400 tolarance = 25 #change in pixel bluramount = 21 timetoforget = 0.5 kernel = np.ones((5, 5), np.uint8) #used for dialate MotionCounter = 0 MinTargetArea = 600 # ขนาดที่เล็กที่สุดในการตรวจจับ MaxTargetArea = 5000 #ขนาดที่ใหญ่ที่สุดในการตรวจจับตอนนี้ = time.time() จากนั้น = 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) #Grab first frame & prep it to go in cv2.acumulate weight camera.capture(rawCapture, format="bgr") เฉลี่ย = rawCapture.array #ครอบตัดส่วนที่ไม่ต้องการ PolyCrop = np.array(

#HowToTriggerRealProgrammersWithBadCode

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

เอามารวมกัน
เอามารวมกัน
เอามารวมกัน
เอามารวมกัน
เอามารวมกัน
เอามารวมกัน

ยัดอุปกรณ์ไฟฟ้าลงในกล่องกันน้ำ ขันสกรูเข้ากับผนัง และใช้เทปพันสายไฟและกาวร้อนจำนวนมาก

ขั้นตอนที่ 5: ผลลัพธ์

Image
Image
ผลลัพธ์
ผลลัพธ์

เมื่อมันทำงานมันทำงาน

ขั้นตอนที่ 6: ผลบวกที่ผิดพลาด

ผลบวกลวง
ผลบวกลวง

เมื่อไม่พ่นเงาแมว ภรรยาและลูกสาวของคุณ

เคล็ดลับจากมือโปร - วางสวิตช์ข้างประตูเพื่อหยุดโปรแกรมตรวจจับการเคลื่อนไหวชั่วคราว….. จากนั้นลืมใช้และเปียกน้ำเมื่อนำถังขยะออก

หวังว่าฉันจะทำให้ผู้เชี่ยวชาญในการเขียนโปรแกรม อิเล็กทรอนิกส์ และ DIY ประนีประนอมกับข้อผิดพลาดทั้งหมดที่ฉันอาจทำ และโดยเฉพาะอย่างยิ่งหวังว่าคุณจะสนุกกับการสะกดคำผิดทั้งหมดของฉัน

แนะนำ: