91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何制作計(jì)算機(jī)視覺貓灑水器

454398 ? 來源:wv ? 2019-09-03 17:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

第1步:主要項(xiàng)目必需

Raspberry Pi zero& SD

Raspberry Pi攝像機(jī)

繼電器

555計(jì)時(shí)器。..。(如果您的555計(jì)時(shí)器未到達(dá),則為arduino和另一個(gè)繼電器)

電磁閥

灑水器

電子產(chǎn)品的某種外殼

愿意用6噸大錘打一個(gè)隱喻釘子

分辨率很低的相機(jī)你幾乎看不到水,但仍然可以看到貓跑來掩護(hù)

第2步:系統(tǒng)

1,Pi相機(jī)檢測到一個(gè)貓大小的物體移動(dòng)幾個(gè)相機(jī)幀(下一步驟中已經(jīng)開始)

2,Pi啟動(dòng)噴水器

3,Cat跑步封面

4,視頻自動(dòng)上傳到y(tǒng)outube以便查看樂趣

第3步:編碼時(shí)間

使用openCV使用幀減法,您可以找到隨時(shí)間變化的幀的區(qū)域,使用一些漂亮的函數(shù),您可以確定這些變化有多大以及它們是否會(huì)持續(xù)存在,最重要的是找出它們是否是貓大小。

有相當(dāng)?shù)腶f關(guān)于幀減法的新教程,如果你進(jìn)行快速谷歌搜索,會(huì)詳細(xì)介紹。

代碼工作原理概述

1,相機(jī)不斷拍攝幀并將它們與最后

2,如果檢測到貓大小的形狀,則注意到

3,如果貓大小的變化持續(xù)超過4幀,則pi使用其GPIO為繼電器供電以啟動(dòng)arduino

4,arduino發(fā)送信號(hào)給第二個(gè)繼電器供電5秒鐘,激活電磁閥

5,電磁閥通電時(shí)允許水進(jìn)入噴水器

6,當(dāng)噴水器處于活動(dòng)狀態(tài)時(shí),攝像頭停止檢測并記錄視頻

7,視頻上傳到Y(jié)outube

8,靜止圖像上傳到保管箱以進(jìn)行微調(diào)系統(tǒng)

注意 - 為什么我最終使用2個(gè)繼電器和一個(gè)arduino打開電磁閥5秒鐘。..。..。

1,pi錄制視頻時(shí)pi不能啟動(dòng)和停止電磁閥scrips暫停直到視頻結(jié)束,因此需要arduino(或555計(jì)時(shí)器)允許當(dāng)視頻仍在錄制時(shí),電磁鐵打開和關(guān)閉獨(dú)立于腳本。

2,第一個(gè)繼電器和arduino可以用555定時(shí)器替換,但是沒有及時(shí)發(fā)布這個(gè)項(xiàng)目,555將節(jié)省大量的時(shí)間和金錢和步驟。

3,pi不能直接觸發(fā)螺線管,因?yàn)镻i GPIO工作在3.3v和51mA最大值,螺線管需要5V和更多觸發(fā)時(shí)不超過51mA。

4,可以裁剪每個(gè)幀以去除不需要的區(qū)域中的運(yùn)動(dòng)檢測,例如neigbors garden。如果不這樣做會(huì)導(dǎo)致鄰居給你的花園帶來困惑的看法,因?yàn)槊看嗡脒M(jìn)入他的棚子時(shí)灑水器就會(huì)熄火。

5,我可能錯(cuò)過了一些明顯的東西,浪費(fèi)了我的時(shí)間來設(shè)置它像這樣。

以下代碼

import cv2

import 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

#------------------------------------------------Upload to 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,F(xiàn)alse)

print(“Taking Video”)

try:

#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))

#Remove video file when done

os.remove(‘vid{0}.h264’.format(vidname))

print(“Video uploaded and removed from Pi”)

except:

pass

#------------------------------------------------Stills to dropbox---------------------------------------

def StillsToDropbox():

print(“Uploading Still To Dropbox Function”)

access_token = ‘Ah ah ah, you didn’t say the magic word.。.Ah ah ah, you didn‘t say the magic word’

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”)

except:

pass

#------------------------------------------------Detect motion-----------------------------------------

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 #smallest size to detect

MaxTargetArea = 5000 #Largest size to detect

now = time.time()

then = time.time()

#initialise camera

camera = PiCamera()

camera.resolution = (640,480)

camera.framerate = 10

rawCapture = PiRGBArray(camera, size=(640,480))

#warmup camera

time.sleep(1)

#Grab first frame & prep it to go into cv2.acumulate weight

camera.capture(rawCapture, format=“bgr”)

avg = rawCapture.array

#Crop out unwanted region

