我有最初來自我用OpenCV操作過的Mnist數據集的數字序列。他們被保存在一個泡菜文件中。它們是具有形狀的一個通道圖像(112,112)。使用OpenCV加載numpy數組二進制圖像detectMultiScale
我想通過OpenCV級聯分類器運行這些分類,類似於the face detection tutorial,而是使用這些Google-Street-View-House-Numbers-Digit-Localization cascades。
這裏是我的嘗試:
data = p.load_file('data/train_sequences00.pickle')
zero = cv2.CascadeClassifier('data/Google-Street-View-House-Numbers-Digit-Localization/cascades/cascade0/cascade.xml')
one = cv2.CascadeClassifier('data/Google-Street-View-House-Numbers-Digit-Localization/cascades/cascade1/cascade.xml')
two = cv2.CascadeClassifier('data/Google-Street-View-House-Numbers-Digit-Localization/cascades/cascade2/cascade.xml')
three = cv2.CascadeClassifier('data/Google-Street-View-House-Numbers-Digit-Localization/cascades/cascade3/cascade.xml')
four = cv2.CascadeClassifier('data/Google-Street-View-House-Numbers-Digit-Localization/cascades/cascade4/cascade.xml')
five = cv2.CascadeClassifier('data/Google-Street-View-House-Numbers-Digit-Localization/cascades/cascade5/cascade.xml')
six = cv2.CascadeClassifier('data/Google-Street-View-House-Numbers-Digit-Localization/cascades/cascade6/cascade.xml')
seven = cv2.CascadeClassifier('data/Google-Street-View-House-Numbers-Digit-Localization/cascades/cascade7/cascade.xml')
eight = cv2.CascadeClassifier('data/Google-Street-View-House-Numbers-Digit-Localization/cascades/cascade8/cascade.xml')
nine = cv2.CascadeClassifier('data/Google-Street-View-House-Numbers-Digit-Localization/cascades/cascade9/cascade.xml')
gray = np.array(data['sequences'][0]).astype(np.float32)
gray = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR)
#gray = cv2.cvtColor(img, cv2.CV_RGB2GRAY)
zeros = zero.detectMultiScale(gray, 1.3, 5, scaleFactor=0.6)
ones = one.detectMultiScale(gray, 1.3, 5, scaleFactor=0.6)
twos = two.detectMultiScale(gray, 1.3, 5, scaleFactor=0.6)
threes = three.detectMultiScale(gray, 1.3, 5, scaleFactor=0.6)
fours = four.detectMultiScale(gray, 1.3, 5, scaleFactor=0.6)
fives = five.detectMultiScale(gray, 1.3, 5, scaleFactor=0.6)
sixes = size.detectMultiScale(gray, 1.3, 5, scaleFactor=0.6)
sevens = seven.detectMultiScale(gray, 1.3, 5, scaleFactor=0.6)
eights = eight.detectMultiScale(gray, 1.3, 5, scaleFactor=0.6)
nines = nine.detectMultiScale(gray, 1.3, 5, scaleFactor=0.6)
可惜,這只是導致以下錯誤:
Traceback (most recent call last):
File "digit_cascade.py", line 22, in <module>
zeros = zero.detectMultiScale(gray, 1.3, 5, scaleFactor=0.6)
SystemError: error return without exception set
是任何人都熟悉如何生numpy的陣列裝入OpenCV的detectMultiscale
?
這裏有一些不確定因素,我有:
- 的OpenCV docs有
detectMultiscale
兩個不同的簽名。第一個目的是什麼?參見rejectLevels
和levelWeights
的論點? - 我的圖像是112x112。此圖像中的每個數字都將在11x11像素左右。級聯尺寸是20x30。爲了級聯正常工作,我需要設置什麼參數?
系統信息:
cv2.__version__ # '2.4.11'
sys.version #'2.7.12 |Anaconda 4.2.0 (x86_64)| (default, Jul 2 2016, 17:43:17) \n[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)]'
這是一個相當奇怪的錯誤信息,我會期望得到一些有意義的異常(或斷言)消息。那是什麼版本的OpenCV?什麼Python?什麼平臺? XML是否正確加載? ('zeros.empty()'的結果是什麼?) –
@DanMašek更新了版本。看來級聯裝載正確。 'zero.empty()#False'。 –