Viseron v3.0.0b1 - Self-hosted, local only NVR and AI Computer Vision software

My apologies, first thing I should have checked. It’s working and really well:

{
    "state": "on",
    "attributes": {
        "camera_identifier": "camera_one",
        "camera_name": "office",
        "name": "juan",
        "confidence": 0.90395,
        "coordinates": [
            370,
            52,
            545,
            314
        ],
        "extra_attributes": {
            "age": {
                "probability": 1,
                "high": 39,
                "low": 39
            },
            "gender": {
                "probability": 1,
                "value": "male"
            },
            "box": {
                "probability": 0.99504,
                "x_max": 545,
                "y_max": 314,
                "x_min": 370,
                "y_min": 52
            },
            "subjects": [
                {
                    "subject": "juan",
                    "similarity": 0.90395
                }
            ]
        }
    }
}

Awesome! Great to hear

Is there some up-to-date documentation somewhere? I find it very confusing to setup my config.yaml.

First it comes with the suggestion to use a top-level cameras: configuration. If I look at the components they tell me to use toplevel ffmpeg: - if I do that I get an exception that this is not allowed.

Same for the whole Google Coral Edge TPU topic - very hard to figure out how to configure.

Also on my NUC it says neither my Google Coral Edge TPU USB is found nor VAAPI is found - guess I need to do some digging. Regarding VAAPI: in frigate I was using h264_qsv which worked great for my onboard Intel GPU - is there a way I can use this instead?

For EdgeTPU it says:

viseron    | Coral Vendor IDs:
viseron    | "1a6e",ATTRS{idProduct}=="089a"
viseron    | "18d1",ATTRS{idProduct}=="9302"
viseron    | No EdgeTPU USB device was found

And if I add the:

object_detection:
  type: edgetpu

it fails and kills the app.

What would be great is an up-to-date example config.yaml

Otherwise it looks very promising - I’m hoping to replace Frigate with it because its simply too unreliable and very confusing with all the clips it creates.

1 Like

Sorry for the confusion!

The confusion stems from the fact that Viseron v2 is soon to be released, aiming to do it this weekend.
The docs page is completely new for v2 and reflects v2, but the Docker commands point to the latest tag which is still v1. The documentation for v1 was in the README entirely.
The version do not have compatible config formats.

So if you change your docker command to pull roflcoopter/viseron:2.0.0b3 the doc page over at https://viseron.netlify.app/ are correct.

Regarding your other issues, what does your docker command look like?

Again, sorry for the confusion.

1 Like

No need to apologize :slight_smile: Thanks for the clarification. I created an issue on Github - maybe thats easier for others as well: No HW Acceleration on Intel Nuc · Issue #408 · roflcoopter/viseron · GitHub

I’ve just added an issue to Github because I’m having an issue with the latest dev version, and linking here in case anyone else gets the same error:

Thanks

Viseron v2 is finally released!

Check out the release notes:

6 Likes

v2.2.0 was just published
It mainly includes two things:

Check out the release notes for more information:

What an amazing software, thanks for creating and sharing it.

I believe the most impressive part is the overall server load and the automation in the setup you did through ffprobe, I loved the fact that I didn’t have to specify stream height/width for example. I attached 10+ cameras and while I had to decrease stream resolution for a few of those, the server load is within reason (I’m sure I can optimize more).

I also think highly of frigate but whatever I did I couldn’t make it use a reasonable amount of resources.

Coral TPU & CUDA also worked well out of the box. I’m now trying to use face recognition, using compreface but getting this error:

