diff options
author | Alex <colomar.6.4.3@gmail.com> | 2018-12-20 13:50:37 +0100 |
---|---|---|
committer | Alex <colomar.6.4.3@gmail.com> | 2018-12-20 13:50:37 +0100 |
commit | 9ec7b1fa49c05a351788634f3d6d22346082770e (patch) | |
tree | 8820df49c27bf28001d56f0377ae5a5af5430315 | |
parent | 097a789acee37cf93ce491aa1ffa77afb657868c (diff) |
Add lighter proc
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | modules/menu/src/menu_tui.c | 12 | ||||
-rw-r--r-- | modules/proc/inc/proc_iface.h | 4 | ||||
-rw-r--r-- | modules/proc/inc/proc_iface.hpp | 4 | ||||
-rw-r--r-- | modules/proc/src/proc_iface.c | 35 | ||||
-rw-r--r-- | modules/proc/src/proc_lighter.cpp | 97 | ||||
-rw-r--r-- | modules/save/inc/save.h | 4 | ||||
-rw-r--r-- | modules/save/inc/save.hpp | 4 | ||||
-rw-r--r-- | modules/save/src/save.cpp | 4 |
9 files changed, 131 insertions, 35 deletions
@@ -131,7 +131,7 @@ CXXFLAGS_W += -Wextra CXXFLAGS_W += -Werror CXXFLAGS_W += -Wno-format-truncation CXXFLAGS_W += -Wno-format-zero-length -#CXXFLAGS_W += -Wno-unused-function +CXXFLAGS_W += -Wno-unused-function CXXFLAGS_W += -Wno-unused-parameter CXXFLAGS_PKG = `pkg-config --cflags ncurses` diff --git a/modules/menu/src/menu_tui.c b/modules/menu/src/menu_tui.c index ec50267..e8ba5ce 100644 --- a/modules/menu/src/menu_tui.c +++ b/modules/menu/src/menu_tui.c @@ -223,13 +223,14 @@ static void menu_tui_series (void) h = 23;
w = 80;
int N;
- N = 5;
- struct Alx_Menu mnu[5] = {
- {6, 4, "[0] Back"},
+ N = 6;
+ struct Alx_Menu mnu[6] = {
+ {8, 4, "[0] Back"},
{2, 4, "[1] Label"},
{3, 4, "[2] Objects"},
{4, 4, "[3] Coins"},
- {5, 4, "[4] Resistor"}
+ {5, 4, "[4] Resistor"},
+ {6, 4, "[5] Lighter"}
};
/* Menu loop */
@@ -250,6 +251,9 @@ static void menu_tui_series (void) case 4:
proc_mode = PROC_MODE_RESISTOR_SERIES;
break;
+ case 5:
+ proc_mode = PROC_MODE_LIGHTER_SERIES;
+ break;
}
}
diff --git a/modules/proc/inc/proc_iface.h b/modules/proc/inc/proc_iface.h index 7225f25..44f8a1e 100644 --- a/modules/proc/inc/proc_iface.h +++ b/modules/proc/inc/proc_iface.h @@ -34,7 +34,9 @@ PROC_MODE_COINS_SERIES,
PROC_MODE_COINS_CALIB,
PROC_MODE_RESISTOR_SERIES,
- PROC_MODE_RESISTOR_CALIB
+ PROC_MODE_RESISTOR_CALIB,
+ PROC_MODE_LIGHTER_SERIES,
+ PROC_MODE_LIGHTER_CALIB
};
enum Proc_DBG {
diff --git a/modules/proc/inc/proc_iface.hpp b/modules/proc/inc/proc_iface.hpp index 941467b..0396615 100644 --- a/modules/proc/inc/proc_iface.hpp +++ b/modules/proc/inc/proc_iface.hpp @@ -34,7 +34,9 @@ PROC_MODE_COINS_SERIES,
PROC_MODE_COINS_CALIB,
PROC_MODE_RESISTOR_SERIES,
- PROC_MODE_RESISTOR_CALIB
+ PROC_MODE_RESISTOR_CALIB,
+ PROC_MODE_LIGHTER_SERIES,
+ PROC_MODE_LIGHTER_CALIB
};
enum Proc_DBG {
diff --git a/modules/proc/src/proc_iface.c b/modules/proc/src/proc_iface.c index ba29a92..45ccb02 100644 --- a/modules/proc/src/proc_iface.c +++ b/modules/proc/src/proc_iface.c @@ -85,6 +85,12 @@ int proc_iface_single (int action) case PROC_MODE_RESISTOR_SERIES:
error = proc_resistor();
break;
+ case PROC_MODE_LIGHTER_CALIB:
+ error = proc_lighter_calibrate();
+ break;
+ case PROC_MODE_LIGHTER_SERIES:
+ error = proc_lighter();
+ break;
default:
error = -1;
}
@@ -110,7 +116,7 @@ void proc_iface_series (void) bool file_error;
int num_len;
char file_basename [FILENAME_MAX];
- char file_ext [80];
+ char file_ext [FILENAME_MAX];
char file_name [FILENAME_MAX];
bool proc_error;
char save_error_as [FILENAME_MAX];
@@ -122,36 +128,45 @@ void proc_iface_series (void) case PROC_MODE_LABEL_SERIES:
snprintf(proc_path, FILENAME_MAX, "%s", labels_path);
snprintf(proc_fail_path, FILENAME_MAX, "%s", labels_fail_path);
- snprintf(file_basename, 80, "b");
+ snprintf(file_basename, FILENAME_MAX, "b");
num_len = 4;
- snprintf(file_ext, 80, ".BMP");
+ snprintf(file_ext, FILENAME_MAX, ".BMP");
i = 1;
break;
case PROC_MODE_OBJECTS_SERIES:
snprintf(proc_path, FILENAME_MAX, "%s", objects_path);
snprintf(proc_fail_path, FILENAME_MAX, "%s", objects_fail_path);
- snprintf(file_basename, 80, "o");
+ snprintf(file_basename, FILENAME_MAX, "o");
num_len = 4;
- snprintf(file_ext, 80, ".jpeg");
+ snprintf(file_ext, FILENAME_MAX, ".jpeg");
i = 0;
proc_mode++;
break;
case PROC_MODE_COINS_SERIES:
snprintf(proc_path, FILENAME_MAX, "%s", coins_path);
snprintf(proc_fail_path, FILENAME_MAX, "%s", coins_fail_path);
- snprintf(file_basename, 80, "c");
+ snprintf(file_basename, FILENAME_MAX, "c");
num_len = 4;
- snprintf(file_ext, 80, ".png");
+ snprintf(file_ext, FILENAME_MAX, ".jpeg");
i = 1;
break;
case PROC_MODE_RESISTOR_SERIES:
snprintf(proc_path, FILENAME_MAX, "%s", resistors_path);
snprintf(proc_fail_path, FILENAME_MAX, "%s", resistors_fail_path);
- snprintf(file_basename, 80, "r");
+ snprintf(file_basename, FILENAME_MAX, "r");
num_len = 4;
- snprintf(file_ext, 80, ".png");
+ snprintf(file_ext, FILENAME_MAX, ".png");
i = 1;
break;
+ case PROC_MODE_LIGHTER_SERIES:
+ snprintf(proc_path, FILENAME_MAX, "%s", lighters_path);
+ snprintf(proc_fail_path, FILENAME_MAX, "%s", lighters_fail_path);
+ snprintf(file_basename, FILENAME_MAX, "lighter");
+ num_len = 4;
+ snprintf(file_ext, FILENAME_MAX, ".png");
+ i = 0;
+ proc_mode++;
+ break;
default:
return;
}
@@ -188,7 +203,7 @@ void proc_iface_series (void) /* Show log */
char txt_tmp [80];
- snprintf(txt_tmp, 80, "%04i", i);
+ snprintf(txt_tmp, FILENAME_MAX, "%04i", i);
user_iface_show_log(txt_tmp, "Item");
if (proc_debug >= PROC_DBG_STOP_ITEM) {
diff --git a/modules/proc/src/proc_lighter.cpp b/modules/proc/src/proc_lighter.cpp index 9b57e9f..85ffba2 100644 --- a/modules/proc/src/proc_lighter.cpp +++ b/modules/proc/src/proc_lighter.cpp @@ -130,7 +130,10 @@ static void pattern_calib_mm_pix (void); static void lighter_bgr2gray (void);
static void lighter_rotation_fix (void);
static void lighter_dimensions_fix (void);
-static void lighter_segment (void);
+static void lighter_segment_full (void);
+static int lighter_align (void);
+static void lighter_segment_base (void);
+static void lighter_crop (void);
static int lighter_contours (void);
static void lighter_position_pix (void);
static void lighter_size_pix (void);
@@ -217,12 +220,15 @@ int proc_lighter (void) /* Measure time */
clock_start();
- lighter_segment();
+ lighter_segment_full();
+ lighter_align();
+ lighter_segment_base();
+ lighter_crop();
/* Measure time */
clock_stop("Segment lighter");
}
- /* Find lighters positions */
+#if 0 /* Find lighters positions */
{
/* Measure time */
clock_start();
@@ -278,7 +284,7 @@ int proc_lighter (void) /* Measure time */
clock_stop("Lighter properties (log)");
}
-
+#endif
status = LIGHTER_OK;
result_lighter(status);
return status;
@@ -498,34 +504,89 @@ static void lighter_dimensions_fix (void) /* Need to correct also pattern dilatation (pattern_dimensions_get()) */
proc_load_mem(2);
- proc_ROI(pattern.origin.x_pix, pattern.origin.y_pix,
- pattern.width, pattern.height);
- proc_threshold(cv::THRESH_BINARY, IMG_IFACE_THR_OTSU);
+ proc_ROI(pattern.origin.x_pix+200, pattern.origin.y_pix+200,
+ pattern.width-400, pattern.height-200);
proc_save_mem(3);
}
-static void lighter_segment (void)
+static void lighter_segment_full (void)
{
proc_load_mem(3);
- proc_dilate_erode(8 / ratio_mm_pix);
+ proc_smooth(IMGI_SMOOTH_MEDIAN, 5);
+ proc_threshold(cv::THRESH_BINARY, 80);
proc_save_mem(4);
+}
+
+static int lighter_align (void)
+{
+ int status;
+
+ proc_load_mem(4);
+
+ proc_dilate_erode(2 / ratio_mm_pix);
+ proc_erode_dilate(4.5 / ratio_mm_pix);
+ proc_contours(&contours, &hierarchy);
+
+ /* If no contour is found, error: NOK_RESISTOR */
+ if (contours.size() != 1) {
+ status = LIGHTER_NOK_LIGHTER;
+ return status;
+ }
+
+ proc_min_area_rect(&(contours[0]), &rect_rot[0], true);
+
+ /* If width > height, it is taking into acount the incorrect side */
+ if (rect_rot[0].size.width > rect_rot[0].size.height) {
+ int tmp;
+ rect_rot[0].angle += 90.0;
+ tmp = rect_rot[0].size.width;
+ rect_rot[0].size.width = rect_rot[0].size.height;
+ rect_rot[0].size.height = tmp;
+ }
+
+ proc_rotate(rect_rot[0].center.x, rect_rot[0].center.y, rect_rot[0].angle);
- proc_distance_transform();
- proc_threshold(cv::THRESH_BINARY_INV, 30);
- proc_distance_transform();
- proc_skeleton();
- proc_threshold(cv::THRESH_BINARY_INV, 10);
- proc_save_ref();
proc_save_mem(5);
+ status = LIGHTER_OK;
+ return status;
+}
+
+static void lighter_segment_base (void)
+{
proc_load_mem(3);
- proc_and_2ref();
- proc_distance_transform();
- proc_threshold(cv::THRESH_BINARY, 10);
+
+ proc_rotate(rect_rot[0].center.x, rect_rot[0].center.y, rect_rot[0].angle);
+ proc_smooth(IMGI_SMOOTH_MEDIAN, 5);
+ proc_threshold(cv::THRESH_BINARY, 65);
+ proc_erode_dilate(rect_rot[0].size.width * 0.43);
+// proc_dilate_erode(rect_rot[0].size.width * 0.2);
+
+ proc_contours(&contours, &hierarchy);
+ proc_bounding_rect(&(contours[0]), &(rect[0]), true);
+
proc_save_mem(6);
}
+static void lighter_crop (void)
+{
+ int x;
+ int y;
+ int w;
+ int h;
+
+ proc_load_mem(3);
+
+ proc_rotate(rect_rot[0].center.x, rect_rot[0].center.y, rect_rot[0].angle);
+ w = rect[0].width * 1.2;
+ h = rect[0].width * 0.9;
+ x = rect[0].x - rect[0].width * 0.1;
+ y = rect[0].y - h * 0.9;
+ proc_ROI(x, y, w, h);
+ proc_save_mem(7);
+}
+
static int lighter_contours (void)
{
int status;
diff --git a/modules/save/inc/save.h b/modules/save/inc/save.h index dc0d850..46cab58 100644 --- a/modules/save/inc/save.h +++ b/modules/save/inc/save.h @@ -27,6 +27,8 @@ # define USER_SAVED_DIR "vision-artificial/saved/"
# define USER_LABELS_DIR "vision-artificial/labels/"
# define USER_LABELS_FAIL_DIR "vision-artificial/labels/fail"
+ # define USER_LIGHTERS_DIR "vision-artificial/lighters/"
+ # define USER_LIGHTERS_FAIL_DIR "vision-artificial/lighters/fail"
# define USER_OBJECTS_DIR "vision-artificial/objects/"
# define USER_OBJECTS_FAIL_DIR "vision-artificial/objects/fail"
# define USER_COINS_DIR "vision-artificial/coins/"
@@ -44,6 +46,8 @@ extern char saved_path [FILENAME_MAX];
extern char labels_path [FILENAME_MAX];
extern char labels_fail_path [FILENAME_MAX];
+ extern char lighters_path [FILENAME_MAX];
+ extern char lighters_fail_path [FILENAME_MAX];
extern char objects_path [FILENAME_MAX];
extern char objects_fail_path [FILENAME_MAX];
extern char coins_path [FILENAME_MAX];
diff --git a/modules/save/inc/save.hpp b/modules/save/inc/save.hpp index edabbf3..5dcf6e5 100644 --- a/modules/save/inc/save.hpp +++ b/modules/save/inc/save.hpp @@ -37,6 +37,8 @@ extern "C" { # define USER_SAVED_DIR "vision-artificial/saved/"
# define USER_LABELS_DIR "vision-artificial/labels/"
# define USER_LABELS_FAIL_DIR "vision-artificial/labels/fail"
+ # define USER_LIGHTERS_DIR "vision-artificial/lighters/"
+ # define USER_LIGHTERS_FAIL_DIR "vision-artificial/lighters/fail"
# define USER_OBJECTS_DIR "vision-artificial/objects/"
# define USER_OBJECTS_FAIL_DIR "vision-artificial/objects/fail"
# define USER_COINS_DIR "vision-artificial/coins/"
@@ -55,6 +57,8 @@ extern "C" { extern char saved_path [FILENAME_MAX];
extern char labels_path [FILENAME_MAX];
extern char labels_fail_path [FILENAME_MAX];
+ extern char lighters_path [FILENAME_MAX];
+ extern char lighters_fail_path [FILENAME_MAX];
extern char objects_path [FILENAME_MAX];
extern char objects_fail_path [FILENAME_MAX];
extern char coins_path [FILENAME_MAX];
diff --git a/modules/save/src/save.cpp b/modules/save/src/save.cpp index 861a06e..e174f8b 100644 --- a/modules/save/src/save.cpp +++ b/modules/save/src/save.cpp @@ -39,6 +39,8 @@ char user_prog_path [FILENAME_MAX]; char saved_path [FILENAME_MAX];
char labels_path [FILENAME_MAX];
char labels_fail_path [FILENAME_MAX];
+char lighters_path [FILENAME_MAX];
+char lighters_fail_path [FILENAME_MAX];
char objects_path [FILENAME_MAX];
char objects_fail_path [FILENAME_MAX];
char coins_path [FILENAME_MAX];
@@ -58,6 +60,8 @@ void save_init (void) snprintf(saved_path, FILENAME_MAX, "%s/%s/", home_path, USER_SAVED_DIR);
snprintf(labels_path, FILENAME_MAX, "%s/%s/", home_path, USER_LABELS_DIR);
snprintf(labels_fail_path, FILENAME_MAX, "%s/%s/", home_path, USER_LABELS_FAIL_DIR);
+ snprintf(lighters_path, FILENAME_MAX, "%s/%s/", home_path, USER_LIGHTERS_DIR);
+ snprintf(lighters_fail_path, FILENAME_MAX, "%s/%s/", home_path, USER_LIGHTERS_FAIL_DIR);
snprintf(objects_path, FILENAME_MAX, "%s/%s/", home_path, USER_OBJECTS_DIR);
snprintf(objects_fail_path, FILENAME_MAX, "%s/%s/", home_path, USER_OBJECTS_FAIL_DIR);
snprintf(coins_path, FILENAME_MAX, "%s/%s/", home_path, USER_COINS_DIR);
|