#define FEATURE_SIZE 62720
#define NUM_CLASS 2
-typedef enum DRAW_TARGET_ {
- INFER = 0,
- TRAIN_UNSET,
- TRAIN_SMILE,
- TRAIN_FROWN
-} DRAW_TARGET;
+typedef enum MODE_ {
+ MODE_INFER = 0,
+ MODE_TRAIN,
+} MODE;
+
+typedef enum LABEL_ {
+ LABEL_SMILE = 0,
+ LABEL_FROWN,
+ LABEL_UNSET,
+} LABEL;
typedef struct appdata {
Evas_Object *win;
Evas_Object *conform;
- Evas_Object *label;
Evas_Object *naviframe;
Elm_Object_Item *nf_it;
Eext_Circle_Surface *circle_nf;
cairo_surface_t *cr_surface; /**< cairo surface for the canvas */
cairo_t *cr; /**< cairo engine for the canvas */
- DRAW_TARGET draw_target; /**< draw target for the canvas */
- int tries; /**< tells how many data has been labeled */
+ MODE mode; /**< draw mode for the canvas */
+ LABEL label; /**< target label, if infer mode, it is answer else label */
+ int tries; /**< tells how many data has been labeled */
/**< Feature extraction related */
ml_pipeline_h pipeline; /**< handle of feature extractor */
/**
* @brief update draw target from the data. currently the label is depending on
- * ad->tries only
+ * ad->tries and ad->mode
*
* @param[in] ad appdata
* @return int APP_ERROR_NONE if success
*/
-int data_update_draw_target(appdata_s *ad);
+int data_update_label(appdata_s *ad);
/**
* @brief extract data feature from given model.
/// one-hot encoding.
/// SMILE: 0 1
/// FROWN: 1 0
- bool target_label = ad->draw_target == TRAIN_SMILE ? 0 : 1;
+ bool target_label = ad->label == LABEL_SMILE ? 0 : 1;
LOG_D("writing one-hot encoded label");
label = target_label;
if (fwrite(&label, sizeof(float), 1, file) < 0) {
void data_handle_path_data(appdata_s *ad, const char *data) {
/// handling path_data to check if it's for inference or path
if (!strcmp(data, "inference")) {
- ad->draw_target = INFER;
+ ad->mode = MODE_INFER;
} else if (!strcmp(data, "train")) {
- ad->draw_target = TRAIN_UNSET;
+ ad->mode = MODE_TRAIN;
}
+ ad->label = LABEL_UNSET;
}
-int data_update_draw_target(appdata_s *ad) {
+int data_update_label(appdata_s *ad) {
+ if (ad->mode == MODE_INFER) {
+ ad->label = LABEL_UNSET;
+ return APP_ERROR_NONE;
+ }
+
switch (ad->tries % NUM_CLASS) {
case 0:
- ad->draw_target = TRAIN_SMILE;
+ ad->label = LABEL_SMILE;
return APP_ERROR_NONE;
case 1:
- ad->draw_target = TRAIN_FROWN;
+ ad->label = LABEL_FROWN;
return APP_ERROR_NONE;
default:
LOG_E("Given label is unknown");
return status;
}
- view_set_canvas_clean(ad);
+ status = data_update_label(ad);
+ if (status != APP_ERROR_NONE) {
+ LOG_E("setting draw label failed");
+ return status;
+ }
- if (ad->draw_target == INFER) {
+ view_set_canvas_clean(ad);
+ if (ad->mode == MODE_INFER) {
elm_layout_signal_callback_add(ad->layout, "draw/proceed", "",
presenter_on_canvas_submit_inference, ad);
- } else if (ad->draw_target == TRAIN_UNSET) {
+ } else if (ad->mode == MODE_TRAIN) {
elm_layout_signal_callback_add(ad->layout, "draw/proceed", "",
presenter_on_canvas_submit_training, ad);
} else {
appdata_s *ad = (appdata_s *)data;
int status = APP_ERROR_NONE;
- status = data_update_draw_target(ad);
+ status = data_update_label(ad);
if (status != APP_ERROR_NONE) {
- LOG_E("setting draw target failed");
+ LOG_E("setting draw label failed");
return;
}
char emoji[5];
/// setting draw label and text
- switch (ad->draw_target) {
- case INFER:
+ switch (ad->label) {
+ case LABEL_UNSET:
strcpy(emoji, "❓");
break;
- case TRAIN_UNSET:
- /// fall through intended
- case TRAIN_SMILE:
+ case LABEL_SMILE:
strcpy(emoji, "😊");
break;
- case TRAIN_FROWN:
+ case LABEL_FROWN:
strcpy(emoji, "😢");
break;
default: