Wenn Sie sehen möchten, wie die Dinge, die Sie diesmal machen, funktionieren, lesen Sie bitte hier (Youtube-Video).
security_cam.py
import cv2
from datetime import datetime
import requests
import time
token = 'Your Token'
cap = cv2.VideoCapture(0)
lastframe = None
def send_msg():
url = 'https://notify-api.line.me/api/notify'
headers = {'Authorization':'Bearer '+token}
data = {"message":"Someone in your room."}
image = '/home/igor-bond/image.jpg'
file = {'imageFile': open(image, 'rb')}
r = requests.post(url, headers=headers, params=data, files=file,)
while cap.isOpened():
ret,frame = cap.read()
if ret == True:
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
if lastframe is None:
lastframe = gray.astype("float")
cv2.accumulateWeighted(gray,lastframe,0.6)
frame_diff = cv2.absdiff(gray,cv2.convertScaleAbs(lastframe))
thresh = cv2.threshold(frame_diff,3,255,cv2.THRESH_BINARY)[1]
contours,hierarchy = cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
if cv2.contourArea(c) > 30:
time.sleep(0.2)
now = datetime.now()
img = cv2.resize(frame,(int(frame.shape[1]*0.5),int(frame.shape[0]*0.5)))
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,f'{now}',(100,350),font,1,(0,0,255),4,cv2.LINE_AA)
cv2.imwrite('/home/igor-bond/image.jpg',img)
send_msg()
lastframe = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY).astype("float")
break
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
cap.release()
Die erste Funktion ist diejenige, die ein Bild an die Zeile sendet, die ich zuvor eingeführt habe, daher werde ich es hier weglassen. Es wird auch in hier (Youtube-Video) vorgestellt. Dieses Mal wird dann die Differenz zwischen den Bildern berechnet, und wenn der Pixelwert 3 oder mehr beträgt, wird er auf 255 gesetzt und die Kontur wird dort berechnet. Dies soll sehr kleine Änderungen verhindern, wenn sie erkannt werden. Fügen Sie dann die Zeit unten rechts hinzu, damit sie wie eine Überwachungskamera aussieht, und speichern Sie sie als Bild. Der Grund, warum ich den Namen des Bildes nicht geändert habe, ist, dass sich beim Ändern viele Bilder ansammeln und dieses Mal die Funktion zum Senden an die Zeile unmittelbar nach dem Speichern aktivieren, sodass es auch dann kein Problem gibt, wenn ich dies tue. Wiederholen Sie dies abschließend mit dem damaligen Frame als letztem.
Wie diese Überwachungskamera hergestellt wird, erfahren Sie auch in Youtube. Schauen Sie also bitte nach, wenn es Ihnen gefällt. Wenn Sie Fragen oder Ratschläge haben, kommentieren Sie bitte.