Skip to content

create_ocr_class_knnCreateOcrClassKnnCreateOcrClassKnncreate_ocr_class_knnT_create_ocr_class_knn🔗

Short description🔗

create_ocr_class_knnCreateOcrClassKnnCreateOcrClassKnncreate_ocr_class_knnT_create_ocr_class_knn — Create an OCR classifier using a k-Nearest Neighbor (k-NN) classifier.

Signature🔗

create_ocr_class_knn( integer WidthCharacter, integer HeightCharacter, string Interpolation, string Features, string Characters, string GenParamName, number GenParamValue, out ocr_knn OCRHandle )void CreateOcrClassKnn( const HTuple& WidthCharacter, const HTuple& HeightCharacter, const HTuple& Interpolation, const HTuple& Features, const HTuple& Characters, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* OCRHandle )static void HOperatorSet.CreateOcrClassKnn( HTuple widthCharacter, HTuple heightCharacter, HTuple interpolation, HTuple features, HTuple characters, HTuple genParamName, HTuple genParamValue, out HTuple OCRHandle )def create_ocr_class_knn( width_character: int, height_character: int, interpolation: str, features: MaybeSequence[str], characters: Sequence[str], gen_param_name: Sequence[str], gen_param_value: Sequence[Union[int, str]] ) -> HHandle

Herror T_create_ocr_class_knn( const Htuple WidthCharacter, const Htuple HeightCharacter, const Htuple Interpolation, const Htuple Features, const Htuple Characters, const Htuple GenParamName, const Htuple GenParamValue, Htuple* OCRHandle )

void HOCRKnn::HOCRKnn( Hlong WidthCharacter, Hlong HeightCharacter, const HString& Interpolation, const HTuple& Features, const HTuple& Characters, const HTuple& GenParamName, const HTuple& GenParamValue )

void HOCRKnn::HOCRKnn( Hlong WidthCharacter, Hlong HeightCharacter, const HString& Interpolation, const HString& Features, const HTuple& Characters, const HTuple& GenParamName, const HTuple& GenParamValue )

void HOCRKnn::HOCRKnn( Hlong WidthCharacter, Hlong HeightCharacter, const char* Interpolation, const char* Features, const HTuple& Characters, const HTuple& GenParamName, const HTuple& GenParamValue )

void HOCRKnn::HOCRKnn( Hlong WidthCharacter, Hlong HeightCharacter, const wchar_t* Interpolation, const wchar_t* Features, const HTuple& Characters, const HTuple& GenParamName, const HTuple& GenParamValue ) (Windows only)

public HOCRKnn( int widthCharacter, int heightCharacter, string interpolation, HTuple features, HTuple characters, HTuple genParamName, HTuple genParamValue )

public HOCRKnn( int widthCharacter, int heightCharacter, string interpolation, string features, HTuple characters, HTuple genParamName, HTuple genParamValue )

void HOCRKnn::CreateOcrClassKnn( Hlong WidthCharacter, Hlong HeightCharacter, const HString& Interpolation, const HTuple& Features, const HTuple& Characters, const HTuple& GenParamName, const HTuple& GenParamValue )

void HOCRKnn::CreateOcrClassKnn( Hlong WidthCharacter, Hlong HeightCharacter, const HString& Interpolation, const HString& Features, const HTuple& Characters, const HTuple& GenParamName, const HTuple& GenParamValue )

void HOCRKnn::CreateOcrClassKnn( Hlong WidthCharacter, Hlong HeightCharacter, const char* Interpolation, const char* Features, const HTuple& Characters, const HTuple& GenParamName, const HTuple& GenParamValue )

void HOCRKnn::CreateOcrClassKnn( Hlong WidthCharacter, Hlong HeightCharacter, const wchar_t* Interpolation, const wchar_t* Features, const HTuple& Characters, const HTuple& GenParamName, const HTuple& GenParamValue ) (Windows only)

void HOCRKnn.CreateOcrClassKnn( int widthCharacter, int heightCharacter, string interpolation, HTuple features, HTuple characters, HTuple genParamName, HTuple genParamValue )

