mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
modules/py_ml: Enable ML module via build flags.
- Allows Make to not enter a backend dir if not used.
This commit is contained in:
parent
0540749d30
commit
0197fe3849
10
src/Makefile
10
src/Makefile
@ -198,6 +198,16 @@ MPY_CFLAGS += -DMICROPY_PY_CUBEAI=1
|
||||
MICROPY_ARGS += MICROPY_PY_CUBEAI=1
|
||||
endif
|
||||
|
||||
ifeq ($(MICROPY_PY_ML), 1)
|
||||
MPY_CFLAGS += -DMICROPY_PY_ML=1
|
||||
MICROPY_ARGS += MICROPY_PY_ML=1
|
||||
endif
|
||||
|
||||
ifeq ($(MICROPY_PY_ML), 1)
|
||||
MPY_CFLAGS += -DMICROPY_PY_ML_TFLM=1
|
||||
MICROPY_ARGS += MICROPY_PY_ML_TFLM=1
|
||||
endif
|
||||
|
||||
MPY_PENDSV_ENTRIES := $(shell echo $(MPY_PENDSV_ENTRIES) | tr -d '[:space:]')
|
||||
MPY_CFLAGS += -DMICROPY_BOARD_PENDSV_ENTRIES="$(MPY_PENDSV_ENTRIES)"
|
||||
MPY_CFLAGS += -DMP_CONFIGFILE=\<$(OMV_PORT_DIR)/omv_mpconfigport.h\>
|
||||
|
||||
@ -30,11 +30,11 @@
|
||||
*
|
||||
* TensorFlow Lite Micro ML backend.
|
||||
*/
|
||||
#if MICROPY_PY_ML_TFLM
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "imlib_config.h"
|
||||
#ifdef IMLIB_ENABLE_TFLM
|
||||
|
||||
#include "imlib_config.h"
|
||||
#include "tensorflow/lite/micro/micro_op_resolver.h"
|
||||
#include "tensorflow/lite/micro/micro_mutable_op_resolver.h"
|
||||
#include "tensorflow/lite/micro/cortex_m_generic/debug_log_callback.h"
|
||||
@ -342,4 +342,5 @@ void *ml_backend_get_output(py_ml_model_obj_t *model, size_t index) {
|
||||
mp_raise_msg(&mp_type_ValueError, MP_ERROR_TEXT("Invalid output tensor index"));
|
||||
}
|
||||
} // extern "C"
|
||||
#endif // IMLIB_ENABLE_TFLM
|
||||
#endif // MICROPY_PY_ML_TFLM
|
||||
|
||||
|
||||
@ -40,12 +40,14 @@
|
||||
#include "py_helper.h"
|
||||
#include "imlib_config.h"
|
||||
|
||||
#ifdef IMLIB_ENABLE_TFLM
|
||||
#if MICROPY_PY_ML
|
||||
#include "py_image.h"
|
||||
#include "file_utils.h"
|
||||
#include "py_ml.h"
|
||||
#include "tflm_builtin_models.h"
|
||||
#include "ulab/code/ndarray.h"
|
||||
#if MICROPY_PY_ML_TFLM
|
||||
#include "tflm_builtin_models.h"
|
||||
#endif
|
||||
|
||||
static size_t py_ml_tuple_sum(mp_obj_tuple_t *o) {
|
||||
if (o->len < 1) {
|
||||
@ -328,12 +330,15 @@ mp_obj_t py_ml_model_make_new(const mp_obj_type_t *type, size_t n_args, size_t n
|
||||
fb_alloc_mark();
|
||||
|
||||
const char *path = mp_obj_str_get_str(args[ARG_path].u_obj);
|
||||
(void) path;
|
||||
|
||||
py_ml_model_obj_t *model = mp_obj_malloc_with_finaliser(py_ml_model_obj_t, &py_ml_model_type);
|
||||
model->data = NULL;
|
||||
model->fb_alloc = args[ARG_load_to_fb].u_int;
|
||||
model->labels = mp_const_none;
|
||||
|
||||
#if MICROPY_PY_ML_TFLM
|
||||
// Model loading will use ROMFS eventually, so need to move to the backend.
|
||||
for (const tflm_builtin_model_t *_model = &tflm_builtin_models[0]; _model->name != NULL; _model++) {
|
||||
if (!strcmp(path, _model->name)) {
|
||||
// Load model data.
|
||||
@ -354,6 +359,7 @@ mp_obj_t py_ml_model_make_new(const mp_obj_type_t *type, size_t n_args, size_t n
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (model->data == NULL) {
|
||||
#if defined(IMLIB_ENABLE_IMAGE_FILE_IO)
|
||||
@ -422,4 +428,4 @@ const mp_obj_module_t ml_module = {
|
||||
// Alias for backwards compatibility
|
||||
MP_REGISTER_EXTENSIBLE_MODULE(MP_QSTR_tf, ml_module);
|
||||
MP_REGISTER_EXTENSIBLE_MODULE(MP_QSTR_ml, ml_module);
|
||||
#endif // IMLIB_ENABLE_TFLM
|
||||
#endif // MICROPY_PY_ML
|
||||
|
||||
@ -130,16 +130,9 @@ OMV_CFLAGS += -I$(TOP_DIR)/$(MLX90621_DIR)/include/
|
||||
OMV_CFLAGS += -I$(TOP_DIR)/$(MLX90640_DIR)/include/
|
||||
OMV_CFLAGS += -I$(TOP_DIR)/$(MLX90641_DIR)/include/
|
||||
OMV_CFLAGS += -I$(TOP_DIR)/$(PIXART_DIR)/include/
|
||||
OMV_CFLAGS += -I$(BUILD)/$(TENSORFLOW_DIR)/
|
||||
|
||||
CFLAGS += $(HAL_CFLAGS) $(MPY_CFLAGS) $(OMV_CFLAGS)
|
||||
|
||||
#------------- Libraries ----------------#
|
||||
ifeq ($(MICROPY_PY_AUDIO), 1)
|
||||
LIBS += $(TOP_DIR)/$(LIBPDM_DIR)/libPDMFilter_CM7_GCC_wc32.a
|
||||
endif
|
||||
LIBS += $(TOP_DIR)/$(TENSORFLOW_DIR)/libtflm/lib/libtflm-$(CPU)+fp-release.a
|
||||
|
||||
#------------- Firmware Objects ----------------#
|
||||
FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/*/*.o)
|
||||
FIRM_OBJ += $(wildcard $(BUILD)/$(HAL_DIR)/drivers/*.o)
|
||||
@ -154,7 +147,6 @@ FIRM_OBJ += $(wildcard $(BUILD)/$(MLX90640_DIR)/src/*.o)
|
||||
FIRM_OBJ += $(wildcard $(BUILD)/$(MLX90641_DIR)/src/*.o)
|
||||
FIRM_OBJ += $(wildcard $(BUILD)/$(VL53L5CX_DIR)/src/*.o)
|
||||
FIRM_OBJ += $(wildcard $(BUILD)/$(PIXART_DIR)/src/*.o)
|
||||
FIRM_OBJ += $(wildcard $(BUILD)/$(TENSORFLOW_DIR)/*.o)
|
||||
|
||||
#------------- OpenMV Objects ----------------#
|
||||
FIRM_OBJ += $(addprefix $(BUILD)/$(CMSIS_DIR)/src/, \
|
||||
@ -539,6 +531,21 @@ FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/,\
|
||||
)
|
||||
endif
|
||||
|
||||
#------------- Libraries ----------------#
|
||||
ifeq ($(MICROPY_PY_AUDIO), 1)
|
||||
LIBS += $(TOP_DIR)/$(LIBPDM_DIR)/libPDMFilter_CM7_GCC_wc32.a
|
||||
endif
|
||||
|
||||
#------------- ML libraries ----------------#
|
||||
ifeq ($(MICROPY_PY_ML_TFLM), 1)
|
||||
OMV_CFLAGS += -I$(BUILD)/$(TENSORFLOW_DIR)/
|
||||
FIRM_OBJ += $(addprefix $(BUILD)/$(TENSORFLOW_DIR)/, \
|
||||
tflm_backend.o \
|
||||
tflm_builtin_models.o \
|
||||
)
|
||||
LIBS += $(TOP_DIR)/$(TENSORFLOW_DIR)/libtflm/lib/libtflm-$(CPU)+fp-release.a
|
||||
endif
|
||||
|
||||
###################################################
|
||||
all: $(OPENMV)
|
||||
|
||||
@ -551,7 +558,9 @@ $(FW_DIR):
|
||||
FIRMWARE_OBJS: | $(BUILD) $(FW_DIR)
|
||||
$(MAKE) -C $(CMSIS_DIR) BUILD=$(BUILD)/$(CMSIS_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
$(MAKE) -C $(HAL_DIR) BUILD=$(BUILD)/$(HAL_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
ifeq ($(MICROPY_PY_ML_TFLM), 1)
|
||||
$(MAKE) -C $(TENSORFLOW_DIR) BUILD=$(BUILD)/$(TENSORFLOW_DIR) CFLAGS="$(CFLAGS) -MMD" headers
|
||||
endif
|
||||
$(MAKE) -C $(MICROPY_DIR)/ports/$(PORT) BUILD=$(BUILD)/$(MICROPY_DIR) $(MICROPY_ARGS)
|
||||
$(MAKE) -C $(GENX320_DIR) BUILD=$(BUILD)/$(GENX320_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
$(MAKE) -C $(LEPTON_DIR) BUILD=$(BUILD)/$(LEPTON_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
@ -564,7 +573,9 @@ endif
|
||||
$(MAKE) -C $(MLX90641_DIR) BUILD=$(BUILD)/$(MLX90641_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
$(MAKE) -C $(VL53L5CX_DIR) BUILD=$(BUILD)/$(VL53L5CX_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
$(MAKE) -C $(PIXART_DIR) BUILD=$(BUILD)/$(PIXART_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
ifeq ($(MICROPY_PY_ML_TFLM), 1)
|
||||
$(MAKE) -C $(TENSORFLOW_DIR) BUILD=$(BUILD)/$(TENSORFLOW_DIR) CFLAGS="$(CFLAGS) -MMD" all
|
||||
endif
|
||||
$(MAKE) -C $(OMV_DIR) BUILD=$(BUILD)/$(OMV_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
|
||||
# This target generates the main/app firmware image located at 0x08010000
|
||||
|
||||
@ -28,10 +28,6 @@ UVC_DIR := $(OMV_DIR)/ports/$(PORT)/uvc
|
||||
MCU_SERIES := $(shell echo $(MCU) | cut -c6-7 | tr '[:upper:]' '[:lower:]')
|
||||
MCU_LOWER := $(shell echo $(MCU) | tr '[:upper:]' '[:lower:]')
|
||||
HAL_DIR := hal/stm32/$(MCU_SERIES)
|
||||
TFLM_CORE := $(CPU)
|
||||
ifeq ($(CPU),$(filter $(CPU),cortex-m4 cortex-m7))
|
||||
TFLM_CORE := $(CPU)+fp
|
||||
endif
|
||||
|
||||
SIGN_TOOL = $(TOOLS)/st/cubeprog/bin/STM32MP_SigningTool_CLI
|
||||
PROG_TOOL = $(TOOLS)/st/cubeprog/bin/STM32_Programmer.sh
|
||||
@ -128,7 +124,6 @@ OMV_CFLAGS += -I$(TOP_DIR)/$(MLX90641_DIR)/include/
|
||||
OMV_CFLAGS += -I$(TOP_DIR)/$(PIXART_DIR)/include/
|
||||
OMV_CFLAGS += -I$(TOP_DIR)/$(DISPLAY_DIR)/include/
|
||||
OMV_CFLAGS += -I$(TOP_DIR)/$(LIBPDM_DIR)/
|
||||
OMV_CFLAGS += -I$(BUILD)/$(TENSORFLOW_DIR)/
|
||||
|
||||
ifeq ($(OMV_ENABLE_UVC), 1)
|
||||
UVC_CFLAGS := $(CFLAGS) $(HAL_CFLAGS)
|
||||
@ -147,12 +142,6 @@ endif
|
||||
|
||||
CFLAGS += $(HAL_CFLAGS) $(MPY_CFLAGS) $(OMV_CFLAGS)
|
||||
|
||||
#------------- Libraries ----------------#
|
||||
ifeq ($(MICROPY_PY_AUDIO), 1)
|
||||
LIBS += $(TOP_DIR)/$(LIBPDM_DIR)/libPDMFilter_CM7_GCC_wc32.a
|
||||
endif
|
||||
LIBS += $(TOP_DIR)/$(TENSORFLOW_DIR)/libtflm/lib/libtflm-$(TFLM_CORE)-release.a
|
||||
|
||||
#------------- Firmware Objects ----------------#
|
||||
FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/*/*.o)
|
||||
|
||||
@ -276,7 +265,6 @@ FIRM_OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/imlib/, \
|
||||
zbar.o \
|
||||
)
|
||||
|
||||
FIRM_OBJ += $(wildcard $(BUILD)/$(TENSORFLOW_DIR)/*.o)
|
||||
FIRM_OBJ += $(wildcard $(BUILD)/$(OMV_DIR)/ports/$(PORT)/*.o)
|
||||
|
||||
#------------- MicroPy Objects -------------------#
|
||||
@ -653,6 +641,21 @@ UVC_OBJ += $(wildcard $(BUILD)/$(VL53L5CX_DIR)/src/*.o)
|
||||
UVC_OBJ += $(wildcard $(BUILD)/$(PIXART_DIR)/src/*.o)
|
||||
endif
|
||||
|
||||
#------------- Libraries ----------------#
|
||||
ifeq ($(MICROPY_PY_AUDIO), 1)
|
||||
LIBS += $(TOP_DIR)/$(LIBPDM_DIR)/libPDMFilter_CM7_GCC_wc32.a
|
||||
endif
|
||||
|
||||
#------------- ML libraries ----------------#
|
||||
ifeq ($(MICROPY_PY_ML_TFLM), 1)
|
||||
OMV_CFLAGS += -I$(BUILD)/$(TENSORFLOW_DIR)/
|
||||
FIRM_OBJ += $(addprefix $(BUILD)/$(TENSORFLOW_DIR)/, \
|
||||
tflm_backend.o \
|
||||
tflm_builtin_models.o \
|
||||
)
|
||||
LIBS += $(TOP_DIR)/$(TENSORFLOW_DIR)/libtflm/lib/libtflm-$(CPU)+fp-release.a
|
||||
endif
|
||||
|
||||
###################################################
|
||||
all: $(OPENMV)
|
||||
|
||||
@ -665,7 +668,9 @@ $(FW_DIR):
|
||||
FIRMWARE_OBJS: | $(BUILD) $(FW_DIR)
|
||||
$(MAKE) -C $(CMSIS_DIR) BUILD=$(BUILD)/$(CMSIS_DIR) CFLAGS="$(CFLAGS) -fno-strict-aliasing -MMD"
|
||||
$(MAKE) -C $(HAL_DIR) BUILD=$(BUILD)/$(HAL_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
ifeq ($(MICROPY_PY_ML_TFLM), 1)
|
||||
$(MAKE) -C $(TENSORFLOW_DIR) BUILD=$(BUILD)/$(TENSORFLOW_DIR) CFLAGS="$(CFLAGS) -MMD" headers
|
||||
endif
|
||||
$(MAKE) -C $(MICROPY_DIR)/ports/$(PORT) BUILD=$(BUILD)/$(MICROPY_DIR) $(MICROPY_ARGS)
|
||||
$(MAKE) -C $(GENX320_DIR) BUILD=$(BUILD)/$(GENX320_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
$(MAKE) -C $(LEPTON_DIR) BUILD=$(BUILD)/$(LEPTON_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
@ -682,7 +687,9 @@ endif
|
||||
$(MAKE) -C $(VL53L5CX_DIR) BUILD=$(BUILD)/$(VL53L5CX_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
$(MAKE) -C $(PIXART_DIR) BUILD=$(BUILD)/$(PIXART_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
$(MAKE) -C $(DISPLAY_DIR) BUILD=$(BUILD)/$(DISPLAY_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
ifeq ($(MICROPY_PY_ML_TFLM), 1)
|
||||
$(MAKE) -C $(TENSORFLOW_DIR) BUILD=$(BUILD)/$(TENSORFLOW_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
endif
|
||||
$(MAKE) -C $(OMV_DIR) BUILD=$(BUILD)/$(OMV_DIR) CFLAGS="$(CFLAGS) -MMD"
|
||||
ifeq ($(CUBEAI), 1)
|
||||
$(MAKE) -C $(CUBEAI_DIR) BUILD=$(BUILD)/$(CUBEAI_DIR) CFLAGS="$(CFLAGS) -fno-strict-aliasing -MMD"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user