summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex <colomar.6.4.3@gmail.com>2018-12-20 13:50:37 +0100
committerAlex <colomar.6.4.3@gmail.com>2018-12-20 13:50:37 +0100
commit9ec7b1fa49c05a351788634f3d6d22346082770e (patch)
tree8820df49c27bf28001d56f0377ae5a5af5430315
parent097a789acee37cf93ce491aa1ffa77afb657868c (diff)
Add lighter proc
-rw-r--r--Makefile2
-rw-r--r--modules/menu/src/menu_tui.c12
-rw-r--r--modules/proc/inc/proc_iface.h4
-rw-r--r--modules/proc/inc/proc_iface.hpp4
-rw-r--r--modules/proc/src/proc_iface.c35
-rw-r--r--modules/proc/src/proc_lighter.cpp97
-rw-r--r--modules/save/inc/save.h4
-rw-r--r--modules/save/inc/save.hpp4
-rw-r--r--modules/save/src/save.cpp4
9 files changed, 131 insertions, 35 deletions
diff --git a/Makefile b/Makefile
index c5e2296..7891c68 100644
--- a/Makefile
+++ b/Makefile
@@ -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);