Self-hosted, local only NVR and AI Computer Vision software. With features such as object detection, motion detection, face recognition and more, it gives you the power to keep an eye on your home, office or any other place you want to monitor.
MIT License
edgetpu
crashing (https://github.com/roflcoopter/viseron/discussions/721#discussioncomment-9935017)For discussions, please use this discussion: https://github.com/roflcoopter/viseron/discussions/721
Full Changelog: https://github.com/roflcoopter/viseron/compare/v3.0.0b8...v3.0.0b9
Published by roflcoopter 4 months ago
trigger_recorder: true
at the same time without using scan_on_motion_only: true
or recorder_keepalive
For discussions, please use this discussion: https://github.com/roflcoopter/viseron/discussions/721
Full Changelog: https://github.com/roflcoopter/viseron/compare/v3.0.0b7...v3.0.0b8
Published by roflcoopter 4 months ago
check_interval
for each storage
tier to control the minimum time between moving/deleting filesFor discussions, please use this discussion: #721
Full Changelog: https://github.com/roflcoopter/viseron/compare/v3.0.0b6...v3.0.0b7
Published by roflcoopter 5 months ago
Full Changelog: https://github.com/roflcoopter/viseron/compare/v3.0.0b5...v3.0.0b6
Published by roflcoopter 5 months ago
Full Changelog: https://github.com/roflcoopter/viseron/compare/v3.0.0b4...v3.0.0b5
Published by roflcoopter 6 months ago
create_event_clip
Full Changelog: https://github.com/roflcoopter/viseron/compare/v3.0.0b3...v3.0.0b4
For discussions, please use this discussion: #721
Published by roflcoopter 7 months ago
Small version bump to fix failing Azure builds
Published by roflcoopter 7 months ago
Various fixes for the v3.0.0b1 release
Fixes:
EXTINF: null
in the DBPublished by roflcoopter 7 months ago
This is a pretty massive release that brings a number of new features and improvements.
The main feature developed here is the option of having 24/7 recordings.
With this comes a new component, storage
which will allow you to retain data based on time (like it is today) and based one consumed space.
This allows you to use your storage to its maximum.
Another feature of the storage
component are tiers
.
They allow you to store recordings on multiple media.
Say you have one 256GB SSD and a 1TB HDD, you can keep the most recent recordings on the SSD for fast access while offloading the older recordings to the HDD for archiving.
To easily view 24/7 recordings, a new Timeline view is available.
It currently shows continuous recordings, motion events, detected objects.
Face recognition and License plate recognition will be available soon as well.
The Events view is a more concise view than the Timeline.
Here you can scroll through and view all the Events.
Currently it shows only recordings but more events like face recognition etc is in the works.
You cannot view 24/7 recordings here.
create_event_clip
mp4
file extension is now forced and extension
is removedsegments_folder
is removed in favor of tier pathsfilename_pattern
in thumbnail
is removed, stored as ID of the recordingSee the #716 v3.0.0 PR for tasks left to do before final release is ready.
Published by roflcoopter about 1 year ago
Fix Failed to load component gstreamer: No module named 'gi'
for the jetson-nano
container.
Closes #672
Published by roflcoopter about 1 year ago
This is a smaller release with a few new features and fixes.
I am working hard on 24/7 recordings that I hade planned to release together with these changes, but its taking a bit longer than i had anticipated.
If you are interested in that, sit tight for the next release! You can follow my progress here: #619
A new component which leverages CodeProject AI's computer vision capabilities is included in this release.
As of now it supports object detection, face recognition as well as a new post processor, Automatic License Plate Recognition!
A new post processor is now available for ALPR.
Currently only CodeProject AI supports it, but in the future more variants may be supported.
I have started to work on a better Developer Experience together with some proper Developer documentation.
It is still in early stages and the inner workings of Viseron are not explained yet, but it will improve over time.
The biggest addition to the Developer Experience this release is the support for VSCode Devcontainers.
This makes it significantly easier to get going with development, as all you have to do is spin up the container!
I have been using this myself for some time now and it has accelerated my work significantly
The new Developer docs can be found here : https://viseron.netlify.app/docs/developers
There are also a small number of changes and improvements.
still_image
still_image
you can specify refresh_interval
which makes the UI refresh more often. Default is 10 seconds.mask
helper has been added to the docs: https://viseron.netlify.app/components-explorer/components/mog2#maskffmpeg
has a new config option raw_command
that makes it possible to specify an FFmpeg command that will be used directly.Full Changelog: https://github.com/roflcoopter/viseron/compare/v2.2.0...v2.3.0
Published by roflcoopter over 1 year ago
This release contains a lot of tweaks and fixes as well as some cool new features!
The biggest change in this release is the addition of authentication for the frontend/API.
It is disabled by default but can be enabled by adding auth
to your webserver
config.
webserver:
auth:
When you first enable authentication you will be greeted with an onboarding page which allows you to create your first user.
At the moment you can only create this first user. Complete user handling is planned for the next release.
Enabling authentication protects all resources, including streams and videos, so if you are consuming these directly through Viserons API from another tool you will have some issues. I will make sure to properly implement and document a good way of accessing the API and resources from third-party tools even with auth enabled in a future release.
Things that needs to be added before i consider this feature done:
Cameras that are unavailable during startup will now properly retry setup with automatic back-off.
Any camera that cant be successfully setup will be displayed in the frontend, displaying the error:
The red border represents failed cameras, and the orange border represents cameras that are actively retrying setup.
A bonus feature here is that the recordings for the cameras are still available for viewing in the frontend, neat right?!
gstreamer
aac
by default if the original codec (pcm_alaw
, pcm_mulaw
) is not supported in .mp4
files..mkv
files instead but that proved to be confusing.dlib
and sklearn
is installed which should solve a lot of issues with this component on the jetson-nano
and aarch64
imageFull Changelog: https://github.com/roflcoopter/viseron/compare/v2.1.1...v2.2.0
Published by roflcoopter over 1 year ago
This release contains a lot of tweaks and fixes as well as some cool new features!
The biggest change in this release is the addition of authentication for the frontend/API.
It is disabled by default but can be enabled by adding auth
to your webserver
config.
webserver:
auth:
When you first enable authentication you will be greeted with an onboarding page which allows you to create your first user.
At the moment you can only create this first user. Complete user handling is planned for the next release.
Enabling authentication protects all resources, including streams and videos, so if you are consuming these directly through Viserons API from another tool you will have some issues. I will make sure to properly implement and document a good way of accessing the API and resources from third-party tools even with auth enabled in a future release.
Things that needs to be added before i consider this feature done:
Cameras that are unavailable during startup will now properly retry setup with automatic back-off.
Any camera that cant be successfully setup will be displayed in the frontend, displaying the error:
The red border represents failed cameras, and the orange border represents cameras that are actively retrying setup.
A bonus feature here is that the recordings for the cameras are still available for viewing in the frontend, neat right?!
gstreamer
aac
by default if the original codec (pcm_alaw
, pcm_mulaw
) is not supported in .mp4
files..mkv
files instead but that proved to be confusing.dlib
and sklearn
is installed which should solve a lot of issues with this component on the jetson-nano
and aarch64
imageFull Changelog: https://github.com/roflcoopter/viseron/compare/v2.1.1...v2.2.0b1
Published by roflcoopter over 1 year ago
This is a minor release containing a few new features as well as some bug fixes.
I recommend everyone running 2.1.0 to update immediately since 2.1.0 introduced a bug which creates shorter recordings than intended, which might make you miss important events.
output_args
configuration option to allow better customization of the ffmpeg recorder commandaarch64
docker image now contains the yolov7
model familymax_recorder_keepalive
when running with only motion detection as trigger for the recorder.Full Changelog: https://github.com/roflcoopter/viseron/compare/v2.1.0...v2.1.1
Published by roflcoopter almost 2 years ago
Recordings are now grouped by day to reduce the amount of scrolling needed.
Each day will show the latest recording, along with a button to drill down to that days recordings.
Breadcrumbs are added to the header for easier navigation
Grid sizes are now more consistent across the different pages
Upgraded to OpenCV 4.6.0 with OpenVINO support for Darknet.
This means better hardware acceleration support on Intel CPUs.
YOLOv7 is now supported and is the default in all images.
The attributes of the binary_sensor.{camera identifier}_recorder
has changed slightly:
last_recording_start
-> start_time
last_recording_end
-> end_time
Full Changelog: https://github.com/roflcoopter/viseron/compare/v2.0.0...v2.1.0
Published by roflcoopter almost 2 years ago
This release features a massive rewrite that I have been working on for the past year.
It focuses on decoupling all parts of Viseron, making it more modularized. This allows for easier integration of new functionality.
The config.yaml file will change completely so there is some work that has to be done by each user to port over to the new version.
The general config format is a component
which implements one or more domains
.
Each camera has a unique camera identifier
which flows through the entire configuration.
The nvr
component then ties all these different domains together and provides the full functionality.
The big benefit of this new format is that you can mix and match components more freely.
For instance, you could use different object detectors for different cameras, you are not tied into just one.
ffmpeg: # <-- component
camera: # <-- domain
camera_one: # <-- camera identifier
name: Camera 1
host: 192.168.10.10
username: test
password: test
camera_two: # <-- camera identifier
name: Camera 2
host: 192.168.10.11
username: test
password: test
....
darknet: # <-- component
object_detector: # <-- domain
model: /my_custom_model/model.weights
cameras:
camera_one: # <-- camera identifier
fps: 5
deepstack: # <-- component
host: deepstack # <-- component config option
port: 5000 # <-- component config option
object_detector: # <-- domain
cameras:
camera_two: # <-- camera identifier
fps: 1
labels:
- label: person
confidence: 0.75
trigger_recorder: false
face_recognition: # <-- domain
cameras:
camera_one:
camera_two:
labels:
- person
background_subtractor: # <-- component
motion_detector: # <-- domain
cameras:
camera_one: # <-- camera identifier
fps: 1
mask:
- coordinates:
- x: 400
y: 200
- x: 1000
y: 200
- x: 1000
y: 750
- x: 400
y: 750
nvr: # <-- component
camera_one: # <-- camera identifier
camera_two: # <-- camera identifier
ffmpeg:
camera:
viseron_camera:
name: Camera 1
host: 195.196.36.242
path: /mjpg/video.mjpg
port: 80
stream_format: mjpeg
fps: 6
recorder:
idle_timeout: 1
codec: h264
viseron_camera2:
name: Camera 2
host: storatorg.halmstad.se
path: /mjpg/video.mjpg
stream_format: mjpeg
port: 443
fps: 2
protocol: https
recorder:
idle_timeout: 1
codec: h264
viseron_camera3:
name: Camera 3
host: 195.196.36.242
path: /mjpg/video.mjpg
port: 80
stream_format: mjpeg
fps: 6
recorder:
idle_timeout: 1
codec: h264
mog2:
motion_detector:
cameras:
viseron_camera:
fps: 1
viseron_camera2:
fps: 1
background_subtractor:
motion_detector:
cameras:
viseron_camera3:
fps: 1
mask:
- coordinates:
- x: 400
y: 200
- x: 1000
y: 200
- x: 1000
y: 750
- x: 400
y: 750
darknet:
object_detector:
cameras:
viseron_camera:
fps: 1
scan_on_motion_only: false
labels:
- label: person
confidence: 0.8
trigger_recorder: true
viseron_camera2:
fps: 1
labels:
- label: person
confidence: 0.8
trigger_recorder: true
viseron_camera3:
fps: 1
labels:
- label: person
confidence: 0.8
trigger_recorder: true
nvr:
viseron_camera:
viseron_camera2:
viseron_camera3:
webserver:
mqtt:
broker: mqtt_broker.lan
port: 1883
username: !secret mqtt_username
password: !secret mqtt_password
home_assistant:
logger:
default_level: debug
There is now a UI included in Viseron, written in React TypeScript.
It is enabled by default and can be reached on port 8888 inside the container by default.
Currently it features functionality like viewing cameras, recordings and editing the configuration.
It will be expanded upon in the future.
Cameras:
Recordings:
Configuration:
Entities:
This release also features better Jetson Nano support through the gstreamer
component.
This means that you can utilize your Nano for hardware accelerated camera decoding and object detection.
Face recognition using CompreFace is now available
A new post processor is available, image_classification
.
This allows you to get more granular results from a detected object.
As an example, you could detect a specific kind of dog breed, or a specific kind of bird.
darknet
and edgetpu
object detectos utilize multiprocessing which spreads the load between multiple processes.
This allows for better performance, but also makes it easier to analyze and fine tune the load on your system.
The documentation has moved over from being in a README format to a dedicated site.
Hopefully it will help you use Viseron better.
I need your help on how it can be improved, writing good docs is always hard.
I am especially proud of the components page, which is mostly generated from the config schema used.
This means that the documentation and schema will always match, yay!
The documentation is hosted here: https://viseron.netlify.app/
Breaking changes
ALL kinds of inheritance in the config has been removed.
This means that you have to explicitly configure your object detector and motion detector settings for each camera
.
interval
has been removed from object_detection
and motion_detection
A new config option fps
will be used instead.
This change was made since it was quite confusing, both in the code and for the users because interval
was specified in seconds.
logging
has been removed in all shapes and forms and has been replaced with the new component logger
Please see the updated documentation
cameras
config section has been removed. Camera config is now specified under a component.
Each object detector has been split up into individual components.
See the documentation for each detector.
Each motion detector has been split up into individual components.
See the documentation for each detector.
recorder
can no longer be configured on a global level.
It now has to be present under each camera configuration.
timeout
under recorder is now called idle_timeout
static_mjpeg_streams
are now called mjpeg_streams
enable
under object_detection
is no more. To disable object detection you simply dont configure it for a camera
Same goes for motion_detector
timeout
for motion_detector
is now called recorder_keepalive
max_timeout
for motion_detector
is now called max_recorder_keepalive
Recordings are now stored in the folder structure /recordings/<camera name>/<date>/<timestamp>.mp4
Images are no longer streamed to MQTT/Home Assistant, with the exception of thumbnails.
This is because MQTT is not really suited for this and it impacts performance a lot.
If you still want to have the cameras in Home Assistant you can point Home Assistant to an MJPEG stream in Viseron.
filter_args
removed for camera and recorder.
For camera
, use video_filters
instead.
For recorder
, you can use both video_filters
and audio_filters
ffmpeg:
camera:
camera_1:
....
video_filters: # These filters rotate the images processed by Viseron
- transpose=2
- transpose=2
recorder:
video_filters: # These filters rotate the recorded video
- transpose=2
- transpose=2
Full Changelog: https://github.com/roflcoopter/viseron/compare/v1.10.2...v2.0.0
Published by roflcoopter almost 2 years ago
This release features a new Entities Page where you can browse all the entities in Viseron.
At the moment you can only view the current states, not change them or view any history.
This will most likely be the last beta before official release unless something unexpected happens.
Full Changelog: https://github.com/roflcoopter/viseron/compare/v2.0.0b3...v2.0.0b4
Published by roflcoopter almost 2 years ago
Full Changelog: https://github.com/roflcoopter/viseron/compare/v2.0.0b2...v2.0.0b3
Published by roflcoopter almost 2 years ago
Fixes an issue where bounding boxes were not displaying correctly for darknet
Fixes permission issues for edgetpu
Upgrades dlib to 19.24 to support more CUDA compute capabilities
Full Changelog: https://github.com/roflcoopter/viseron/compare/v2.0.0b1...v2.0.0b2
Published by roflcoopter almost 2 years ago
This release features a massive rewrite that I have been working on for the past year.
It focuses on decoupling all parts of Viseron, making it more modularized. This allows for easier integration of new functionality.
The config.yaml file will change completely so there is some work that has to be done by each user to port over to the new version.
The general config format is a component
which implements one or more domains
.
Each camera has a unique camera identifier
which flows through the entire configuration.
The nvr
component then ties all these different domains together and provides the full functionality.
The big benefit of this new format is that you can mix and match components more freely.
For instance, you could use different object detectors for different cameras, you are not tied into just one.
ffmpeg: # <-- component
camera: # <-- domain
camera_one: # <-- camera identifier
name: Camera 1
host: 192.168.10.10
username: test
password: test
camera_two: # <-- camera identifier
name: Camera 2
host: 192.168.10.11
username: test
password: test
....
darknet: # <-- component
object_detector: # <-- domain
model: /my_custom_model/model.weights
cameras:
camera_one: # <-- camera identifier
fps: 5
deepstack: # <-- component
host: deepstack # <-- component config option
port: 5000 # <-- component config option
object_detector: # <-- domain
cameras:
camera_two: # <-- camera identifier
fps: 1
labels:
- label: person
confidence: 0.75
trigger_recorder: false
face_recognition: # <-- domain
cameras:
camera_one:
camera_two:
labels:
- person
background_subtractor: # <-- component
motion_detector: # <-- domain
cameras:
camera_one: # <-- camera identifier
fps: 1
mask:
- coordinates:
- x: 400
y: 200
- x: 1000
y: 200
- x: 1000
y: 750
- x: 400
y: 750
nvr: # <-- component
camera_one: # <-- camera identifier
camera_two: # <-- camera identifier
There is now a UI included in Viseron, writen in React/TypeScript.
It is enabled by default and can be reached on port 8888 inside the container by default.
Currently it features basic functionality like viewing cameras, recordings and editing the configuration.
It will be expanded upon in the future.
Cameras:
Recordings:
Configuration:
This release also features better Jetson Nano support through the gstreamer
component.
This means that you can utilize your Nano for hardware accelerated camera decoding and object detection.
The documentation has moved over from being in a README format to a dedicated site.
Hopefully it will help you use Viseron better.
I need your help on how it can be improved, writing good docs is always hard.
I am especially proud of the components page, which is mostly generated from the config schema used.
This means that the documentation and schema will always match, yay!
The documentation is hosted here: https://viseron.netlify.app/
Full Changelog: https://github.com/roflcoopter/viseron/compare/v1.10.2...v2.0.0b1