![]() |
digiKam
|
#include <opencvdnnfacedetector.h>
Public Member Functions | |
std::vector< cv::Rect > | cvDetectFaces (const cv::Mat &inputImage, const cv::Size &paddedSize) |
QList< QRect > | detectFaces (const cv::Mat &inputImage, const cv::Size &paddedSize) |
OpenCVDNNFaceDetector (DetectorNNModel model=DetectorNNModel::DNNDetectorSSD) | |
cv::Mat | prepareForDetection (const DImg &inputImage, cv::Size &paddedSize) const |
cv::Mat | prepareForDetection (const QImage &inputImage, cv::Size &paddedSize) const |
cv::Mat | prepareForDetection (const QString &inputImagePath, cv::Size &paddedSize) const |
cv::Mat | prepareForDetectionYuNet (cv::Mat &cvImage, cv::Size &paddedSize) const |
void | setAccuracy (const int accuracy) |
void | setFaceDetectionSize (FaceScanSettings::FaceDetectionSize size) |
~OpenCVDNNFaceDetector () | |
Static Public Member Functions | |
static int | recommendedImageSizeForDetection () |
|
explicit |
References Digikam::DNNDetectorSSD, Digikam::DNNDetectorYOLOv3, and Digikam::DNNDetectorYuNet.
Digikam::OpenCVDNNFaceDetector::~OpenCVDNNFaceDetector | ( | ) |
std::vector< cv::Rect > Digikam::OpenCVDNNFaceDetector::cvDetectFaces | ( | const cv::Mat & | inputImage, |
const cv::Size & | paddedSize | ||
) |
References Digikam::DNNFaceDetectorBase::detectFaces().
Referenced by detectFaces().
QList< QRect > Digikam::OpenCVDNNFaceDetector::detectFaces | ( | const cv::Mat & | inputImage, |
const cv::Size & | paddedSize | ||
) |
There is no proof that doing this will help, since face can be detected at various positions (even half, masked faces can be detected), not only frontal. Effort on doing this should be questioned. TODO: Restructure and improve Face Detection module.
void OpenCVDNNFaceDetector::resizeBboxToStandardHumanFace(int& width, int& height) { Human head sizes data. https://en.wikipedia.org/wiki/Human_head#Average_head_sizes
float maxRatioFrontalFace = 15.4 / 15.5; float minRatioNonFrontalFace = 8.6 / 21.6; float r = width*1.0/height, rReference; if ((r >= minRatioNonFrontalFace*0.9) && r <= (maxRatioFrontalFace * 1.1)) { rReference = r; } else if (r <= 0.25) { rReference = r * 1.5; } else if (r >= 4) { rReference = r / 1.5; } else if (r < minRatioNonFrontalFace * 0.9) { rReference = minRatioNonFrontalFace; } else if (r > maxRatioFrontalFace * 1.1) { rReference = maxRatioFrontalFace; } if (width > height) { height = width / rReference; } else { width = height * rReference; }
}
References cvDetectFaces().
cv::Mat Digikam::OpenCVDNNFaceDetector::prepareForDetection | ( | const DImg & | inputImage, |
cv::Size & | paddedSize | ||
) | const |
References Digikam::DImg::bits(), Digikam::DNNDetectorYuNet, Digikam::DImg::hasAlpha(), Digikam::DImg::height, Digikam::DImg::isNull(), prepareForDetection(), prepareForDetectionYuNet(), Digikam::DImg::sixteenBit, Digikam::DImg::size(), and Digikam::DImg::width.
Referenced by prepareForDetection(), prepareForDetection(), and prepareForDetection().
cv::Mat Digikam::OpenCVDNNFaceDetector::prepareForDetection | ( | const QImage & | inputImage, |
cv::Size & | paddedSize | ||
) | const |
References prepareForDetection().
cv::Mat Digikam::OpenCVDNNFaceDetector::prepareForDetection | ( | const QString & | inputImagePath, |
cv::Size & | paddedSize | ||
) | const |
References prepareForDetection().
cv::Mat Digikam::OpenCVDNNFaceDetector::prepareForDetectionYuNet | ( | cv::Mat & | cvImage, |
cv::Size & | paddedSize | ||
) | const |
References Digikam::DNNFaceDetectorBase::nnInputSizeRequired().
Referenced by prepareForDetection().
|
static |
Returns the image size (one dimension). recommended for face detection. If the image is considerably larger, it will be rescaled automatically.
Referenced by Digikam::FaceDetector::recommendedImageSize().
void Digikam::OpenCVDNNFaceDetector::setAccuracy | ( | const int | accuracy | ) |
void Digikam::OpenCVDNNFaceDetector::setFaceDetectionSize | ( | FaceScanSettings::FaceDetectionSize | size | ) |