OpenCV detectMultiScale () 매개 변수에 대한 권장 값
권장 매개 변수는 무엇이며 CascadeClassifier::detectMultiScale()
어떤 요소에 따라 기본 매개 변수를 변경해야합니까?
void CascadeClassifier::detectMultiScale(
const Mat& image,
vector<Rect>& objects,
double scaleFactor=1.1,
int minNeighbors=3,
int flags=0,
Size minSize=Size(),
Size maxSize=Size() )
이러한 매개 변수 중 네 가지에 더주의를 기울여야합니다.
scaleFactor
– 각 이미지 스케일에서 이미지 크기가 얼마나 줄어드는지를 지정하는 매개 변수.기본적으로 축척 비율은 축척 피라미드를 만드는 데 사용됩니다. 자세한 설명은 여기에서 확인할 수 있습니다 . 간단히 말해, 여기 에 설명 된대로 모델에는 학습 중에 정의 된 고정 크기가 있으며
xml
. 이것은 존재하는 경우 이미지에서이 얼굴 크기가 감지됨을 의미합니다. 그러나 입력 이미지의 크기를 조정하면 더 큰 얼굴을 더 작은 얼굴로 크기를 조정하여 알고리즘에서 감지 할 수 있습니다.1.05
이는 크기 조정에 작은 단계를 사용한다는 의미입니다. 즉, 크기를 5 % 줄이면 감지 할 모델과 일치하는 크기가 발견 될 가능성이 높아집니다. 이것은 또한 알고리즘이 더 철저하기 때문에 더 느리게 작동 함을 의미합니다. 더 빠른 감지를 위해 1.4까지 늘릴 수 있으며 일부 얼굴이 모두 누락 될 위험이 있습니다.minNeighbors
– 각 후보 직사각형이 유지해야하는 이웃 수를 지정하는 매개 변수.이 매개 변수는 감지 된 얼굴의 품질에 영향을줍니다. 값이 높을수록 탐지 횟수는 줄어들지 만 품질은 높아집니다.
3~6
좋은 가치입니다.minSize
– 가능한 최소 개체 크기. 그보다 작은 개체는 무시됩니다.이 매개 변수는 감지 할 작은 크기를 결정합니다. 당신이 결정합니다! 일반적으로
[30, 30]
얼굴 감지를위한 좋은 시작입니다.maxSize
– 가능한 최대 개체 크기. 이보다 큰 개체는 무시됩니다.이 매개 변수는 감지 할 크기를 결정합니다. 다시 한 번 결정합니다! 일반적으로 수동으로 설정할 필요가 없습니다 . 기본값은 얼굴 크기에 대한 상한없이 감지하고자한다고 가정합니다.
CPU 및 RAM 성능이 좋거나 그 이상이면 scaleFactor = 1 minNeighbors = 3을 설정할 수 있습니다.
raspberry와 같은 임베디드 시스템에서 작업하는 경우 scaleFactor = 2와 같은 smth를 선택하는 것이 좋습니다. (값이 높을수록 정확도가 낮습니다.) minNeighbors = 1, (값이 높을수록 정확도가 낮지 만 신뢰성이 높습니다) 그렇지 않으면 알고리즘이 훨씬 빠르게 실행됩니다. CPU 성능과 RAM이 충분하지 않으면 멈 춥니 다.
도움이되기를 바랍니다
cl_int err;
cl_uint numPlatforms;
err = clGetPlatformIDs(0, NULL, &numPlatforms);
if (CL_SUCCESS == err)
printf("\nDetected OpenCL platforms: %d", numPlatforms);
else
printf("\nError calling clGetPlatformIDs. Error code: %d", err);
string str ="haarcascade_frontalface_alt2.xml";
ocl::OclCascadeClassifier fd;
fd.load(str);
ocl::oclMat frame, frameGray;
Mat frameCpu;
CvVideoCapture vcap = openVideo("0");
vcap.set(CV_CAP_PROP_FRAME_WIDTH,320);
vcap.set(CV_CAP_PROP_FRAME_HEIGHT,240);
static const cv::Size maxSize;
for(;;){
// // processing loop
vector<Rect> faces;
vcap >> frameCpu;
frame = frameCpu;
ocl::cvtColor(frame, frameGray, CV_BGR2GRAY);
//ocl::equalizeHist(frameGray, frameGray);
//Mat mm(frameGray);
//cvWaitKey(100);
fd.detectMultiScale(frameGray,faces,1.05,3,0|CV_HAAR_FIND_BIGGEST_OBJECT ,minSize,maxSize);
for(int i=0; i< faces.size() ; i++)
{
if(faces.size())
//circle(img, Point(palm[i].x+ palm[i].width/2,palm[i].y+palm[i].height/2),palm[i].width,Scalar(255,0,0), 2,8 );
cv::rectangle(frameCpu, faces[i],Scalar(255,0,0), 2,8 );
}
imshow("fsfs",frameCpu);
cvWaitKey(1);
ReferenceURL : https://stackoverflow.com/questions/20801015/recommended-values-for-opencv-detectmultiscale-parameters
'UFO ET IT' 카테고리의 다른 글
IComparer 인수 대신 람다 식 사용 (0) | 2020.12.15 |
---|---|
Java에서 MessageFormat.format ()을 사용하여 메시지 형식 지정 (0) | 2020.12.15 |
각 비트에 대해 주어진 확률이 0 또는 1 인 의사 랜덤 비트를 생성하는 빠른 방법 (0) | 2020.12.15 |
C에서 외부 프로그램을 실행하고 출력을 구문 분석하려면 어떻게해야합니까? (0) | 2020.12.15 |
배치 스크립트 내에서 레지스트리 키 값을 어떻게 가져올 수 있습니까? (0) | 2020.12.15 |