void HOCRKnn.CreateOcrClassKnn( int widthCharacter, int heightCharacter, string interpolation, string features, HTuple characters, HTuple genParamName, HTuple genParamValue )

Description🔗

create_ocr_class_knnCreateOcrClassKnn creates an OCR classifier that uses a k-Nearest Neighbor (k-NN). The handle of the k-NN classifier is returned in OCRHandleOCRHandleocrhandle.

For a description on how a k-NN works, see create_class_knnCreateClassKnn.

The length of the feature vector of the k-NN is determined from the features that are used for the OCR, which are passed in Featuresfeaturesfeatures. The features are described below. The number of classes is determined from the names of the characters which are passed in Characterscharacterscharacters.

Featuresfeaturesfeatures can contain a tuple of several feature names. Each of these names results in one or more features to be calculated for the classifier. Some of the feature names compute gray value features (e.g., 'pixel_invar'"pixel_invar"). Because a classifier requires a constant number of features (input variables), a character to be classified is transformed to a standard size, which is determined by WidthCharacterwidthCharacterwidth_character and HeightCharacterheightCharacterheight_character. The interpolation to be used for the transformation is determined by Interpolationinterpolationinterpolation. It has the same meaning as in affine_trans_imageAffineTransImage. The interpolation should be chosen such that no aliasing effects occur in the transformation. For most applications, Interpolationinterpolationinterpolation \(=\) 'constant'"constant" should be used. It should be noted that the size of the transformed character is not chosen too large, because the generalization properties of the classifier may become bad for large sizes. In particular, large sizes will cause small segmentation errors to have a large influence on the computed features if gray value features are used. This happens because segmentation errors will change the smallest enclosing rectangle of the regions, which results in characters are zoomed differently than the characters in the training set. In most applications, sizes between 6x8 and 10x14 should be used.

The parameter Featuresfeaturesfeatures can contain the following feature names for the classification of the characters.

After the classifier has been created, it is trained using trainf_ocr_class_knnTrainfOcrClassKnn. After this, the classifier can be saved using write_ocr_class_knnWriteOcrClassKnn. Alternatively, the classifier can be used immediately after training to classify characters using do_ocr_single_class_knnDoOcrSingleClassKnn or do_ocr_multi_class_knnDoOcrMultiClassKnn.

A comparison of the k-NN and the support vector machine (SVM) (see create_ocr_class_svmCreateOcrClassSvm) typically shows that SVMs are generally slower at training, especially for huge training sets, but achieve slightly better recognition rates than k-NNs. Please note that this guideline assumes optimal tuning of the parameters of the SVM.

Execution information🔗

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

  • Processed without parallelization.

This operator returns a handle. Note that the state of an instance of this handle type may be changed by specific operators even though the handle is used as an input parameter by those operators.

Parameters🔗

WidthCharacterwidthCharacterwidth_character (input_control) integer → (integer)HTuple (Hlong)HTuple (int / long)intHtuple (Hlong)

Width of the rectangle to which the gray values of the segmented character are zoomed.

Default: 88
Suggested values: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 201, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 20
Value range: 4 ≤ WidthCharacter ≤ 20

HeightCharacterheightCharacterheight_character (input_control) integer → (integer)HTuple (Hlong)HTuple (int / long)intHtuple (Hlong)

Height of the rectangle to which the gray values of the segmented character are zoomed.

Default: 1010
Suggested values: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 201, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 20
Value range: 4 ≤ HeightCharacter ≤ 20

Interpolationinterpolationinterpolation (input_control) string → (string)HTuple (HString)HTuple (string)strHtuple (char*)

Interpolation mode for the zooming of the characters.

Default: 'constant'"constant"
List of values: 'bicubic', 'bilinear', 'constant', 'nearest_neighbor', 'weighted'"bicubic", "bilinear", "constant", "nearest_neighbor", "weighted"

Featuresfeaturesfeatures (input_control) string(-array) → (string)HTuple (HString)HTuple (string)MaybeSequence[str]Htuple (char*)

Features to be used for classification.

