重磅干貨,,第一時間送達 最近,,閉路電視安全系統(tǒng)運行著多種算法來確保安全,,例如面部識別,,物體檢測,,盜竊檢測,,火災警報等,。我們在運動檢測的基礎上實現(xiàn)了許多算法,因為在空閑幀上運行所有這些進程沒有任何意義,。在本文中,,我們將討論實現(xiàn)基于運動檢測的視頻保存,。 OpenCV:pip install opencv-python # Converting the image to GrayScale gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gray,(21,21),0) # Saving the First Frame if first_frame is None: first_frame = gray continue 然后,我們將后續(xù)幀與保存的第一幀進行比較,,以觀察差異,。計算完差異后,我們可以應用閾值將其轉換為黑白圖像,。 #Calculates difference to detect motion delta_frame = cv2.absdiff(first_frame, gray) #Applies Threshold and converts it to black & white image thresh_delta = cv2.threshold(delta_frame, 30, 255, cv2.THRESH_BINARY)[1] thresh_delta = cv2.dilate(thresh_delta, None, iterations=0) #finding contours on the white portion(made by the threshold) cnts,_ = cv2.findContours(thresh_delta.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 最后一個命令在該黑白圖像中查找輪廓,,并給出用于創(chuàng)建邊界框的坐標,如上面的視頻所示,。使用運動檢測的好處:
給定的因素導致輪廓檢測不理想,,運動檢測的幼稚方法會在執(zhí)行開始時為所有比較保存第一幀。不好有幾個原因:
解決方案:在沒有運動的情況下,,可以通過定期定期更新保存的幀來輕松解決此問題,。 # Number of idle frames to pass before changing the saved frame # for further comparisions FRAMES_TO_PERSIST = 1000 然后將其放在while循環(huán)中: #increment delay counter for every idle frame delay_counter += 1 #Update the saved first frame if delay_counter > FRAMES_TO_PERSIST: delay_counter = 0 first_frame = next_frame 當檢測到運動時,將delay_counter設置為零,,微小的物體(例如蜜蜂和昆蟲)和通常不必要的輕微不必要的運動被存儲起來,。解決方案:如片段所示,我們應該在該區(qū)域設置一個閾值,。 # Minimum boxed area(in pixels) for a detected motion to count as actual motion # Use to filter out noise or small objects MIN_SIZE_FOR_MOVEMENT = 2000 然后在while循環(huán)中放置一個if語句: #Checks if the area is big enough to be considered as motion. if cv2.contourArea(c) > MIN_SIZE_FOR_MOVEMENT: #Your code 所有這些都是針對同一視頻(30-fps,,1280x720)計算的。 Raspberry Pi 2:
Jetson Nano:
個人電腦 :
潛在應用:智能鈴:如果有人站在您家門口,,它將自動觸發(fā)鈴聲,,并向您發(fā)送提示。 潛在威脅警報:如果有人站在您家門前的時間長于正常時間,,它將提醒您,。 在本文中,,我們實現(xiàn)了一個非常基本但重要的算法,,可用于有效運行所有其他算法,。可以對該運動檢測算法進行更多修改,,以使其更加健壯,。 |
|