質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

1973閲覧

PythonでhaarcascadeのXMLをjs形式に変換

Tweet_from_JG

総合スコア14

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

1グッド

0クリップ

投稿2016/02/08 18:39

お世話になります。
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])

といったコードで、

krocky-cooky👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

convertCascadeToJS(sys.argv[1])

のsys.argvというのは
というのは、実行時のコマンドライン引数を渡すということなので、

実行時にカスケードファイルまでのパスを入力すればいいだけです。
なので
python p.py <path/to/cascade>
と入力すればいいだけです。

投稿2016/02/09 06:20

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tweet_from_JG

2016/02/09 08:21

ありがとうございました。無事解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問