viseron | [2023-04-23] [ERROR ] [viseron.components.compreface.face_recognition.cam_1] - Error calling compreface: ‘FaceRecognition’ object has no attribute ‘_recognition’
viseron | Traceback (most recent call last):
viseron | File “/src/viseron/components/compreface/face_recognition.py”, line 96, in face_recognition
viseron | detections = self._recognition.recognize(
viseron | AttributeError: ‘FaceRecognition’ object has no attribute ‘_recognition’

This feels like an error but wanted to check, does it feel like config file error? Here is the relevant config part:

compreface:
  face_recognition:
    host: 192.168.X.X
    port: 8000
    recognition_api_key: !secret compreface_api_key
    train: false
    face_plugins: age,gender
    cameras:
      cam_1:  # Run NVR for camera_1
      ...
    labels:
      - person

Thanks again for a great software.

PS:
Your “Donations” link in the main interface is a broken link. It now is:

https://github.com/roflcoopter/sponsors

It should be:

Hmm i cant replicate that error, it is working fine for me. WIl run some more tests.

Thanks for the heads up on the link!

thanks for looking into it. I managed to make it work now, it was actually due to an error on the compreface side. For anyone else running into similar issues - what was a massive help was to add the following to the config.yaml

logger:
  default_level: info
  logs:
    viseron.components.compreface: debug
1 Like

Good day. I have a number of reolink cameras connected via a reolink nvr.
I can obtain their stream in the following format:

- http://192.168.99.40/flv?port=1935&app=bcs&stream=channel10_main.bcs&user=USER&password=PASSWORD

I’ve tried adding unsuccessfully to viseron as follows:

ffmpeg:
  camera:
    camera_one:
      name: frontyard
      host: 192.168.99.40
      port: 80
      path: /flv?port=1935&app=bcs&stream=channel10_main.bcs&user=USER&password=PASSWORD
      stream_format: rtmp
      protocol: http

Appreciate any guidance as to the correct configuration.

Thank you

At first glance it should work.

Are you getting any errors in the log?

Thank you for your prompt reply. The configuration is now working, I’d incorrectly set the camera id in the nvr component.

I was struggling to set up a second rtsp stream for a hikvision like the one in the example until i realised you must set up a motion detector. I must have missed it in the docs.

Now Im trying to set up a reolink e1 pro with an rtsp stream. I set it up with ffmpeg and i get a lot of artifacts and a ‘rolling image’ . i.e frames dropping from top to botttom and … like an old tv with no reception :grinning: dont know how else to describe it.

I then set it up with gstream and it’s better but doesn’t record. I wonder if anyone has set up one of these reolinks e1 pro with viseron.

thank you.

You probably need to play around a little with the settings in both the camera and Viseron.
How does it look if you use this config?

ffmpeg:
  camera:
    camera_one:
      # The rest of your config here... 
      input_args:
        - "-avoid_negative_ts"
        - "make_zero"
        - "-fflags"
        - "+genpts+discardcorrupt"
        - "-flags"
        - "low_delay"
        - "-strict"
        - "experimental"
        - "-analyzeduration"
        - "1000M"
        - "-probesize"
        - "1000M"
        - "-timeout"
        - "5000000"

Thank you. I imported the reolink e1 pro into the reolink nvr, configured it with FLV like the POE ones and problem solved. It’s coming into Viseron without problem.

I’m now working to setup masks. started with basic masking of timestamp.
How do we add more than one mask per camera detector?

Great!

To add multiple masks to the same camera you can do this since mask is a list.

<motion detector component>:
  motion_detector:
    cameras:
      camera_one:
        ...
        mask:
          # First mask
          - coordinates:
              - x: 522
                y: 11
              - x: 729
                y: 275
              - x: 333
                y: 603
              - x: 171
                y: 97
          # Second mask
          - coordinates:
              - x: 100
                y: 100
              - x: 100
                y: 200
              - x: 200
                y: 200
              - x: 200
                y: 100

Thank you very much. Is there a way to pull camera into homeassistant directly from viseron? I know the “live view” is the substream.
I’d like to pull the main stream.

Not yet sadly, I am currently working on 24/7 recordings, after that i will work on implementing go2rtc which will allow restreaming from Viseron to other sources

2 Likes

Good evening everyone!
I’ve been trying for several days to run the viseron on the jetsonnano without success. I need help please.
I am using the command below and it is producing this output.

user@jetsonnano:~$ docker run --rm -v /media/user/VIS/cam_rec/recordings:/recordings -v /home/user/Viseron/config:/config -v /etc/localtime:/etc/localtime:ro -p 8888:8888 --name viseron -e PUID=1000 -e PGID=1000 --runtime=nvidia --privileged roflcoopter/jetson-nano-viseron:latest
[s6-init] making user provided files available at /var/run/s6/etc…exited 0.
[s6-init] ensuring user provided files have correct perms…exited 0.
[fix-attrs.d] applying ownership & permissions fixes…
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts…
[cont-init.d] 10-adduser: executing…
************************ UID/GID *************************
User uid: 1000
User gid: 1000
************************** Done **************************
[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 20-gid-video-device: executing…
[cont-init.d] 20-gid-video-device: exited 0.
[cont-init.d] 30-edgetpu-permission: executing…
************** Setting EdgeTPU permissions ***************
Coral Vendor IDs:
“1a6e”
“18d1”
No EdgeTPU USB device was found
************************** Done **************************
[cont-init.d] 30-edgetpu-permission: exited 0.
[cont-init.d] 40-set-env-vars: executing…
****** Checking for hardware acceleration platforms ******
OpenCL cannot be used
VA-API cannot be used
CUDA is available!
*********************** Done *****************************
[cont-init.d] 40-set-env-vars: exited 0.
[cont-init.d] 50-check-if-rpi: executing…
********** Checking if we are running on an RPi **********
Not running on any supported RPi
*********************** Done *****************************
[cont-init.d] 50-check-if-rpi: exited 0.
[cont-init.d] 55-check-if-jetson: executing…
****** Checking if we are running on a Jetson Board ******
Running on a Jetson Nano
*********************** Done *****************************
[cont-init.d] 55-check-if-jetson: exited 0.
[cont-init.d] 60-ffmpeg-path: executing…
****************** Getting FFmpeg path *******************
FFmpeg path: /usr/bin/ffmpeg
*********************** Done *****************************
[cont-init.d] 60-ffmpeg-path: exited 0.
[cont-init.d] 70-gstreamer-path: executing…
***************** Getting GStreamer path *****************
GStreamer path: /usr/bin/gst-launch-1.0
*********************** Done *****************************
[cont-init.d] 70-gstreamer-path: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
[2023-06-06 22:40:59] [INFO ] [viseron.core] - -------------------------------------------
[2023-06-06 22:40:59] [INFO ] [viseron.core] - Initializing Viseron
[2023-06-06 22:40:59] [INFO ] [viseron.components] - Setting up component logger
[2023-06-06 22:40:59] [INFO ] [viseron.components] - Setup of component logger took 0.0 seconds
[2023-06-06 22:40:59] [INFO ] [viseron.components] - Setting up component data_stream
[2023-06-06 22:40:59] [DEBUG ] [viseron.watchdog] - Registering <RestartableThread(data_stream, initial daemon)> in the watchdog
[2023-06-06 22:40:59] [INFO ] [viseron.components] - Setup of component data_stream took 0.0 seconds
[2023-06-06 22:40:59] [INFO ] [viseron.components] - Setting up component webserver
[2023-06-06 22:40:59] [DEBUG ] [asyncio] - Using selector: EpollSelector
[2023-06-06 22:40:59] [DEBUG ] [viseron.components.data_stream] - Subscribing to data topic event/domain/registered/camera, <bound method Webserver.camera_registered of <Webserver(Tornado Webserver, initial daemon)>>
[2023-06-06 22:40:59] [DEBUG ] [viseron.components.data_stream] - Subscribing to data topic event/domain/setup/domain_failed/camera/*, <bound method Webserver.camera_registered of <Webserver(Tornado Webserver, initial daemon)>>
[2023-06-06 22:40:59] [DEBUG ] [viseron.components.data_stream] - Subscribing to data topic viseron/signal/shutdown, <bound method Webserver.stop of <Webserver(Tornado Webserver, initial daemon)>>
[2023-06-06 22:40:59] [INFO ] [viseron.components] - Setup of component webserver took 0.0 seconds
[2023-06-06 22:40:59] [INFO ] [viseron.components] - Setting up component nvr
[2023-06-06 22:40:59] [INFO ] [viseron.components] - Setting up component gstreamer
[2023-06-06 22:40:59] [INFO ] [viseron.components] - Setup of component nvr took 0.0 seconds
[2023-06-06 22:40:59] [INFO ] [viseron.components] - Setting up component recorder
[2023-06-06 22:40:59] [ERROR ] [viseron.components] - Failed to load component recorder: No module named ‘viseron.components.recorder’
[2023-06-06 22:40:59] [INFO ] [viseron.components] - Setup of component gstreamer took 0.0 seconds
[2023-06-06 22:41:00] [DEBUG ] [viseron.components.webserver.auth] - Loading users
[2023-06-06 22:41:00] [DEBUG ] [viseron.components.webserver.auth] - Loading data from auth store
[2023-06-06 22:41:00] [DEBUG ] [viseron.components.webserver.websocket_api] - WebSocket opened
[2023-06-06 22:41:00] [INFO ] [viseron.components] - Setting up domain camera for component gstreamer with identifier viseron_cam_03
[2023-06-06 22:41:00] [INFO ] [viseron.components] - Setting up domain nvr for component nvr with identifier viseron_cam_03
[2023-06-06 22:41:00] [DEBUG ] [viseron.components] - Domain nvr for component nvr with identifier viseron_cam_03 will wait for dependencies [‘domain: camera, identifier: viseron_cam_03’]
[2023-06-06 22:41:00] [DEBUG ] [viseron.components.webserver.api.handlers] - Routing to AuthAPIHandler.auth_token(*args=[], **kwargs={}, request_arguments={})
[2023-06-06 22:41:00] [DEBUG ] [viseron.helpers.storage] - Writing data to /config/.viseron/auth
[2023-06-06 22:41:00] [ERROR ] [viseron.components] - Error validating config for domain camera and component gstreamer: extra keys not allowed @ data[‘viseron_cam_03’][‘publish_image’]. Got None
Traceback (most recent call last):
File “/src/viseron/components/init.py”, line 242, in validate_domain_config
return domain_module.CONFIG_SCHEMA(config), None # type: ignore
File “/usr/local/lib/python3.8/site-packages/voluptuous/schema_builder.py”, line 272, in call
return self._compiled([], data)
File “/usr/local/lib/python3.8/site-packages/voluptuous/schema_builder.py”, line 594, in validate_dict
return base_validate(path, iteritems(data), out)
File “/usr/local/lib/python3.8/site-packages/voluptuous/schema_builder.py”, line 432, in validate_mapping
raise er.MultipleInvalid(errors)
voluptuous.error.MultipleInvalid: extra keys not allowed @ data[‘viseron_cam_03’][‘publish_image’]
[2023-06-06 22:41:00] [ERROR ] [viseron.components] - Setup of domain camera for component gstreamer with identifier viseron_cam_03 failed
[2023-06-06 22:41:00] [ERROR ] [viseron.components] - Unable to setup dependencies for domain nvr for component nvr. Failed dependencies: [‘domain: camera, identifier: viseron_cam_03’]

Below the command I will leave my configuration file.

gstreamer:
  camera:
    viseron_cam_03:
      name: Fundos_Direita
      host: 192.168.25.31
      port: 554
      username: !secret username
      password: !secret password
      path: /cam03
      fps: 25
      publish_image: true
      recorder:
        idle_timeout: 5

recorder:
  lookback: 60
  timeout: 120
  retain: 365
  folder: /media/user/VIS/cam_rec/recordings
  thumbnail:
    save_to_disk: true
    codec: h264


nvr:
  viseron_cam_03:

webserver:
  auth:

logger:
  default_level: debug