![]() Add DNN-based face detection and face recognition into modules/objdetect * Add DNN-based face detector impl and interface * Add a sample for DNN-based face detector * add recog * add notes * move samples from samples/cpp to samples/dnn * add documentation for dnn_face * add set/get methods for input size, nms & score threshold and topk * remove the DNN prefix from the face detector and face recognizer * remove default values in the constructor of impl * regenerate priors after setting input size * two filenames for readnet * Update face.hpp * Update face_recognize.cpp * Update face_match.cpp * Update face.hpp * Update face_recognize.cpp * Update face_match.cpp * Update face_recognize.cpp * Update dnn_face.markdown * Update dnn_face.markdown * Update face.hpp * Update dnn_face.markdown * add regression test for face detection * remove underscore prefix; fix warnings * add reference & acknowledgement for face detection * Update dnn_face.markdown * Update dnn_face.markdown * Update ts.hpp * Update test_face.cpp * Update face_match.cpp * fix a compile error for python interface; add python examples for face detection and recognition * Major changes for Vadim's comments: * Replace class name FaceDetector with FaceDetectorYN in related failes * Declare local mat before loop in modules/objdetect/src/face_detect.cpp * Make input image and save flag optional in samples/dnn/face_detect(.cpp, .py) * Add camera support in samples/dnn/face_detect(.cpp, .py) * correct file paths for regression test * fix convertion warnings; remove extra spaces * update face_recog * Update dnn_face.markdown * Fix warnings and errors for the default CI reports: * Remove trailing white spaces and extra new lines. * Fix convertion warnings for windows and iOS. * Add braces around initialization of subobjects. * Fix warnings and errors for the default CI systems: * Add prefix 'FR_' for each value name in enum DisType to solve the redefinition error for iOS compilation; Modify other code accordingly * Add bookmark '#tutorial_dnn_face' to solve warnings from doxygen * Correct documentations to solve warnings from doxygen * update FaceRecognizerSF * Fix the error for CI to find ONNX models correctly * add suffix f to float assignments * add backend & target options for initializing face recognizer * add checkeq for checking input size and preset size * update test and threshold * changes in response to alalek's comments: * fix typos in samples/dnn/face_match.py * import numpy before importing cv2 * add documentation to .setInputSize() * remove extra include in face_recognize.cpp * fix some bugs * Update dnn_face.markdown * update thresholds; remove useless code * add time suffix to YuNet filename in test * objdetect: update test code |
||
---|---|---|
.. | ||
dnn_model_runner/dnn_conversion | ||
face_detector | ||
results | ||
.gitignore | ||
action_recognition.py | ||
classification.cpp | ||
classification.py | ||
CMakeLists.txt | ||
colorization.cpp | ||
colorization.py | ||
common.hpp | ||
common.py | ||
custom_layers.hpp | ||
dasiamrpn_tracker.cpp | ||
download_models.py | ||
edge_detection.py | ||
face_detect.cpp | ||
face_detect.py | ||
face_match.cpp | ||
face_match.py | ||
fast_neural_style.py | ||
human_parsing.cpp | ||
human_parsing.py | ||
js_face_recognition.html | ||
mask_rcnn.py | ||
mobilenet_ssd_accuracy.py | ||
models.yml | ||
object_detection.cpp | ||
object_detection.py | ||
openpose.cpp | ||
openpose.py | ||
optical_flow.py | ||
person_reid.cpp | ||
person_reid.py | ||
README.md | ||
scene_text_detection.cpp | ||
scene_text_recognition.cpp | ||
scene_text_spotting.cpp | ||
segmentation.cpp | ||
segmentation.py | ||
shrink_tf_graph_weights.py | ||
siamrpnpp.py | ||
speech_recognition.py | ||
text_detection.cpp | ||
text_detection.py | ||
tf_text_graph_common.py | ||
tf_text_graph_efficientdet.py | ||
tf_text_graph_faster_rcnn.py | ||
tf_text_graph_mask_rcnn.py | ||
tf_text_graph_ssd.py | ||
virtual_try_on.py |
OpenCV deep learning module samples
Model Zoo
Check a wiki for a list of tested models.
If OpenCV is built with Intel's Inference Engine support you can use Intel's pre-trained models.
There are different preprocessing parameters such mean subtraction or scale factors for different models. You may check the most popular models and their parameters at models.yml configuration file. It might be also used for aliasing samples parameters. In example,
python object_detection.py opencv_fd --model /path/to/caffemodel --config /path/to/prototxt
Check -h
option to know which values are used by default:
python object_detection.py opencv_fd -h
Sample models
You can download sample models using download_models.py
. For example, the following command will download network weights for OpenCV Face Detector model and store them in FaceDetector folder:
python download_models.py --save_dir FaceDetector opencv_fd
You can use default configuration files adopted for OpenCV from here.
You also can use the script to download necessary files from your code. Assume you have the following code inside your_script.py
:
from download_models import downloadFile
filepath1 = downloadFile("https://drive.google.com/uc?export=download&id=0B3gersZ2cHIxRm5PMWRoTkdHdHc", None, filename="MobileNetSSD_deploy.caffemodel", save_dir="save_dir_1")
filepath2 = downloadFile("https://drive.google.com/uc?export=download&id=0B3gersZ2cHIxRm5PMWRoTkdHdHc", "994d30a8afaa9e754d17d2373b2d62a7dfbaaf7a", filename="MobileNetSSD_deploy.caffemodel")
print(filepath1)
print(filepath2)
# Your code
By running the following commands, you will get MobileNetSSD_deploy.caffemodel file:
export OPENCV_DOWNLOAD_DATA_PATH=download_folder
python your_script.py
Note that you can provide a directory using save_dir parameter or via OPENCV_SAVE_DIR environment variable.
Face detection
An origin model
with single precision floating point weights has been quantized using TensorFlow framework.
To achieve the best accuracy run the model on BGR images resized to 300x300
applying mean subtraction
of values (104, 177, 123)
for each blue, green and red channels correspondingly.
The following are accuracy metrics obtained using COCO object detection evaluation
tool on FDDB dataset
(see script)
applying resize to 300x300
and keeping an origin images' sizes.
AP - Average Precision | FP32/FP16 | UINT8 | FP32/FP16 | UINT8 |
AR - Average Recall | 300x300 | 300x300 | any size | any size |
--------------------------------------------------|-----------|----------------|-----------|----------------|
AP @[ IoU=0.50:0.95 | area= all | maxDets=100 ] | 0.408 | 0.408 | 0.378 | 0.328 (-0.050) |
AP @[ IoU=0.50 | area= all | maxDets=100 ] | 0.849 | 0.849 | 0.797 | 0.790 (-0.007) |
AP @[ IoU=0.75 | area= all | maxDets=100 ] | 0.251 | 0.251 | 0.208 | 0.140 (-0.068) |
AP @[ IoU=0.50:0.95 | area= small | maxDets=100 ] | 0.050 | 0.051 (+0.001) | 0.107 | 0.070 (-0.037) |
AP @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] | 0.381 | 0.379 (-0.002) | 0.380 | 0.368 (-0.012) |
AP @[ IoU=0.50:0.95 | area= large | maxDets=100 ] | 0.455 | 0.455 | 0.412 | 0.337 (-0.075) |
AR @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] | 0.299 | 0.299 | 0.279 | 0.246 (-0.033) |
AR @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] | 0.482 | 0.482 | 0.476 | 0.436 (-0.040) |
AR @[ IoU=0.50:0.95 | area= all | maxDets=100 ] | 0.496 | 0.496 | 0.491 | 0.451 (-0.040) |
AR @[ IoU=0.50:0.95 | area= small | maxDets=100 ] | 0.189 | 0.193 (+0.004) | 0.284 | 0.232 (-0.052) |
AR @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] | 0.481 | 0.480 (-0.001) | 0.470 | 0.458 (-0.012) |
AR @[ IoU=0.50:0.95 | area= large | maxDets=100 ] | 0.528 | 0.528 | 0.520 | 0.462 (-0.058) |