1

私の質問は次のとおりです。marilena+flartoolkitに「独自の」haarcascadeXMLを使用するにはどうすればよいですか。私は狂ったようにグーグルしていて、ここでこれに遭遇しました:

http://www.moment77.se/flash-classes/code-snippets/convert-haar-cascades-from-xml-to-actionscript/

ただし、PHPスクリプトが機能せず、画面が空白のままで、友達のサーバーも試しました。

他に何ができますか?それとも他の誰かがそれを実行することができますか?他に方法はありますか?

4

1 に答える 1

0

私は2つのことをすることでそれを機能させました。

  1. 最初の内部の引用符をエスケープしますecho
  2. 取得に使用していたノードの名前を変更しますcount(少なくとも私のサンプルデータの場合)

最終的なコードは次のようになります

<?php

$xml = simplexml_load_file('haarcascades.xml');
$stages = $xml->haarcascade_frontalface_alt->stages->_;

for($s = 0; $s < count($stages); $s++){
  $trees = $stages[$s]->trees->_;
  if($s == 0)
    echo "

    tree = firstTree = new FeatureTree(". $stages[$s]->stage_threshold.");";
  else
    echo "

    tree = tree.next = new FeatureTree(\". $stages[$s]->stage_threshold.\");";

  for($t = 0; $t < count($trees); $t++){
    $r1 = str_replace(" ", ",", trim(substr($trees[$t]->_->feature->rects->_[0], 0, strlen($trees[$t]->_->feature->rects->_[0])-1)));
    $r2 = str_replace(" ", ",", trim(substr($trees[$t]->_->feature->rects->_[1], 0, strlen($trees[$t]->_->feature->rects->_[1])-1)));
    $th = $trees[$t]->_->threshold;
    $lv = $trees[$t]->_->left_val;
    $rv = $trees[$t]->_->right_val;
    if($t == 0)
      echo "
      feature = tree.firstFeature = new Feature2Rects($th, $lv, $rv, [$r1], [$r2]);";
    else if($t == (count($trees) -1))
      echo "
      feature.next = new Feature2Rects($th, $lv, $rv, [$r1], [$r2]);";
    else
      echo "
      feature = feature.next = new Feature2Rects($th, $lv, $rv, [$r1], [$r2]);";
  }
}

$xml->haarcascade_frontalface_altカウントを作成するときの使用法に注意してください。私が使用しているxmlが上部で次のようになっているため、これは変更されました

<?xml version="1.0"?>
<opencv_storage>
    <haarcascade_frontalface_alt type_id="opencv-haar-classifier">
        <size>20 20</size>
        <stages>

その名前を、最上位ノードの名前に変更する必要があります。

出力は次のようになります(ただし、はるかに長くなります)

feature = tree.firstFeature = new Feature2Rects(-0.0951507985591888, 0.6470757126808167, 0.4017286896705627, [5,3,10,9,-1], [5,6,10,3,3]);
feature = feature.next = new Feature2Rects(6.2702340073883533e-003, 0.3999822139739990, 0.5746449232101440, [15,2,4,10,-1], [15,2,2,10,2]);
于 2013-03-19T15:59:55.780 に答える