2015-03-11 15 views
9

Video çerçevelerindeki elleri algılamak için eğitimli bir opencv kaset sınıflandırıcısı kullanıyorum ve yanlış pozitif oranımı düşürmek istiyorum. Ağda okuma, bunu algıladı, algıladıMultiScale yöntemi tarafından döndürülen rejectLevels ve levelWeights bilgileri. C++ 'da bunun mümkün olduğunu düşündüğüm here'u gördüm, sorum var - Python'da bunu yapmayı başaran biri var mı? Benzer bir soru here sorulmuştur, ancak bu, algılama yönteminin önceki bir sürümü içindi.OpenCV'deki detectMultiscale öğesinin güven düzeyini Python ile mi edinin?

Mümkünse, yöntemi çağırmak için uygun sözdizimi nedir? Sizin için işe yaradıysa, lütfen kullandığınız OpenCV sürümünü belirtin. 2.4.9’dayım.

2.4.11 API ben

import cv2 
import cv2.cv as cv 
import time 
hand_cascade = cv2.CascadeClassifier('cascade.xml') 
img = cv2.imread('test.jpg') 

rejectLevels = [] 
levelWeights = [] 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
faces = hand_cascade.detectMultiScale(gray,rejectLevels,levelWeights, 1.1, 5,cv.CV_HAAR_FIND_BIGGEST_OBJECT,(30, 30),(100,100),True) 

denedim Yani buna göre aşağıdaki sözdizimini bir

Python: cv2.CascadeClassifier.detectMultiScale(image, rejectLevels, levelWeights[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize[, outputRejectLevels]]]]]]) 

verir Ama olsun çıkış için

[[259 101 43 43] 
[354 217 43 43] 
[240 189 43 43] 
[316 182 47 47] 
[277 139 92 92]] 
[] 
[] 

sayesinde olduğunu yardım,

Ronen

cevap

1

C++ kullanımını kesmek, gerçek reddetmeLeveller ve levelWeights değerini elde etmenin bir yolu gibi görünmüyor.

7

Bu soruya gelen ve OpenCV 3.0 kullanan herkes için python API'sini kopyaladıktan sonra çalıştım.

Kaskad sınıflandırıcısında detectMultiScale, detectMultiScale2 ve detectMultiScale3 olmak üzere üç yöntem vardır. Üçüncü olanı kullanarak, bir güven/ağırlık gibi görünen şeyi elde edebildim.

faces = faceCascade.detectMultiScale3(
    gray, 
    scaleFactor=1.1, 
    minNeighbors=5, 
    minSize=(30, 30), 
    flags = cv2.CASCADE_SCALE_IMAGE, 
    outputRejectLevels = True 
) 
rects = faces[0] 
neighbours = faces[1] 
weights = faces[2] 

weights[i]

rects[i] tarafından tanımlanan yüzün güvenini maç için görünüyor. neighbours[i], geçerli dikdörtgenin bulunduğu mahalledeki eşleşmelerin sayısıdır.

+0

detectMultiScale3 benim için çalışmadı. detectMultiScale2, ikinci varyasyon olarak yoğunlukları (veya güven) döndürür. – thecheech

İlgili konular