got basic motion detection working

This commit is contained in:
BroodjeAap 2020-07-06 18:42:38 +00:00
parent 9b93c889eb
commit 7a8a7dc631

34
main.go
View file

@ -3,6 +3,7 @@ package main
import (
"crypto/sha256"
"encoding/base64"
"image"
"io/ioutil"
"log"
"net/http"
@ -55,14 +56,39 @@ func stream(w http.ResponseWriter, r *http.Request) {
// TODO async for this?
saveStreamInstant(URL, img)
mat, err := gocv.IMDecode(img, gocv.IMReadColor)
h := sha256.New()
h.Write([]byte(URL))
streamDir := base64.URLEncoding.EncodeToString(h.Sum(nil))
streamStoreDir := filepath.Join(".", "streams", string(streamDir))
previousStreamInstantPath := filepath.Join(streamStoreDir, "previous.jpg")
_, err = os.Stat(previousStreamInstantPath)
previousExists := !os.IsNotExist(err)
if previousExists {
newMat := gocv.NewMat()
gocv.ConvertScaleAbs(mat, &newMat, 2.0, 60)
mat, err := gocv.IMDecode(img, gocv.IMReadColor)
if err != nil {
log.Fatal("Could not IMDecode img")
}
gocvIMG, err := gocv.IMEncode(".jpg", newMat)
gocv.CvtColor(mat, &newMat, gocv.ColorBGRToGray)
gocv.GaussianBlur(newMat, &newMat, image.Point{X: 21, Y: 21}, 0, 0, gocv.BorderReflect)
w.Write(gocvIMG)
previous := gocv.IMRead(previousStreamInstantPath, gocv.IMReadColor)
gocv.CvtColor(previous, &previous, gocv.ColorBGRToGray)
gocv.GaussianBlur(previous, &previous, image.Point{X: 21, Y: 21}, 0, 0, gocv.BorderReflect)
gocv.AbsDiff(previous, newMat, &newMat)
gocv.Threshold(newMat, &newMat, 25, 255, gocv.ThresholdBinary)
img, err = gocv.IMEncode(".jpg", newMat)
}
w.Write(img)
}
func saveStreamInstant(URL string, img []byte) {