お世話になります。
opencvで haarcascade形式のxmlのデータをjs形式に変換したく考えています。
変換したいxmlのデータURL
このデータを以下のPythonコードでjs形式に変換しようとしているのですが、
File "p.py", line 72, in <module>
convertCascadeToJS(sys.argv[1])
といったエラーでたりとうまくいきません。
何か上記のようなxmlデータをjs形式に変換する手法をご教示いただければと思います。宜しくお願いします。
python
1#!/usr/bin/env python 2 3import xmltodict 4import json 5import sys 6import os 7 8def cascadeParse(fname): 9 xmlString = open(fname).read() 10 cascadeDict = xmltodict.parse(xmlString) 11 12 root = cascadeDict['opencv_storage']['cascade'] 13 14 features = [map(int, x['rect'].split()) for x in root['features']['_']] 15 16 stages = [] 17 18 for s in root['stages']['_']: 19 """ 20 <maxWeakCount>3</maxWeakCount> 21 <stageThreshold>-0.7520892024040222</stageThreshold> 22 <weakClassifiers> 23 ... 24 <weakClassifiers> 25 """ 26 stage = {} 27 stage["maxWeakCount"] = int(s['maxWeakCount']) 28 stage["stageThreshold"] = float(s['stageThreshold']) 29 stage["weakClassifiers"] = [] 30 31 for w in s["weakClassifiers"]['_']: 32 weakClassifier = {} 33 34 # internalNodes is OpenCV's somewhat obfuscated representation of the categorical tree node 35 # containing [leftChildIndex, rightChildIndex, featureIndex, 8 x int32] where the int32s 36 # are in fact a bit vector representation of the categories (LBP configurations) 37 # Since we are dealing with stumps we do not care about the left/right child 38 39 internalNodes = w["internalNodes"].split() 40 weakClassifier["featureIndex"] = int(internalNodes[2]) 41 weakClassifier["featureRectangle"] = features[weakClassifier["featureIndex"]] 42 weakClassifier["categoryBitVector"] = map(int, internalNodes[3:]) 43 weakClassifier["leafValues"] = map(float, w["leafValues"].split()) 44 stage["weakClassifiers"].append(weakClassifier) 45 46 stages.append(stage) 47 48 cascade = { 49 "stages": stages, 50 "height": root['height'], 51 "width": root['width'] 52 } 53 54 return cascade 55 56def formatJS(name, cascade): 57 js = "var " + name + " = " + json.dumps(cascade, indent=4) 58 return js 59 60def convertCascadeToJS(fname): 61 fname = sys.argv[1] 62 base = os.path.basename(fname) 63 name = os.path.splitext(base)[0] 64 65 js = formatJS(name, cascadeParse(fname)) 66 67 f = open(name + ".js", "w+") 68 f.write(js) 69 70 71if __name__ == "__main__": 72 convertCascadeToJS(sys.argv[1])
といったコードで、
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/09 08:21