Fix a few more issues with the Haar importer

- It imports and creates binary files that don't crash the cam
- No tracking yet
- Number of features from rects is different than number of features from weakClassifiers for some reason..
This commit is contained in:
normen 2017-07-10 01:41:08 +02:00
parent c30f0616cb
commit 0002e899f8

View File

@ -62,7 +62,7 @@ def cascade_binary(path, n_stages, name):
for node in stagesElements[0].childNodes: for node in stagesElements[0].childNodes:
if node.nodeType is 1: if node.nodeType is 1:
stages.append(int(node.getElementsByTagName('maxWeakCount')[0].childNodes[0].nodeValue)) stages.append(int(node.getElementsByTagName('maxWeakCount')[0].childNodes[0].nodeValue))
print(stages)
stage_threshold = xmldoc.getElementsByTagName('stageThreshold')[0:n_stages] stage_threshold = xmldoc.getElementsByTagName('stageThreshold')[0:n_stages]
# total number of features # total number of features
@ -77,9 +77,8 @@ def cascade_binary(path, n_stages, name):
alpha1 = [] alpha1 = []
alpha2 = [] alpha2 = []
for val in leafValues: for val in leafValues:
if val.nodeValue is not None: alpha1.append(val.childNodes[0].nodeValue.split()[0])
alpha1.append(val.nodeValue.split()[0]) alpha2.append(val.childNodes[0].nodeValue.split()[1])
alpha2.append(val.nodeValue.split()[1])
# read rectangles # read rectangles
feature = xmldoc.getElementsByTagName('rects')[0:n_features] feature = xmldoc.getElementsByTagName('rects')[0:n_features]
@ -104,21 +103,34 @@ def cascade_binary(path, n_stages, name):
# write num stages # write num stages
fout.write(struct.pack('i', len(stages))) fout.write(struct.pack('i', len(stages)))
count = 0
# write num feat in stages # write num feat in stages
for s in stages: for s in stages:
fout.write(struct.pack('B', s)) # uint8_t fout.write(struct.pack('B', s)) # uint8_t
count+=1
print("Stage count (num feats): %d"%count)
count = 0
# write stages thresholds # write stages thresholds
for t in stage_threshold: for t in stage_threshold:
fout.write(struct.pack('h', int(float(t.childNodes[0].nodeValue)*256))) #int16_t fout.write(struct.pack('h', int(float(t.childNodes[0].nodeValue)*256))) #int16_t
count+=1
print("Stage count (threshold): %d"%count)
count = 0
# write features threshold 1 per feature # write features threshold 1 per feature
for t in threshold: for t in threshold:
fout.write(struct.pack('h', int(float(t.childNodes[0].nodeValue.split()[3])*4096))) #int16_t fout.write(struct.pack('h', int(float(t.childNodes[0].nodeValue.split()[3])*4096))) #int16_t
count+=1
print("Feature count (threshold): %d"%count)
count = 0
# write alpha1 1 per feature # write alpha1 1 per feature
for a in alpha1: for a in alpha1:
fout.write(struct.pack('h', int(float(a)*256))) #int16_t fout.write(struct.pack('h', int(float(a)*256))) #int16_t
count+=1
print("Feature count (left/right): %d"%count)
count = 0
# write alpha2 1 per feature # write alpha2 1 per feature
for a in alpha2: for a in alpha2:
@ -128,6 +140,9 @@ def cascade_binary(path, n_stages, name):
for f in feature: for f in feature:
rects = f.getElementsByTagName('_') rects = f.getElementsByTagName('_')
fout.write(struct.pack('B', len(rects))) # uint8_t fout.write(struct.pack('B', len(rects))) # uint8_t
count+=1
print("Feature count (rects): %d"%count)
count = 0
# write rects weights 1 per rectangle # write rects weights 1 per rectangle
for f in feature: for f in feature:
@ -142,6 +157,9 @@ def cascade_binary(path, n_stages, name):
for r in rects: for r in rects:
l = map(int, r.childNodes[0].nodeValue[:-1].split()) l = map(int, r.childNodes[0].nodeValue[:-1].split())
fout.write(struct.pack('BBBB',l[0], l[1], l[2], l[3])) #uint8_t fout.write(struct.pack('BBBB',l[0], l[1], l[2], l[3])) #uint8_t
count+=1
print("Rects count: %d"%count)
count = 0
# print cascade info # print cascade info
print("size:%dx%d"%(size[0], size[1])) print("size:%dx%d"%(size[0], size[1]))