これは、マホタとミルクを使用した代替ソリューションです。
- まず、2つのディレクトリを作成
positives/
しnegatives/
ます。ここで、いくつかの例を手動で選択します。
unlabeled/
残りのデータはディレクトリにあると仮定します
- ポジティブとネガティブのすべての画像の特徴を計算する
- 分類器を学ぶ
- ラベルのない画像でその分類子を使用する
以下のコードでは、jugを使用して複数のプロセッサで実行できるようにしていますが、言及されているすべての行を削除してもコードは機能しますTaskGenerator
from glob import glob
import mahotas
import mahotas.features
import milk
from jug import TaskGenerator
@TaskGenerator
def features_for(imname):
img = mahotas.imread(imname)
return mahotas.features.haralick(img).mean(0)
@TaskGenerator
def learn_model(features, labels):
learner = milk.defaultclassifier()
return learner.train(features, labels)
@TaskGenerator
def classify(model, features):
return model.apply(features)
positives = glob('positives/*.jpg')
negatives = glob('negatives/*.jpg')
unlabeled = glob('unlabeled/*.jpg')
features = map(features_for, negatives + positives)
labels = [0] * len(negatives) + [1] * len(positives)
model = learn_model(features, labels)
labeled = [classify(model, features_for(u)) for u in unlabeled]
これはテクスチャ機能を使用します。これはおそらく十分ですが、必要にmahotas.features
応じて他の機能を試すことができます(または試してみてくださいmahotas.surf
。ただし、さらに複雑になります)。一般に、スキャンが非常に制御されていない限り、探している種類のハードしきい値で分類を行うのは難しいことがわかりました。