99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

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

454398 ? 來(lái)源: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ī)你幾乎看不到水,但仍然可以看到貓跑來(lái)掩護(hù)

第2步:系統(tǒng)

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

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

3,Cat跑步封面

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

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

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

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

代碼工作原理概述

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

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

3,如果貓大小的變化持續(xù)超過(guò)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í),攝像頭停止檢測(cè)并記錄視頻

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

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

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

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

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

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

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

5,我可能錯(cuò)過(guò)了一些明顯的東西,浪費(fèi)了我的時(shí)間來(lái)設(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)

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    AR和VR中的計(jì)算機(jī)視覺(jué)

    ):計(jì)算機(jī)視覺(jué)引領(lǐng)混合現(xiàn)實(shí)體驗(yàn)增強(qiáng)現(xiàn)實(shí)(AR)和虛擬現(xiàn)實(shí)(VR)正在徹底改變我們與外部世界的互動(dòng)方式。即便是在引人入勝的沉浸式
    的頭像 發(fā)表于 02-08 14:29 ?1587次閱讀
    AR和VR中的<b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺(jué)</b>

    量子計(jì)算機(jī)與普通計(jì)算機(jī)工作原理的區(qū)別

    ? 本文介紹了量子計(jì)算機(jī)與普通計(jì)算機(jī)工作原理的區(qū)別。 量子計(jì)算是一個(gè)新興的研究領(lǐng)域,科學(xué)家們利用量子力學(xué),制造出具有革命性能力的計(jì)算機(jī)。雖然現(xiàn)在的量子
    的頭像 發(fā)表于 11-24 11:00 ?1510次閱讀
    量子<b class='flag-5'>計(jì)算機(jī)</b>與普通<b class='flag-5'>計(jì)算機(jī)</b>工作原理的區(qū)別

    【小白入門(mén)必看】一文讀懂深度學(xué)習(xí)計(jì)算機(jī)視覺(jué)技術(shù)及學(xué)習(xí)路線

    一、什么是計(jì)算機(jī)視覺(jué)?計(jì)算機(jī)視覺(jué),其實(shí)就是教機(jī)器怎么像我們?nèi)艘粯?,用攝像頭看看周?chē)氖澜纾缓罄斫馑?。比如說(shuō),它能認(rèn)出這是個(gè)蘋(píng)果,或者那邊有輛車(chē)。除此之外,還能把拍到的照片或者視頻轉(zhuǎn)換
    的頭像 發(fā)表于 10-31 17:00 ?1251次閱讀
    【小白入門(mén)必看】一文讀懂深度學(xué)習(xí)<b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺(jué)</b>技術(shù)及學(xué)習(xí)路線

    計(jì)算機(jī)接口位于什么之間

    地傳輸。計(jì)算機(jī)接口可以分為內(nèi)部接口和外部接口兩大類(lèi)。 內(nèi)部接口位于計(jì)算機(jī)內(nèi)部各個(gè)部件之間,如CPU、內(nèi)存、主板、硬盤(pán)、顯卡等。外部接口則位于計(jì)算機(jī)與外部設(shè)備之間,如鍵盤(pán)、鼠標(biāo)、顯示、
    的頭像 發(fā)表于 10-14 14:02 ?1326次閱讀

    計(jì)算機(jī)存儲(chǔ)系統(tǒng)的構(gòu)成

    計(jì)算機(jī)存儲(chǔ)系統(tǒng)是計(jì)算機(jī)中用于存放程序和數(shù)據(jù)的設(shè)備或部件的集合,它構(gòu)成了計(jì)算機(jī)信息處理的基礎(chǔ)。一個(gè)完整的計(jì)算機(jī)存儲(chǔ)系統(tǒng)通常包括多個(gè)層次的存儲(chǔ)
    的頭像 發(fā)表于 09-26 15:25 ?2548次閱讀

    計(jì)算機(jī)存儲(chǔ)的分類(lèi)及其區(qū)別

    計(jì)算機(jī)存儲(chǔ)計(jì)算機(jī)系統(tǒng)中不可或缺的重要部分,用于存放程序和數(shù)據(jù)。隨著科技的進(jìn)步,存儲(chǔ)的種類(lèi)越來(lái)越多,功能和性能也日益豐富。一般來(lái)說(shuō),計(jì)算機(jī)
    的頭像 發(fā)表于 09-05 10:40 ?4026次閱讀

    簡(jiǎn)述計(jì)算機(jī)總線的分類(lèi)

    計(jì)算機(jī)總線作為計(jì)算機(jī)系統(tǒng)中連接各個(gè)功能部件的公共通信干線,其結(jié)構(gòu)和分類(lèi)對(duì)于理解計(jì)算機(jī)硬件系統(tǒng)的工作原理至關(guān)重要。以下是對(duì)計(jì)算機(jī)總線結(jié)構(gòu)和分類(lèi)的詳細(xì)闡述,內(nèi)容將涵蓋總線的基本概念、內(nèi)部結(jié)
    的頭像 發(fā)表于 08-26 16:23 ?5195次閱讀

    晶體管計(jì)算機(jī)和電子管計(jì)算機(jī)有什么區(qū)別

    晶體管計(jì)算機(jī)和電子管計(jì)算機(jī)作為計(jì)算機(jī)發(fā)展史上的兩個(gè)重要階段,它們?cè)诙鄠€(gè)方面存在顯著的區(qū)別。以下是對(duì)這兩類(lèi)計(jì)算機(jī)在硬件、性能、應(yīng)用以及技術(shù)發(fā)展等方面區(qū)別的詳細(xì)闡述。
    的頭像 發(fā)表于 08-23 15:28 ?3629次閱讀

    微處理如何控制計(jì)算機(jī)系統(tǒng)

    微處理,作為計(jì)算機(jī)系統(tǒng)的核心部件,承擔(dān)著控制整個(gè)計(jì)算機(jī)系統(tǒng)運(yùn)行的重要任務(wù)。它不僅是計(jì)算機(jī)的運(yùn)算中心,還是控制中心,負(fù)責(zé)執(zhí)行程序指令、處理數(shù)據(jù)以及協(xié)調(diào)
    的頭像 發(fā)表于 08-22 14:21 ?988次閱讀

    計(jì)算機(jī)視覺(jué)有哪些優(yōu)缺點(diǎn)

    計(jì)算機(jī)視覺(jué)作為人工智能領(lǐng)域的一個(gè)重要分支,旨在使計(jì)算機(jī)能夠像人類(lèi)一樣理解和解釋圖像和視頻中的信息。這一技術(shù)的發(fā)展不僅推動(dòng)了多個(gè)行業(yè)的變革,也帶來(lái)了諸多優(yōu)勢(shì),但同時(shí)也伴隨著一些挑戰(zhàn)和局限性。以下是對(duì)
    的頭像 發(fā)表于 08-14 09:49 ?2061次閱讀

    圖像處理計(jì)算機(jī)視覺(jué)有什么關(guān)系和區(qū)別

    圖像處理計(jì)算機(jī)視覺(jué)是兩個(gè)在圖像處理領(lǐng)域緊密相連但又有所區(qū)別的概念。它們之間的關(guān)系和區(qū)別可以從多個(gè)維度進(jìn)行探討。
    的頭像 發(fā)表于 08-14 09:36 ?1050次閱讀

    計(jì)算機(jī)視覺(jué)中的圖像融合

    在許多計(jì)算機(jī)視覺(jué)應(yīng)用中(例如機(jī)器人運(yùn)動(dòng)和醫(yī)學(xué)成像),需要將多個(gè)圖像的相關(guān)信息整合到單一圖像中。這種圖像融合可以提供更高的可靠性、準(zhǔn)確性和數(shù)據(jù)質(zhì)量。多視圖融合可以提高圖像分辨率,并恢復(fù)場(chǎng)景的三維表示
    的頭像 發(fā)表于 08-01 08:28 ?1148次閱讀
    <b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺(jué)</b>中的圖像融合

    地平線科研論文入選國(guó)際計(jì)算機(jī)視覺(jué)頂會(huì)ECCV 2024

    近日,地平線兩篇論文入選國(guó)際計(jì)算機(jī)視覺(jué)頂會(huì)ECCV 2024,自動(dòng)駕駛算法技術(shù)再有新突破。
    的頭像 發(fā)表于 07-27 11:10 ?1470次閱讀
    地平線科研論文入選國(guó)際<b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺(jué)</b>頂會(huì)ECCV 2024

    DRAM在計(jì)算機(jī)中的應(yīng)用

    DRAM(Dynamic Random Access Memory,動(dòng)態(tài)隨機(jī)存取存儲(chǔ))在計(jì)算機(jī)系統(tǒng)中扮演著至關(guān)重要的角色。它是一種半導(dǎo)體存儲(chǔ),用于存儲(chǔ)和快速訪問(wèn)數(shù)據(jù),是計(jì)算機(jī)主內(nèi)存
    的頭像 發(fā)表于 07-24 17:04 ?3029次閱讀

    計(jì)算機(jī)視覺(jué)技術(shù)的AI算法模型

    計(jì)算機(jī)視覺(jué)技術(shù)作為人工智能領(lǐng)域的一個(gè)重要分支,旨在使計(jì)算機(jī)能夠像人類(lèi)一樣理解和解釋圖像及視頻中的信息。為了實(shí)現(xiàn)這一目標(biāo),計(jì)算機(jī)視覺(jué)技術(shù)依賴(lài)于
    的頭像 發(fā)表于 07-24 12:46 ?1823次閱讀