[go: up one dir, main page]

Skip to content

A computer based NVR (Network Video Recorder) with AI capabilities

License

Notifications You must be signed in to change notification settings

mehmetgoren/feniks

Repository files navigation

Feniks - A computer based NVR with AI capabilities

  • Connect any source FFmpeg supports and start streaming with low latency.
  • Stream and record your videos 24/7 in both H.264 and H.265 formats directly from your browser..
  • Detect 80 different objects, recognizes human faces, car plates and characters (OCR). There will be much more thanks to CodeProject.AI
  • Query your AI data fast & easy by date, time, camera, label, score and color.
  • If you want more, develop your own custom AI service and easily integrate with Feniks.

Installation

  • The installation process can be done effortlessly since all services are dockerized and can be run by Docker-Compose in one single command. I' ve created a wizard to make generating Docker-Compose file easy.

Screenshots

Technical Notes

  • Feniks consists of 6 different services. Those are:

    • The FFmpeg Service For Live 7/24 Streaming, Snapshot and Recording (Python).
    • The Snapshot Service (Python Multi-Process)
    • The CodeProject.AI Service(Python).
    • The Cloud and Notification Service (GoLang).
    • The Web/Websockets Server Service (Golang).
    • The Web Application (Javascript/Typescript, Vue3, Quasar).
  • Runs natively on Linux.

  • Uses FFmpeg to handle video, audio, snapshot, probing and streaming.

  • Uses Redis as a main NoSql database and message broker.

  • MongoDB or SQLite is used for AI Events and query databases.

  • The web application supports more than one user and node server.

  • The UI app was developed by using Vue3 & Quasar. It uses gridstack.js to support highly customizable (like resize, dragging) video players.

  • It has a built-in watchdog mechanism to monitor all processes and recover them.

  • All running node services can be viewed on the UI app. All Services can be started/stopped by using the services page.

  • The services are tested on x86 workstation, Dell Intel x86 laptop, Raspberry PI (ARM664) and Nvidia Jetson Nano.

  • It supports multiple storages. You can assign any storage to any camera.

  • Broken / failed connections are shown in the information page. If a stream fails more than once in a given time, a notification will be sent to receivers (users) by the cloud provider service.

  • Supported Stream Types are shown below:

    Hardware Demand Latency Compatibility
    FLV * * ****
    HLS * ***** *****
    WebSockets ***** * *****
    WebRTC * * ****
  • Supported video codecs for both streaming and recording are:

    • H.264 (Software, VA-API, NVIDIA, INTEL, RASPBERRY PI)
    • H.265 (Software, VA-API, NVIDIA, INTEL, HEVC streaming is supported thanks to go2rtc)
    • AV1 (Software, VA-API, NVIDIA, INTEL)
    • VP8 (Software, VA-API, NVIDIA, INTEL)
    • VP9 (Software, VA-API, NVIDIA, INTEL)
  • Supported audio codecs for both streaming and recording are:

    • MP3
    • AAC
    • AC3
    • DTS
    • ALAC
  • Supported Video Container Formats:

    • MP4
    • WebM
  • Supported Media Servers:

  • All AI events (Object Detection, Face Recognition, Plate Recognition) can be queried by date, time, camera, label and score. All those fields are all indexed and saved as denormalized entities to provide best read performance even for big data.

  • It can store detected objects on clouds. Current cloud providers are:

    • Google Gdrive
    • Telegram
  • Feniks supports 3 different motion detection methods, those are:

    • OpenCV: Superb accuracy precision but it costs relatively high CPU time
    • Imagehash: good accuracy and high performance. It is suitable for low cost devices like Raspberry PI or Jetson Nano
    • PSNR: Similar to Imagehash
  • Re-streaming via media server to reduce the number of connections to your camera