PolyCrop = np.array( [[[362,480],[613,365],[628,161],[498,0],[640,0],[640,480]]], dtype=np.int32 )

cv2.fillPoly(avg, PolyCrop, 0,0,0)

#Process image

avg = cv2.cvtColor(avg, cv2.COLOR_BGR2GRAY)

avg = cv2.GaussianBlur(avg, (bluramount, bluramount), 0)

avg = avg.copy().astype(“float”)

rawCapture.truncate(0)

print(“Ready to detect”)

#capture frames

for frame in camera.capture_continuous(rawCapture, format=“bgr”, use_video_port=True):

#Pause Switch

loopgo = GPIO.input(PauseNow)

#print(loopgo)

while loopgo == 0:

#print(loopgo)

loopgo = GPIO.input(PauseNow)

time.sleep(1)

#grabs raw numpy array

currentframe = frame.array

key = cv2.waitKey(1) & 0xFF

#Crop out unwanted region

cv2.fillPoly(currentframe, PolyCrop, 0,0,0)

rawCapture.truncate(0) #Clear frame buffer for next loop

currentgray = cv2.cvtColor(currentframe, cv2.COLOR_BGR2GRAY)

currentgray = cv2.GaussianBlur(currentgray, (bluramount, bluramount), 0)

#make time average frame

cv2.accumulateWeighted(currentgray, avg, timetoforget)

#get difference in frame

frameDelta = cv2.absdiff(currentgray, cv2.convertScaleAbs(avg))

thresh = cv2.threshold(frameDelta, tolarance, 255, cv2.THRESH_BINARY)[1]

#Turn to blob

thresh = cv2.dilate(thresh, kernel, iterations = 10) #dilate

thresh = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel) #close holes

thresh = cv2.erode(thresh, kernel, iterations = 5) #erode

#contours

_, cnts, _= cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# loop over the contours

for c in cnts:

# if the contour is too small, ignore it

if cv2.contourArea(c) 《 min_area:

continue

# compute the bounding box for the contour, draw it on the frame,

# and update the textq

(x, y, w, h) = cv2.boundingRect(c)

#Too small : Red Box

if cv2.contourArea(c) 《 MinTargetArea:

cv2.rectangle(currentframe, (x, y), (x + w, y + h), (0, 0, 255), 2)

#MotionCounter = MotionCounter + 1 #Debug take all the pictures

print(“MotionDetected”)

#Just right : Green Box

if cv2.contourArea(c) 》= MinTargetArea and cv2.contourArea(c) 《= MaxTargetArea:

cv2.rectangle(currentframe, (x, y), (x + w, y + h), (0, 255, 0), 2)

MotionCounter = MotionCounter + 1 #Debug take all the pictures

print(“MotionDetected”)

#Too big : Blue Box

if cv2.contourArea(c) 》 MaxTargetArea:

cv2.rectangle(currentframe, (x, y), (x + w, y + h), (255, 0, 0), 2)

#MotionCounter = MotionCounter + 1 #Debug take all the pictures

print(“MotionDetected”)

#Keep now up to date

now = time.time()

#MotionCounterTimer

if (MotionCounter 》 0):

if (now - then 》 10):

MotionCounter = 0

then = time.time()

#Break loop on pressing Q

if key == ord(“q”):

break

#If motion persists save current frame and activate countermeasures

if MotionCounter 》= 4:

MotionCounter = 0

cv2.imwrite(‘ToDropbox.jpg’, currentframe)

camera.close()

return True

#------------------------------------------------Main---------------------------------------

try:

#Set Pins

GPIO.setmode(GPIO.BOARD)

PauseNow=12

GPIO.setup(11,GPIO.OUT)

GPIO.setup(PauseNow,GPIO.IN,pull_up_down=GPIO.PUD_UP)

while True:

MotionDetected = False

MotionDetected = DetectMotion()

if MotionDetected == True:

HDtoYoutube()

StillsToDropbox()

except KeyboardInterrupt:

print(“Keyboard Interupt”)

except:

print(“Other Error”)

finally:

GPIO.cleanup()

#HowToTriggerRealProgrammersWithBadCode

第4步:將它放在一起

將電器塞入防水外殼,將物品擰入墻壁并使用大量膠帶和熱膠

第5步:結(jié)果

什么時(shí)候有效

第6步:誤報(bào)

如果沒有,它會(huì)噴射貓影,你的妻子和你的女兒。

