smooth out qr indicator results

This commit is contained in:
Michele Balistreri 2024-02-22 17:22:48 +01:00
parent 69d9e44ac2
commit cecb651c01
No known key found for this signature in database
GPG Key ID: E9567DA33A4F791A
1 changed files with 24 additions and 10 deletions

View File

@ -13,6 +13,10 @@
const static screen_area_t indicator_area = { .x = 10, .y = 10, .width = 10, .height = 10 }; const static screen_area_t indicator_area = { .x = 10, .y = 10, .width = 10, .height = 10 };
#define QR_SCORE_RED 1
#define QR_SCORE_YELLOW 3
#define QR_SCORE_GREEN 5
app_err_t qrscan_decode(struct quirc *qrctx, ur_t* ur) { app_err_t qrscan_decode(struct quirc *qrctx, ur_t* ur) {
struct quirc_code qrcode; struct quirc_code qrcode;
struct quirc_data *qrdata = (struct quirc_data *)qrctx; struct quirc_data *qrdata = (struct quirc_data *)qrctx;
@ -76,11 +80,10 @@ app_err_t qrscan_scan() {
} }
uint8_t* fb; uint8_t* fb;
uint16_t score = QR_SCORE_RED;
uint16_t prev_color = 0;
while (1) { while (1) {
uint16_t prev_detection = 0;
uint16_t detection = TH_COLOR_QR_NOT_FOUND;
if (camera_next_frame(&fb) != HAL_SUCCESS) { if (camera_next_frame(&fb) != HAL_SUCCESS) {
continue; continue;
} }
@ -94,9 +97,10 @@ app_err_t qrscan_scan() {
quirc_end(&qrctx); quirc_end(&qrctx);
app_err_t qrerr = qrscan_decode(&qrctx, &ur); app_err_t qrerr = qrscan_decode(&qrctx, &ur);
score--;
if (qrerr == ERR_OK) { if (qrerr == ERR_OK) {
detection = TH_COLOR_QR_OK; score = QR_SCORE_GREEN;
hal_inactivity_timer_reset(); hal_inactivity_timer_reset();
if (qrscan_deserialize(&ur) == ERR_OK) { if (qrscan_deserialize(&ur) == ERR_OK) {
screen_wait(); screen_wait();
@ -104,10 +108,10 @@ app_err_t qrscan_scan() {
} else { } else {
ur.crc = 0; ur.crc = 0;
} }
} else if (qrerr == ERR_DECODE) { } else if (qrerr == ERR_DECODE && score < QR_SCORE_YELLOW) {
detection = TH_COLOR_QR_NOT_DECODED; score = QR_SCORE_YELLOW;
} else if (qrerr != ERR_SCAN) { } else if (qrerr != ERR_SCAN) {
detection = TH_COLOR_QR_OK; score = QR_SCORE_GREEN;
} }
screen_wait(); screen_wait();
@ -117,9 +121,19 @@ app_err_t qrscan_scan() {
goto end; goto end;
} }
if (detection != prev_detection) { uint16_t indicator_color;
screen_fill_area(&indicator_area, detection);
prev_detection = detection; if (score > QR_SCORE_YELLOW) {
indicator_color = TH_COLOR_QR_OK;
} else if (score > QR_SCORE_RED) {
indicator_color = TH_COLOR_QR_NOT_DECODED;
} else {
indicator_color = TH_COLOR_QR_NOT_FOUND;
score = QR_SCORE_RED;
}
if (prev_color != indicator_color) {
screen_fill_area(&indicator_area, indicator_color);
} }
keypad_key_t k = ui_wait_keypress(0); keypad_key_t k = ui_wait_keypress(0);