00001 #ifndef ZINNIA_H_
00002 #define ZINNIA_H_
00003 
00004 
00005 #ifdef __cplusplus
00006 #include <cstdio>
00007 #else
00008 #include <stdio.h>
00009 #endif
00010 
00011 #ifdef __cplusplus
00012 extern "C" {
00013 #endif
00014 
00015 #ifdef _WIN32
00016 #include <windows.h>
00017 #  ifdef DLL_EXPORT
00018 #    define ZINNIA_DLL_EXTERN  __declspec(dllexport)
00019 #  else
00020 #    define ZINNIA_DLL_EXTERN  __declspec(dllimport)
00021 #  endif
00022 #endif
00023 
00024 #ifndef ZINNIA_DLL_EXTERN
00025 #  define ZINNIA_DLL_EXTERN extern
00026 #endif
00027 
00028 #ifndef SWIG
00029   typedef struct zinnia_character_t zinnia_character_t;
00030   typedef struct zinnia_recognizer_t zinnia_recognizer_t;
00031   typedef struct zinnia_result_t zinnia_result_t;
00032   typedef struct zinnia_trainer_t zinnia_trainer_t;
00033 
00034   
00035   ZINNIA_DLL_EXTERN int zinnia_do(int argc, char **argv);
00036   ZINNIA_DLL_EXTERN int zinnia_learn(int argc, char **argv);
00037   ZINNIA_DLL_EXTERN int zinnia_convert(int argc, char **argv);
00038   ZINNIA_DLL_EXTERN const char* zinnia_version();
00039 
00040   
00041   ZINNIA_DLL_EXTERN zinnia_character_t*  zinnia_character_new();
00042   ZINNIA_DLL_EXTERN void        zinnia_character_destroy(zinnia_character_t *character);
00043   ZINNIA_DLL_EXTERN void        zinnia_character_set_value(zinnia_character_t *character, const char *str);
00044   ZINNIA_DLL_EXTERN void        zinnia_character_set_value2(zinnia_character_t *character, const char *str, size_t length);
00045   ZINNIA_DLL_EXTERN const char *zinnia_character_value(zinnia_character_t *character);
00046   ZINNIA_DLL_EXTERN void        zinnia_character_set_width(zinnia_character_t *character, size_t width);
00047   ZINNIA_DLL_EXTERN void        zinnia_character_set_height(zinnia_character_t *character, size_t height);
00048   ZINNIA_DLL_EXTERN size_t      zinnia_character_width(zinnia_character_t *character);
00049   ZINNIA_DLL_EXTERN size_t      zinnia_character_height(zinnia_character_t *character);
00050   ZINNIA_DLL_EXTERN void        zinnia_character_clear(zinnia_character_t *stroke);
00051   ZINNIA_DLL_EXTERN int         zinnia_character_add(zinnia_character_t *character, size_t id, int x, int y);
00052   ZINNIA_DLL_EXTERN size_t      zinnia_character_strokes_size(zinnia_character_t *character);
00053   ZINNIA_DLL_EXTERN size_t      zinnia_character_stroke_size(zinnia_character_t *character, size_t id);
00054   ZINNIA_DLL_EXTERN int         zinnia_character_x(zinnia_character_t *character, size_t id, size_t i);
00055   ZINNIA_DLL_EXTERN int         zinnia_character_y(zinnia_character_t *character, size_t id, size_t i);
00056   ZINNIA_DLL_EXTERN int         zinnia_character_parse(zinnia_character_t *character, const char *str);
00057   ZINNIA_DLL_EXTERN int         zinnia_character_parse2(zinnia_character_t *character, const char *str, size_t length);
00058   ZINNIA_DLL_EXTERN int         zinnia_character_to_string(zinnia_character_t *character, char *buf, size_t length);
00059   ZINNIA_DLL_EXTERN const char* zinnia_character_strerror(zinnia_character_t *character);
00060 
00061   
00062   ZINNIA_DLL_EXTERN const char *zinnia_result_value(zinnia_result_t *result, size_t i);
00063   ZINNIA_DLL_EXTERN float       zinnia_result_score(zinnia_result_t *result, size_t i);
00064   ZINNIA_DLL_EXTERN size_t      zinnia_result_size(zinnia_result_t *result);
00065   ZINNIA_DLL_EXTERN void        zinnia_result_destroy(zinnia_result_t *result);
00066 
00067   
00068   ZINNIA_DLL_EXTERN zinnia_recognizer_t *zinnia_recognizer_new();
00069   ZINNIA_DLL_EXTERN void                zinnia_recognizer_destroy(zinnia_recognizer_t *recognizer);
00070   ZINNIA_DLL_EXTERN int                 zinnia_recognizer_open(zinnia_recognizer_t *recognizer, const char *filename);
00071   ZINNIA_DLL_EXTERN int                 zinnia_recognizer_open_from_ptr(zinnia_recognizer_t *recognizer,
00072                                                                       const char *ptr, size_t size);
00073   ZINNIA_DLL_EXTERN int                 zinnia_recognizer_close(zinnia_recognizer_t *recognizer);
00074   ZINNIA_DLL_EXTERN size_t              zinnia_recognizer_size(zinnia_recognizer_t *recognizer);
00075   ZINNIA_DLL_EXTERN const char         *zinnia_recognizer_value(zinnia_recognizer_t *recognizer, size_t i);
00076   ZINNIA_DLL_EXTERN const char*         zinnia_recognizer_strerror(zinnia_recognizer_t *recognizer);
00077   ZINNIA_DLL_EXTERN zinnia_result_t *zinnia_recognizer_classify(zinnia_recognizer_t *recognizer,
00078                                                                       const zinnia_character_t *character,
00079                                                                       size_t nbest);
00080 
00081   
00082   ZINNIA_DLL_EXTERN zinnia_trainer_t *zinnia_trainer_new();
00083   ZINNIA_DLL_EXTERN void             zinnia_trainer_destroy(zinnia_trainer_t *trainer);
00084   ZINNIA_DLL_EXTERN int              zinnia_trainer_add(zinnia_trainer_t *trainer, const zinnia_character_t* character);
00085   ZINNIA_DLL_EXTERN void             zinnia_trainer_clear(zinnia_trainer_t *trainer);
00086   ZINNIA_DLL_EXTERN int              zinnia_trainer_train(zinnia_trainer_t *trainer, const char *filename);
00087   ZINNIA_DLL_EXTERN const char      *zinnia_trainer_strerror(zinnia_trainer_t *trainer);
00088   ZINNIA_DLL_EXTERN int              zinnia_trainer_convert_model(const char *txt_model,
00089                                                                   const char *binary_model,
00090                                                                   double compression_threshold);
00091   ZINNIA_DLL_EXTERN int              zinnia_trainer_make_header(const char *txt_model,
00092                                                                 const char *header_file,
00093                                                                 const char *name,
00094                                                                 double compression_threshold);
00095 
00096 #endif
00097 
00098 #ifdef __cplusplus
00099 }
00100 #endif
00101 
00102 
00103 #ifdef __cplusplus
00104 
00105 namespace zinnia {
00106 
00107   ZINNIA_DLL_EXTERN const char *version();
00108 
00109   class Character {
00110   public:
00111 #ifndef SWIG
00112     virtual void set_value(const char *str, size_t length) = 0;
00113 #endif
00114     virtual void set_value(const char *str) = 0;
00115     virtual const char *value() const = 0;
00116     virtual void set_width(size_t width) = 0;
00117     virtual void set_height(size_t height) = 0;
00118     virtual size_t width() const = 0;
00119     virtual size_t height() const = 0;
00120     virtual void clear() = 0;
00121     virtual bool add(size_t id, int x, int y) = 0;
00122     virtual size_t strokes_size() const = 0;
00123     virtual size_t stroke_size(size_t id) const = 0;
00124     virtual int x(size_t id, size_t i) const = 0;
00125     virtual int y(size_t id, size_t i) const = 0;
00126     virtual bool parse(const char *str) = 0;
00127     virtual const char *what() = 0;
00128 #ifndef SWIG
00129     virtual bool parse(const char *str, size_t length) = 0;
00130     virtual bool toString(char *buf, size_t length) const = 0;
00131     static Character *create();
00132 #endif
00133     virtual ~Character() {}
00134   };
00135 
00136   class Result {
00137   public:
00138     virtual const char *value(size_t i) const = 0;
00139     virtual float score(size_t i) const = 0;
00140     virtual size_t size() const = 0;
00141     virtual ~Result() {}
00142   };
00143 
00144   class Recognizer {
00145   public:
00146     virtual bool open(const char *filename) = 0;
00147     virtual bool open(const char *ptr, size_t size) = 0;
00148     virtual bool close() = 0;
00149     virtual size_t size() const = 0;
00150     virtual const char *value(size_t i) const = 0;
00151     virtual Result *classify(const Character &character, size_t nbest) const = 0;
00152     virtual const char *what() = 0;
00153     virtual ~Recognizer() {}
00154 #ifndef SWIG
00155     static Recognizer* create();
00156 #endif
00157   };
00158 
00159   class Trainer {
00160   public:
00161     virtual bool add(const Character &character) = 0;
00162     virtual void clear() = 0;
00163     virtual bool train(const char *filename) = 0;
00164     static bool convert(const char *txt_model,
00165                         const char *binary_model,
00166                         double compression_threshold);
00167     static bool makeHeader(const char *txt_model,
00168                            const char *header_file,
00169                            const char *name,
00170                            double compression_threshold);
00171     virtual const char *what() = 0;
00172     virtual ~Trainer() {}
00173 #ifndef SWIG
00174     static Trainer* create();
00175 #endif
00176   };
00177 
00178 #ifndef SWIG
00179   ZINNIA_DLL_EXTERN Recognizer* createRecognizer();
00180   ZINNIA_DLL_EXTERN Character*  createCharacter();
00181   ZINNIA_DLL_EXTERN Trainer*    createTrainer();
00182 #endif
00183 }
00184 
00185 #endif
00186 #endif