SkillAgentSearch skills...

Firescrew

Firescrew - Spotting moving objects on your RTSP network cameras faster than a caffeinated cat!

Install / Use

/learn @8ff/Firescrew

README

logo

Firescrew

Twitter Follow Slack Docs Discord

Docs: https://8ff.github.io/firescrew/

Firescrew is a cutting-edge application written in Go that enables real-time object and motion detection from an RTSP network camera. It leverages advanced image processing techniques and machine learning models to identify specific objects such as cars, people, and more.

Key Features

  • Real-Time Motion Detection: Firescrew can detect motion from a live feed and provide real-time alerts.
  • Object Identification: Identify specific objects like cars and people in real-time.
  • Model Flexibility: Firescrew can use the latest YOLOv8 model, MobileNET with Coral TPU or YOLOv8s with CoreML (MAC Only) for enhanced performance.
  • Performance: Firescrew takes full advantage of Go's concurrency handling and speed, providing a high-performance solution for real-time image processing.
  • RTSP Network Camera Support: Firescrew is compatible with RTSP network cameras, extending its applicability in a wide range of scenarios.
  • MQTT/Webhook/Script/Slack: Firescrew can send events to MQTT/Webhook/Script/Slack for further processing.
  • Natural Language Search: Firescrew supports natural language processing for searching events based on time/type/camera.
  • In-House Quality Control: At Firescrew, we believe in sampling our own "product," chasing the next high in innovation like caffeine-fueled engineers on a coding binge. We don't just build technology; we live it, breathe it, and occasionally spill coffee on it – all to ensure we're delivering a product that's up to snuff!
Things added/fixed in last 3 days:
- Added CoreML YoloV8s (Mac only)
- Added MQTT/Webhook/ScriptHook/Slack support!
- Added ffprobe timeout/Fixed MQTT port in template/Added docs page
- Added inference statistics and much more!
- Fixed Coral TPU model detection
- Performance updates for model adapters
- Discord server has been added
- Docker image will now fetch latest binaries from github at runtime
- Fixed ffprobe ftps parsing/Added resolution/fps bypass parameters

Quick Start Demo

docker run --rm -it -p 8080:8080 8fforg/firescrew:latest demo

# Point your browser to http://localhost:8080

WebUI

WebUI Supports natural language processing for searching events, here are some of the examples:

  • Today & Yesterday:
    • today
    • today 8am
    • yesterday 3pm
  • Specific Dates:
    • august 15th 10am
    • last friday 2pm
  • Ranges: Supports from/to and between/and ranges
    • from july 7th 5pm to july 7th 6pm
    • last tuesday between 1pm and 2pm
  • With Keywords:
    • people cars today between 10am and 1pm
  • With Camera Name
    • front cars today
  • Background color of the events signify the same event to make it easier to separate them demo2

Installation

Docker

docker pull 8fforg/firescrew:latest

Local

Firescrew leverages the capabilities of ffmpeg to ensure optimal performance and broad compatibility, you will need to install it before use.

apt-get install ffmpeg
pip3 install ultralytics
curl -o firescrew -L https://github.com/8ff/firescrew/releases/download/latest/firescrew.linux.amd64 && chmod +x firescrew

Usage

Docker

Generate config

# Store template config in config.json
docker run --rm -it 8fforg/firescrew:latest -t > config.json

Run

# Run with config.json and mount media folder for persistent storage
docker run --rm -v $(pwd)/media:/media -v $(pwd)/config.json:/config.json -it 8fforg/firescrew:latest /config.json

Serving from Docker

# Serve from ./media on port 8080 (./media must be defined in config.json)
docker run --rm -p 8080:8080 -it -v $(pwd)/media:/media 8fforg/firescrew:latest -s /media :8080

Using Coral TPU with Docker

lsusb | grep Google
# Take Bus and Device from the output of the above command and replace [bus] and [device] in the below command
docker run -d --device=/dev/bus/usb/[bus]/[device] -v config.json:config.json 8fforg/firescrew:latest

Help menu

root@debian:~docker run --rm -it 8fforg/firescrew:latest -h
Usage: firescrew [configfile]
  -t, --template, t     Prints the template config to stdout
  -h, --help, h         Prints this help message
  -s, --serve, s        Starts the web server, requires: [path] [addr]
  -v, --version, v      Prints the version
  -update, --update, update     Updates firescrew to the latest version

Local

Create a template config file

./firescrew -t > config.json

Start object detection

./firescrew config.json

Starting WebUI

./firescrew -s rec/hi :8080

