smart-sec-cam
smart-sec-cam copied to clipboard
A privacy-focused, intelligent security camera system.
Self-Hosted Home Security Camera System
A privacy-focused, intelligent security camera system.
Features:
- Multi-camera support w/ minimal configuration. Supports USB cameras and the Raspberry Pi camera module.
- Motion detection that automatically saves videos and lets you view them in the web app.
- Encrypted in transit, both from the cameras to the server and the server to your browser.
- Integrated authentication
- Self-Hosted
- Free and Open Source (GPLv3)
Example screenshots
Multiple live video feeds on a single UI:

Replay of recorded videos triggered by motion detection:

Setup
Sec-cam-server is designed to be deployed flexibly. There are 2 core components:
Camera:
A device capable of capturing video and streaming to the server. Requirements:
- Must be able to run Python
- Must have a device capable of capturing video (e.g. a USB camera, webcam, or raspberry pi camera module)
- Must be able to communicate to the server over a network. During setup, you will point the camera at the server's hostname or IP address.
Server:
The server components aggregates feeds from the cameras, performs motion detection, and makes video available in a web UI via an API. The server can be a standalone host, or can run on one of your cameras (e.g. a Raspberry Pi). Requirements:
- Must be able to run Docker.
- Must be accessible to your camera(s) over a network.
Example deployment configurations:
Example 1: A standalone server, with the hostname sec-cam-server.local, and 2 cameras, with hostnames camera1.local and
camera2.local.
- On
sec-cam-server.local, follow the instructions in "Setting up the server". Replace<server-hostname:server-port>withsec-cam-server.local:8443. - On each camera, follow the instructions in "Adding a camera". In Step 3,
run.shshould be updated to contain--server_url sec-cam-server.local. - The web UI with camera feeds will be available at
https://sec-cam-server.local:8443
Example 2: 2 cameras with hostnames camera1.local and camera2.local, with the "server" running camera1.local
- On
camera1.local, follow the steps to install the server. - On
camera1.local, follow the steps to install the in "Adding a camera". In Step 3,run.shshould be updated to contain--server_url localhost. - On
camera2.local, follow the steps to install the in "Adding a camera". In Step 3,run.shshould be updated to contain--server_url camera1.local. - The web UI with camera feeds will be available at
https://camera1.local:8443
Setting up the server
Docker:
- Install Docker following the instructions on their website.
- Clone this repository
- Generate SSL certificates:
./create-certs.sh. Alternatively, you may place your own certs in thecertsdir - Build and run the docker containers:
API_URL=<server-hostname:server-port> docker-compose up -d --build. For example, if the server was running on the hostsec-cam-serverand port8443(the default), you should useAPI_URL=sec-cam-server:8443. - You should now be able to view the UI at
https://<server-hostname>:8443. - Until a user is created, you will be automatically redirected to
Configuration:
Adding multiple users:
By default, user registration will be disabled once an initial user is created. To enable registration to add
additional users, update the environment variable ENABLE_REGISTRATION under the server service:
- ENABLE_REGISTRATION=1
When you're done adding users, you should re-set this value to 0 and restart the server.
Adding a camera
Installation:
NOTE: These instructions assume you are deploying to a Debian-based OS.
- Install the
python3-opencvpackage and dependencies:sudo apt-get install python3-opencv libatlas-base-dev - Clone this repository
- Install the package:
cd backend && python3 -m pip install .[streamer]. If you are using the Raspberry Pi camera module, runcd backend && python3 -m pip install .[streamer,picam]. - Update
--server_urlinrun.shto point at the host you deployed the server to. - In the Web UI, you should see live video from that camera.