【发布时间】:2017-07-27 04:16:04
【问题描述】:
我有最初来自我用 OpenCV 操作的 Mnist 数据集的数字序列。它们保存在 pickle 文件中。它们是形状为 (112, 112) 的 1 通道图像。
我想通过 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?什么蟒蛇?什么平台? XML 是否正确加载? (
zeros.empty()的结果是什么?) -
@DanMašek 更新了版本。似乎级联加载正确。
zero.empty() # False.