diff options
author | AlejandroColomar <colomar.6.4.3@gmail.com> | 2019-01-05 00:03:33 +0100 |
---|---|---|
committer | AlejandroColomar <colomar.6.4.3@gmail.com> | 2019-01-05 00:03:33 +0100 |
commit | e077965e60b8cada755a0644033768522d7c9f5d (patch) | |
tree | 8f3447ef4270cbe2df510e5324723f50932c1129 | |
parent | f113eb8c0c699ef352d3405a3c32f3439c980cf4 (diff) |
Finish proc: lighters
-rw-r--r-- | modules/proc/src/proc_lighters.cpp | 286 |
1 files changed, 215 insertions, 71 deletions
diff --git a/modules/proc/src/proc_lighters.cpp b/modules/proc/src/proc_lighters.cpp index 7b5cfdf..f7519a3 100644 --- a/modules/proc/src/proc_lighters.cpp +++ b/modules/proc/src/proc_lighters.cpp @@ -66,8 +66,11 @@ struct Lighter_Properties { bool fork; bool valve; - int hood; + int hood_; + bool hood; bool wheel; + + bool ok; }; @@ -95,10 +98,14 @@ static void lighters_bgr2gray (void); static void lighters_segment_full (void); static int lighters_find (void); static void lighter_segment_body (int i); +static void lighter_rm_body (int i); static void lighter_crop_head (int i); -static void lighter_chk_wheel (int i); static void lighter_chk_hood (int i); -static void lighter_segment_head (int i); +static void lighter_rm_hood (int i); +static void lighter_chk_fork (int i); +static void lighter_chk_wheel (int i); +static void lighter_chk_valve (int i); +static void lighters_log (void); /****************************************************************************** @@ -120,32 +127,40 @@ int proc_lighter (void) lighters_find(); /* Measure time */ - clock_stop("Segment lighten"); + clock_stop("Segment lighters"); } + /* Check each lighter */ for (i = 0; (unsigned)i < lighters_n; i++) { - /* Segment lighter */ - { - /* Measure time */ - clock_start(); - - lighter_segment_body(i); + /* Measure time */ + clock_start(); - /* Measure time */ - clock_stop("Segment lighten"); - } - /* Segment interest zone */ - { - /* Measure time */ - clock_start(); - - lighter_crop_head(i); - lighter_chk_wheel(i); - lighter_chk_hood(i); - (void)lighter_segment_head; - - /* Measure time */ - clock_stop("Segment interest zone"); + lighter[i].ok = true; + lighter_segment_body(i); + lighter_rm_body(i); + lighter_crop_head(i); + lighter_chk_hood(i); + if (lighter[i].hood_ != HOOD_NOT_PRESENT) { + lighter_rm_hood(i); + } else { + proc_load_mem(7); + proc_save_mem(8); } + lighter_chk_fork(i); + lighter_chk_wheel(i); + lighter_chk_valve(i); + + /* Measure time */ + clock_stop("Check parts"); + } + /* Print results of lighters into log */ + { + /* Measure time */ + clock_start(); + + lighters_log(); + + /* Measure time */ + clock_stop("Lighters properties (log)"); } status = LIGHTER_OK; @@ -192,19 +207,24 @@ static void lighters_bgr2gray (void) proc_cvt_color(cv::COLOR_BGR2GRAY); proc_not(); - proc_border(100); proc_save_mem(1); + + proc_threshold(cv::THRESH_BINARY, IMG_IFACE_THR_OTSU); + proc_border(100); + proc_save_mem(3); + + proc_load_mem(1); + proc_border(100); + proc_save_mem(2); } static void lighters_segment_full (void) { - proc_load_mem(1); - - proc_threshold(cv::THRESH_BINARY, IMG_IFACE_THR_OTSU); + proc_load_mem(3); proc_erode_dilate(1); - proc_dilate_erode(1); - proc_save_mem(2); + proc_dilate_erode(2); + proc_save_mem(4); } static int lighters_find (void) @@ -213,8 +233,7 @@ static int lighters_find (void) int i; int tmp; - proc_load_mem(2); - + proc_load_mem(4); proc_contours(&contours_all, &hierarchy); lighters_n = contours_all.size(); @@ -237,7 +256,7 @@ static int lighters_find (void) lighter[i].pos.x = rect_rot[i].center.x; lighter[i].pos.y = rect_rot[i].center.y; - lighter[i].angle = rect_rot[i].angle; + lighter[i].angle = -rect_rot[i].angle; lighter[i].size.h = rect_rot[i].size.height; lighter[i].size.w = rect_rot[i].size.width; } @@ -253,9 +272,9 @@ static void lighter_segment_body (int i) int w; int h; - proc_load_mem(1); + proc_load_mem(2); - proc_rotate(lighter[i].pos.x, lighter[i].pos.y, lighter[i].angle); + proc_rotate(lighter[i].pos.x, lighter[i].pos.y, -lighter[i].angle); w = lighter[i].size.w * 1.25; h = lighter[i].size.h * 1.25; x = lighter[i].pos.x - (w / 2.0); @@ -266,26 +285,26 @@ static void lighter_segment_body (int i) proc_erode_dilate(1); proc_dilate_erode(1); proc_erode_dilate(lighter[i].size.w * 0.43); - proc_save_mem(3); + proc_save_mem(5); proc_contours(&contours_one, &hierarchy); proc_bounding_rect(&(contours_one[0]), &rect, true); } -static void lighter_crop_head (int i) +static void lighter_rm_body (int i) { int x; int y; int w; int h; - proc_load_mem(3); + proc_load_mem(5); proc_not(); - proc_erode(1); + proc_erode(5); proc_save_ref(); - proc_load_mem(1); - proc_rotate(lighter[i].pos.x, lighter[i].pos.y, lighter[i].angle); + proc_load_mem(3); + proc_rotate(lighter[i].pos.x, lighter[i].pos.y, -lighter[i].angle); w = lighter[i].size.w * 1.25; h = lighter[i].size.h * 1.25; x = lighter[i].pos.x - (w / 2.0); @@ -293,6 +312,17 @@ static void lighter_crop_head (int i) proc_ROI(x, y, w, h); proc_threshold(cv::THRESH_BINARY, IMG_IFACE_THR_OTSU); proc_and_2ref(); + proc_save_mem(6); +} + +static void lighter_crop_head (int i) +{ + int x; + int y; + int w; + int h; + + proc_load_mem(6); // w = rect.width * 1.15; h = rect.width * 0.65; @@ -305,61 +335,175 @@ static void lighter_crop_head (int i) rect.height = h; lighter[i].size.w = w; lighter[i].size.h = h; - proc_save_mem(4); + proc_save_mem(7); } static void lighter_chk_hood (int i) { uint8_t val1; uint8_t val2; - proc_load_mem(4); + proc_load_mem(7); + + proc_pixel_get(rect.width * 0.2, rect.height * 0.3, &val1); + proc_pixel_set(rect.width * 0.2, rect.height * 0.3, UINT8_MAX / 2); + proc_save_mem(9); - proc_pixel_get(lighter[i].size.w * 0.2, lighter[i].size.h * 0.3, &val1); - proc_pixel_set(lighter[i].size.w * 0.2, lighter[i].size.h * 0.3, 0); if (val1) { - proc_pixel_get(lighter[i].size.w * 0.2, lighter[i].size.h * 0.8, - &val2); - proc_pixel_set(lighter[i].size.w * 0.2, lighter[i].size.h * 0.8, - 0); + proc_pixel_get(rect.width * 0.2, rect.height * 0.8, &val2); + proc_pixel_set(rect.width * 0.2, rect.height * 0.8, UINT8_MAX /2); if (val2) { - lighter[i].hood = HOOD_OK; + lighter[i].hood_ = HOOD_OK; + lighter[i].hood = true; } else { - lighter[i].hood = HOOD_NOT_OK; + lighter[i].hood_ = HOOD_NOT_OK; + lighter[i].hood = false; + lighter[i].ok = false; } } else { - lighter[i].hood = HOOD_NOT_PRESENT; + lighter[i].hood_ = HOOD_NOT_PRESENT; + lighter[i].hood = false; + lighter[i].ok = false; } +} -proc_apply(); -proc_save_file(); - proc_save_mem(7); +static void lighter_rm_hood (int i) +{ + + proc_load_mem(7); + proc_border(2); + proc_save_ref(); + + proc_dilate_erode(2); + proc_erode_dilate(rect.height * 0.25); + proc_dilate(2); + proc_not(); + proc_and_2ref(); + proc_save_mem(8); +} + +static void lighter_chk_fork (int i) +{ + uint8_t val; + + proc_load_mem(8); + + proc_dilate_erode(2); + proc_pixel_get(rect.width * 0.8, rect.height * 0.8, &val); + proc_pixel_set(rect.width * 0.8, rect.height * 0.8, UINT8_MAX / 2); + proc_save_mem(10); + + if (val) { + lighter[i].fork = true; + } else { + lighter[i].fork = false; + lighter[i].ok = false; + } } static void lighter_chk_wheel (int i) { uint8_t val; - proc_load_mem(4); + proc_load_mem(8); - proc_pixel_get(lighter[i].size.w * 0.58, lighter[i].size.h * 0.19, &val); - proc_pixel_set(lighter[i].size.w * 0.58, lighter[i].size.h * 0.19, 0); - lighter[i].wheel = (bool)val; - proc_save_mem(6); + proc_dilate(5); + proc_pixel_get(rect.width * 0.58, rect.height * 0.19, &val); + proc_pixel_set(rect.width * 0.58, rect.height * 0.19, UINT8_MAX / 2); + proc_save_mem(11); + + if (val) { + lighter[i].wheel = true; + } else { + lighter[i].wheel = false; + lighter[i].ok = false; + } } -static void lighter_segment_head (int i) +static void lighter_chk_valve (int i) { + uint8_t val; + proc_load_mem(8); -/* - proc_smooth(IMGI_SMOOTH_MEDIAN, 5); - proc_threshold(cv::THRESH_BINARY, IMG_IFACE_THR_OTSU); - proc_dilate_erode(5); - proc_erode_dilate(rect[0].height * 0.25); - proc_contours(&contours, &hierarchy); - proc_bounding_rect(&(contours[0]), &(rect[0]), true); -*/ - proc_save_mem(9); + if (lighter[i].hood_ == HOOD_NOT_PRESENT) { + proc_dilate(5); + } else { + proc_dilate(10); + } + proc_pixel_get(rect.width * 0.07, rect.height * 0.92, &val); + proc_pixel_set(rect.width * 0.07, rect.height * 0.92, UINT8_MAX / 2); + proc_save_mem(12); + + if (val) { + lighter[i].valve = true; + } else { + lighter[i].valve = false; + lighter[i].ok = false; + } +} + +static void lighters_log (void) +{ + int i; + + for (i = 0; (unsigned)i < lighters_n; i++) { + /* Write diameters into log */ + snprintf(user_iface_log.line[user_iface_log.len], LOG_LINE_LEN, + "Lighter[%i]:", + i); + user_iface_log.lvl[user_iface_log.len] = 0; + (user_iface_log.len)++; + + /* Write diameters into log */ + snprintf(user_iface_log.line[user_iface_log.len], LOG_LINE_LEN, + " pos: (%i, %i) pix", + lighter[i].pos.x, + lighter[i].pos.y); + user_iface_log.lvl[user_iface_log.len] = 0; + (user_iface_log.len)++; + + /* Write diameters into log */ + snprintf(user_iface_log.line[user_iface_log.len], LOG_LINE_LEN, + " ang = %.1lf DEG", + lighter[i].angle); + user_iface_log.lvl[user_iface_log.len] = 0; + (user_iface_log.len)++; + + /* Write diameters into log */ + snprintf(user_iface_log.line[user_iface_log.len], LOG_LINE_LEN, + " hood = %s", + lighter[i].hood ? "ok" : "nok"); + user_iface_log.lvl[user_iface_log.len] = 0; + (user_iface_log.len)++; + + /* Write diameters into log */ + snprintf(user_iface_log.line[user_iface_log.len], LOG_LINE_LEN, + " fork = %s", + lighter[i].fork ? "ok" : "nok"); + user_iface_log.lvl[user_iface_log.len] = 0; + (user_iface_log.len)++; + + /* Write diameters into log */ + snprintf(user_iface_log.line[user_iface_log.len], LOG_LINE_LEN, + " wheel = %s", + lighter[i].wheel ? "ok" : "nok"); + user_iface_log.lvl[user_iface_log.len] = 0; + (user_iface_log.len)++; + + /* Write diameters into log */ + snprintf(user_iface_log.line[user_iface_log.len], LOG_LINE_LEN, + " valve = %s", + lighter[i].valve ? "ok" : "nok"); + user_iface_log.lvl[user_iface_log.len] = 0; + (user_iface_log.len)++; + + /* Write diameters into log */ + snprintf(user_iface_log.line[user_iface_log.len], LOG_LINE_LEN, + " RESULT = %s", + lighter[i].ok ? "OK" : "NOK"); + user_iface_log.lvl[user_iface_log.len] = 0; + (user_iface_log.len)++; + } } |