object_detector
object_detector copied to clipboard
Object detector from HOG + Linear SVM framework
object_detector
Object Detector using HOG as descriptor and Linear SVM as classifier
Prerequisites
Install OpenCV 3 with Python 3 bindings
Dependencies
You can install all dependencies by running
pip install -r requirements.txt
Run the code
To test the code, run the lines below in your terminal
git clone https://github.com/vladkha/object_detector.git
cd object_detector/bin
python test_object_detector.py
The test_object_detector.py will download the
CelebA and WIDER FACE
datasets and train a classifier to detect faces in an image.
The SVM model files will be stored in data/models,
so that they can be reused later on in test_classifier.py
Configuration File
All the configurations are in the data/config/config.cfg configuration files.
You can change it as per your need.
Here is what the default configuration file looks like
[hog]
window_size: [178, 218]
window_step_size: 20
orientations: 9
pixels_per_cell: [8, 8]
cells_per_block: [3, 3]
visualise: False
normalise: None
[nms]
threshold: 0.4
[paths]
model_path: ../data/models/model_name.model
[general]
pyramid_downscale = 1.5
pos_samples = 1000
neg_samples = 1000
About modules
config.py-- imports the configuration variables fromconfig.cfgcreate_neg_samples_WIDER.py-- module to create negative samples (images of non-faces from WIDER dataset)extract_features.py-- module used to extract HOG features of the training imagestrain_classifier.py-- module used to train the classifiertest_classifier.py-- module used to test the classifier using a test imageutils.py-- module containing helper functions
Some results
| Detections before NMS | Detections after NMS |
|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Built With
- OpenCV 3 - Computer vision library
- Scikit-learn - Machine learning library
- scikit-image - Image processing library
TODO
Possible ways to improve the project:
- Make the sliding window computation run in parallel - can dramatically speedup the code
- Split processing of the image pyramid in
test_classifier.pyto different cores of the processor, that way each core can process a separate layer of the pyramid independently - Add bootstrapping (Hard Negative Mining)
Acknowledgments
- Credit for base project structure and image processing goes bikz05 for his object-detector
- Adrian Rosebrock for his great blog www.pyimagesearch.com and particular series of articles regarding object detection topic:
- Histogram of Oriented Gradients and Object Detection
- Non-Maximum Suppression for Object Detection in Python
- (Faster) Non-Maximum Suppression in Python
- Intersection over Union (IoU) for object detection
- Image Pyramids with Python and OpenCV
- Sliding Windows for Object Detection with Python and OpenCV
- Pedestrian Detection OpenCV
- HOG detectMultiScale parameters explained
License
This project is licensed under the MIT License - see the LICENSE file for details













