fight-object_detection / documentation.md
KillD00zer's picture
Rename README.md to documentation.md
22ca7cf verified

A newer version of the Gradio SDK is available: 5.29.0

Upgrade

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):

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:
    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:
    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.