From eabdcbbbca096090c4c67cbba373748d5ef6da9b Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Thu, 21 Dec 2017 19:53:20 +0200 Subject: [PATCH] Add unary_op and subscr to keypoints object. --- src/omv/py/py_image.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/omv/py/py_image.c b/src/omv/py/py_image.c index 6b65a40e6..bd7e7867b 100644 --- a/src/omv/py/py_image.c +++ b/src/omv/py/py_image.c @@ -19,6 +19,8 @@ #include "py_helper.h" #include "py_image.h" #include "omv_boardconfig.h" +#include "py/runtime0.h" +#include "py/runtime.h" static const mp_obj_type_t py_cascade_type; static const mp_obj_type_t py_image_type; @@ -67,10 +69,40 @@ static void py_kp_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind mp_printf(print, "size:%d threshold:%d normalized:%d", array_length(self->kpts), self->threshold, self->normalized); } +mp_obj_t py_kp_unary_op(mp_uint_t op, mp_obj_t self_in) { + py_kp_obj_t *self = MP_OBJ_TO_PTR(self_in); + switch (op) { + case MP_UNARY_OP_LEN: + return MP_OBJ_NEW_SMALL_INT(array_length(self->kpts)); + + default: + return MP_OBJ_NULL; // op not supported + } +} + +static mp_obj_t py_kp_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) +{ + if (value == MP_OBJ_SENTINEL) { // load + py_kp_obj_t *self = self_in; + int size = array_length(self->kpts); + int i = mp_get_index(self->base.type, size, index, false); + kp_t *kp = array_at(self->kpts, i); + return mp_obj_new_tuple(5, (mp_obj_t []) {mp_obj_new_int(kp->x), + mp_obj_new_int(kp->y), + mp_obj_new_int(kp->score), + mp_obj_new_int(kp->octave), + mp_obj_new_int(kp->angle)}); + } + + return MP_OBJ_NULL; // op not supported +} + static const mp_obj_type_t py_kp_type = { { &mp_type_type }, .name = MP_QSTR_kp_desc, .print = py_kp_print, + .subscr = py_kp_subscr, + .unary_op = py_kp_unary_op, }; // LBP descriptor /////////////////////////////////////////////////////////////