|
# Video Analysis Project: Fight and Object Detection
|
|
|
|
## 1. Overview
|
|
|
|
This project analyzes video files to perform two main tasks:
|
|
* **Fight Detection:** Classifies video segments as containing a "FIGHT" or being "NORMAL" using a custom-trained 3D Convolutional Neural Network (CNN).
|
|
* **Object Detection:** Identifies and tracks specific objects within the video using a pre-trained YOLOv8 model.
|
|
|
|
The system processes an input video and outputs the fight classification result along with an annotated version of the video highlighting detected objects.
|
|
|
|
## 2. Features
|
|
|
|
* Dual analysis: Combines action recognition (fight detection) and object detection.
|
|
* Custom-trained model for fight detection tailored to specific data.
|
|
* Utilizes state-of-the-art YOLOv8 for object detection.
|
|
* Generates an annotated output video showing detected objects and their tracks.
|
|
* Provides confidence scores for fight detection results.
|
|
* Includes scripts for both inference (`full_project.py`) and training (`trainig.py`) the fight detection model.
|
|
|
|
## 3. Project Structure
|
|
|
|
```
|
|
ComV/
|
|
βββ [Project Directory]/ # e.g., AI_made
|
|
β βββ full_project.py # Main script for running inference
|
|
β βββ Fight_detec_func.py # Fight detection logic and model loading
|
|
β βββ objec_detect_yolo.py # Object detection logic using YOLOv8
|
|
β βββ frame_slicer.py # Utility for extracting frames for fight detection
|
|
β βββ trainig.py # Script for training the fight detection model
|
|
β βββ README.md # This documentation file
|
|
β βββ trainnig_output/ # Directory for training artifacts
|
|
β βββ final_model_2.h5 # Trained fight detection model (relative path)
|
|
β βββ checkpoint/ # Checkpoints saved during training (relative path)
|
|
β βββ training_log.csv # Log file for training history (relative path)
|
|
β βββ yolo/ # (Assumed location)
|
|
β βββ yolo/
|
|
β βββ best.pt # Pre-trained YOLOv8 model weights (relative path)
|
|
βββ train/
|
|
β βββ Fighting/ # Directory containing fight video examples (relative path)
|
|
β βββ Normal/ # Directory containing normal video examples (relative path)
|
|
βββ try/
|
|
βββ result/ # Directory where output videos are saved (relative path)
|
|
βββ ... (Input video files) # Location for input videos (example)
|
|
```
|
|
|
|
*(Note: Model paths and data directories might be hardcoded in the scripts. Consider making these configurable or using relative paths.)*
|
|
|
|
## 4. Setup and Installation
|
|
|
|
**Python Version:**
|
|
|
|
* This project was developed and tested using Python 3.10.
|
|
|
|
**Dependencies:**
|
|
|
|
Based on the code imports and `pip freeze` output, the following libraries and versions were used:
|
|
|
|
* `opencv-python==4.11.0.86` (cv2)
|
|
* `numpy==1.26.4`
|
|
* `tensorflow==2.19.0` (tf)
|
|
* `ultralytics==8.3.108` (for YOLOv8)
|
|
* `matplotlib==3.10.1` (for debug visualizations)
|
|
* `scikit-learn==1.6.1` (sklearn - used in `trainig.py`)
|
|
|
|
*(Note: Other versions might also work, but these are the ones confirmed in the development environment.)*
|
|
|
|
**Installation (using pip):**
|
|
|
|
```bash
|
|
pip install opencv-python numpy tensorflow ultralytics matplotlib scikit-learn
|
|
```
|
|
|
|
**Models:**
|
|
|
|
1. **Fight Detection Model:** Ensure the trained model (`final_model_2.h5`) is present in the `trainnig_output` subdirectory relative to the script location.
|
|
2. **YOLOv8 Model:** Ensure the YOLO model (`best.pt`) is present in the `yolo/yolo` subdirectory relative to the script location.
|
|
|
|
*(Note: Absolute paths might be hardcoded in the scripts and may need adjustment depending on the deployment environment.)*
|
|
|
|
## 5. Usage
|
|
|
|
To run the analysis on a video file:
|
|
|
|
1. Navigate to the `d:/K_REPO/ComV/AI_made/` directory in your terminal (or ensure Python's working directory is `d:/K_REPO`).
|
|
2. Run the main script:
|
|
```bash
|
|
python full_project.py
|
|
```
|
|
3. The script will prompt you to enter the path to the video file:
|
|
```
|
|
Enter the local path : <your_video_path.mp4>
|
|
```
|
|
*(Ensure you provide the full path, potentially removing extra quotes if copying from Windows Explorer.)*
|
|
|
|
**Output:**
|
|
|
|
* The console will print the fight detection result (e.g., "FIGHT (85.3% confidence)") and information about the object detection process.
|
|
* An annotated video file will be saved in the `D:\K_REPO\ComV\try\result` directory. The filename will include the original video name and the unique detected object labels (e.g., `input_video_label1_label2_output.mp4`).
|
|
* If debug mode is enabled in `Fight_detec_func.py`, additional debug images might be saved in the result directory.
|
|
|
|
## 6. Module Descriptions
|
|
|
|
* **`full_project.py`:** Orchestrates the process by taking user input and calling the fight detection and object detection functions.
|
|
* **`Fight_detec_func.py`:**
|
|
* Contains the `fight_detec` function and `FightDetector` class.
|
|
* Loads the Keras model (`final_model_2.h5`).
|
|
* Uses `frame_slicer` to prepare input for the model.
|
|
* Performs prediction and calculates confidence.
|
|
* Handles debug visualizations.
|
|
* **`objec_detect_yolo.py`:**
|
|
* Contains the `detection` function.
|
|
* Loads the YOLOv8 model (`best.pt`).
|
|
* Iterates through video frames, performs object detection and tracking.
|
|
* Generates and saves the annotated output video.
|
|
* Returns detected object labels.
|
|
* **`frame_slicer.py`:**
|
|
* Contains the `extract_video_frames` utility function.
|
|
* Extracts a fixed number of frames, resizes, normalizes, and handles potential errors during extraction.
|
|
* **`trainig.py`:**
|
|
* Script for training the fight detection model.
|
|
* Includes `VideoDataGenerator` for loading/processing video data.
|
|
* Defines the 3D CNN model architecture.
|
|
* Handles data loading, splitting, training loops, checkpointing, and saving the final model.
|
|
|
|
## 7. Training Data
|
|
|
|
### Dataset Composition
|
|
| Category | Count | Percentage | Formats | Avg Duration |
|
|
|----------------|-------|------------|---------------|--------------|
|
|
| Fight Videos | 2,340 | 61.9% | .mp4, .mpeg | 5.2 sec |
|
|
| Normal Videos | 1,441 | 38.1% | .mp4, .mpeg | 6.1 sec |
|
|
| **Total** | **3,781** | **100%** | | |
|
|
|
|
### Technical Specifications
|
|
- **Resolution:** 64Γ64 pixels
|
|
- **Color Space:** RGB
|
|
- **Frame Rate:** 30 FPS (average)
|
|
- **Frame Sampling:** 50 frames per video
|
|
- **Input Shape:** (30, 96, 96, 3) - Model resizes input
|
|
|
|
### Data Sources
|
|
- Fighting videos: Collected from public surveillance datasets
|
|
- Normal videos: Sampled from public CCTV footage
|
|
- Manually verified and labeled by domain experts
|
|
|
|
### Preprocessing
|
|
1. Frame extraction at 50 frames/video
|
|
2. Resizing to 96Γ96 pixels
|
|
3. Normalization (pixel values [0,1])
|
|
4. Temporal sampling to 30 frames for model input
|
|
|
|
## 8. Models Used
|
|
|
|
* **Fight Detection:** A custom 3D CNN trained using `trainig.py`. Located at `D:\K_REPO\ComV\AI_made\trainnig_output\final_model_2.h5`. Input shape expects `(30, 96, 96, 3)` frames.
|
|
* **Object Detection:** YOLOv8 model. Weights located at `D:\K_REPO\ComV\yolo\yolo\best.pt`. This model is trained to detect the following classes: `['Fire', 'Gun', 'License_Plate', 'Smoke', 'knife']`.
|
|
|
|
## 7a. Fight Detection Model Performance
|
|
|
|
The following metrics represent the performance achieved during the training of the `final_model_2.h5`:
|
|
|
|
* **Best Training Accuracy:** 0.8583 (Epoch 7)
|
|
* **Best Validation Accuracy:** 0.9167 (Epoch 10)
|
|
* **Lowest Training Loss:** 0.3636 (Epoch 7)
|
|
* **Lowest Validation Loss:** 0.2805 (Epoch 8)
|
|
|
|
*(Note: These metrics are based on the training run that produced the saved model. Performance may vary slightly on different datasets or during retraining.)*
|
|
|
|
## 8. Configuration
|
|
|
|
Key parameters and paths are mostly hardcoded within the scripts:
|
|
|
|
* `Fight_detec_func.py`: `MODEL_PATH`, `N_FRAMES`, `IMG_SIZE`, `RESULT_PATH`.
|
|
* `objec_detect_yolo.py`: YOLO model path, output directory path (`output_dir`), confidence threshold (`conf=0.7`).
|
|
* `trainig.py`: `DATA_DIR`, `N_FRAMES`, `IMG_SIZE`, `EPOCHS`, `BATCH_SIZE`, `CHECKPOINT_DIR`, `OUTPUT_PATH`.
|
|
|
|
*Recommendation: Refactor these hardcoded values into a separate configuration file (e.g., YAML or JSON) or use command-line arguments for better flexibility.*
|
|
|
|
## 9. Training the Fight Detection Model
|
|
|
|
To retrain or train the fight detection model:
|
|
|
|
1. **Prepare Data:** Place training videos into `D:\K_REPO\ComV\train\Fighting` and `D:\K_REPO\ComV\train\Normal` subdirectories.
|
|
2. **Run Training Script:** Execute `trainig.py`:
|
|
```bash
|
|
python trainig.py
|
|
```
|
|
3. The script will load data, build the model (or resume from a checkpoint if `RESUME_TRAINING=1` and a checkpoint exists), train it, and save the final model to `D:\K_REPO\ComV\AI_made\trainnig_output\final_model_2.h5`. Checkpoints and logs are saved in the `trainnig_output` directory.
|
|
|