/**************************************************************************** * * xxx.h * * $Date: 18-Apr-2020 08:36 $ * * Copyright 1993-2020 re Recognition GmbH * Höhenstrasse 5a, 8280 Kreuzlingen, Switzerland * +41 (0)71 6725100 * info@reRecognition.com * www.reRecognition.com * ****************************************************************************/ #ifndef INC_XXX #define INC_XXX "1.0a" #define XXX_MAJOR 0x10 #define XXX_MINOR 'a' #define XXX_MKVER(major, minor) (((major)<<8) | (minor)) #define XXX_VERSION XXX_MKVER(XXX_MAJOR, XXX_MINOR) /* sample usage: #if XXX_VERSION >= XXX_MKVER(0x10,'a') */ #ifdef __cplusplus extern "C" { #endif #if !defined(_MSC_VER) || (_MSC_VER<1400) #if !defined(INT_PTR) #if defined(_WIN64) || defined(_LINUX64) typedef unsigned long long INT_PTR; #else typedef unsigned long INT_PTR; #endif #endif #endif /**************************************************************************** * * definition of XXX_API * ****************************************************************************/ #ifndef XXX_API #if defined(_WIN32) || defined(_WIN64) #define XXX_API __stdcall #else #define XXX_API #endif #endif extern int licfile_authorised(const char *file_title); // DLL version only; int==BOOL /**************************************************************************** * * functions for break and error control * ****************************************************************************/ #define XXX_ERROR long #if !defined RE_ERRORHANDLING #define RE_ERRORHANDLING /* *** with multithreading, the following settings and functions are thread-specific */ /* *** they have an impact only on the related thread */ /* set/get configuration of the KADMOS error handling */ extern long XXX_API re_SetErrorConfig(long config); extern long XXX_API re_GetErrorConfig(void); /*** macros for error handling configuration ('config' values) */ /* enable/disable standard program termination by */ /* Ctrl+Break, ESC, ALT+F4 (consol app. and Windows) or Ctrl+C (consol app. only): */ #define RE_QUITENABLED 0x80000000 /* default */ /* enable/disable console output of error texts and warnings: */ #define RE_ERRORDISPLAY 0x20000000 /* default */ /* if RE_ERRORDISPLAY is disabled, a private error handler should be installed to retrieve all error messages */ /* enable/disable program termination after errors: */ #define RE_ERROREXIT 0x10000000 /* enable/disable treatment of warnings like errors (except displaying them): */ #define RE_ENABLEWARNINGS 0x08000000 /* to disable any of the former settings RE_XXXXXXXX, call the following: */ /* re_SetErrorConfig(re_GetErrorConfig()&~RE_XXXXXXXX); */ /* disable any error handling, exept return on error: */ #define RE_NOERRORHANDLING 0x00000000 /* set/get private_data of the KADMOS error text */ extern XXX_ERROR XXX_API re_SetPrivateData(long private_data); extern long XXX_API re_GetPrivateData(void); #define RE_ERROR_PROGRAM_LEN 64 #define RE_ERROR_TEXT_LEN 512 typedef struct re_ErrorText_tag { XXX_ERROR ident; char program[RE_ERROR_PROGRAM_LEN]; char text[RE_ERROR_TEXT_LEN]; char systext[RE_ERROR_TEXT_LEN]; long private_data; } re_ErrorText; typedef struct re_wErrorText_tag { XXX_ERROR ident; wchar_t program[RE_ERROR_PROGRAM_LEN]; wchar_t text[RE_ERROR_TEXT_LEN]; wchar_t systext[RE_ERROR_TEXT_LEN]; long private_data; } re_wErrorText; /* error types (values of ident) */ #define RE_SUCCESS 0x00000000 #define RE_ERROR 0x80000000 #define RE_QUIT 0x40000000 #define RE_WARNING 0x20000000 #define RE_INFO 0x10000000 #define RE_PARAMETERERROR 0x88000000 #define RE_MEMORYERROR 0x84000000 #define RE_FILEERROR 0x82000000 #define RE_PROTECTERROR 0x81000000 /* retrieve error text, call with NULL for error status (ident) only */ extern XXX_ERROR XXX_API re_GetErrorText(re_ErrorText*); extern XXX_ERROR XXX_API re_wGetErrorText(re_wErrorText*); /* set the error text and error status (ident) */ extern void XXX_API re_SetErrorText(const re_ErrorText*); extern void XXX_API re_wSetErrorText(const re_wErrorText*); /* call with NULL to display KADMOS error text */ extern void XXX_API re_DisplayErrorText(const re_ErrorText*); extern void XXX_API re_wDisplayErrorText(const re_wErrorText*); /* clear error status (ident) */ extern void XXX_API re_ClearError(void); /* *** with multithreading, the following settings for error handling */ /* *** have an impact on all threads */ /* declaration for private error handling */ typedef void (XXX_API *re_ErrorHandler)(const re_ErrorText*); typedef void (XXX_API *re_wErrorHandler)(const re_wErrorText*); /* call to install a private error handler, call with NULL to deinstall */ extern re_ErrorHandler XXX_API re_SetErrorHandler(re_ErrorHandler); extern re_wErrorHandler XXX_API re_wSetErrorHandler(re_wErrorHandler); /* call to retrieve the installed error handler (NULL == KADMOS error handler) */ extern re_ErrorHandler XXX_API re_GetErrorHandler(void); extern re_wErrorHandler XXX_API re_wGetErrorHandler(void); #endif /* RE_ERRORHANDLING */ /**************************************************************************** * * structure for initialization * ****************************************************************************/ typedef struct XXX_Init_tag { char version[8]; /* to check correct XXX version */ /*** used internally by xxx_init(), xxx_do(), and xxx_end() */ INT_PTR interna1[4]; /* do not change */ INT_PTR interna2[4]; /* do not change */ } XXX_Init; #ifndef INC_KADMOS // same declarations in kadmos.h /**************************************************************************** * * structures and macros for image description * ****************************************************************************/ typedef struct ReRect_tag { long left, top; long width, height; } ReRect; typedef struct ReStroke_tag { long color; long thickness; long timestamp; void *user_data; long x0,y0; long x1,y1; } ReStroke; typedef struct ReImage_tag { void *data; /* pointer to image/data of type 'imgtype' */ unsigned long imgtype; /* see IMGTYPE_* (pixel, pointer, stroke, ...) */ unsigned long width; /* for IMGTYPE_PIXELARRAY, -_POINTERARRAY, -_FEATURE only */ unsigned long height; /* for IMGTYPE_PIXELARRAY, -_POINTERARRAY, -_FEATURE only */ unsigned long strokecount; /* for IMGTYPE_STROKE only */ unsigned long max_strokecount;/* for IMGTYPE_STROKE only */ ReRect subimage; /* for all IMGTYPEs except IMGTYPE_FEATURE */ unsigned short bitsperpixel;/* size of 'data' items (0(=1), 1, 8, 24) */ unsigned short color; /* see COLOR_* (binary, gray, rgb) */ unsigned short photometric; /* see PHOTOMETRIC_* (min is white, ...) */ unsigned short alignment; /* alignment of pixel data, 0, 1, 2, 4 */ unsigned short orientation; /* see ORIENTATION_* (topleft, ...) */ unsigned short fillorder; /* see FILLORDER_* (MSB2LSB, LSB2MSB) */ unsigned short filler; /* 8 byte alignment */ unsigned short resunit; /* see RESUNIT_* (inch, cm, ...) */ unsigned long xresolution; unsigned long yresolution; } ReImage; /*** for every following group, the first item is default */ #define IMGTYPE_PIXELARRAY 0 #define IMGTYPE_POINTERARRAY 1 #define IMGTYPE_STROKE 2 #define IMGTYPE_FEATURE 4 #define IMGTYPE_FEATURE_INT 5 #define IMGTYPE_FEATURE_UINT 6 #define IMGTYPE_FEATURE_FLOAT 7 /* *** for IMGTYPE_FEATURE_* the following exceptions are valid: * - the feature vector is given under 'data' * - height*width is the dimension of the feature vector * - bitsperpixel (size of the feature data items) can be 8, 16, 32, 64 * - subimage and all other items of ReImage are unused * after loading a feature rec file (rec_init()), imgtype, width, height, * and bitsperpixel are set to the related classifiers default values */ #define COLOR_BINARY 0 #define COLOR_GRAY 1 #define COLOR_RGB 2 #ifndef TIFFMACROS_INCLUDED /* define this before if already included */ /*** macros according to tiff.h from Sam Leffler (Silicon Graphics Inc.) */ #define PHOTOMETRIC_MINISWHITE 0 #define PHOTOMETRIC_MINISBLACK 1 /* not for IMGTYPE_STROKE */ #define ORIENTATION_TOPLEFT 1 #define ORIENTATION_BOTLEFT 4 /* for COLOR_BINARY only, not for IMGTYPE_STROKE */ #define FILLORDER_MSB2LSB 1 /* from most to least significant bit */ #define FILLORDER_LSB2MSB 2 /* from least to most significant bit */ #define RESUNIT_NONE 1 #define RESUNIT_INCH 2 #define RESUNIT_CENTIMETER 3 #endif /* TIFFMACROS_INCLUDED */ #define RESUNIT_METER 4 typedef void *ReImageHandle; #endif // defined INC_KADMOS /**************************************************************************** * * parameters for XXX * ****************************************************************************/ /**************************************************************************** * As part of XXX_Data all items of the structure XXX_Parm are cleared by a * call to xxx_init() and set to default values. Set new values after xxx_init(). ****************************************************************************/ typedef struct XXX_Parm_tag { long general; /* see GENERAL_* macros */ /*** preprocessing */ long prep; /* see PREP_* macros */ short deskew_min; /* minimum line skew to do de-skewing */ /* zero means no de-skewing (default) */ short filler1; /* 8 byte alignment */ short noise_diameter_percent; /* noise reduction */ short noise_diameter_pixel; /* noise reduction */ short noise_width_percent; /* noise reduction */ short noise_length_percent; /* noise reduction */ short noise_width_pixel; /* noise reduction */ short noise_length_pixel; /* noise reduction */ INT_PTR hookparm; /* hook - for private use */ } XXX_Parm; /**************************************************************************** * * macros for preprocessing control * ****************************************************************************/ #define GENERAL_XXXCALL 0x00200000 /* set by xxx_init(), xxx_do(),.. */ #ifndef INC_KADMOS // same declarations in kadmos.h #define PREP_NOSPOTREMOVAL 0x00000002 /* don't remove spots */ #define PREP_AUTO_NOISEREDUCTION 0x00000004 /* controlled noise reduction */ #define PREP_RGBTOGRAY_COLORGRAY 0x00000000 /* rgb to gray normal (default) */ #define PREP_RGBTOGRAY_COLORMIN 0x00000010 /* rgb to gray remove color */ #define PREP_RGBTOGRAY_COLORMAX 0x00000020 /* rgb to gray enhance color */ #define PREP_GRAYTOBIN_VERY_THIN 0x00000100 /* gray to bin very low level */ #define PREP_GRAYTOBIN_THIN 0x00000200 /* gray to bin low level */ #define PREP_GRAYTOBIN_MEDIUM 0x00000300 /* gray to bin medium level (default) */ #define PREP_GRAYTOBIN_THICK 0x00000400 /* gray to bin high level */ #define PREP_GRAYTOBIN_VERY_THICK 0x00000500 /* gray to bin very high level */ #define PREP_GRAYTOBIN_UNIFORM 0x00000800 /* gray to bin with one threshold only */ #define PREP_BINFILTER_VERY_THIN 0x00001000 /* smoothing very thin pixels */ #define PREP_BINFILTER_THIN 0x00002000 /* smoothing thin pixels */ #define PREP_BINFILTER_MEDIUM 0x00003000 /* smoothing normal pixels */ #define PREP_BINFILTER_THICK 0x00004000 /* smoothing thick pixels */ #define PREP_BINFILTER_VERY_THICK 0x00005000 /* smoothing very thick pixels */ #define PREP_BINFILTER 0x0000f000 #define PREP_REMOVE_BACKGROUND_AUTO 0x00010000 /* remove image background using histogram - (for color images only) */ #define PREP_REMOVE_BACKGROUND 0x00020000 /* remove image background - (for color images only) */ #define PREP_INPLACE 0x80000000 /* overwrite image in preprocessing */ #endif // defined INC_KADMOS /**************************************************************************** * * module XXX * ****************************************************************************/ #define PLATINUM_WCHAR_SIZE 32 /* size of platinum_wchar in byte */ #define PLATINUM_WCHAR_COUNT 16 /* count of wchars in platinum_wchar */ #define PLATINUM_ALT 8 /* maximum number of recognition alternatives */ #define PLATINUM_VALUE_MAX 140 /* limit for recognized platinum label */ #define PLATINUM_VALUE_OK 80 /* limit for reliable recognized platinum label */ typedef struct XXX_Data_tag { XXX_Init init; /* set before calling rec_init() */ /*** parameters for xxx_do() - set after calling xxx_init() */ XXX_Parm parm; /* defaults will be set by xxx_init() */ /*** representation of image data */ ReImage gold_image; /* signature image from database */ ReImage probe_image; /* signature image to be compared */ /*** recognition control */ long busy; /* !=0: recognition under progress */ /*** intermediate results of xxx_do() */ short platinum_wchar[PLATINUM_ALT][PLATINUM_WCHAR_COUNT]; /* platinum recognition results */ unsigned char platinum_value[PLATINUM_ALT]; /* uncertainty of platinum recognition 0...255 */ unsigned char comparison_value_e; /* euclidian distance to gold signature. 0 means best fit */ unsigned char comparison_value_m; /* mahalanobis distance to gold signature. 0 means best fit */ unsigned char comparison_value_s; /* SVM + Turbo distance to gold signature. 0 means best fit */ /*** final result of xxx_do() */ unsigned char comparison_final_value; /* combined distance to gold signature. 0...255 */ } XXX_Data; extern XXX_ERROR XXX_API xxx_init (XXX_Data *, const char *file_title); extern XXX_ERROR XXX_API xxx_winit (XXX_Data *, const wchar_t *file_title); extern XXX_ERROR XXX_API xxx_filetitle (const XXX_Data *, char *file_title); /* char, wchar_t */ extern XXX_ERROR XXX_API xxx_do (XXX_Data *); extern XXX_ERROR XXX_API xxx_end (XXX_Data *); /**************************************************************************** * * API to config preprocessing (Windows only, reconfig.dll is required): * xxx_config(), xxx_config_close() * APIs to read and write image files (kadmos.dll or reimageio.lib is required): * re_openimagefile(), re_wopenimagefile() - open an image file * re_readimagefile() - read from an open image file into ReImage data * re_writeimagefile() - write a ReImage into an open image file * re_endofimagefile() - check end of file * re_closeimagefile() - close the image file * re_readimage(), re_wreadimage() - read single/first image into ReImage data * re_writeimage(), re_wwriteimage() - write one single ReImage into an image file * APIs to convert images from and to bitmap data: * re_image2bmp() - to convert ReImage data into bitmaps * re_bmp2image() - to convert bitmaps into ReImage data * APIs to read/write images from/to the clipboard: * re_clipboard2image() - get the clipboard content into ReImage data * re_image2clipboard() - place a ReImage on the clipboard * APIs to convert images from and to HBITMAP data: * re_image2hbitmap() - to convert ReImage data into HBITMAP data * re_hbitmap2image() - to convert HBITMAP data into ReImage data * API to get the image from an image handle: * re_imagehandle2image() - extract the content of an image handle * API to free allocated memory from all the image functions above: * re_freeimage() - free allocated memory of images * APIs to manipulate a ReImage: * re_createimage() * re_cloneimage() * re_subimage() * re_rotateimage() * re_getpixel() * re_setpixel() * re_fillimage() * ****************************************************************************/ /**************************************************************************** * * For PNG support, this software (kadmos.dll, reimageio.lib) uses * portions of libpng. Copyright 2000-2002, Glenn-Randers * * For JPEG support, this software (kadmos.dll, reimageio.lib) is based in * part on the work of the Independent JPEG Group. * * For TIFF support, this software (kadmos.dll, reimageio.lib) is based in part * on work of Sam Leffler, Silicon Graphics Inc., and the University of California. * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. * Copyright (c) 1985, 1986 The Regents of the University of California * ****************************************************************************/ #if (defined(_WIN32) || defined(_WIN64)) /* dialog to set preprocessing parameters */ extern XXX_ERROR XXX_API xxx_config(XXX_Data *); extern void XXX_API xxx_config_close(void); extern XXX_ERROR XXX_API about_xxx(void); /* the above functions are implemented in a separate DLL, */ /* no error-handling is supported (except the return value) */ #endif #ifndef INC_KADMOS /* read/write images from/to files */ typedef void *ReFileHandle; #if ((defined(_WIN32) || defined(_WIN64)) && !defined(_WIN32_WCE)) || defined(_CONSOLE) extern XXX_ERROR XXX_API GetPrivateFileName(char *file_title, const char *filter, unsigned int mode, const char *boxtext, const char *inifile, const char *section, const char *entry); /* filter, mode, boxtext=Title see Windows function GetOpenFileName() */ /* inifile, section, entry see Windows function GetPrivateProfileString() */ #if !defined(_WIN32) && !defined(_WIN64) && !defined(OF_READ) /* values of mode */ #define OF_READ 0x00000000 #define OF_CREATE 0x00001000 /* has to be set if the file doesn't exist! */ #define OF_PROMPT 0x00002000 #define OF_EXIST 0x00004000 #endif #endif extern ReFileHandle XXX_API re_openimagefile(const char *file_title, const char *mode); extern ReFileHandle XXX_API re_wopenimagefile(const wchar_t *file_title, const char *mode); /* mode: "r" for read, "w" for write, "a" for append */ extern ReImageHandle XXX_API re_readimagefile(ReFileHandle, long image_number, ReImage *image); /* image_number=0 for first image in file */ extern XXX_ERROR XXX_API re_writeimagefile(ReFileHandle, const ReImage *image); /* images are always written at the end of the file */ extern int XXX_API re_endofimagefile(ReFileHandle); /* returns 1 in case of eof, 0 else */ extern XXX_ERROR XXX_API re_closeimagefile(ReFileHandle); /* read one or first image from a file */ extern ReImageHandle XXX_API re_readimage(const char *file_title, ReImage *image); extern ReImageHandle XXX_API re_wreadimage(const wchar_t *file_title, ReImage *image); /* write images from ReImage data into image files */ extern XXX_ERROR XXX_API re_writeimage(const ReImage *image, const char *file_title); extern XXX_ERROR XXX_API re_wwriteimage(const ReImage *image, const wchar_t *file_title); /* convert images from ReImage data into bitmap data */ /* on return, bmp_buffer points to a BITMAPINFOHEADER structure */ /* the bitmap bits are returned at position: */ /* (char *)bmp_buffer + (BITMAPINFOHEADER*)bmp_buffer->biSize + (BITMAPINFOHEADER*)bmp_buffer->biClrUsed * sizeof(RGBQUAD) */ extern ReImageHandle XXX_API re_image2bmp(const ReImage *image, void **bmp_buffer); /* convert images from bitmap data into ReImage data */ /* bmp_buffer is expected to point to a BITMAPINFOHEADER structure */ /* for bmp_bits==NULL the bits are expected at position: */ /* (char *)bmp_buffer + ((BITMAPINFOHEADER*)bmp_buffer)->biSize + ((BITMAPINFOHEADER*)bmp_buffer)->biClrUsed * sizeof(RGBQUAD) */ extern ReImageHandle XXX_API re_bmp2image(const void *bmp_buffer, const void *bmp_bits, ReImage *image); #if (defined(_WIN32) || defined(_WIN64)) && !defined(_WIN32_WCE) /* get clipboard content */ extern ReImageHandle XXX_API re_clipboard2image(ReImage *image); /* place an image on the clipboard */ extern XXX_ERROR XXX_API re_image2clipboard(const ReImage *image); /* convert images from HBITMAP handles to ReImage data */ extern ReImageHandle XXX_API re_hbitmap2image(HBITMAP hbmp, ReImage *image); /* convert images from ReImage data to HBITMAP handles */ extern XXX_ERROR XXX_API re_image2hbitmap(const ReImage *image, HBITMAP *hbmp); /* to free the HBITMAP handle hbmp after usage, call DeleteObject(hbmp) */ #endif /* get the image from an image handle */ extern XXX_ERROR XXX_API re_imagehandle2image(ReImageHandle, ReImage *image); /* free the memory allocated from above functions */ extern XXX_ERROR XXX_API re_freeimage(ReImageHandle); /* create/allocate an empty image based on the specification in the parameter 'image' */ extern ReImageHandle XXX_API re_createimage(ReImage *image); /* duplicate an existing image */ extern ReImageHandle XXX_API re_cloneimage(const ReImage *image, ReImage *cloneimage); /* generate a subimage of an existing image */ extern ReImageHandle XXX_API re_subimage(const ReImage *image, const ReRect *rect, ReImage *subimage); /* rotate an image */ extern ReImageHandle XXX_API re_rotateimage(const ReImage *image, ReImage *rotateimage, int angle); /* set or get the pixel color in pixel images */ extern XXX_ERROR XXX_API re_setpixel(ReImage *image, long x, long y, long color); extern XXX_ERROR XXX_API re_getpixel(const ReImage *image, long x, long y, long *color); /* fill a pixel image (or image->subimage, if specified) with color */ extern XXX_ERROR XXX_API re_fillimage(ReImage *image, long color); #endif // defined INC_KADMOS #ifdef __cplusplus } #endif #endif /* INC_XXX */