def __init__(self, database=[], features='all', perform_splits=1, num_k=1): """**kNNInteractive** (ImageList *database* = ``[]``, *features* = 'all', bool *perform_splits* = ``True``, int *num_k* = ``1``) Creates a new kNN interactive classifier instance. *database* Must be a list (or Python interable) containing glyphs to use as training data for the classifier. Any images in the list that were manually classified (have classification_state == MANUAL) will be used as training data for the classifier. Any UNCLASSIFIED or AUTOMATICALLY classified images will be ignored. When initializing a noninteractive classifier, the database *must* be non-empty. *features* A list of feature function names to use for classification. These feature names correspond to the `feature plugin methods`__. To use all available feature functions, pass in ``'all'``. .. __: plugins.html#features *perform_splits* If ``perform_splits`` is ``True``, glyphs trained with names beginning with ``_split.`` are run through a given splitting algorithm. For instance, glyphs that need to be broken into upper and lower halves for further classification of those parts would be trained as ``_split.splity``. When the automatic classifier encounters glyphs that most closely match those trained as ``_split``, it will perform the splitting algorithm and then continue to recursively classify its parts. The `splitting algorithms`__ are documented in the plugin documentation. .. __: plugins.html#segmentation New splitting algorithms can be created by `writing plugin`__ methods in the category ``Segmentation``. .. __: writing_plugins.html """ self.features = features self.feature_functions = core.ImageBase.get_feature_functions(features) num_features = features_module.get_features_length(features) _kNNBase.__init__(self, num_features=num_features, num_k=num_k) classify.InteractiveClassifier.__init__(self, database, perform_splits)
def change_feature_set(self, f): """**change_feature_set** (*features*) Changes the set of features used in the classifier to the given list of feature names. *features* These feature names correspond to the `feature plugin methods`__. To use all available feature functions, pass in ``'all'``. .. __: plugins.html#features""" self.features = f self.feature_functions = core.ImageBase.get_feature_functions(f) self.num_features = features_module.get_features_length(f) if len(self.database): self.is_dirty = True self.generate_features_on_glyphs(self.database)