Вот альтернативное решение, использующее mahotas и milk .
- Начните с создания двух каталогов:
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
, но это становится более сложным).В общем, мне было трудно проводить классификацию с теми жесткими порогами, которые вы ищете, если сканирование не очень контролируемое.