#!/usr/bin/env python3 # -*- coding: UTF-8 -*- import os, sys import time import io import urllib3 from PIL import Image, ImageFilter, ImageMath import numpy as np CAM_URL="192.168.178.36/snapshot.cgi" CAM_AUTH="camuser:pwd4Cam" class IP_Cam: def __init__(self): self.http=urllib3.PoolManager() self.headers=urllib3.util.make_headers(basic_auth=CAM_AUTH) def getImage(self): r=self.http.request('GET', CAM_URL, headers=self.headers) image=Image.open(io.BytesIO(r.data)) return(image) # ########################################################### # Bild nach Graustufen def transformImage(img): im=img.convert('L') #.filter(ImageFilter.EMBOSS) #.filter(ImageFilter.FIND_EDGES) return(im) # ########################################################### # Ersetzt in dem NumPy-Array "arr" alle Werte mit 0, die # entweder kleiner als "val" oder größer als 256-"val" sind. def cutValues(arr, val): arr2=1*arr # deep-copy erzeugen arr2[arr2>(256-val)]=0 arr2[arr2<val]=0 return(arr2) for y in range(arr.shape[0]): # zu langsame Version for x in range(arr.shape[1]): if arr[y][x]<val or arr[y][x]>(256-val): arr[y][x]=0 return(arr) # ########################################################### # Main if __name__=="__main__": cam=IP_Cam() img1=cam.getImage() # Bild holen img1=transformImage(img1) # nach Graustufen img1.save("live1.jpg") imga1=np.asarray(img1) # in array wandeln while True: time.sleep(0.5) img2=cam.getImage() img2=transformImage(img2) img2.save("live2.jpg") imga2=np.asarray(img2) imga3=imga1-imga2 # Bild_alt - Bild_neu s3=np.sum(imga3) img3=Image.fromarray(imga3) # Differenz-Bild bauen img3.save("live3.jpg") imga4=cutValues(imga3, 32) # Differenz-Bild "glätten" s4=np.sum(imga4) img4=Image.fromarray(imga4) img4.save("live4.jpg") print(s3) print(s4) if s4>500000: fn=time.strftime("%Y_%m_%d_%H_%M_%S") img1.save(fn+"-1.jpg") img2.save(fn+"-2.jpg") img3.save(fn+"-3.jpg") img4.save(fn+"-4.jpg") print("saved") imga1=imga2 img1=img2 print() |
Wie im Script zu erkennen ist, habe ich den Wert 500.000 verwendet, um eine Bewegung im Bild detektieren zu lassen.
dede@i5:~/bastelein/ipcam> ./tst4.py
30976511
296802
31350889
286517
31838555
289726
31357339
292987
32864985
298362
Und speichert alle vier Bilder mit einem Namen gemäß Datum+Uhrzeit.
31697963
639452
saved
Das Vorher-Bild spare ich hier mal ein, denn es ist ja praktisch das Nachher-Bild von eben.
34085813
2104499
saved