Pro -tip - 在門旁邊放一個(gè)開關(guān),暫停運(yùn)動(dòng)檢測程序。..。.然后忘記使用它并在放入垃圾箱時(shí)弄濕。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    上海計(jì)算機(jī)視覺企業(yè)行學(xué)術(shù)沙龍走進(jìn)西井科技

    12月5日,由中國圖象圖形學(xué)學(xué)會(huì)青年工作委員會(huì)(下簡稱“青工委”)、上海市計(jì)算機(jī)學(xué)會(huì)計(jì)算機(jī)視覺專委會(huì)(下簡稱“專委會(huì)”)聯(lián)合主辦,上海西井科技股份有限公司、江蘇路街道商會(huì)承辦的“上海計(jì)算機(jī)
    的頭像 發(fā)表于 12-16 15:39 ?647次閱讀

    使用代理式AI激活傳統(tǒng)計(jì)算機(jī)視覺系統(tǒng)的三種方法

    當(dāng)前的計(jì)算機(jī)視覺系統(tǒng)擅長于識(shí)別物理空間與流程中的事件,卻難以詮釋場景細(xì)節(jié)及其意義,也無法推理后續(xù)可能發(fā)生的情況。
    的頭像 發(fā)表于 12-01 09:44 ?692次閱讀

    工控機(jī)與普通計(jì)算機(jī)的核心差異解析

    在工業(yè)自動(dòng)化和智能制造領(lǐng)域,計(jì)算機(jī)設(shè)備作為核心控制單元,其選擇直接影響整個(gè)系統(tǒng)的穩(wěn)定性與可靠性。工控機(jī)與普通計(jì)算機(jī)雖同屬計(jì)算設(shè)備,但其設(shè)計(jì)目標(biāo)、性能側(cè)重和應(yīng)用場景存在根本性差異。準(zhǔn)確理解這些差異,是進(jìn)行正確設(shè)備選型的基礎(chǔ)。
    的頭像 發(fā)表于 11-25 14:45 ?1856次閱讀
    工控機(jī)與普通<b class='flag-5'>計(jì)算機(jī)</b>的核心差異解析

    STM32計(jì)算機(jī)視覺開發(fā)套件:B-CAMS-IMX攝像頭模塊技術(shù)解析

    CMOS RGB圖像傳感、ISM330DLC慣性運(yùn)動(dòng)單元和VL53L5CX ToF傳感。B-CAMS-IMX可用于任何具有MIPI CSI-2? 接口(帶22引腳FFC連接)的STM32開發(fā)板,輕松在STM32微控制
    的頭像 發(fā)表于 10-20 09:46 ?1434次閱讀
    STM32<b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺</b>開發(fā)套件:B-CAMS-IMX攝像頭模塊技術(shù)解析

    【作品合集】賽昉科技VisionFive 2單板計(jì)算機(jī)開發(fā)板測評(píng)

    體驗(yàn)】2. 刷機(jī)、同局域網(wǎng)mac訪問存放圖片及作為web服務(wù)【VisionFive 2單板計(jì)算機(jī)試用體驗(yàn)】3. 使用vf2搭建電子相冊(cè)或戶外廣告屏【VisionFive 2單板計(jì)算機(jī)試用體驗(yàn)】4. vf2
    發(fā)表于 09-04 09:08

    易控智駕榮獲計(jì)算機(jī)視覺頂會(huì)CVPR 2025認(rèn)可

    近日,2025年國際計(jì)算機(jī)視覺與模式識(shí)別頂級(jí)會(huì)議(IEEE/CVF Conference on Computer Vision and Pattern Recognition,CVPR 2025)在美國田納西州納什維爾召開。
    的頭像 發(fā)表于 07-29 16:54 ?1286次閱讀

    工業(yè)計(jì)算機(jī)的重要性

    工業(yè)計(jì)算機(jī)對(duì)某些行業(yè)至關(guān)重要。我們將在下面詳細(xì)解釋這些行業(yè)中的工業(yè)計(jì)算機(jī)應(yīng)用。1.制造與工業(yè)自動(dòng)化工業(yè)級(jí)計(jì)算機(jī)非常適合制造工廠,特別是那些想要自動(dòng)化裝配過程的工廠。在這樣的環(huán)境中,工業(yè)計(jì)算機(jī)
    的頭像 發(fā)表于 07-28 16:07 ?638次閱讀
    工業(yè)<b class='flag-5'>計(jì)算機(jī)</b>的重要性

    自動(dòng)化計(jì)算機(jī)經(jīng)過加固后有什么好處?

    讓我們討論一下部署堅(jiān)固的自動(dòng)化計(jì)算機(jī)的一些好處。1.溫度范圍寬自動(dòng)化計(jì)算機(jī)經(jīng)過工程設(shè)計(jì),配備了支持寬溫度范圍的組件,使自動(dòng)化計(jì)算解決方案能夠在各種不同的極端環(huán)境中運(yùn)行。自動(dòng)化計(jì)算機(jī)能夠
    的頭像 發(fā)表于 07-21 16:44 ?686次閱讀
    自動(dòng)化<b class='flag-5'>計(jì)算機(jī)</b>經(jīng)過加固后有什么好處?

    自動(dòng)化計(jì)算機(jī)的功能與用途

    工業(yè)自動(dòng)化是指利用自動(dòng)化計(jì)算機(jī)來控制工業(yè)環(huán)境中的流程、機(jī)器人和機(jī)械,以制造產(chǎn)品或其部件。工業(yè)自動(dòng)化的目的是提高生產(chǎn)率、增加靈活性,并提升制造過程的質(zhì)量。工業(yè)自動(dòng)化在汽車制造中體現(xiàn)得最為明顯,其中許多
    的頭像 發(fā)表于 07-15 16:32 ?799次閱讀
    自動(dòng)化<b class='flag-5'>計(jì)算機(jī)</b>的功能與用途

    工業(yè)計(jì)算機(jī)與商用計(jì)算機(jī)的區(qū)別有哪些

    工業(yè)計(jì)算機(jī)是一種專為工廠和工業(yè)環(huán)境設(shè)計(jì)的計(jì)算系統(tǒng),具有高可靠性和穩(wěn)定性,能夠應(yīng)對(duì)惡劣環(huán)境下的自動(dòng)化、制造和機(jī)器人操作。其特點(diǎn)包括無風(fēng)扇散熱技術(shù)、無電纜連接和防塵防水設(shè)計(jì),使其在各種工業(yè)自動(dòng)化場景中
    的頭像 發(fā)表于 07-10 16:36 ?822次閱讀
    工業(yè)<b class='flag-5'>計(jì)算機(jī)</b>與商用<b class='flag-5'>計(jì)算機(jī)</b>的區(qū)別有哪些

    工業(yè)計(jì)算機(jī)如何設(shè)計(jì)用于沖擊和振動(dòng)

    工業(yè)計(jì)算機(jī)是為挑戰(zhàn)消費(fèi)級(jí)系統(tǒng)耐用性的環(huán)境而構(gòu)建的。在制造業(yè)、運(yùn)輸業(yè)、國防和采礦業(yè)等領(lǐng)域,計(jì)算機(jī)面臨著持續(xù)的沖擊、振動(dòng)和其他物理壓力。設(shè)計(jì)這些系統(tǒng)以在這種條件下保持可靠需要卓越的工程和創(chuàng)新技術(shù)。本文
    的頭像 發(fā)表于 05-19 15:27 ?538次閱讀
    工業(yè)<b class='flag-5'>計(jì)算機(jī)</b>如何設(shè)計(jì)用于沖擊和振動(dòng)

    利用邊緣計(jì)算和工業(yè)計(jì)算機(jī)實(shí)現(xiàn)智能視頻分析

    IVA的好處、實(shí)際部署應(yīng)用程序以及工業(yè)計(jì)算機(jī)如何實(shí)現(xiàn)這些解決方案。一、什么是智能視頻分析(IVA)?智能視頻分析(IVA)集成了復(fù)雜的計(jì)算機(jī)視覺,通常與卷積神經(jīng)網(wǎng)
    的頭像 發(fā)表于 05-16 14:37 ?903次閱讀
    利用邊緣<b class='flag-5'>計(jì)算</b>和工業(yè)<b class='flag-5'>計(jì)算機(jī)</b>實(shí)現(xiàn)智能視頻分析

    一文帶你了解工業(yè)計(jì)算機(jī)尺寸

    工業(yè)計(jì)算機(jī)是現(xiàn)代自動(dòng)化、人工智能(AI)和邊緣計(jì)算的支柱。這些堅(jiān)固耐用的系統(tǒng)旨在承受惡劣的環(huán)境,同時(shí)為關(guān)鍵應(yīng)用提供可靠的性能。然而,由于有這么多可用的外形尺寸,為您的工業(yè)計(jì)算機(jī)選擇合適的尺寸可能是
    的頭像 發(fā)表于 04-24 13:35 ?1109次閱讀
    一文帶你了解工業(yè)<b class='flag-5'>計(jì)算機(jī)</b>尺寸

    計(jì)算機(jī)網(wǎng)絡(luò)入門指南

    計(jì)算機(jī)網(wǎng)絡(luò)是指將地理位置不同且具有獨(dú)立功能的多臺(tái)計(jì)算機(jī)及其外部設(shè)備,通過通信線路連接起來,在網(wǎng)絡(luò)操作系統(tǒng)、網(wǎng)絡(luò)管理軟件及網(wǎng)絡(luò)通信協(xié)議的管理和協(xié)調(diào)下,實(shí)現(xiàn)資源共享和信息傳遞的計(jì)算機(jī)系統(tǒng)。
    的頭像 發(fā)表于 04-22 14:29 ?2357次閱讀
    <b class='flag-5'>計(jì)算機(jī)</b>網(wǎng)絡(luò)入門指南