Skip to content

Instantly share code, notes, and snippets.

View pliablepixels's full-sized avatar
💭
A clear conscience is usually the sign of a bad memory

Pliable Pixels pliablepixels

💭
A clear conscience is usually the sign of a bad memory
View GitHub Profile
{
"ios": {
"debug": {
"codeSignIdentity": "iPhone Developer",
"developmentTeam": "my team id",
"packageType": "development",
"automaticProvisioning": true,
"buildFlag": [
"EMBEDDED_CONTENT_CONTAINS_SWIFT = YES",
"ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO",
# This is now started unconditionally
runCommand( "zmdc.pl start zmeventnotification.pl" );
runCommand( "zmdc.pl start zmfilter.pl" );
@pliablepixels
pliablepixels / zoneminder-ssl.conf
Last active June 21, 2018 15:52
New ZM 1.3.44+ Apache config - all in one file for Ubuntu 16+
<IfModule mod_ssl.c>
<VirtualHost *:80>
# Replace these two lines with your server name and contact
ServerName myserver.domain
ServerAdmin webmaster@localhost
SSLEngine on
# Replace these lines with your SSL Certs
SSLCertificateFile /etc/letsencrypt/live/myserver.domain/fullchain.pem
Options faceOptions;
//faceOptions.set( "method", "hog" );
//faceOptions.set( "dataFile", "shape_predictor_68_face_landmarks.dat" );
faceOptions.set( "method", "cnn" );
faceOptions.set( "dataFile", "mmod_human_face_detector.dat" );
faceOptions.set( "markup", FaceDetector::OZ_FACE_MARKUP_ALL );
FaceDetector detector( "detector", faceOptions );
detector.registerProvider( r );
app.addThread( &detector );
// create a dummy frame provider with the same dimensions as the original feed
Options options;
options.add( "width", IMG_W );
options.add( "height", IMG_H );
options.add( "pixelFormat", (PixelFormat)AV_PIX_FMT_RGB24 );
DummyInput dummyInput( "dummy", options );
app.addThread( &dummyInput );
// Instantiate a fallback class that looks for frames from "detector"
// and if none are received in 2 seconds, switches to dummy frames
HttpController httpController( "http", 9292 );
httpController.addStream( "live",*input );
httpController.addStream( "detect", *detector );
// trigger motion if 1% of the frame is covered with motion
Options mOptions;
mOptions.add( "zone_default_alarmPercent_min", 1);
MotionDetector *motion = new MotionDetector(idString,mOptions);
motion->registerProvider(*limiter);
app.addThread(motion);
// Connect input of ShapeDetection to output of motion detection
ShapeDetector *detector = new ShapeDetector( idString,"person.svm",ShapeDetector::OZ_SHAPE_MARKUP_OUTLINE );
detector->registerProvider( *motion, FeedLink(FEED_QUEUED, alarmFramesOnly) );
#include <base/ozApp.h>
#include <base/ozListener.h>
#include <providers/ozMemoryInputV1.h>
#include <processors/ozRateLimiter.h>
#include <processors/ozShapeDetector.h>
#include <processors/ozFaceDetector.h>
#include <processors/ozAVFilter.h>
//#include processors/ozRecognizer.h>
#include <consumers/ozVideoRecorder.h>
#include <consumers/ozMemoryTriggerV1.h>
nvrcam.fileOut = new LocalFileOutput( "file-"+name, "/tmp" );
nvrcam.rate = new RateLimiter( "rate-"+name,0.5,true );
nvrcam.rate->registerProvider(*(nvrcam.cam) );
nvrcam.fileOut->registerProvider(*(nvrcam.rate) );
class nvrCameras
{
public:
NetworkAVInput *cam;
Detector *motion; // keeping two detectors as they can run in parallel
Detector *face;
Recorder *event; // will either store video or images
RateLimiter *rate; // will modify rate of output
LocalFileOutput *fileOut; // will store images to disk, and we'll feed in rate as its input, not cam