Default: 'default'"default"
List of values: 'anisometry', 'chord_histo', 'compactness', 'convexity', 'cooc', 'default', 'foreground', 'foreground_grid_16', 'foreground_grid_9', 'gradient_8dir', 'height', 'moments_central', 'moments_gray_plane', 'moments_region_2nd_invar', 'moments_region_2nd_rel_invar', 'moments_region_3rd_invar', 'num_connect', 'num_holes', 'num_runs', 'phi', 'pixel', 'pixel_binary', 'pixel_invar', 'projection_horizontal', 'projection_horizontal_invar', 'projection_vertical', 'projection_vertical_invar', 'ratio', 'width', 'zoom_factor'"anisometry", "chord_histo", "compactness", "convexity", "cooc", "default", "foreground", "foreground_grid_16", "foreground_grid_9", "gradient_8dir", "height", "moments_central", "moments_gray_plane", "moments_region_2nd_invar", "moments_region_2nd_rel_invar", "moments_region_3rd_invar", "num_connect", "num_holes", "num_runs", "phi", "pixel", "pixel_binary", "pixel_invar", "projection_horizontal", "projection_horizontal_invar", "projection_vertical", "projection_vertical_invar", "ratio", "width", "zoom_factor"

Characterscharacterscharacters (input_control) string-array → (string)HTuple (HString)HTuple (string)Sequence[str]Htuple (char*)

All characters of the character set to be read.

Default: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]

GenParamNamegenParamNamegen_param_name (input_control) string-array → (string)HTuple (HString)HTuple (string)Sequence[str]Htuple (char*)

This parameter is not yet supported.

Default: [][]
List of values: [][]

GenParamValuegenParamValuegen_param_value (input_control) number-array → (integer / string)HTuple (Hlong / HString)HTuple (int / long / string)Sequence[Union[int, str]]Htuple (Hlong / char*)

This parameter is not yet supported.

Default: [][]
List of values: [][]

OCRHandleOCRHandleocrhandle (output_control) ocr_knn → (handle)HTuple (HHandle)HOCRKnn, HTuple (IntPtr)HHandleHtuple (handle)

Handle of the k-NN classifier.

Example🔗

(HDevelop)

read_image (Image, 'letters')
* Segment the image.
binary_threshold(Image,&Region, 'otsu', 'dark', &UsedThreshold)\;
dilation_circle (Region, RegionDilation, 3.5)
connection (RegionDilation, ConnectedRegions)
intersection (ConnectedRegions, Region, RegionIntersection)
sort_region (RegionIntersection, Characters, 'character', 'true', 'row')
* Generate the training file.
count_obj (Characters, Number)
Classes := []
for J := 0 to 25 by 1
    Classes := [Classes,gen_tuple_const(20,chr(ord('a')+J))]
endfor
Classes := [Classes,gen_tuple_const(20,'.')]
write_ocr_trainf (Characters, Image, Classes, 'letters.trf')
* Generate and train the classifier.
read_ocr_trainf_names ('letters.trf', CharacterNames, CharacterCount)
create_ocr_class_knn (8, 10, 'constant', 'default', CharacterNames, \
                      [], [], OCRHandle)
trainf_ocr_class_knn (OCRHandle, 'letters.trf', [], [])
* Re-classify the characters in the image.
do_ocr_multi_class_knn (Characters, Image, OCRHandle, Class, Confidence)

Result🔗

If the parameters are valid, the operator create_ocr_class_knnCreateOcrClassKnn returns the value 2 (H_MSG_TRUE). If necessary, an exception is raised.

Combinations with other operators🔗

Combinations

Possible successors

trainf_ocr_class_knnTrainfOcrClassKnn

Alternatives

create_ocr_class_svmCreateOcrClassSvm

See also

do_ocr_single_class_knnDoOcrSingleClassKnn, do_ocr_multi_class_knnDoOcrMultiClassKnn, clear_class_knnClearClassKnn, create_class_knnCreateClassKnn, trainf_ocr_class_knnTrainfOcrClassKnn, classify_class_knnClassifyClassKnn

Module🔗

OCR/OCV