https://github.com/edoardotosin/objecttracker
Lightweight, real-time object detection and video recording tool.
https://github.com/edoardotosin/objecttracker
object-detection object-tracking opencv python raspberry-pi real-time video-recording
Last synced: about 2 months ago
JSON representation
Lightweight, real-time object detection and video recording tool.
- Host: GitHub
- URL: https://github.com/edoardotosin/objecttracker
- Owner: EdoardoTosin
- License: mit
- Created: 2025-01-15T10:50:38.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-11T10:50:48.000Z (over 1 year ago)
- Last Synced: 2025-03-11T11:37:10.031Z (over 1 year ago)
- Topics: object-detection, object-tracking, opencv, python, raspberry-pi, real-time, video-recording
- Language: Python
- Homepage:
- Size: 11.5 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# ObjectTracker
ObjectTracker is a lightweight, real-time object detection and video recording tool built for Raspberry Pi, Linux, and Windows. It uses OpenCV's DNN module with a pre-trained MobileNet SSD model to detect specified objects and automatically start recording when detections occur.
## Features
- **Real-time Object Detection**: Detect specified objects in real-time using OpenCV's DNN module and MobileNet SSD.
- **Event-based Video Recording**: Automatically starts recording when objects are detected, with a configurable duration to continue recording after the last detection.
- **Customizable Detection**: Supports detection of specific objects or all detectable classes via CLI arguments or configuration files.
- **Automatic Camera Reconnection**: Automatically attempts to reconnect in case of camera disconnection during runtime.
- **Organized Video Storage**: Videos are saved in a structured format under the `recordings/` folder, organized by date.
- **Docker Support**: Deploy effortlessly using Docker with an optional `docker-compose.yml` setup.
## Installation
### Method 1: Using Python Directly
1. **Clone the repository**
First, clone the repository to your local machine by running:
```bash
git clone https://github.com/EdoardoTosin/ObjectTracker
cd ObjectTracker
```
2. **Install dependencies**
Ensure you have Python 3.9+ installed. If not, you can download it from the official Python website. Once you have the correct version, install the necessary Python dependencies:
```bash
pip install --user -r requirements.txt
```
This command installs the required packages, including those needed for object detection.
### Method 2: Using Docker (for containerized setup)
1. **Install Docker**
If you don’t have Docker installed, you can download and install it from [Docker's website](https://www.docker.com/get-started).
2. **Clone the repository**
As with the Python method, first clone the repository to your local machine:
```bash
git clone https://github.com/EdoardoTosin/ObjectTracker
cd ObjectTracker
```
3. **Build the Docker image**
Build the Docker image for the project using the following command:
```bash
docker build -t object-tracker .
```
4. **Run the Docker container**
Run the container, mapping the `recordings` folder to your local machine’s folder for easy access:
```bash
docker run --rm -v $(pwd)/recordings:/app/recordings object-tracker
```
This will start the application within the Docker container. You can modify the path to the `recordings` folder if needed.
5. **Alternatively: Use Docker Compose**
If you'd like an even easier setup with pre-configured environment settings, you can use Docker Compose. Run the following command:
```bash
docker-compose up --build
```
Docker Compose will handle the image build and container execution automatically.
## Usage
### 1. Running the object detection system
- **Using Python directly**:
To run the object detection system, execute the following command:
```bash
python src/main.py
```
- **Using Docker**:
After building and running the Docker container, it will automatically start the object detection system.
### 2. Detect specific objects
To detect specific objects like a "person" or "car," use the `--objects` flag followed by a comma-separated list of object names. Whitespace around names is automatically trimmed:
```bash
python src/main.py --objects person, car, traffic light
```
- **Note**: Both `person, car, traffic light` and `person , car , traffic light` are handled correctly.
- **Using Docker**:
If running via Docker, this step should be handled by passing the same arguments during container execution.
### 3. Detect all objects
To detect all objects, use the `--objects` flag with the value `all`:
```bash
python src/main.py --objects all
```
- **Using Docker**:
You can modify the Docker command to pass the desired arguments in the same way.
### 4. View Available Command-Line Options
To get a full list of available options, run:
```bash
python src/main.py --help
```
This will show you all available parameters, including those for specifying which objects to detect, input files, output formats, etc.
- **Using Docker**:
The same command applies in the Docker container as well for accessing available help options.
## Configuration
The main configuration file is `config/config.yaml`. You can customize parameters like objects to detect, recording duration, and buffer size.
### Key Configuration Parameters
- **Objects to Detect**
Specify a comma-separated list of object names (whitespace is automatically trimmed) or use `"all"` to detect everything:
```yaml
objects_to_detect: "person, car, traffic light"
```
To detect all objects:
```yaml
objects_to_detect: all
```
- **Recording Settings**
Control the recording behavior:
```yaml
recording_duration: 30 # Duration in seconds to keep recording after the last detection
buffer_size: 50 # Number of frames to buffer before starting recording
reconnect_interval: 5 # Time in seconds to wait before attempting camera reconnection
```
- **Output Folder**
Specify a custom folder for recordings:
```yaml
recordings_folder: "path/to/custom/folder"
```
## File Descriptions
### `src/main.py`
The main script that initializes the detection system, manages camera input, and handles video recording.
### `config/config.yaml`
Contains user-defined parameters like object detection list, recording duration, and buffer settings.
### `detector/object_detector.py`
Implements object detection logic using OpenCV's DNN module, processing frames and identifying specified objects.
### `detector/recorder.py`
Handles video recording, buffering frames, and saving videos to the `recordings/` folder.
### `docker-compose.yml`
Simplifies deployment in a Docker environment, managing volume mounting and build steps.
## Customization
### Changing Camera Index
If multiple cameras are available, use the `--camera-index` argument to specify which one to use:
```bash
python src/main.py --camera-index 1
```
### Specifying Objects to Detect
You can define the objects to detect either in `config.yaml` or directly via CLI arguments:
```bash
python src/main.py --objects "person, car, traffic light"
```
## Contributing
Contributions are welcome! Follow these steps to contribute:
1. Fork the repository.
2. Create a feature branch (`git checkout -b feature/your-feature`).
3. Commit your changes (`git commit -am 'Add a new feature'`).
4. Push the branch (`git push origin feature/your-feature`).
5. Create a pull request.
Please read the [CONTRIBUTING.md](CONTRIBUTING.md) file for more details.
## License
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for more information.
## Acknowledgments
This project was built using:
- [OpenCV](https://opencv.org/)
- Pre-trained MobileNet SSD model
- Python 3.9+
- Docker