mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-17 16:44:29 +03:00
Adding mask rescaler script
This commit is contained in:
parent
33957e5360
commit
2e2ba86bb3
65
scripts/README.md
Normal file
65
scripts/README.md
Normal file
@ -0,0 +1,65 @@
|
||||
# Mask Rescaler Script
|
||||
|
||||
This script is designed to scale the coordinates of a mask when the resolution of the camera is changed. It adjusts the mask coordinates to fit a new resolution based on the old resolution and the scaling factors.
|
||||
|
||||
## Features
|
||||
- Accepts user input for mask coordinates, old resolution, and new resolution.
|
||||
- Calculates the scaling factors based on the resolutions and applies them to the mask coordinates.
|
||||
- Displays the scaled mask coordinates.
|
||||
- Optionally copies the scaled mask to the clipboard, making it easy to use in your configuration.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
This script requires the following tools:
|
||||
- **bash**: The script is written in bash and should run in any bash-compatible shell.
|
||||
- **xclip** (Linux), **xsel** (Linux), **pbcopy** (macOS), or **clip** (Windows) for clipboard functionality.
|
||||
|
||||
You can install the clipboard tools with the following commands:
|
||||
|
||||
### Linux:
|
||||
- Install `xclip`:
|
||||
```bash
|
||||
sudo apt install xclip
|
||||
|
||||
- Or install `xsel`:
|
||||
```bash
|
||||
sudo apt install xsel
|
||||
|
||||
### macOS:
|
||||
- pbcopy is pre-installed, so no installation is needed.
|
||||
|
||||
### Windows:
|
||||
- Use Git Bash, WSL, or Cygwin for Unix-like commands, including printf and echo -n.
|
||||
- Alternatively, if using Windows command prompt (cmd), clip should be available.
|
||||
|
||||
## Usage
|
||||
|
||||
1. **Run the script**:
|
||||
```bash
|
||||
./mask_rescaler.sh
|
||||
```
|
||||
|
||||
2. **Provide input** when prompted:
|
||||
- The script will ask for the mask coordinates (comma-separated), the old resolution (default: `1280,720`), and the new resolution (default: `640,360`).
|
||||
|
||||
Example input:
|
||||
```bash
|
||||
Enter the mask (comma-separated values): 682,98,716,284,469,284,442,103
|
||||
Enter the old resolution (width,height) [1280,720]: 1280,720
|
||||
Enter the new resolution (width,height) [640,360]: 640,360
|
||||
```
|
||||
|
||||
3. **Result**:
|
||||
- The script will calculate the scaled mask and display it in the terminal.
|
||||
- The scaled mask is also copied to the clipboard, ready to be pasted into your Frigate or other video surveillance configuration.
|
||||
|
||||
## Example Output
|
||||
|
||||
```bash
|
||||
Enter the mask (comma-separated values): 682,98,716,284,469,284,442,103
|
||||
Enter the old resolution (width,height) [1280,720]: 1280,720
|
||||
Enter the new resolution (width,height) [640,360]: 640,360
|
||||
Scaled mask:
|
||||
341,49,358,142,234,142,221,51
|
||||
Scaled mask copied to clipboard!
|
||||
```
|
||||
91
scripts/mask_rescaler.sh
Executable file
91
scripts/mask_rescaler.sh
Executable file
@ -0,0 +1,91 @@
|
||||
#!/bin/bash
|
||||
|
||||
set_clipboard_command() {
|
||||
case "$(uname)" in
|
||||
Linux)
|
||||
if command -v xclip &>/dev/null; then
|
||||
clipboard_cmd="xclip -selection clipboard"
|
||||
elif command -v xsel &>/dev/null; then
|
||||
clipboard_cmd="xsel --clipboard --input"
|
||||
else
|
||||
clipboard_cmd=""
|
||||
echo "Clipboard tool (xclip or xsel) not found. Clipboard functionality will be disabled."
|
||||
fi
|
||||
;;
|
||||
Darwin) # macOS
|
||||
if command -v pbcopy &>/dev/null; then
|
||||
clipboard_cmd="pbcopy"
|
||||
else
|
||||
clipboard_cmd=""
|
||||
echo "Clipboard tool (pbcopy) not found. Clipboard functionality will be disabled."
|
||||
fi
|
||||
;;
|
||||
MINGW* | CYGWIN* | MSYS*) # Windows
|
||||
if command -v clip &>/dev/null; then
|
||||
clipboard_cmd="clip"
|
||||
else
|
||||
clipboard_cmd=""
|
||||
echo "Clipboard tool (clip) not found. Clipboard functionality will be disabled."
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
clipboard_cmd=""
|
||||
echo "Unsupported operating system. Clipboard functionality will be disabled."
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
get_user_input() {
|
||||
read -p "Enter the mask (comma-separated values): " mask_input
|
||||
read -p "Enter the old resolution (width,height) [1280,720]: " old_resolution
|
||||
read -p "Enter the new resolution (width,height) [640,360]: " new_resolution
|
||||
|
||||
old_resolution=${old_resolution:-1280,720}
|
||||
new_resolution=${new_resolution:-640,360}
|
||||
}
|
||||
|
||||
calculate_scaling_factors() {
|
||||
IFS=',' read -r old_width old_height <<< "$old_resolution"
|
||||
IFS=',' read -r new_width new_height <<< "$new_resolution"
|
||||
|
||||
width_scale=$(awk "BEGIN {print $new_width / $old_width}")
|
||||
height_scale=$(awk "BEGIN {print $new_height / $old_height}")
|
||||
}
|
||||
|
||||
scale_mask() {
|
||||
IFS=',' read -ra mask_coords <<< "$mask_input"
|
||||
scaled_mask=()
|
||||
|
||||
for ((i=0; i<${#mask_coords[@]}; i+=2)); do
|
||||
x=$(awk "BEGIN {printf \"%d\", ${mask_coords[i]} * $width_scale}")
|
||||
y=$(awk "BEGIN {printf \"%d\", ${mask_coords[i+1]} * $height_scale}")
|
||||
scaled_mask+=("$x" "$y")
|
||||
done
|
||||
}
|
||||
|
||||
display_output() {
|
||||
output=$(echo "${scaled_mask[*]}" | tr ' ' ',')
|
||||
echo "Scaled mask:"
|
||||
echo "$output"
|
||||
}
|
||||
|
||||
copy_to_clipboard() {
|
||||
if [[ -n $clipboard_cmd ]]; then
|
||||
# Use printf to avoid a newline, or echo -n
|
||||
printf "%s" "$output" | $clipboard_cmd
|
||||
echo "Scaled mask copied to clipboard!"
|
||||
else
|
||||
echo "Clipboard functionality not available."
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
set_clipboard_command
|
||||
get_user_input
|
||||
calculate_scaling_factors
|
||||
scale_mask
|
||||
display_output
|
||||
copy_to_clipboard
|
||||
}
|
||||
|
||||
main
|
||||
Loading…
Reference in New Issue
Block a user