Using Demo Stream from sample video

This will start a demo stream at rtsp://localhost:8553/lo and rtsp://localhost:8554/hi

cd demoStream && ./startDemoStream.sh

Command line options

Usage: firescrew [configfile]
  -t, --template, t     Prints the template config to stdout
  -h, --help, h         Prints this help message
  -s, --serve, s        Starts the web server, requires: [path] [addr]
  -v, --version, v      Prints the version
  -update, --update, update     Updates firescrew to the latest version

Benchmarks!

YOLOV8S Running CUDA 11.8 on RTX 4090

Min Time: 16.369294ms, Max Time: 1.748422882s, Avg Time: 20.55754ms, Count: 500
50th: 16.787455ms, 90th: 17.206168ms, 99th: 27.898232ms

YOLOV8S Running CUDA 11.8 on RTX 3090

Min Time: 15.337001ms, Max Time: 1.931347977s, Avg Time: 28.308399ms, Count: 500
50th: 24.313751ms, 90th: 25.290932ms, 99th: 34.881259ms

YOLOV8S Running CoreML on M1 Mac

Min Time: 32.435875ms, Max Time: 53.711166ms, Avg Time: 35.725131ms, Count: 500
50th: 35.232417ms, 90th: 37.851167ms, 99th: 44.405792ms

YOLOV8S Running CPU on Core i5-8500T @ 2.10GHz

Min Time: 103.251637ms, Max Time: 308.058517ms, Avg Time: 120.917971ms, Count: 500
50th: 116.531572ms, 90th: 126.291139ms, 99th: 230.462122ms

Dependencies Installation for YOLOv8

Docker image already includes everything you need to get started but if you choose to run manually and use YoloV8 model, you will need to install the Ultralytics dependencies. You can do this by running the following command:

    pip3 install ultralytics

This command installs the Ultralytics package which includes the necessary dependencies for the YOLOv8 model. If you encounter any problems during the installation, or you're looking for more advanced setup instructions, please refer to the Ultralytics Quick Start Guide. Note: Make sure you have Python and pip (or pip3) installed on your system before running these commands. Ensure that your Python environment is properly set up and is compatible with the YOLOv8 model requirements.

Dependencies Installation for EdgeTPU Coral

If you choose to use the EdgeTPU model via the Python adapter for faster and more accurate detection, you will need to install the Ultralytics dependencies. You can do this by running the following command:

pip3 install pycoral numpy Pillow

Running YOLOV8s with CoreML (Mac Only)

This has been tested working on M1/M2 MacOS 13.4.1, it works when using python3.10 and not 3.11

git clone https://github.com/8ff/firescrew && cd firescrew/assets
pip3.10 install coremltools Pillow
./objectDetectServerCoreML.py

Now in your config.json file set "networkObjectDetectServer": "", addr:8555 where addr is the ip of your machine running the above script

RTSP Camera Stream URLs

Firescrew supports two different RTSP camera streams: a low resolution stream (deviceUrl) and a high resolution stream (hiResDeviceUrl). These streams are used for different purposes and should be set up accordingly. The deviceUrl should be set to a low resolution video feed, typically around 640x360. This stream is used for motion detection. Note that the resolution of this stream significantly impacts the CPU usage. A higher resolution will lead to more CPU usage, so it is recommended to keep this stream at a lower resolution. The hiResDeviceUrl should be set to a high resolution video feed, such as 1080p or higher. This stream is used to store video clips of motion events. As this stream is not used for motion detection, it can handle higher resolutions, enabling the capture of more detail in the recorded video clips. Firescrew uses tcp for RTSP streams by default to avoid lost frames. If you camera does not support tcp - please open an issue and we will add support for it.

Configuration

Firescrew uses a JSON configuration file for its settings. Here is a brief explanation of the various configuration parameters:

{
    "cameraName": "", // This will be used in the video file metadata to identify which camera the clip belongs to
    "deviceUrl": "", // URL of the low resolution video feed.
        "loStreamParamBypass": { // With some cameras ffprobe may not return the correct resolution, you can use this to bypass it
        "width": 0,
        "height": 0,
        "fps": 0
    },
    "hiResDeviceUrl": "", // URL of the high resolution video feed.
        "hiStreamParamBypass": { // With some cameras ffprobe may not return the correct resolution, you can use this to bypass it
        "width": 0,
        "h

Related Skills

View on GitHub
GitHub Stars185
CategoryDevelopment
Updated1mo ago
Forks17

Languages

Go

Security Score

100/100

Audited on Mar 2, 2026

No findings