2017-10-02 4 views
1

を読み込むことができません、私はこのコードを使用してそれを保存しています:がFLANNインデックスにすべての記述子を追加した後保存したFLANNインデックス

flann = cv2.flann.Index() 
    for index, filename in enumerate(os.listdir('images')): 
     img2 = cv2.imread('images/' + filename, 0) 
     kp2, des2 = surf.detectAndCompute(img2, None) 

     des_all = np.concatenate((des_all, des2)) 

    print "Training..." 
    flann.build(des_all, index_params) 

    print "Saving..." 
    flann.save('saved_index') 

これは正しくすべての情報を含むバイナリファイルを作成します。
しかし、私は苦労してロード同じファイルです。私は、その内容をロードするために正しいのparamsを供給している場合でも:

flann = cv2.flann.Index() 
    des_all = np.empty((281578, 64), dtype=np.float32) 
    flann.load(des_all, 'saved_index') 

私はnp.zerosnp.emptyを切り替えるには、手動でdes_all.flags.writeable = Trueを使用して書き込み可能な配列を設定していないが、それでも何もしてみました。
Numpyアレイの形状とタイプは正しいです。ファイルパスにも同じことが適用されます。間違った値を使用しようとすると、コンソールに警告が表示されます。

私のdes_all配列は常にゼロで埋められ、そのインデックスの検索は常に何も返しません。
提案がありますか?

答えて

1

多くの遊びの後、私は最終的に解決策を見つけました。
ドキュメンテーションはあまり役に立たないので、私は多くの試行錯誤をしなければなりませんでした。
限り、私が理解できるよう、全体の検索処理は、二つの部分に分かれています

  • 実際のデータ
  • インデックス高速処理のために

これは私が復元しようとすることを意味以前の状態、私は同じデータをFLANNのインデックスを提供する必要があり、私は保存されたデータを読み込むことができます。
それ以外の場合、インデックスは無効な位置を指し、結果は空になります。
Numpyの組み込み関数を使用して元のデータを簡単に保存できます。

+0

実際に訓練されたFLANNのデータを保存する方法を教えてください。いくつかのコードは多くの助けになります。ありがとう。 – Yaroslav

関連する問題