diff --git a/.gitignore b/.gitignore index 85813e1cbc84ce2999ad60cb6b67fb14fbb375d5..76660e4d71b3451c984a1e996c8d15bd3ec666bf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,4 @@ -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ +/workdir/ +/.config +/.vscode +.config* diff --git a/Config.uk b/Config.uk new file mode 100644 index 0000000000000000000000000000000000000000..00321e393c1c1ee4c05f63286461559b3f90759f --- /dev/null +++ b/Config.uk @@ -0,0 +1,19 @@ +choice APPOBJECTDETECTIONMICRO_DEFAULT_ENTRY + prompt "set app entry" + default APPOBJECTDETECTIONMICRO_DEMO_HELLOWORLD + + config APPOBJECTDETECTIONMICRO_CUSTOM_MAIN + bool "app object detection custom entry" + + config APPOBJECTDETECTIONMICRO_DEMO_HELLOWORLD + bool "use library's helloworld demo main function" + + config APPOBJECTDETECTIONMICRO_DEMO_PERSON_DETECTION + bool "run library's person detection demo" + + if APPOBJECTDETECTIONMICRO_DEMO_PERSON_DETECTION + config APPOBJECTDETECTIONMICRO_DEMO_PERSON_DETECTION_IMAGE_DIR + string "static image root directory" + default "/" + endif +endchoice diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..9b4a079b78c4c0d2362090ccf1272b0eafac2fdc --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +UK_ROOT ?= $(PWD)/workdir/tenon +UK_LIBS ?= $(PWD)/workdir/libs +UK_BUILD ?= $(PWD)/workdir/build + +all: + @$(MAKE) -C $(UK_ROOT) A=$(PWD) L=$(UK_LIBS) O=$(UK_BUILD) + +$(MAKECMDGOALS): + @$(MAKE) -C $(UK_ROOT) A=$(PWD) L=$(UK_LIBS) O=$(UK_BUILD) $(MAKECMDGOALS) + +initrd-img: + (cd examples/person_detection/sample_images/sample_images; find . -depth -print | cpio -H newc -o > $(PWD)/workdir/build/initrd.img) \ No newline at end of file diff --git a/Makefile.uk b/Makefile.uk new file mode 100644 index 0000000000000000000000000000000000000000..3a6585f8608e4a0dd32547b7d33ff018f1faa917 --- /dev/null +++ b/Makefile.uk @@ -0,0 +1,64 @@ +# SPDX-License-Identifier: Apache-2.0 +# Copyright 2024 The TenonOS Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +################################################################################ +# App registration +################################################################################ +$(eval $(call addlib,appobjectdetectionmicro)) + +################################################################################ +# APP flags +################################################################################ +TFLITE_MICRO_FLAG = \ + -DTF_LITE_STATIC_MEMORY \ + -DTF_LITE_DISABLE_X86_NEON + +ifdef CONFIG_ARCH_ARM_64 +GCC_INSTALLDIR_FLAGS := -idirafter $(shell LC_ALL=C $(CC) -v 2>&1 | \ + $(SED) -e '/^COLLECT_LTO_WRAPPER=\(.*\)\/lto-wrapper/!d' -e 's//\1/')/include +TFLITE_MICRO_FLAG += $(GCC_INSTALLDIR_FLAGS) +endif + +################################################################################ +# App entry +################################################################################ +ifeq ($(CONFIG_APPOBJECTDETECTIONMICRO_CUSTOM_MAIN),y) +APPOBJECTDETECTIONMICRO_SRCS-y += $(APPOBJECTDETECTIONMICRO_BASE)/main.c +endif + +ifeq ($(CONFIG_APPOBJECTDETECTIONMICRO_DEMO_HELLOWORLD), y) +DEMO_HELLOWORLD_BASE=$(APPOBJECTDETECTIONMICRO_BASE)/examples/hello_world +APPOBJECTDETECTIONMICRO_SRCS-$(CONFIG_APPOBJECTDETECTIONMICRO_DEMO_HELLOWORLD) += $(DEMO_HELLOWORLD_BASE)/hello_world_test.cc +APPOBJECTDETECTIONMICRO_SRCS-$(CONFIG_APPOBJECTDETECTIONMICRO_DEMO_HELLOWORLD) += $(DEMO_HELLOWORLD_BASE)/models/hello_world_float_model_data.cc +APPOBJECTDETECTIONMICRO_SRCS-$(CONFIG_APPOBJECTDETECTIONMICRO_DEMO_HELLOWORLD) += $(DEMO_HELLOWORLD_BASE)/models/hello_world_int8_model_data.cc + +CXXINCLUDES-$(CONFIG_APPOBJECTDETECTIONMICRO_DEMO_HELLOWORLD) += -I$(DEMO_HELLOWORLD_BASE)/ +CINCLUDES-$(CONFIG_APPOBJECTDETECTIONMICRO_DEMO_HELLOWORLD) += -I$(DEMO_HELLOWORLD_BASE)/ + +APPOBJECTDETECTIONMICRO_CFLAGS-y += $(TFLITE_MICRO_FLAG) +APPOBJECTDETECTIONMICRO_CXXFLAGS-y += $(TFLITE_MICRO_FLAG) +endif + +ifeq ($(CONFIG_APPOBJECTDETECTIONMICRO_DEMO_PERSON_DETECTION), y) +DEMO_PERSON_DETECTION_BASE=$(APPOBJECTDETECTIONMICRO_BASE)/examples/person_detection/src +APPOBJECTDETECTIONMICRO_SRCS-$(CONFIG_APPOBJECTDETECTIONMICRO_DEMO_PERSON_DETECTION) += $(wildcard $(DEMO_PERSON_DETECTION_BASE)/*.cc) +APPOBJECTDETECTIONMICRO_SRCS-$(CONFIG_APPOBJECTDETECTIONMICRO_DEMO_PERSON_DETECTION) := $(sort $(APPOBJECTDETECTIONMICRO_SRCS-$(CONFIG_APPOBJECTDETECTIONMICRO_DEMO_PERSON_DETECTION))) + +CXXINCLUDES-$(CONFIG_APPOBJECTDETECTIONMICRO_DEMO_PERSON_DETECTION) += -I$(DEMO_PERSON_DETECTION_BASE)/ +CINCLUDES-$(CONFIG_APPOBJECTDETECTIONMICRO_DEMO_PERSON_DETECTION) += -I$(DEMO_PERSON_DETECTION_BASE)/ + +APPOBJECTDETECTIONMICRO_CFLAGS-y += $(TFLITE_MICRO_FLAG) +APPOBJECTDETECTIONMICRO_CXXFLAGS-y += $(TFLITE_MICRO_FLAG) +endif diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..709e94164395ec9aa496459dab7fda486d59574d --- /dev/null +++ b/README.md @@ -0,0 +1,135 @@ +# app object detection micro + +## 介绍 + +TensorFlow Lite for Microcontrollers 是 TensorFlow 微控制器轻量级解决方案,旨在在只有几千字节内存的微控制器和其他设备上运行机器学习模型。核心运行时仅占用 Arm Cortex M3 上的 16 KB,并且能运行许多基本模型。它不需要操作系统支持,任何标准的 C 或 C++ 库,也不需要动态内存分配。 + +为TenonOS移植后,提供运行物体识别模型的能力,对输入图片中的物体进行识别项目提供两个应用示例,分别为Hello World和人脸识别。 + +## 支持架构 + +- AArch64 +- 运行平台:qemu + +## 运行项目示例 + +下载应用 + +```powershell +git clone git@gitee.com:tenonos/app-object-detect-micro.git +cd app-object-detect-micro +``` + +拉取微库依赖 + +```powershell +sh scripts/setup.sh +``` + +### 示例场景 - HelloWorld + +构建 + +```powershell +make defconfig UK_DEFCONFIG=$PWD/defconfigs/qemu-arm64-helloworld +make +``` + +运行 + +```powershell +qemu-system-aarch64 -cpu cortex-a53 -machine virt -kernel workdir/build/app-object-detection-micro_qemu-arm64 -nographic +``` + +运行结果 + +```powershell + __ __ _ _ _______ ____ _____ + \ \ / / | | | | |__ __| / __ \ / ____| + \ \ /\ / /__| | ___ ___ _ __ ___ ___ | |_ ___ | | ___ _ __ ___ _ __ | | | | (___ + \ \/ \/ / _ \ |/ __/ _ \| '_ ` _ \ / _ \ | __/ _ \ | |/ _ \ '_ \ / _ \| '_ \| | | |\___ \ + \ /\ / __/ | (_| (_) | | | | | | __/ | || (_) | | | __/ | | | (_) | | | | |__| |____) | + \/ \/ \___|_|\___\___/|_| |_| |_|\___| \__\___/ |_|\___|_| |_|\___/|_| |_|\____/|_____/ + Powered by TenonOS (0.1.0~2b9cdc31-custom) + + +[ 0.045000] Info: [libukboot] Pre-init table at 0x404820a0 - 0x404820a0 +[ 0.046000] Info: [libukboot] Constructor table at 0x404820a0 - 0x404820b8 +[ 0.046000] Info: [libukboot] Environment variables: +[ 0.048000] Info: [libukboot] PATH=/bin +[ 0.048000] Info: [libukboot] Calling main(1, ['app-object-detection-micro']) +[ 0.048000] Info: [libtflitemicro] +[ 0.048000] Info: [libtflitemicro] "Unique Tag","Total ticks across all events with that tag." +[ 0.048000] Info: [libtflitemicro] FULLY_CONNECTED, 0 +[ 0.048000] Info: [libtflitemicro] "total number of ticks", 0 +[ 0.048000] Info: [libtflitemicro] +[ 0.048000] Info: [libtflitemicro] [RecordingMicroAllocator] Arena allocation total 2360 bytes +[ 0.048000] Info: [libtflitemicro] [RecordingMicroAllocator] Arena allocation head 136 bytes +[ 0.048000] Info: [libtflitemicro] [RecordingMicroAllocator] Arena allocation tail 2224 bytes +[ 0.048000] Info: [libtflitemicro] [RecordingMicroAllocator] 'TfLiteEvalTensor data' used 240 bytes with alignment overhead (requested 240 bytes for 10 allocations) +[ 0.048000] Info: [libtflitemicro] [RecordingMicroAllocator] 'Persistent TfLiteTensor data' used 128 bytes with alignment overhead (requested 128 bytes for 2 tensors) +[ 0.048000] Info: [libtflitemicro] [RecordingMicroAllocator] 'Persistent buffer data' used 1160 bytes with alignment overhead (requested 1100 bytes for 7 allocations) +[ 0.055000] Info: [libtflitemicro] [RecordingMicroAllocator] 'NodeAndRegistration struct' used 192 bytes with alignment overhead (requested 192 bytes for 3 NodeAndRegistration structs) +[ 0.055000] Info: [libtflitemicro] ~~~ALL TESTS PASSED~~~ +``` + +### 示例场景 - 人脸识别 + +人脸识别场景所需的测试数据(examples/person_detection/sample_images),图像是96*96的灰阶raw格式,无法直接查看 + +构建 + +```powershell +make defconfig UK_DEFCONFIG=$PWD/defconfigs/qemu-arm64-persondetection +make +``` + +打包待识别的图像 + +```powershell +make initrd-img +``` + +运行 + +```powershell +qemu-system-aarch64 -cpu cortex-a53 -machine virt -kernel workdir/build/app-object-detection-micro_qemu-arm64 -nographic -initrd workdir/build/initrd.img +``` + +运行结果 + +```powershell + __ __ _ _ _______ ____ _____ + \ \ / / | | | | |__ __| / __ \ / ____| + \ \ /\ / /__| | ___ ___ _ __ ___ ___ | |_ ___ | | ___ _ __ ___ _ __ | | | | (___ + \ \/ \/ / _ \ |/ __/ _ \| '_ ` _ \ / _ \ | __/ _ \ | |/ _ \ '_ \ / _ \| '_ \| | | |\___ \ + \ /\ / __/ | (_| (_) | | | | | | __/ | || (_) | | | __/ | | | (_) | | | | |__| |____) | + \/ \/ \___|_|\___\___/|_| |_| |_|\___| \__\___/ |_|\___|_| |_|\___/|_| |_|\____/|_____/ + Powered by TenonOS (0.1.0~2b9cdc31-custom) + + +[ 0.033000] Info: [libukboot] Pre-init table at 0x404840b0 - 0x404840b0 +[ 0.033000] Info: [libukboot] Constructor table at 0x404840b0 - 0x404840c8 +[ 0.033000] Info: [libukboot] Environment variables: +[ 0.033000] Info: [libukboot] PATH=/bin +[ 0.033000] Info: [libukboot] Calling main(1, ['app-object-detection-micro']) +[ 0.048000] Info: [libtflitemicro] Read image: //image0 +[ 0.337000] Info: [libtflitemicro] person score:95%, no person score 5% +[ 0.351000] Info: [libtflitemicro] Read image: //image1 +[ 0.612000] Info: [libtflitemicro] person score:35%, no person score 65% +[ 0.612000] Info: [libtflitemicro] Read image: //image2 +[ 0.892000] Info: [libtflitemicro] person score:95%, no person score 5% +[ 0.893000] Info: [libtflitemicro] Read image: //image3 +[ 1.211000] Info: [libtflitemicro] person score:76%, no person score 24% +[ 1.211000] Info: [libtflitemicro] Read image: //image4 +[ 1.456000] Info: [libtflitemicro] person score:93%, no person score 7% +[ 1.465000] Info: [libtflitemicro] Read image: //image5 +[ 1.734000] Info: [libtflitemicro] person score:11%, no person score 89% +[ 1.744000] Info: [libtflitemicro] Read image: //image6 +[ 1.967000] Info: [libtflitemicro] person score:88%, no person score 12% +[ 1.974000] Info: [libtflitemicro] Read image: //image7 +[ 2.244000] Info: [libtflitemicro] person score:12%, no person score 88% +[ 2.244000] Info: [libtflitemicro] Read image: //image8 +[ 2.566000] Info: [libtflitemicro] person score:95%, no person score 5% +[ 2.569000] Info: [libtflitemicro] Read image: //image9 +``` diff --git a/defconfigs/qemu-arm64-helloworld b/defconfigs/qemu-arm64-helloworld new file mode 100644 index 0000000000000000000000000000000000000000..da5fab68521be2b13e3b20fd67f6f8b07584a0be --- /dev/null +++ b/defconfigs/qemu-arm64-helloworld @@ -0,0 +1,18 @@ +CONFIG_ARCH_ARM_64=y +# CONFIG_ARM64_ERRATUM_858921 is not set +# CONFIG_ARM64_ERRATUM_835769 is not set +# CONFIG_ARM64_ERRATUM_843419 is not set +CONFIG_PLAT_KVM=y +CONFIG_STACK_SIZE_PAGE_ORDER=8 +CONFIG_LIBUKBUS=y +CONFIG_LIBUKSGLIST=y +CONFIG_LIBCXX=y +CONFIG_LIBCOMPILER_RT=y +CONFIG_LIBMUSL=y + +CONFIG_LIBTFLITEMICRO=y + +CONFIG_APPOBJECTDETECTIONMICRO_DEMO_HELLOWORLD=y + +CONFIG_LIBUKDEBUG_PRINTK_INFO=y +CONFIG_LIBUKDEBUG_PRINT_TIME=y diff --git a/defconfigs/qemu-arm64-persondetection b/defconfigs/qemu-arm64-persondetection new file mode 100644 index 0000000000000000000000000000000000000000..02313ac7949250173e45198592cf1a8f859f0c32 --- /dev/null +++ b/defconfigs/qemu-arm64-persondetection @@ -0,0 +1,23 @@ +CONFIG_ARCH_ARM_64=y +# CONFIG_ARM64_ERRATUM_858921 is not set +# CONFIG_ARM64_ERRATUM_835769 is not set +# CONFIG_ARM64_ERRATUM_843419 is not set +CONFIG_PLAT_KVM=y +CONFIG_STACK_SIZE_PAGE_ORDER=8 +CONFIG_LIBUKBUS=y +CONFIG_LIBUKSGLIST=y +CONFIG_LIBCXX=y +CONFIG_LIBCOMPILER_RT=y +CONFIG_LIBMUSL=y +CONFIG_LIBTFLITEMICRO=y + +CONFIG_APPOBJECTDETECTIONMICRO_DEMO_PERSON_DETECTION=y + +CONFIG_LIBUKDEBUG_PRINTK_INFO=y +CONFIG_LIBUKDEBUG_PRINT_TIME=y + +CONFIG_LIBVFSCORE_AUTOMOUNT_ROOTFS=y +CONFIG_LIBVFSCORE_ROOTFS_INITRD=y +CONFIG_LIBVFSCORE_ROOTFS="initrd" + +CONFIG_ARM_GENERIC_TIMER=y diff --git a/examples/hello_world/hello_world_test.cc b/examples/hello_world/hello_world_test.cc new file mode 100644 index 0000000000000000000000000000000000000000..0787b9d35e770e0dd62345d77f646bbc294786df --- /dev/null +++ b/examples/hello_world/hello_world_test.cc @@ -0,0 +1,156 @@ +/* Copyright 2023 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#include + +#include "tensorflow/lite/core/c/common.h" +#include "models/hello_world_float_model_data.h" +#include "models/hello_world_int8_model_data.h" +#include "tensorflow/lite/micro/micro_interpreter.h" +#include "tensorflow/lite/micro/micro_log.h" +#include "tensorflow/lite/micro/micro_mutable_op_resolver.h" +#include "tensorflow/lite/micro/micro_profiler.h" +#include "tensorflow/lite/micro/recording_micro_interpreter.h" +#include "tensorflow/lite/micro/system_setup.h" +#include "tensorflow/lite/schema/schema_generated.h" + +namespace { +using HelloWorldOpResolver = tflite::MicroMutableOpResolver<1>; + +TfLiteStatus RegisterOps(HelloWorldOpResolver& op_resolver) { + TF_LITE_ENSURE_STATUS(op_resolver.AddFullyConnected()); + return kTfLiteOk; +} +} // namespace + +TfLiteStatus ProfileMemoryAndLatency() { + tflite::MicroProfiler profiler; + HelloWorldOpResolver op_resolver; + TF_LITE_ENSURE_STATUS(RegisterOps(op_resolver)); + // Arena size just a round number. The exact arena usage can be determined + // using the RecordingMicroInterpreter. + constexpr int kTensorArenaSize = 3000; + uint8_t tensor_arena[kTensorArenaSize]; + constexpr int kNumResourceVariables = 24; + tflite::RecordingMicroAllocator* allocator( + tflite::RecordingMicroAllocator::Create(tensor_arena, kTensorArenaSize)); + tflite::RecordingMicroInterpreter interpreter( + tflite::GetModel(g_hello_world_float_model_data), op_resolver, allocator, + tflite::MicroResourceVariables::Create(allocator, kNumResourceVariables), + &profiler); + TF_LITE_ENSURE_STATUS(interpreter.AllocateTensors()); + TFLITE_CHECK_EQ(interpreter.inputs_size(), 1); + interpreter.input(0)->data.f[0] = 1.f; + TF_LITE_ENSURE_STATUS(interpreter.Invoke()); + + MicroPrintf(""); // Print an empty new line + profiler.LogTicksPerTagCsv(); + + MicroPrintf(""); // Print an empty new line + interpreter.GetMicroAllocator().PrintAllocations(); + return kTfLiteOk; +} + +TfLiteStatus LoadFloatModelAndPerformInference() { + const tflite::Model* model = + ::tflite::GetModel(g_hello_world_float_model_data); + TFLITE_CHECK_EQ(model->version(), TFLITE_SCHEMA_VERSION); + + HelloWorldOpResolver op_resolver; + TF_LITE_ENSURE_STATUS(RegisterOps(op_resolver)); + + // Arena size just a round number. The exact arena usage can be determined + // using the RecordingMicroInterpreter. + constexpr int kTensorArenaSize = 3000; + uint8_t tensor_arena[kTensorArenaSize]; + + tflite::MicroInterpreter interpreter(model, op_resolver, tensor_arena, + kTensorArenaSize); + TF_LITE_ENSURE_STATUS(interpreter.AllocateTensors()); + + // Check if the predicted output is within a small range of the + // expected output + float epsilon = 0.05f; + constexpr int kNumTestValues = 4; + float golden_inputs[kNumTestValues] = {0.f, 1.f, 3.f, 5.f}; + + for (int i = 0; i < kNumTestValues; ++i) { + interpreter.input(0)->data.f[0] = golden_inputs[i]; + TF_LITE_ENSURE_STATUS(interpreter.Invoke()); + float y_pred = interpreter.output(0)->data.f[0]; + TFLITE_CHECK_LE(abs(sin(golden_inputs[i]) - y_pred), epsilon); + } + + return kTfLiteOk; +} + +TfLiteStatus LoadQuantModelAndPerformInference() { + // Map the model into a usable data structure. This doesn't involve any + // copying or parsing, it's a very lightweight operation. + const tflite::Model* model = + ::tflite::GetModel(g_hello_world_int8_model_data); + TFLITE_CHECK_EQ(model->version(), TFLITE_SCHEMA_VERSION); + + HelloWorldOpResolver op_resolver; + TF_LITE_ENSURE_STATUS(RegisterOps(op_resolver)); + + // Arena size just a round number. The exact arena usage can be determined + // using the RecordingMicroInterpreter. + constexpr int kTensorArenaSize = 3000; + uint8_t tensor_arena[kTensorArenaSize]; + + tflite::MicroInterpreter interpreter(model, op_resolver, tensor_arena, + kTensorArenaSize); + + TF_LITE_ENSURE_STATUS(interpreter.AllocateTensors()); + + TfLiteTensor* input = interpreter.input(0); + TFLITE_CHECK_NE(input, nullptr); + + TfLiteTensor* output = interpreter.output(0); + TFLITE_CHECK_NE(output, nullptr); + + float output_scale = output->params.scale; + int output_zero_point = output->params.zero_point; + + // Check if the predicted output is within a small range of the + // expected output + float epsilon = 0.05; + + constexpr int kNumTestValues = 4; + float golden_inputs_float[kNumTestValues] = {0.77, 1.57, 2.3, 3.14}; + + // The int8 values are calculated using the following formula + // (golden_inputs_float[i] / input->params.scale + input->params.scale) + int8_t golden_inputs_int8[kNumTestValues] = {-96, -63, -34, 0}; + + for (int i = 0; i < kNumTestValues; ++i) { + input->data.int8[0] = golden_inputs_int8[i]; + TF_LITE_ENSURE_STATUS(interpreter.Invoke()); + float y_pred = (output->data.int8[0] - output_zero_point) * output_scale; + TFLITE_CHECK_LE(abs(sin(golden_inputs_float[i]) - y_pred), epsilon); + } + + return kTfLiteOk; +} + +int main(int argc, char* argv[]) { + tflite::InitializeTarget(); + TF_LITE_ENSURE_STATUS(ProfileMemoryAndLatency()); + TF_LITE_ENSURE_STATUS(LoadFloatModelAndPerformInference()); + TF_LITE_ENSURE_STATUS(LoadQuantModelAndPerformInference()); + MicroPrintf("~~~ALL TESTS PASSED~~~\n"); + return kTfLiteOk; +} diff --git a/examples/hello_world/models/hello_world_float_model_data.cc b/examples/hello_world/models/hello_world_float_model_data.cc new file mode 100644 index 0000000000000000000000000000000000000000..d0e76394e2084d5cc9e74c38e07cfc36ed8326c9 --- /dev/null +++ b/examples/hello_world/models/hello_world_float_model_data.cc @@ -0,0 +1,5 @@ +#include + +#include "models/hello_world_float_model_data.h" + +alignas(16) const unsigned char g_hello_world_float_model_data[] = {0x1c,0x0,0x0,0x0,0x54,0x46,0x4c,0x33,0x14,0x0,0x20,0x0,0x1c,0x0,0x18,0x0,0x14,0x0,0x10,0x0,0xc,0x0,0x0,0x0,0x8,0x0,0x4,0x0,0x14,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x90,0x0,0x0,0x0,0xe8,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x10,0x7,0x0,0x0,0x8,0xc,0x0,0x0,0x3,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0xa,0x0,0x10,0x0,0xc,0x0,0x8,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x73,0x65,0x72,0x76,0x69,0x6e,0x67,0x5f,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x98,0xff,0xff,0xff,0x9,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x64,0x65,0x6e,0x73,0x65,0x5f,0x32,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xca,0xf9,0xff,0xff,0x4,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x64,0x65,0x6e,0x73,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x0,0x2,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xdc,0xff,0xff,0xff,0xc,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x43,0x4f,0x4e,0x56,0x45,0x52,0x53,0x49,0x4f,0x4e,0x5f,0x4d,0x45,0x54,0x41,0x44,0x41,0x54,0x41,0x0,0x8,0x0,0xc,0x0,0x8,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x6d,0x69,0x6e,0x5f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x5f,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x0,0xd,0x0,0x0,0x0,0x14,0x6,0x0,0x0,0xc,0x6,0x0,0x0,0xbc,0x5,0x0,0x0,0xa0,0x5,0x0,0x0,0x50,0x5,0x0,0x0,0x0,0x5,0x0,0x0,0xf0,0x0,0x0,0x0,0xa0,0x0,0x0,0x0,0x98,0x0,0x0,0x0,0x90,0x0,0x0,0x0,0x88,0x0,0x0,0x0,0x68,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x76,0xfa,0xff,0xff,0x4,0x0,0x0,0x0,0x54,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x8,0x0,0xe,0x0,0x8,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x8,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa,0x0,0x10,0x0,0xc,0x0,0x8,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x32,0x2e,0x31,0x31,0x2e,0x30,0x0,0x0,0xd6,0xfa,0xff,0xff,0x4,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x31,0x2e,0x35,0x2e,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xf5,0xff,0xff,0xc4,0xf5,0xff,0xff,0xc8,0xf5,0xff,0xff,0xfe,0xfa,0xff,0xff,0x4,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0xea,0x85,0xf1,0xbe,0xef,0x1c,0x9a,0x3f,0xa3,0x23,0xa1,0x3f,0x12,0x94,0xb7,0x3e,0x0,0x89,0xe2,0x3d,0xeb,0x7a,0x86,0xbe,0x18,0x6f,0xa9,0x3e,0xec,0x6d,0x61,0x3f,0x12,0x4a,0x3d,0xbe,0x42,0x6b,0x8a,0x3f,0xc1,0xc3,0x3c,0xbf,0xe8,0xc0,0x9f,0x3e,0xee,0xaf,0x59,0xbf,0xc1,0x51,0x6e,0xbf,0x98,0x8c,0xb,0x3e,0xe1,0xc3,0xe3,0x3d,0x4a,0xfb,0xff,0xff,0x4,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x80,0x6d,0x32,0x3b,0xa,0x64,0x42,0x3e,0xf5,0xa4,0xd3,0x3e,0x1a,0xc7,0x3a,0xbe,0x66,0x99,0x4d,0x3e,0xac,0xe9,0x49,0xbe,0x38,0x73,0x7b,0xbd,0x2,0xb3,0x4,0xbe,0x34,0xae,0xff,0xbd,0xb7,0xf5,0xdb,0xbe,0xaf,0xb3,0xb2,0xbe,0x4d,0x95,0xb1,0x3e,0x83,0xa6,0xbc,0x3e,0x8e,0x14,0x3b,0x3e,0xfa,0x7c,0x74,0x3e,0xe9,0xf9,0x6d,0xbe,0x90,0x31,0xd3,0xbc,0x56,0xf2,0x48,0x3e,0x4a,0x1,0xa,0x3d,0x5b,0x82,0x1b,0xbf,0xe5,0x26,0x92,0x3d,0xcd,0x5a,0xcd,0x3e,0x69,0x43,0xcc,0xbe,0x24,0xaa,0xff,0xbd,0xf3,0x2,0xc2,0xbe,0xe5,0x2a,0x87,0x3e,0x71,0x62,0xbd,0xbe,0x2f,0xa3,0xae,0x3e,0x2a,0x47,0x89,0xbe,0x64,0x3b,0x25,0x3e,0xee,0x6f,0x9,0xbe,0x65,0xe0,0xba,0x3e,0x16,0xff,0x11,0x3e,0x60,0x69,0x38,0xbe,0x5f,0x7c,0xb6,0x3e,0xd4,0xec,0x13,0xbf,0xbd,0xa3,0xc9,0xbe,0x3,0x41,0x4e,0x3f,0xa9,0xf2,0x86,0xbe,0x70,0x4f,0x85,0xbc,0x53,0xec,0x9a,0x3e,0x4f,0xc9,0xe9,0x3e,0xe2,0xfa,0x60,0x3e,0x9c,0x7f,0x60,0xbe,0x86,0xc7,0x21,0x3e,0x2a,0xc5,0x0,0xbf,0xd1,0xda,0xaa,0x3e,0xaa,0x8b,0x14,0xbe,0x51,0x60,0x54,0xbe,0x48,0xc1,0xb7,0xbe,0xd3,0x8,0x38,0x3e,0x58,0x2e,0xeb,0x3e,0x3,0x92,0x4f,0x3e,0x5a,0x49,0xcb,0xbe,0xf5,0x1e,0xbf,0x3e,0x80,0xdc,0x9c,0xbe,0xcf,0x99,0xa2,0x3e,0x59,0x82,0x3d,0xbe,0x87,0x6f,0x98,0x3e,0x86,0xa5,0x8a,0xbe,0xe,0x9b,0x63,0xbe,0xfb,0x7a,0x33,0xbe,0x6,0x10,0x71,0xbe,0xa8,0xfc,0x10,0xbd,0x9c,0x46,0x91,0x3d,0x88,0x3c,0x92,0xbe,0xd4,0xbc,0xf4,0xbd,0x4d,0x74,0xbf,0x3e,0x88,0x6c,0x3,0xbd,0x7b,0xe9,0xdb,0xbe,0x9f,0xdf,0xc1,0x3e,0x6c,0xe4,0x82,0x3d,0x44,0x78,0xd5,0x3d,0x80,0x8a,0xfc,0xbb,0x6,0x7b,0x14,0x3e,0xb0,0x24,0x21,0x3d,0x18,0xce,0x9,0x3d,0xc2,0x28,0xb3,0xbe,0xd6,0xb0,0x8,0xbe,0x1c,0x63,0xc3,0xbe,0x80,0x98,0x5e,0x3b,0xac,0xd8,0xe7,0x3d,0x31,0x12,0xa4,0x3c,0x22,0x2,0xed,0x3d,0x47,0xf3,0xa6,0xbb,0x82,0xab,0xd8,0x3e,0x0,0xfc,0x1,0xbb,0xa7,0xc9,0x8a,0x3e,0x80,0x5d,0x97,0xbd,0x5f,0xe8,0x3b,0xbe,0x44,0x62,0xc2,0xbd,0x8,0x96,0x78,0xbd,0xda,0xd8,0x72,0x3e,0xa0,0xf3,0x8f,0x3e,0x68,0xd8,0x33,0xbd,0x26,0x14,0x17,0x3e,0xac,0xc0,0xc9,0xbe,0x8e,0x8a,0x94,0xbe,0x50,0x3d,0xb5,0xbc,0xcf,0xbb,0x82,0x3e,0x9a,0x88,0xb3,0xbe,0x11,0x8a,0xda,0xbe,0xe9,0xd9,0x95,0x3e,0xa0,0x13,0x4b,0x3d,0xf9,0xb6,0x83,0x3e,0xf4,0x14,0xbc,0xbe,0x1c,0x89,0xc1,0x3d,0xeb,0xee,0xca,0x3e,0xfc,0x30,0xab,0xbe,0xfc,0x62,0x9b,0xbd,0x50,0x74,0xaf,0xbe,0x37,0x16,0xd6,0x3e,0x30,0x3e,0xb5,0xbc,0x0,0xd1,0xf6,0x3a,0x66,0xbd,0xf9,0x3d,0x94,0x2a,0x6,0x3f,0xf7,0xc8,0xcb,0xbe,0x4a,0xa5,0xdc,0xbe,0xb5,0xd0,0xa2,0xbe,0x99,0xf0,0x7a,0xbe,0x42,0x1b,0x53,0xbe,0xdf,0x90,0x6e,0xbe,0xee,0xfe,0xbf,0x3e,0x80,0xd3,0x53,0x3c,0x20,0x0,0x45,0x3c,0x2c,0xd0,0x4f,0xbe,0xf0,0x67,0xdf,0xbd,0xce,0xb1,0x5,0x3e,0xc,0x4a,0xf3,0x3d,0x3a,0xf1,0x50,0x3e,0xa0,0xb2,0x29,0xbe,0x78,0x69,0x14,0x3e,0x44,0x93,0xf8,0x3d,0x24,0x67,0xa3,0x3d,0x7a,0x9b,0x96,0xbe,0x48,0x69,0xca,0xbd,0x7c,0xea,0xab,0x3d,0x32,0xd6,0x8b,0x3e,0xa3,0xca,0x47,0xbd,0xbe,0x1a,0xcd,0xbe,0xc1,0x54,0xce,0x3e,0xd8,0xbb,0xc3,0x3e,0x5c,0xfc,0xdb,0xbe,0x50,0xf0,0xa0,0x3c,0x80,0x30,0xd0,0x3c,0x65,0x29,0xb3,0xbe,0xf1,0x1f,0xaf,0xbc,0x40,0xfa,0xcd,0x3e,0xf3,0x33,0x46,0xbe,0xe8,0x9a,0xe7,0xbe,0x10,0xa1,0x9d,0xbe,0xce,0xc4,0x43,0x3e,0x16,0xaf,0x5c,0xbe,0x5,0xf8,0xf,0xbf,0x9a,0x81,0xd0,0x3e,0x80,0x94,0xc6,0x3b,0x2b,0xc,0x5f,0xbe,0x3d,0xc6,0xbf,0x3e,0x28,0xf6,0x7d,0xbd,0xca,0x61,0x8e,0xbe,0x40,0x24,0xe7,0x3c,0xc3,0xf1,0x83,0x3e,0x27,0x30,0x3f,0x3e,0x35,0x15,0xda,0xbe,0x60,0xa3,0xa7,0xbb,0xfc,0x0,0x65,0x3f,0x7,0x96,0xbd,0x3e,0x37,0x93,0x83,0x3e,0x88,0x45,0x3b,0x3d,0xf5,0xff,0xc7,0xbc,0x30,0x5d,0x8b,0xbd,0xc5,0x79,0x91,0x3e,0x78,0x14,0x15,0xbe,0xef,0xe5,0x23,0xbf,0x11,0x2a,0xa7,0x3e,0x41,0x7e,0xda,0x3e,0xb7,0x32,0x7b,0xbe,0x8d,0x63,0xc4,0x3e,0x3e,0x29,0x26,0x3e,0xbc,0x5b,0xe9,0xbd,0x90,0x49,0x59,0x3d,0xe0,0x87,0x7d,0xbc,0xb1,0xef,0xac,0x3e,0xb8,0x30,0x16,0xbd,0xac,0x56,0x8e,0xbd,0x18,0x58,0xbb,0xbe,0x90,0x6f,0xab,0xbd,0xe3,0x61,0x84,0x3e,0x48,0x41,0x6d,0x3d,0xfb,0x22,0xcd,0x3e,0x80,0x9b,0x2,0x3c,0x8d,0xc3,0xb1,0xbe,0xca,0xb2,0xcc,0xbe,0x62,0xab,0x65,0xbe,0xaf,0x17,0x53,0x3e,0x97,0xdf,0x7,0xbe,0x98,0x21,0x7f,0x3e,0x63,0x10,0x51,0x3f,0x4e,0x1e,0x3,0x3e,0x38,0xa3,0x99,0xbe,0x78,0x1f,0x20,0xbe,0xd,0xda,0xf2,0x3e,0x86,0xac,0x43,0xbe,0x39,0xcb,0xa9,0x3e,0x20,0x72,0x52,0x3d,0x2,0x97,0xca,0xbe,0x5c,0xe8,0xd8,0xbd,0x5f,0x38,0xb2,0x3e,0x83,0x15,0xbc,0x3e,0xa7,0xfb,0xa2,0x3e,0xae,0x3c,0x77,0xbe,0x0,0xe4,0x7e,0xbe,0xb,0xc4,0x7c,0xbe,0x13,0x4c,0x4b,0x3f,0x73,0x84,0xd0,0x3e,0xe0,0x67,0x55,0x3c,0xa4,0x27,0xa7,0xbe,0x6f,0x6f,0xed,0xbd,0xc5,0xb8,0xe,0x3f,0x50,0x5d,0x80,0x3c,0x6e,0x37,0x9,0x3e,0x91,0x74,0x2f,0xbf,0xec,0x2b,0xb1,0x3d,0xff,0xad,0x83,0x3e,0xc,0x4,0xbb,0xbd,0x88,0xdc,0xb7,0xbd,0xb5,0x1b,0x22,0xbe,0x88,0x9b,0x86,0x3e,0xef,0x1a,0x40,0x3e,0x7a,0x62,0xd0,0xbe,0xfc,0x4d,0xef,0x3d,0x14,0xe9,0xdb,0xbe,0x81,0x7c,0x89,0xbe,0xf,0xd7,0x7c,0x3e,0x91,0xcd,0x16,0xbe,0x6b,0xfb,0x87,0x3e,0xc2,0xbf,0x8f,0xbe,0x64,0x69,0x84,0x3e,0x8f,0x1c,0xd6,0xbe,0x3c,0x63,0xb7,0xbd,0x6a,0x68,0x60,0x3e,0xcd,0x69,0x93,0x3e,0xcb,0x23,0x87,0xbe,0xf,0xe1,0xa8,0xbe,0x30,0x40,0x2d,0x3e,0xb6,0xc9,0x2c,0x3d,0xb4,0x1e,0x52,0xbe,0x49,0x94,0xc1,0xbe,0x0,0x2b,0x9e,0xbb,0x44,0x9e,0xaa,0x3e,0xb,0xa2,0x9e,0x3e,0x4a,0x26,0x37,0xbe,0x8,0x8e,0x30,0xbe,0x54,0xbf,0x69,0x3d,0x50,0x33,0xa1,0xbe,0xdf,0x29,0xcb,0xbe,0x56,0xff,0xff,0xff,0x4,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x30,0x77,0xf9,0xbd,0xbb,0x30,0xc9,0xbe,0x45,0xf5,0x48,0x3e,0x52,0x14,0x32,0x3f,0x64,0xcc,0x12,0x3e,0xe0,0xe1,0x83,0xbd,0xec,0x89,0x38,0xbe,0x10,0xd0,0x5e,0xbd,0x36,0x7f,0xec,0xbe,0xd3,0xa6,0xcf,0x3e,0x42,0x2b,0x8f,0x3e,0xff,0x9e,0x3,0xbf,0xf0,0x88,0xd7,0xbe,0xbc,0x27,0x20,0x3f,0x52,0xa5,0xbf,0xbe,0x30,0xa3,0xa9,0xbe,0xa2,0xff,0xff,0xff,0x4,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x99,0xde,0xc1,0x3e,0xf8,0xdf,0x38,0xbf,0x9d,0x42,0xba,0x3d,0x32,0x8f,0x5b,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9d,0xa1,0x97,0x3f,0x16,0xce,0x55,0xbe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x49,0xbe,0x41,0xbc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xee,0xff,0xff,0xff,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xbc,0xf9,0x23,0xbe,0x0,0x0,0x6,0x0,0x8,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc5,0xb3,0x0,0x3f,0xa4,0xba,0xd0,0x3e,0x52,0xce,0x82,0xbe,0x0,0x0,0x0,0x0,0x4f,0x1b,0x33,0x3e,0x0,0x0,0x0,0x0,0x21,0x72,0x77,0xbe,0xcc,0xcd,0x8f,0x3d,0xfd,0xa3,0xdc,0xbe,0x88,0xe3,0x18,0x3f,0x0,0x0,0x0,0x0,0x91,0x8c,0x61,0x3e,0xe,0x76,0xb,0x3f,0xb0,0x55,0x47,0xbe,0x14,0x9,0x92,0xbd,0x20,0xfb,0xff,0xff,0x24,0xfb,0xff,0xff,0xf,0x0,0x0,0x0,0x4d,0x4c,0x49,0x52,0x20,0x43,0x6f,0x6e,0x76,0x65,0x72,0x74,0x65,0x64,0x2e,0x0,0x1,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x18,0x0,0x14,0x0,0x10,0x0,0xc,0x0,0x8,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0xd8,0x0,0x0,0x0,0xdc,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x9a,0xff,0xff,0xff,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xc,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x9c,0xfb,0xff,0xff,0x1,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xca,0xff,0xff,0xff,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x10,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xba,0xff,0xff,0xff,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x16,0x0,0x0,0x0,0x10,0x0,0xc,0x0,0xb,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x18,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x8,0x0,0x7,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x8c,0x3,0x0,0x0,0x1c,0x3,0x0,0x0,0xac,0x2,0x0,0x0,0x58,0x2,0x0,0x0,0x10,0x2,0x0,0x0,0xc4,0x1,0x0,0x0,0x78,0x1,0x0,0x0,0xf0,0x0,0x0,0x0,0x60,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xb2,0xfc,0xff,0xff,0x0,0x0,0x0,0x1,0x14,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0x9c,0xfc,0xff,0xff,0x19,0x0,0x0,0x0,0x53,0x74,0x61,0x74,0x65,0x66,0x75,0x6c,0x50,0x61,0x72,0x74,0x69,0x74,0x69,0x6f,0x6e,0x65,0x64,0x43,0x61,0x6c,0x6c,0x3a,0x30,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xa,0xfd,0xff,0xff,0x0,0x0,0x0,0x1,0x14,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x68,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x10,0x0,0x0,0x0,0xf4,0xfc,0xff,0xff,0x4c,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x52,0x65,0x6c,0x75,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x96,0xfd,0xff,0xff,0x0,0x0,0x0,0x1,0x14,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x60,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x10,0x0,0x0,0x0,0x80,0xfd,0xff,0xff,0x46,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x52,0x65,0x6c,0x75,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x86,0xfe,0xff,0xff,0x0,0x0,0x0,0x1,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0xf4,0xfd,0xff,0xff,0x19,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x32,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xce,0xfe,0xff,0xff,0x0,0x0,0x0,0x1,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x3c,0xfe,0xff,0xff,0x19,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x16,0xff,0xff,0xff,0x0,0x0,0x0,0x1,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x84,0xfe,0xff,0xff,0x17,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x0,0x2,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x5a,0xff,0xff,0xff,0x0,0x0,0x0,0x1,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xc8,0xfe,0xff,0xff,0x27,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x2f,0x52,0x65,0x61,0x64,0x56,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x4f,0x70,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xaa,0xff,0xff,0xff,0x0,0x0,0x0,0x1,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x18,0xff,0xff,0xff,0x29,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x32,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x2f,0x52,0x65,0x61,0x64,0x56,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x4f,0x70,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x18,0x0,0x14,0x0,0x0,0x0,0x10,0x0,0xc,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x16,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x84,0xff,0xff,0xff,0x29,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x2f,0x52,0x65,0x61,0x64,0x56,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x4f,0x70,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x1c,0x0,0x18,0x0,0x0,0x0,0x14,0x0,0x10,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x7,0x0,0x16,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x14,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0x4,0x0,0x4,0x0,0x4,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x73,0x65,0x72,0x76,0x69,0x6e,0x67,0x5f,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x5f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x3a,0x30,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xc,0x0,0xc,0x0,0xb,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0xc,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x9}; diff --git a/examples/hello_world/models/hello_world_float_model_data.h b/examples/hello_world/models/hello_world_float_model_data.h new file mode 100644 index 0000000000000000000000000000000000000000..3c2dcb88caf1827d7c317c615d5a23b5236c8fd8 --- /dev/null +++ b/examples/hello_world/models/hello_world_float_model_data.h @@ -0,0 +1,4 @@ +#include + +constexpr unsigned int g_hello_world_float_model_data_size = 3164; +extern const unsigned char g_hello_world_float_model_data[]; diff --git a/examples/hello_world/models/hello_world_int8_model_data.cc b/examples/hello_world/models/hello_world_int8_model_data.cc new file mode 100644 index 0000000000000000000000000000000000000000..49bc2fe6e8566500d2e99a9ff7f00194f3f59f0a --- /dev/null +++ b/examples/hello_world/models/hello_world_int8_model_data.cc @@ -0,0 +1,5 @@ +#include + +#include "models/hello_world_int8_model_data.h" + +alignas(16) const unsigned char g_hello_world_int8_model_data[] = {0x28,0x0,0x0,0x0,0x54,0x46,0x4c,0x33,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x20,0x0,0x4,0x0,0x8,0x0,0xc,0x0,0x10,0x0,0x14,0x0,0x0,0x0,0x18,0x0,0x1c,0x0,0x14,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x3c,0xa,0x0,0x0,0xf0,0x3,0x0,0x0,0xd8,0x3,0x0,0x0,0xe0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0xa,0x0,0x10,0x0,0x4,0x0,0x8,0x0,0xc,0x0,0xa,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x73,0x65,0x72,0x76,0x69,0x6e,0x67,0x5f,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x98,0xff,0xff,0xff,0x8,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x64,0x65,0x6e,0x73,0x65,0x5f,0x32,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xba,0xfc,0xff,0xff,0x4,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x64,0x65,0x6e,0x73,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x0,0x2,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xdc,0xff,0xff,0xff,0x8,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x43,0x4f,0x4e,0x56,0x45,0x52,0x53,0x49,0x4f,0x4e,0x5f,0x4d,0x45,0x54,0x41,0x44,0x41,0x54,0x41,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0x8,0x0,0x8,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x6d,0x69,0x6e,0x5f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x5f,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x0,0xd,0x0,0x0,0x0,0xec,0x2,0x0,0x0,0xe4,0x2,0x0,0x0,0xcc,0x2,0x0,0x0,0x98,0x2,0x0,0x0,0x44,0x2,0x0,0x0,0x30,0x1,0x0,0x0,0xdc,0x0,0x0,0x0,0xb8,0x0,0x0,0x0,0xb0,0x0,0x0,0x0,0xa8,0x0,0x0,0x0,0xa0,0x0,0x0,0x0,0x78,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x66,0xfd,0xff,0xff,0x4,0x0,0x0,0x0,0x58,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x8,0x0,0xe,0x0,0x8,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x8,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xeb,0x3,0x0,0x0,0x0,0x0,0xa,0x0,0x10,0x0,0xc,0x0,0x8,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x32,0x2e,0x31,0x31,0x2e,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd6,0xfd,0xff,0xff,0x4,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x31,0x2e,0x31,0x34,0x2e,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x64,0xfd,0xff,0xff,0x68,0xfd,0xff,0xff,0x6c,0xfd,0xff,0xff,0x6,0xfe,0xff,0xff,0x4,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xf7,0xca,0x39,0x47,0x68,0x73,0x62,0x63,0x40,0xe6,0x7f,0x19,0xae,0x44,0x5f,0x56,0x0,0x0,0x0,0x0,0x26,0xfe,0xff,0xff,0x4,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc2,0xea,0xff,0xff,0x75,0xea,0xff,0xff,0xb8,0xfa,0xff,0xff,0x24,0xfa,0xff,0xff,0xc8,0xef,0xff,0xff,0xac,0xff,0xff,0xff,0x44,0xd,0x0,0x0,0x0,0x0,0x0,0x0,0xbd,0x7,0x0,0x0,0x33,0xea,0xff,0xff,0x0,0x0,0x0,0x0,0xcc,0xe4,0xff,0xff,0x4f,0xd,0x0,0x0,0xcf,0xe3,0xff,0xff,0x0,0x0,0x0,0x0,0x76,0xfe,0xff,0xff,0x4,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xf4,0x1a,0xed,0x9,0x19,0x21,0xf4,0x24,0xe0,0x21,0xef,0xbc,0xf7,0xf5,0xfa,0x19,0x3,0xdc,0xd2,0x2,0x6,0xf9,0xf4,0x2,0xff,0xfa,0xef,0xf1,0xef,0xd3,0x27,0xe1,0xfb,0x27,0xdd,0xeb,0xdb,0xe4,0x5,0x1a,0x17,0xfc,0x24,0x12,0x15,0xef,0x1e,0xe4,0x10,0xfe,0x14,0xda,0x1c,0xf8,0xf3,0xf1,0xef,0xe2,0xf3,0x9,0xe3,0xe9,0xed,0xe3,0xe4,0x15,0x7,0xb,0x4,0x1b,0x1a,0xfe,0xeb,0x1,0xde,0x21,0xe6,0xb,0xec,0x3,0x23,0xa,0x22,0x24,0x1e,0x27,0x3,0xe6,0x3,0x24,0xff,0xc0,0x11,0xf8,0xfc,0xf1,0x11,0xc,0xf5,0xe0,0xf3,0x7,0x17,0xe5,0xe8,0xed,0xfa,0xdc,0xe8,0x23,0xfb,0x7,0xdd,0xfb,0xfd,0x0,0x14,0x26,0x11,0x17,0xe7,0xf1,0x11,0xea,0x2,0x26,0x4,0x4,0x25,0x21,0x1d,0xa,0xdb,0x1d,0xdc,0x20,0x1,0xfa,0xe3,0x37,0xb,0xf1,0x1a,0x16,0xef,0x1c,0xe7,0x3,0xe0,0x16,0x2,0x3,0x21,0x18,0x9,0x2e,0xd9,0xe5,0x14,0xb,0xea,0x1a,0xfc,0xd8,0x13,0x0,0xc4,0xd8,0xec,0xd9,0xfe,0xd,0x19,0x20,0xd8,0xd6,0xe2,0x1f,0xe9,0xd7,0xca,0xe2,0xdd,0xc6,0x13,0xe7,0x4,0x3e,0x0,0x1,0x14,0xc7,0xdb,0xe7,0x15,0x15,0xf5,0x6,0xd6,0x1a,0xdc,0x9,0x22,0xfe,0x8,0x2,0x13,0xef,0x19,0x1e,0xe2,0x9,0xfd,0xf3,0x14,0xdd,0xda,0x20,0xd9,0xf,0xe3,0xf9,0xf7,0xee,0xe9,0x24,0xe6,0x29,0x0,0x7,0x16,0xe2,0x1e,0xd,0x23,0xd3,0xdd,0xf7,0x14,0xfa,0x8,0x22,0x26,0x21,0x9,0x8,0xf,0xb,0xe0,0x12,0xf4,0x7f,0xdc,0x58,0xe5,0x26,0x0,0x0,0x0,0x0,0x86,0xff,0xff,0xff,0x4,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x27,0xfd,0xff,0xff,0xa2,0x7,0x0,0x0,0x62,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0xf1,0x0,0x0,0x0,0x29,0xfe,0xff,0xff,0xdd,0xff,0xff,0xff,0x9d,0xfc,0xff,0xff,0x3b,0x2,0x0,0x0,0x45,0x2,0x0,0x0,0xa4,0x10,0x0,0x0,0x67,0xf,0x0,0x0,0x4f,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x87,0xfc,0xff,0xff,0x11,0xec,0xff,0xff,0x0,0x0,0x0,0x0,0xd6,0xff,0xff,0xff,0x4,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xd9,0x3b,0x27,0x15,0x1c,0xe0,0xde,0xdd,0xf,0x1b,0xc5,0xd7,0x12,0xdd,0xf9,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x8,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xad,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x84,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xf,0x0,0x0,0x0,0x4d,0x4c,0x49,0x52,0x20,0x43,0x6f,0x6e,0x76,0x65,0x72,0x74,0x65,0x64,0x2e,0x0,0x1,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x18,0x0,0x4,0x0,0x8,0x0,0xc,0x0,0x10,0x0,0x14,0x0,0xe,0x0,0x0,0x0,0x4,0x1,0x0,0x0,0xf8,0x0,0x0,0x0,0xec,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x94,0x0,0x0,0x0,0x4c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xca,0xff,0xff,0xff,0x0,0x0,0x0,0x8,0x1c,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x4,0x0,0x4,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x14,0x0,0x0,0x0,0x8,0x0,0xc,0x0,0x7,0x0,0x10,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x1c,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xba,0xff,0xff,0xff,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x16,0x0,0x0,0x0,0x8,0x0,0xc,0x0,0x7,0x0,0x10,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x24,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x8,0x0,0x7,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x9c,0x4,0x0,0x0,0xc,0x4,0x0,0x0,0x88,0x3,0x0,0x0,0x14,0x3,0x0,0x0,0xa8,0x2,0x0,0x0,0x34,0x2,0x0,0x0,0xd0,0x1,0x0,0x0,0x2c,0x1,0x0,0x0,0x80,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xa2,0xfb,0xff,0xff,0x0,0x0,0x9,0x1,0x64,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0x8c,0xfb,0xff,0xff,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xcb,0xd6,0x7,0x3c,0x19,0x0,0x0,0x0,0x53,0x74,0x61,0x74,0x65,0x66,0x75,0x6c,0x50,0x61,0x72,0x74,0x69,0x74,0x69,0x6f,0x6e,0x65,0x64,0x43,0x61,0x6c,0x6c,0x3a,0x30,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1a,0xfc,0xff,0xff,0x0,0x0,0x9,0x1,0x94,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x10,0x0,0x0,0x0,0x4,0xfc,0xff,0xff,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0x5d,0x4f,0x51,0x3c,0x4c,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x52,0x65,0x6c,0x75,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xc2,0xfc,0xff,0xff,0x0,0x0,0x9,0x1,0x8c,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x10,0x0,0x0,0x0,0xac,0xfc,0xff,0xff,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0x9f,0x51,0x5a,0x3c,0x46,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x52,0x65,0x6c,0x75,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xee,0xfd,0xff,0xff,0x0,0x0,0x9,0x1,0x4c,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x3c,0xfd,0xff,0xff,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xaa,0x59,0x84,0x3b,0x17,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x0,0x2,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x4e,0xfe,0xff,0xff,0x0,0x0,0x2,0x1,0x60,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x9c,0xfd,0xff,0xff,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x55,0x5b,0xcf,0x38,0x27,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x2f,0x52,0x65,0x61,0x64,0x56,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x4f,0x70,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xbe,0xfe,0xff,0xff,0x0,0x0,0x9,0x1,0x54,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xc,0xfe,0xff,0xff,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x7f,0x7f,0x32,0x3c,0x19,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x26,0xff,0xff,0xff,0x0,0x0,0x2,0x1,0x60,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x74,0xfe,0xff,0xff,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x7b,0x39,0x18,0x39,0x29,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x2f,0x52,0x65,0x61,0x64,0x56,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x4f,0x70,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x96,0xff,0xff,0xff,0x0,0x0,0x9,0x1,0x54,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xe4,0xfe,0xff,0xff,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x17,0x44,0x7c,0x3c,0x19,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x32,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x18,0x0,0x8,0x0,0x6,0x0,0xc,0x0,0x10,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x16,0x0,0x0,0x0,0x0,0x0,0x2,0x1,0x64,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x64,0xff,0xff,0xff,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xcb,0x41,0x4e,0x39,0x29,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x32,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x2f,0x52,0x65,0x61,0x64,0x56,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x4f,0x70,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x1c,0x0,0x8,0x0,0x6,0x0,0xc,0x0,0x10,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x7,0x0,0x16,0x0,0x0,0x0,0x0,0x0,0x9,0x1,0x74,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x48,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xc,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x8,0x0,0xc,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x86,0x8a,0xc8,0x3c,0x1d,0x0,0x0,0x0,0x73,0x65,0x72,0x76,0x69,0x6e,0x67,0x5f,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x5f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x3a,0x30,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xc,0x0,0x10,0x0,0x7,0x0,0x0,0x0,0x8,0x0,0xc,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x4,0x0,0x0,0x0,0x9,0x0,0x0,0x0}; diff --git a/examples/hello_world/models/hello_world_int8_model_data.h b/examples/hello_world/models/hello_world_int8_model_data.h new file mode 100644 index 0000000000000000000000000000000000000000..ed6259d65051e85c504b74f7d4e491213b8ff3ee --- /dev/null +++ b/examples/hello_world/models/hello_world_int8_model_data.h @@ -0,0 +1,4 @@ +#include + +constexpr unsigned int g_hello_world_int8_model_data_size = 2704; +extern const unsigned char g_hello_world_int8_model_data[]; diff --git a/examples/person_detection/sample_images/sample_images/README.md b/examples/person_detection/sample_images/sample_images/README.md new file mode 100644 index 0000000000000000000000000000000000000000..3b3807267413d6a62fed9a881900e888ef541fc1 --- /dev/null +++ b/examples/person_detection/sample_images/sample_images/README.md @@ -0,0 +1,17 @@ +# About Images + + - The images embedded here are 96x96 greyscale images. + - These can be viewed at https://rawpixels.net + +## Image descriptions: + + - image0: A person + - image1: A dog + - image2: A person + - image3: A Monkey + - image4: A person + - image5: A cat + - image6: A person (not in focus) + - image7: Portrait of a person + - image8: A person + - image9: A person diff --git a/examples/person_detection/sample_images/sample_images/image0 b/examples/person_detection/sample_images/sample_images/image0 new file mode 100644 index 0000000000000000000000000000000000000000..0b1b471fde525b11d876786d54087c200cd9753a --- /dev/null +++ b/examples/person_detection/sample_images/sample_images/image0 @@ -0,0 +1,4 @@ +ffffffffeeeeffffeeeegggggggggggggggghhhhhhhhhhhhhhhhhhhhhggggggghhhhhhhhhiiiihhhiiiiihhhiiiiiiiiffffffffffffffffffffggggggggggggggggghhhhhhhhhhhhhhhhhhhhiiiiiiihhhhhhhhhiiiijjjjiiiihhhhiiiiiiiffffffffggggffffgggggggggggggggggggghhhhhhhhhhhhhhhhhhhiijjjjjjjihhhhhhhhiiijkjkjiiiihhhhiiiiiiigggggfgggggggggggfffghhhhhhhhhhhhhhhhhhhgghiiiiiihhgilkiijjjjkkkjhhhiiiiikkkkjjjjkkkkkkkkjjjjkkkgggggggggggggggggggghhhhhhhhhhhhhhhhhhhhghiiiiiijkjijljijkkkkkkkkjjjiiiijkkkkkkkkkkkkkkkkkkkkkkkgggghhhhgggggggghhhhhhhhhhhhhhhhhhhhhhhhhfikjjhhgc`a_\bjmjikkklljkllkiiijkkkkllllkkkkkkkkllllkkkhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiijiihhhiif]XYXUU[`]Z]]TNOTUX_ca_`dfgikjjkllllllllllllllllllllllllhhhhhhhhhhhhhhhhiiiiiiiiiiiiihijigb_`bbcYHKOLPVYZZXRT[\\YQJMQQSSOPYcikkkllllllllllllllllllllllllhhhhhhhhhhhhhhhhijjjjjjjiiiiimid`[URKFFE?>KJBFGDFQ\_^XQNPUTOKG@@DFNV]gkkkkkmmllllllllllllllllllliiiiiiiiiiiiiiiikkkkkkkkiijkilcZVMDB>;<;9>CDA<=?8;NXW\b[MA?FNQOH;46=ELVckmmmjmmmmllllmmmmmmmmllliiiiiiiijjjjiiiikkkkkkkkllmnme`YH;2-16;B?EJIHGC::;:LZVWTSRKA=CHKND4,251JZRRMCFID<=ACFME4246:>NjlmnnlnnnnmmmmmmmmnnnkkkkjjjjkkkkkkkkkkkkmllknkkljU:$"Nly~{vkXB6CYIE@=<58;<=@AHM<15797<^kklonnnnmmmmmmmmnnnkkkkkkkkkkkkkkkkllllmllkj^dgV2" CpzgRCO]SGA=3120-1=AFIF:8;61Efpjpnnnnoooooooonnnkkkkllllkkkkllllmmmmolkk`YbT43fxn]_bZRKD<2.+$#.:CIG>;673@`nopnnnoooooooooookkkkkkkkkkkkmmmmmmmmnnif\YQ9'Oz~tlfa^[VOJ=881*'08=@?9<83,?q}xsl`VVLHI?<6/+*,($')(&0:=9@ftpppppppppoppmmmmmmmmmmmmnnnnnnnnkj[YV77p{vlg^QQD;@64.((*,,+$"!"-75CfrqqqqqqqqopqnnnnmmmmnnnnoooooooonjR`Ytvuuuuuurrrrrrrrrrrrrrrrtrr]DVygWVSNMRKSeoy~~|zxtmhggggfb_^][SD6*%$('##(-0476-1gxvvvuuurrrrrrrrrrrrrrrrtrr]I`q_ckj]SMBHYkp{via]Y]bdefefljfeeedb`^\YTH;-&"$$#+.36846fxvvvvvvrrrrrrrrrrrrrrrrsrrZNkkkuz|~~yo]X^extmd\RLLIIGHMPOPX_acccb`^\YUL@0& !*-169:7;DMIEJIHFFLY`bca_]ZTLE3$!#)+-77;=fwvvvwwwttttttttttttttttrqe`OxzaQTB/-7IQTbah~qe[L?H]c]UQLSZRORQKCBMZbca_\URNI8&#**(2389bywwwwwwuuuuuuuutttttttuuvaSLoz^ZSK;43?FPWrjqg^\JM]\W^afhSJNGLYRMIMW`cb_[WRHA8(#*(%,144azxxxwwwuuuuuuuuttuvuuvwvu{pdyz|{{~vrrZganCI[YJZ^]_[<$+979=BJ@LMNV_dd_YXQG=0*! $&)+35:izxxxxxxuuuuuuuuttuvuuvwvuxtmzwlq~yh}vaFX^h|~}{q\TF:5798.>LC><:%Wzxyzzzzzzzzwwwwwwwwwwwwxxxxyx|rd_^eigkvzvpoqsuuvyzwussqh_YUTSSTPLC/0eEMI=3KA*a{yz{zzzzzzzxxxxxxxxxxxxxxxxyzqbqh^^hpnkd^k}|xvtqolgb]URRSROMJ@BjTd^QIX77s{zzzzzzz{|{xxxxxxxxxxxxyyyyz|uhan{kf~sfPNQ^fheYMUdw}{xtokhda]VRSVRPNMMGZE[]\Yb,>w|{{{{{{{}}}xxxxxxxxxxxxyyyyz|}sklysO;U`UC,' "1DHBO`feq{|xvuplgaba_WSUWRPNLOXV:M[h``(W}|||||||}}}xxxxyyyyyyyyyzzzy{~~tnmt~riehlZF95++(%)8P_iklswz{vrpnlhb]^_]VRTVSQNNLcaMK[q]X[dblV^[t}{|}}}}}}}}}}zzzz{{{{{yqx{{pvuy}{uk`XYWSQU[[ZXW]fea\N\fa_]ZTPRVUSPON_zf\M\an}}}~~~}}}}~~~zzzz{{{{{yy~idnpqhL>@Vrtzysof`[UOOQRSSS\kkgaWkmca^[WSSUSQNMXiqYOgch{~z~~~~~~~~zzzz{{{{}}zxtl[cr{w|uJ?~g_h^LMMJKLHEIIGJMN]ttka]qjdb_^\URRPNLIWnvid^h~~~~~~~{{{{}}}}}~~z{yxx{pX]gz|D*}|ipN?1*)3X]kyrg``mjec`]YQNOKIILcrudUj~~{{{{}}}}}}}}||}}}xedbx~Q[y~tF?"#@cqw|~sf_fqokfa[OHFEHJFPXYS8H|{{{{}}}}}}}}~~~~~qnn}zxrmRJE831038I`svq||pc^lvpjcZQF?;@EGMH200$<|}}}}~~~~~~~~~~~~~~{zypgaa`ciqtty|h^ctuog[PE;1=EEDO?*/4/Dy~~~~~~~~~~~~~~~~~~}}tke]_acktvwubakwrg\PF73BPIHPJAD<19Lp~~~~~~~~~~~~~~~~~~{ytnigffedfowyzj[dsyn_QF83FOGLOQBMTC@BWj|~~~~~~~~~|wsmmplhfc`cfitzv}n[]murcRI54JMJOVPDGSHNONcsz~~~~~wutpnmmmmmpuyzy~}nUXpxzjTF42INRVZXFANLL\SLn~~~~{|yw{|wtwkWVmzvlXC69HPSWZUHGPFFUM:#,Gp~}{{{tppfUYpysoZB1;FMUYXSMOPEDTF%$<]{~}yyyx{}tmf^YKVlrpm^@48GMQVYWRTP??K22wv~|zxuroa\QDCXjkieR97BCKRUXWTSK>711J]owymxv}}~{xrgd`\P@6CUdhe[I@@?CLTWWXYWD*#.>Xl~h(5qqls{zxy{~}rea\POMB00@X`\\TKDEEBMXX[YUM3(>Vk \podW^igbZVNEEF?82,5MZ^XVQQJA>DPUUWVN3|l_(Lpfh]PE=9644674/.4EV^[VTPMH@=DPTPNG0}hL;,# 1|iZ^e_UHA>;8649DPVWTPLHDA:9EJIH=( !!!"yaWA& ! t{nXOSUTKC@=9;CJHDB?>=::85=F>. !" !!oG$!N{r_MGDD@<:89:764221010282& p9! ^~yh\J=8754321/./...-+% kE%FizvqfWG>9764310-($ + t@" " 4N_jcXL=51-'# U  " " &+%  +  L ""!    !  %  #"!!!! !! !#  !!  "#!!  !# !! "! ! ! !! "" !"   !! ""  "#!! " !! ""  "#!!  ! !! ""  "$"!   !! "!  "#!!  +!! !!!!  !! !!!! !! !!!! ""!!!! ""!!!!  ""!!!!  !!!!!! !!!!!! !"""!!  \ No newline at end of file diff --git a/examples/person_detection/sample_images/sample_images/image1 b/examples/person_detection/sample_images/sample_images/image1 new file mode 100644 index 0000000000000000000000000000000000000000..66e7ba7d9212c1256d58dafd956ac64db6e5afdb Binary files /dev/null and b/examples/person_detection/sample_images/sample_images/image1 differ diff --git a/examples/person_detection/sample_images/sample_images/image2 b/examples/person_detection/sample_images/sample_images/image2 new file mode 100644 index 0000000000000000000000000000000000000000..39186187cb4568ed1b9fbe957004f76999dde0ef --- /dev/null +++ b/examples/person_detection/sample_images/sample_images/image2 @@ -0,0 +1 @@ +IJKLMMNPRSUUVX[^``bcdcghehe]Pd^TE;?IVE;50(%&&&$$&()(&$$$$$%%#)>Yoqlokjjiiidc`^\[YWUTTRQONLKKIHGGJJLLMNOPRTUVWY\^`abcddhifeebVlcWK<33=L@2,*('&%%%')*)'$$$$$$'% &4Qhmnkjjjiieba^\[ZWUUTRQONLKJIHGGKKLNOOPRSTVWXZ]`abceeehje^_aVneSDD@54432.'&'())))**)($$$$$"&(" ,Icnklkjiieca^][ZXUUURQONLKJIHGGLMMOPPQSTVWXY[^`bcdffgjkcTSZTkc[SC:8CE9*#'')/11.+*)))$$$$$"$'&&("*Sqqmlkiiedb_]\[XVVURQONLKJIHGGMNOPQQRTVWXYZ\_acdffghjj_JDQOdacZLF=8>;0'%)1:<6/+('''$$$$$$#"#$)!5Wmomkjhfeb`^][YWVURQONLKJIHGGNNOQRRSTVXYZ[]`bdefghjki\B6FGYZe^QSMA:6-&)0:FD6,*(%%&$$$$$$#"$$"#&5hqnljhfdc`^]\YWVVRQONLKJIHGGOOPRRSTUWXZ[]_acfghijojmS828,-/.9K[ry__cf[X\RGI@0)%'&&%$$$%%&&&%$$%#$%%8cpklifedba^[ZWUTRQONLJIHGFGPQRSTUVXZ[]`bdfhijklmlqd7+-03;HZnsn_RNV``TC>6--***)((&&&&'&&%%$%#$&"$Ejlhigfeba_\ZXVTRQONLJIHGFGQQRTTVXY[]_acfhijklmnmra4,,/3:IZfvtYWRD7:ID;1*,)(((((&&%$$%&%$$$#$&#,Wmijigecb_][XVURQONLIHGFEEQQRTUWXZ\]`bdgijkkmnomp\2++06Dawqu`TI@<27=4.*&++,./-,*('&%%$$#$%$&%&Alokigfcb`][YVUSQONLIHGFEDSTUVWXXZ]^aefhjklmnnonpV124<>[uriTFC:9;63//8??@C952/,)'&'%$%%#$%$6koljhfdba][XVUQPNMMJIHFECUUVXYXY[^`bfgijlmnnooqpS3:4.,+(%%%$$$#-gpnkjgeca_[XWUSPNMMJIGFECVVWYYZ[]`aehikmnoppqrriI0>;?l~wrmdXND940.*&&%%$$#+frokjhfdb_\YWWURNLKJIGEDBVWXYZ[\^abfijlnoqqrrrupN1C@N~xn`SG?940+'&&%%%#/hroljifdc`]ZXWWSOLJIHGDCBVWXZZ\]_bcfjkmopqrsssuvS/CDYwgYLC=72,''&&%%$5lqolkifec`]ZXYZUOKJIGFDCBWXYZ[\^`cehkkmopqrsstuvS1AEaþynaSF>:4-)'&%%%#9nqpmligdca][XWVSOKIIGFDCBWXZ\]^_adgjklmnoqqrstwxX:3,*'&%%&"@qsromjgeda][XTQPMKIHFECB@Z[]^`abcgjmnoqrsttvwxzxgI9Iuÿ}yrdVMA91)('%%%&#Ctrrpnkhfea][XTQPMKIGFDBA@[\^`abcdhlnoprrsuvwxyx{mH7Ft}xl]SOC90'''%%%&#Fvrrqnkhfda]\XTQOMKIFEDBA?\]^`acdehlnpqrstvvxyyx|tJ5Cqſwi[RL@80+*'&%%&#Ivsspnlifea]\YTQPMKIGFDBA?\]_abcegjlnprstvxyyzz}yyL2?op`WPH@4,,+)('%% Oxxspnlifdb_\YVRPMJHIHECA?]^`acdehjlnpqstvxyyzz{yzO1Evxk]SMF>4,++)('%%$Tyxspolifdb_\YVRPMJHHGEB@?^_acdefhjlnpqstvxyyzzzy{T0Xxl_WOE<4.-+)('%%([yvtpnlifdb_\YVRPMJHHFDB@>_`bdeghiklnpqstvxyyzzzy{Z4pƿwl`VNC<50/,(('%%)ayutpnlifdb_\YVRPMJHGECA?>aacefhijkkmpqstvxyyzz{z{`;ýyocWN?83.-+)('%$(dxsupnlifdb_\YVRPMJHFEC@?>abdfghjjklmpqstvxyyzz|zzd@{uk]PE:4/*)))('&$'evtvpolifdb_\YVRPMJHFEB@>>bbdghiiklnprsuwxxyz|||~yq<~kiqy|om^E:-00-&(*&''&!.oyxvqpliged`]ZWRPMJHGCA@;;bceghiikmnpstuwxxyz||~zp?~sWVTNVN>>Z|taTB7()&))+-&#'''& 2vwquspligec`]ZWRPMJHGCBC?DG@=5-)(()(&&2$1kwspliged`]ZWRPMJHFDEHGFdegijjkmoprtuwyzxyz||zohtaMCO`lT2,24AI@664;>7)$)))(%)+,[uspligec`]ZWRPMJHFDEHGFdegijkkmoqrtuxzzxyz||~|n}oiZFBR`fl7(10=abJ14.+2;1&)))''+**[yrpliged`]ZWRPMJHFDEHFCefhjkmnprstvwxyz{||}}~~q]lrg8g}jW0*.-=yH?=5./980)'*&'('*Tzspnkhgda_[VSQMJGFECA@=eghjknoqrtuvwyz{||}}~~~onɂSLw~xR1*/4GIBE@5/340)(*&&(+(Rxrqnkhgda`\VSQMJGFEB@?J]psrfXLD=70,-'(/6oxtsqnjggdb_]YUSOLIGEC@>;hiknorstvwxyy{|}}~zŽM-,-1;GYiooi_UKA:0,-)),6oxurqnjhfeb_]ZUSOLIHFC@>ijloqssuwxyz{|}}~~ļQ0+-/4@N[djibXNC8-*,()'Jsvutsoligeb_]ZVTPMKIHEB@?ikmoqstvwyzz{}}~~{ýR2*,-13*),))+dzwtutpljgec_]ZWTRNLLJGDB@klnqrttvxzz{|}~~Y6*,,-7?JWbgcYJ91,,)')0izwuutpmjgdb_]\[WSNLKJHEB@kmoqsttvxzz{|}~»ƭc6,,,,4;HU^a_WG6/(-*)(2kyxwutpmjgdb`]]]YSNJKJHEB?kmoqstuwxz{{|}~[0+-++/9HSY\YPA3/'(&$!@s{twuspmjgeb_\[XUQMJJIHDA@kmoqstvwy{{|}~|sS+*.++/;JSUWSJ=2-)+%2Bf}|vvutpmjgec_\YTROLJIHFC??kmoqsuwxz{||}zl]bD)*.,/5?LRSSOD92+).)Ms{zyywutpmjhgc_[XSROKIHGEA>=kmoqsuvxz||}~}jÿs9'*-.49AKOPOI>4/,,,&R{|wxyxuspmjhgc_[XUSOKIGFDA>DIKMJC91,*)&+_{||xxvtpmjhgc_[YWTOLIFEC@<:noqstwz{|~~hwogK0-0=CFEBFB<71+)*&1j|{|}|{wtplihfc_[YXTOLKFDC@;:opqstwy{|~~mmº}{hN.'+:@CB>;:74/+)():u{}~~}{wtplhfdb_][YVQNMKGC@>@oprtuwy{|~~ve{{i^LxuQ8514;?@<5320-++&'C{}|wspkhecb`^]ZWTQQOJC?AEpqstuwz{|~~cxxyrfEskH=0,49<91..-+*+%$O}}{vsokhdba`_^[XUSRPMD>BFprsuvxy{|~~eu{^ybQ@788:8/,-,+*)%&a}~~{yurnjgeca`_]ZWTSSONE=@Cqrsuvxy{}~~gv^YH9A@@=2-,,+*(%/rz~~~}zxtrnjgedb`^\YWTSSNOF;pqtvxyz{|}~zfriquwxn[RWYQB0.5NdY9-+('(('S|~}{ztqnjhecb_ZWTRNMMHFC><;prtvxyz{|}~byt~lL0/8Sh[9,,*(' 5j~~}{zurokheb`\WTSOKIHDC@=<:qruwyyz{|}~kkij}|y[A03;KYN5*,.+%K}~}{yusoliea_ZUSRNKHGDB@>=;rsuxyyz{|}`uZH:7;@E?/)+,*%1f~~~|{zuspljeb_ZUROMJHHECA>=;rsvxzzz{|}Zlkb]TD=<<<7,,+&'%G{~|~|{zvtpmjfb`[UQLJHGGDC@=;9qsvxyz{|}~tRp}heWZYPMC;54/++(+!/n{{}zytroljie`\VPNMJHGCA@<;:qtwyyz{|}~\Q]OOEHOSSE<43.+.%$ >z~}zytqolihe`\VPOMKHGCA@=;:ruxy{{|}~tG`oiffimpdKA86.*'$%!C{~}~}{xxsqnkihe`]WPNMJHGCA@=;:swy{|||~~k>gqXI>8.'!&' C}}{~|zxvrqnkhgd`]WQMLJGFCA@<;:uwz|}}}~iNnydRH>7-%$&#"Ax~}{ywurpmjhfc`]XQMLIGECA@<;:ux{}}}}~zQrqVK@63+%$!&,)Ov~|zxvtqpmjgfb_]YRLKIFECA@=;:vy|~a}|ZlviQ>40-($#$*-",Z~}{{zwronljgeb_\WRNJHFEB@>;99vy|~~~~r,m]nwj^K8-,)%##'+*'"4l~}{|zvqmmmjhfb^\VQNIHGDA?=:98vx{}~~~~~LpeYaufXL>0)'&%$%(**'! E{|zzytpnnmkifa^[VQMHGEC@?<:87ux{}}}}}~~w+o[;Rjsrf[WOE?6+&&'((()*)'%$,kzyxvronnmlif`][UPMGEDB@><987uwz|}||}}~F'hbB=JG:681/1.'&()*+***)'#'G}{xvspnmmljhd`]ZUOKFDCA?=<976tvz|}|||}~W+-ivl]J@<<7-,+&&()++++*('$%#/ozvuqnmkkkhfd`\ZUOJECB@>>;976tvyzz{{|}~f--,exaTA30.'&'*+--+)''%%'U|xqmnmkiihd`]ZXRMHEB@?=<9765tvxxxz{|}~x<&/+X{pP6.+)&',-..+)'&%%":rtnnnikfaca]ZWUQJEDB?>;:8655tvxyxz{|}~L'1+-!BnH51-*(*///.,*'''()Uyplljhdbbb]XUTOIEDA?=;98654tvxyxz{|}~e0&1-/%,g?541-,/320/-*()'&$$7ahnlg_beb\YVSQLGDB@=<:97544tvxyxz{|}~v=*0,//("pc>72/004761/-+)*'#)(#-=NZafe_YXWSQOJDCA?<;987543tvxyxz{|}~ucF+/1,/-*"QM7:55337:82/-+)''&('" 1JX^^XWVROMHCA@>;:986432tvxxxz{{}~pY;,*//,.-+,$<{O?A;855:<920/,*'')%$%#&$!".@UZTRQNKGBA?=:8875432suwwwy{{}~}w]>0+,...//-,,#-oiTKG>77<>7210.,*(('&&$$$$$#'6JWWQLGCA@?<97665332stvwwz||||{{xk]M=-+.000////.,)$*VjYOD89==8200.-+)('&%$$$$$&&%+?JIGDB@?=;::765322rtvwvxxy}wgM8.-)).+/0,+./00.-)((:z{hVG:<><8210/0.*)'&%$$$$$%&$"#'0=:777654321qsuvuw{}ypdP;.,,*-,+.-.-)+/000.-*+(-_xaL<@@;8421252+*(&%$$$$$%"#&" $)19==<:86543211qsuvvyvgP;.*+.-+-..,)***-/0011/-)+(*I|w\G>CA;76435:5,+(&%$$$$$%""'()% *37:;96543110ptvtrbK3%&+,,..+-+-0.-*,0.-1110-()'+:grUB?EC:79757>7-+)&%$$$$$"')%###$%$$*1664443100qriT>-*,,+,-,,+++++,,/../1///0/.*)*(,R~{iSKJPJ::CC:9D3*+(%##$%$######$$%%&%"%)044320/.bP9,)*+--+,,,++*+++,,--,-///00/.*(+),Bhwj[Za\G8>II=9C1*+(%##$%$######$$%%&&%%&(*/000/.4,$%,,+--++,++**+++,-,++,-./00/.)'+)*6T~yofjseE7BOP@9B/++(%##$%$######$$%%&&'%##$),.//. \ No newline at end of file diff --git a/examples/person_detection/sample_images/sample_images/image3 b/examples/person_detection/sample_images/sample_images/image3 new file mode 100644 index 0000000000000000000000000000000000000000..9afbafad2cd1057b2830a01661fbd8d9ad211bda --- /dev/null +++ b/examples/person_detection/sample_images/sample_images/image3 @@ -0,0 +1,3 @@ + !"###$$$$$$$$$$$$$$$##"  !"#""#$&&&&%$#"! !!! !"#$$$$$$$$$$$$$$$$####"!  !"###$$$$%%%%%%%%%%%$#"!!!! """#$$%&')))('&&$$""""""!!"#$%%%%%%%%%%%%$$$$###""!  !"###$$$$&&&&&&&&&&&%$#"""""#$%%&'())++++**)''&%$$$#""#$%%&&&&&&&&&&&$$$####""!  !!"##$$%%&'''''''''&&%%%%%%%&''()**,-////.-+**)('&&%%%%&'''''''''''&&%%$$##"!!  !""#$$%&''())(((((((((())))*++,-../12444431///.-+*)())))))((((((()(''&&%$$#"!!  !"$$%&&'(()*++++++*++++--,./013345579::::97655430/.-,-,,,,+*+++++*)(((&&%%$#!!  !"$%'''())*+,,,-,--.-..011245689:;<=>@@@@?=<;:986542110///.----,,++**)(''&%$"!  "$%'()**+,-.../0/01112345789;<>@ABCCDGGGFEDCA@??=;:9864432110/0/...--+*))(&%$"!  !!#$&')++,--/0023444456688:;=?@BDEGHJJKLNNNNLLKIHGFDBA?><:9876544443211/-,++*('&%#!  !!#$&')*,--.02335788789:;<=?ACEGIIKMOOQRRTUUSRRPNMNLIIGECA@>=<:9878765432/.--,*)(&%"! !"##%&(+,../234678:;<;=>?@BDFHJKOOHJNY[]XWV][XVWZZXRGKOKKJHFDA?>><;<:98876320/.,+)'&$" !"$%&')+-/0134579:;<>?@ACEFHIKNPRRPNTRd{cj`_^alh{bQOPQQQOMKIGEDB@??=<;:9864310.-+)(&$#"!  !!"$&')*,.0234578:<=>?ABEFHJLNOQTVYUQUW_SrzqihqzpU_YSSWWTQPPMKIGFDB@>>==;976420/-+*)(&$#""!"$%&')*+-.034678;=?@AACFHJKMOQSUWWUZXQ`YHQirugTFV_SZWTTTUSQPNLJHECBA@?><986421.,,+)(&%#"%'(*+,./12478:;=@BDDEFHKMOPRTVWYZYVWhhmZVa_{|}b`X\meiYXZZYXVTSQPNKHFEDCC@><:86530/.-+)'&%(*+-/12568:<>?ADGHIJJLOQSUWXZ[\]]\ZYmwkY]QPSmvxjWOO[[jxmUXZ[^\[YXVUSQOKJIIHFC@><::854310,+)(+,.02469;=?@BCFIKLNOORTVWY[]]_ace[_pde^NE;4<\zlkgjt^=3:DPbfdna[dgd`^\ZYXVTRQNMLKIEBA??=:97420.,*-/0258::864103468;=@DFHKST`fb_]bib_``cikomfk]QVNWN\OSJ>ZQSXQKGU[QR\ADVOZPXOWQ\lgkojfba`_che]\`h`RPKIFC@=:96434579<@CHGIPH6uylgkgoksopn[cbOMT=HYAR_RUbu[WgdZYxdUPaR?TJ?XMKabZktsoinhghnvv3HSMGED?;9865679;>BEIIOZ7 -pywl{pl~TCLF][FHMKHTs]^```ml\`a[_nSJOMGEZZIICXnp|jwv~o-4WQKHEA=;:8789;=@DGJLV\-0l{wykP@FAMUKEVZWU\X_o`WPQXaiaZ^RXWZCKSQ=;:<=?ADHLPQ]S6HQI:3Ropu~}xdJSD@ACFJMK^rJ0>QMD8?Wjgen{zvyl]TS?8P?)9>G;C::HJA=;?HD:@A>E?8)EO@ABDGKOP]pR839CF?@8KU[^uvof^Z9>8=K7/8;<8B9ANB;ADOB:A8:7326M=5:9\bbmqw[\UI9<=HB26>Sp^QOJGCBA@CCDEIMPTjxRDNKJ>12.46N[gl{heQE86/?A>?4A8:FC228GQefzjh\N72153=IJP@OyhSPLHEDDCFFGHKOSXjp=;F@860#!$#<\T{v||hg_L53/+0EmjXRNJGFEEHIIKMQT\sz<32++,+!3DIm}|k`WMI=,038AJZBJ??9988>:@>FA[JB432,:LQU`l~lHE1%',.,2/F@B/>B/@>H>FX[BMIF80$ "9XivhXRSXhnvxktrRWMUFSTCTNUOtsnwsmeXTMUlz~fW>$ %,:>-1oj]XTQPONMPPPQSWZ_ku6+;5(&ITe|~}yvpjuqjr{~~y~zfUI& '47-;pm`ZVSRRQPTTTTUY]bkx=13) 3RQf~~{dRP3'12!=tn`]YUTTTTVVVUW[_dnzC!$1  =RPluzgTU;# + +.' Ewoc^ZWVVVVXXXXY]aeo{R'0. >\E`kr¸{sh`G[; !.-(Oxof`\YXXXXYYYYZ^bhq{S 082"2POZyx|²¯®yxYJX/ 380#Typgc^ZYYYYZZZZ[`djs{\"",0$("1ZLXqwsutsqktzu}qwqWHY/ )#-.$#]yrhe`\ZZZZZZZZ]adiszo',2(&&$9;:;>>Ru¯tOA=:>:::9?KJQ^eVKPV]disshe^Y_mvxwtrqqqrrrrrsuwzvh]\_a_hkgbXWTOOYif\XTG>@A[rs]=AJV\[\ba[^cfehjnoomd^e|y|~xxxvyvxx}|w|d\hmmnnigjgb\[`a\[\VG@BBBNk}|zywwwxxxxyz{{nLBBA@EC@DR]a_`abdfhptttptn|r`m}|iflrnhfhz}}m_pyqqtssrrjdedb_^_]RCBEC@AABOn~|zxxxxxyyyyyzzufMD?<:?:9AMTV^a_`gjmttrp{}||}xih]fZUWVKKWWW_g\gn{}|yosuvpge`aa]ZTJ>9;=;>BKQRRWZ]_ciosvxzxmbC-#&!!($0Egoy{wwsnied_YXVQNJBB>86;?Karvwyzzzyyz{zyxwtdF358;<:>IRQQUZaedfhnw{xlYMCMMFJ[l~}y{uokfcf`[USTSJ?9;;733Jftwxzzzzyyz{zyxwvlN44:82/4;BIPUXZ[]cimw}uqmx}~yse]WTTV^gsy|mr}xtkhc]WZ]UOKF:2138:37Rjuxz{zzzyxyzzzyzzpX:42,,-/2;EJMPUXZ^bekpusg`o|tnmmlk\QTRM`kpkkqwp\gwzvpjfb_\XTOMMG=30..021ACBCGLQT[ckpp||tkeZbeOQPOOLNOKMTVda\`lv|wqkigZSQLHABCA?<6/-+/1?\z}}}}|{zzyxyz{|}bA4..0/01357:@EKJNX]`lqspg`X[_bWHOFEEEOKYaa[Zagltula\YNLKEA=94320/../4B`}{zyyyz{|~|Q:2.-)+-+,-08>CGKPTZZ_c]WQUXX_[S[KLKNZQ[_YUUUXZ^a\TSSLFC=94/),.,*+/28Qy~|{zzz{{|cD5/-,--*),.27=DHKMKNQLLNORUU\b^WRTSUXYb\QVQMMMORPKKMIC>83--+-.-+,04Cd~||{{}|{|~w\=200-*((+,.38=94/+*((*-.25;Vy~{{}}~}}}sJ971.+*+-./13358;>@BBDHJKJHIMPRWXXUQPNIIJKJGEDB@AA:421.--,**+.04;No~}~~~}]E81/,+-.//.-/26889;>BEGECB@AHMSTURLGCABBEGEC?=;9642///0/-,+,/17Aa~~~~pS>420./011111234578<=;;?><77?FIJJJF>78;<=>>><97532222220/./135<986569@57-*0)"/Xjljkkkjhea_]ZWVUTSSSSSSSROG=4+#FHJKMOQSVY]_beea^WPJB:40+'%#$%(++'&,2BBGO:,!Dfnjmmmljgdb`]ZXWVUUUUUUTSPG=4+#GIKLNPRTW[^acfeb_WQJB:40+'%#"$&&'! -/BHZ\B,*Ypopoomkifdb_\ZYXVVVUUUUTPG=4+#GIKMOQRUY\_bfhgdaYRKC<61-*(&$'*(# *,:DXR0 &*##'Cjoppomkjhfc`]\[YXWWWWWWUPG=4+"GIKNPQSVY]`cgiifb\UNG?:61,*())'%&$3@VK4' #'!&5.%-_nppomlkigea_^\ZYXWXXXXVQG=4+"GILNPRTWZ]adgjlie_XRLE=8320/0*##+->TV9-!###""&5D<-! Kloooonmkigda`^\[ZYYYXXVPG=4+"GILOQSUX[^aehknkgb[UPIEA=<;97,-,5JcN<%(((&(-19=HOL<-(! ,bonnqpnljifda_]\\ZZZYWVQG=4+"GJMORTVX\_ceimnmje^YTOMKGD@?7)$*-E[YK4,;CEFACLRPOSUUK<0&!'Nmlnoqqmjigcba_^]\[ZZXTOF<2*"GJMNRTVY\`dfjmnnmgb]XTSROIDB5!%#1W_PI,'8GOQRQSVXWWWWXUH73-%):koomoqokljedb`__]\[ZWRMD:1)"GJMOQTWZ]adgjnopokea]XWUROMC.# %#BbZR@-1?KQTWY\\[[[[ZVXSF33!'(%]ppkjkmmljjfca`_^]\ZVQLB80)!GJMNRUX[]aegkopppnheb]ZXUVVE+"&+UdVO44=FPTWZ]____^_^Z[US>00'-Afmjecehgfhfcba`_]\ZUQJA7/(!HKMORUY\_bfilprsspkhebca^[WA'$!;^]UH29GOW[]__`ccccccc`YVN<9$"+)'*^heb_\bbaeeddba`^\ZUOH@5-'!IKMPSVY]_cgknqrturokhiigd`V4$"%P\_X=43+&!JLNQTWY\_cgknqsuvspnnnmjhdS)("0[_`Q79BMU[`bfkmkiikjigb]ZUNB715+ .V[[\W\\\^`bdcba_\XRKE;1*%! KMORUWY]_cfjnqtvwuqrttrolbA(?`\[G:D-""!2QTQJJOTW[^addc_[WOH@6-($!KNPRUXZ^behloruwzrsyxvwskH"%(3Z[RP;=HMV\adhlnpqqqpnkhd`_][ZR2)NFGIJMRUZ_acd_YTMD<4,&!KOQSVXZ^aehkoruwyrv{yxwrc8 *%D^RHB7EJPW]cjnpprsssspmjfba_]\V?*>C:& -==ACDHMQV\_ac^XRLB:2*$LPRTWYZ^aeikoruwxs{}{z{v_0'%S[LC<7IOUY_flpssuvuuvtqmieda__\K2?;=&"588;=AFMRW]`a]WQJA80'!MPRTWYZ^aeiloruwws~~|{ysT&')1[VH@9CNRX[`fjnrtwwwwxwsokgec``_V5=>D+-3357;@IOT\_`]VPI?6.&MPRSVX[_cfimpsuvvs|}||zpE-*5]RB:?CB6##,-/15;BJSX_^[UNF<3+$MPRTWY\`cfimpsuvvr{|{yvl;3$FWL98?MVY]_chlptvy}~~}{zvrnkhfdbaH?E?;'%)+-17>GPU]\YSMD:1*"MPRTXZ]adfimpsuvvqz}{vt`- 0$WQH09CSY]`bgkptxz}zwspmjgfeTCEC@*#"$',2:CKRYYXQJA7/'MPSUX[]bdfimpsuvupz}{ruS"))-ZPF39FX\_ceinrvz~~zvspmjifZIJAC0%!#(.6?HOVVVPI?5,%NQSUX\_bdfjmpstvvow|vprD+&=^M93INUUUOI?2)"NQTUX\_bdfimpstvwovzuvi;, L`I33DPZ^bimty{~xpbWadROEH9$#!'.9EMUTTOI>0' NQTUX\_bdfimpstvxptuuxY0#/!QY=15JSRXeltx{~eF.(/_ZJFDF&""$/;FLTSSNG<.%NQTUY\_bdfimpstvxqrsspF&(3)\T;08I?.,3K]ky~fM1 ,%3[GLBO&"'!-9ELSRRMF:,#OQSVX[^aegjmpstvxqonq`="(,2fM=/GKOPKD8*JLNRSUX[^begjmorsrfheF6"*N`H54,+[kknpZD3%7OrdN8Oiz}yyv`5QCI>, *$/;DHLLGA5(GIKNPRTW[^acfilnqsai]?1%'W^E13-J]bjnuxmT?9Hjy~hW[krtsrssqsJIC@D -#)'!+8AEIJD>3%EFHLMOQSVY\_bfikmn\eQ7'&#!\_E22;W\aglllomaYUix}|icjnigbcghloXCCBFFA;1$CDEGHIKMORUY]adefdZ]H8!'*b]D64?Y[]__[a_eb\]it|wib`\PUPSP]gi]>I9P&+0%1 )2;?CB>7-#BCCBCDFHKMPTX\^_`a\VA8#$2hXA71@SSPDDDNNL\_X_myo^\YHEE;A;DK[]9K9F2(8)2"'07:4+ @@BBCEFIJMPTX\]__cXM=4!!!8iSA83@?8/$*AN_ZNdu~fZYN: /4U]4L@:<%;03'$-37;:61'@ACEFHJLOQTX\_abdfUG;."DbND:6<.1(CJSbIUpw`YUC4)5+GZ4MG8>$976+"*04872-$DEEGIJLOSVX[^adegdTF7(!P_OH?94%:'&>yIQdHFgnZhbBf6'-N:\6!,V8NjMjG>]h[u`\lB=e- KiB:SL;)9B?5#).10+%EFGILMMQSVX[^abdd]N=4& #$RfPA>FA6,+9C&>TY\NoT@\|j^v]PRF44GB2D_lN/VM>.5CC: &*-+&!FGHKMNNQSVX[^abcc[K:2$"$&YcWBAKMME67=EYacklsW>Yx{lZotdVUMKFBG]gjX,UIA1.AF<#'+("FILMOPPQSVY\^`abZVJ71$!"2][SEBNLZ\QU[^dggiifO=X{qc\cjg]\[]ZZajmna.JNB/'=K<#!#%%GJLMOPPQSUX[]_`aXVJ7-%""<\YOFFRS_ddcfjjfknjeO=Xxja^`ddkeijjjloqlg3;TA*(;MC,! HKMMOPPQRTWZ\^``XUI7(&"#A[^QFDRYafnoquuxusmfO>Wtmdcepkpqtuwwsonji<+TA)&6JI7HKMMOPPQQSVZ\]__WTH7$("$J\\XD>NYclrsuy{{{xofO=[xodkrzztuwyxxwuqlgC$NB+#1BI>ILOOQQQQSUVZ^``]XYE6$'$Q_\RA=L[hkqsw}}{rbJ>`pdmy}{|{wyzzskhJ AH1.AL>LNQRSTUV[_`_`a^YVUF7$'#Tb]P;K\fjpw}~ubCGd{pehx}{zridQ!(J4&4ECRUXXZZ_glmoieaYNUSG."+#Zc\O<:K]ekpyw^>MkwpefxzzshbU%$B>*-BEVXZ[[\bmsttpieTJVTE( ($![^cM;9J\cjsz|T;Wqwrf_w}yqh`S&(6A1 (=E&XYZ\]`itxxxtnfQKXX@&&"&Z[iS=7IZbity}FAcn`l~xpg_Q%+1A1#%;G,YZ[[_gsz}}}xrdNMY[;& '+YWlY>7HY`grx}}8Hive^|vnf^P#,3>3$":I2##Z[[[blvz{{{{wdKOZU<(!(0WSjR@4FX^fpx~m@E_of_~|ume^O"-696#:L8(#!!'%ZZZZcpwyzyy|zbKQZO>)!*2UTlND/FU\dox~YFRKhwoehbwzsjd]N!/75:%7K=9G7&%' WWWWbrwwxxxyy_LSWK='!*2S[mJL/DRZbmw~HB6D_egL_etxqhb\M"152=)4G@!2NW?##%RRRS^mrssrrssZMTRH=($*.SXoJJ6APYakv|EJA#Ub[8C[v}wpgaZL#/137,"3BB&CcbA "$LLLNYhmnmmmmmTNUMD<*(**R[lLL8?MV`jtz[Hh,?Q]o[^y|vog_XK%.0/5.&0 HFDDP_dca_`aZ\RG@B6.2)&ERaRBR;GQXajuy{|{uojfktmzyvuyztz|}zvqkf]]I)34*1534696#1T\=HFCAM[]]]^^\TZTE?A405)%CO]TFS=FQW`hsxyxvqkfbjwotspmuwpsuxzvoif]_H*65*1429:77'&Q]<KFA=FSZZXYYWR[TD=B76:'>HZWFPAETU]fqvvooid`\chbfjnkmsrttuywnigcaG,@4*,738<:6/)RY3JF@<@KTVSRRWS\SC;?7=<%>DYTGOAETU\fpsoihb\VMN]fgYVcipprrptrljge`D0H;,-74;=@=6'MV.ID@;9AMRQRRSNXR@9;8F?!>?USGNAEST[fmmijfVJ?;=@IGDAEWceiqnqolkhg\>4K:1.65@AB=;#DL+IC?:35>FIKKLGQP?888LA">;SRFNAESSZeliieT?:;<863>@=59GL^sstrmlihZ;@Q94.56CF@5=!"25, IB;5.*,17;</]cB848/CM@:<6" !).!IC;4-(&%$%'*,9K=+.3=2(#,.OD4JNGOKX[fmjc\N;@GT`^^]XQLZjhjopkihf`23egE95:-AQA>4:!"#.!IC;4-('%#"#,0J>+.38**%.1JK2KSISGS[bkiecXE;;I[Z\WQNWckkjmomnieY&4inK?9:,@R@?.?%"!&3"JC<5.)'$",0+HA-/57$+',1CG7KVPTIPY`hgecaYN96EJMLMQ`inkklmnlfcP6jsKB=;+>Q?>/@."!!57"JD=6/)&$(;/(EF-/53 "+'&0@?6ITXROOV]fgecdee`K=@CO[dmpokkkkljf`=:isOG@=+;M?<1>:% ';5(!LD=7/)%# !7@(&DL,)0-&,(%4D=5CQ\VSMU[cgecceflndeiglttplkkjjjicR";cl]R@9+7J>83=D' )7:<.KE?91+%" )@=#$?L+%.(*.'%6E=9?O\ZTMSX`fedeghr|vqvtvyupkkkkkif[=#>`fj]<8,9IA55;J+ %5FS<JE@:3-% "7?/$"6L/$.$,0&$4C;<>K\^VORW^dddehjr~|~zyuqmkjjjd^N"'Baeo\5;.:GC458K-(4J^EID?:3,$",=3% ,N5$, ,0&#3B:@;AZ`ZLMU\_acehjuwtsokihhhaV1(C_amM,>.5CC:45F6$29LbM"HC?<4.)+46&%!$A5%).1&"2@:B96RdXCCNUY^cehkwtnqmiggdc[B)CYWf=)=//>BA42BG5:>NhW$GB><50.25,#%&$ /0$&-1'!2><60/4.(('*%& )-)#7?=A92=aS?&>CKU]`dku}}wqomje`ZL0&GPMMA)?4*6:D<'3NVXEJcb*EB@<2023-(&)+#"''&<@;@<26TQA)7>,&/7?EGIJF@@DFHKL?$7F;A=2A4+537;;-5SXfXDM+0R1>;DEBAA@?@;67/)-=F6*,B@FE9.!"%(-28>KNNOQQ="4E:@@26<.155>>47SajX>G(2W=#F>FDEFEDBC=8;4$&6E8+);??<# 090-'=;JRTSSQMJJPVXXZXXYZYWWVS6(D>>A<=).4/03ECBUmg\E>(0MU<F=CFHIIIGH>CB?*'.(*(<=KSVUUUTRQV\aaa`__^ZXYWS49>BK>A0$7440;FEYhd^H='1L\?E?BGIJJJJI@HFC6"%*8?JRXXYXTRSZ`eggfff`\Z[YT5+;CQB@:$/78/.;M\i``J<&1IY=!CBBHIKLLNIDLJG> +4BIQZ[[[YWUX^ehhgggb^[\[U4&8AIJKKHJNMLLH>#! *@ITX^acb]ZXZbehhfb`_^^]Q7 0EGLEB4'(++CKIZIWbM<*7GMO+BC@?HIJJEJPNMMLE+!&?ITX^aee_\ZYaeggeb`_^^]Q8$'DKOHG9+(().EMRKVjK=.2JMQ0 \ No newline at end of file diff --git a/examples/person_detection/sample_images/sample_images/image9 b/examples/person_detection/sample_images/sample_images/image9 new file mode 100644 index 0000000000000000000000000000000000000000..473049c4754f99d383abef194dfafdcb1de30a6d Binary files /dev/null and b/examples/person_detection/sample_images/sample_images/image9 differ diff --git a/examples/person_detection/src/detection_responder.cc b/examples/person_detection/src/detection_responder.cc new file mode 100644 index 0000000000000000000000000000000000000000..def70dd4ae84c4c555dbd4cd17c3c2c82947e142 --- /dev/null +++ b/examples/person_detection/src/detection_responder.cc @@ -0,0 +1,26 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#include "detection_responder.h" + +#include "tensorflow/lite/micro/micro_log.h" + +// This dummy implementation writes person and no person scores to the error +// console. Real applications will want to take some custom action instead, and +// should implement their own versions of this function. +void RespondToDetection(int8_t person_score, int8_t no_person_score) { + MicroPrintf("person score:%d%%, no person score %d%%", person_score, + no_person_score); +} diff --git a/examples/person_detection/src/detection_responder.h b/examples/person_detection/src/detection_responder.h new file mode 100644 index 0000000000000000000000000000000000000000..d2d945f417072a5851086c611c1b4aa5c0e0d578 --- /dev/null +++ b/examples/person_detection/src/detection_responder.h @@ -0,0 +1,32 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +// Provides an interface to take an action based on the output from the person +// detection model. + +#ifndef TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_DETECTION_RESPONDER_H_ +#define TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_DETECTION_RESPONDER_H_ + +#include "tensorflow/lite/c/common.h" + +// Called every time the results of a person detection run are available. The +// `person_score` has the numerical confidence that the captured image contains +// a person, and `no_person_score` has the numerical confidence that the image +// does not contain a person. Typically if person_score > no person score, the +// image is considered to contain a person. This threshold may be adjusted for +// particular applications. +void RespondToDetection(int8_t person_score, int8_t no_person_score); + +#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_DETECTION_RESPONDER_H_ diff --git a/examples/person_detection/src/image_provider.cc b/examples/person_detection/src/image_provider.cc new file mode 100644 index 0000000000000000000000000000000000000000..9e67b93a32d29158bfb4b5f3d0144b0355ec1be1 --- /dev/null +++ b/examples/person_detection/src/image_provider.cc @@ -0,0 +1,57 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#include "image_provider.h" + +#include "model_settings.h" +#include "tensorflow/lite/micro/micro_log.h" + +#include +#include + +static uint32_t index = 0; +static char *image_dir = CONFIG_APPOBJECTDETECTIONMICRO_DEMO_PERSON_DETECTION_IMAGE_DIR; + +// readImage read image from file /static_image/image{index} to image_data +uint8_t *readImage(int index) +{ + // read image from file + uint8_t *image_data = (uint8_t *)malloc(kMaxImageSize); + char filename[100]; + sprintf(filename, "%s/image%d", image_dir, index); + FILE *file = fopen(filename, "rb"); + if (file == NULL) + { + printf("Failed to open file: %s\n", filename); + return NULL; + } + fread(image_data, 1, kMaxImageSize, file); + fclose(file); + MicroPrintf("Read image: %s", filename); + return image_data; +} + +TfLiteStatus GetImage(int image_width, int image_height, int channels, + int8_t *image_data) +{ + uint8_t *ptr = readImage(index++ % 10); + + /* Convert from uint8 picture data to int8 */ + for (int i = 0; i < image_width * image_height; i++) + { + image_data[i] = ((uint8_t *)ptr)[i] ^ 0x80; + } + return kTfLiteOk; +} diff --git a/examples/person_detection/src/image_provider.h b/examples/person_detection/src/image_provider.h new file mode 100644 index 0000000000000000000000000000000000000000..f3799922d7aa317a27d3a6946b6bcefaea3e60b6 --- /dev/null +++ b/examples/person_detection/src/image_provider.h @@ -0,0 +1,38 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#ifndef TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_IMAGE_PROVIDER_H_ +#define TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_IMAGE_PROVIDER_H_ + +#include "tensorflow/lite/c/common.h" + +// This is an abstraction around an image source like a camera, and is +// expected to return 8-bit sample data. The assumption is that this will be +// called in a low duty-cycle fashion in a low-power application. In these +// cases, the imaging sensor need not be run in a streaming mode, but rather can +// be idled in a relatively low-power mode between calls to GetImage(). The +// assumption is that the overhead and time of bringing the low-power sensor out +// of this standby mode is commensurate with the expected duty cycle of the +// application. The underlying sensor may actually be put into a streaming +// configuration, but the image buffer provided to GetImage should not be +// overwritten by the driver code until the next call to GetImage(); +// +// The reference implementation can have no platform-specific dependencies, so +// it just returns a static image. For real applications, you should +// ensure there's a specialized implementation that accesses hardware APIs. +TfLiteStatus GetImage(int image_width, int image_height, int channels, + int8_t* image_data); + +#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_IMAGE_PROVIDER_H_ diff --git a/examples/person_detection/src/main.cc b/examples/person_detection/src/main.cc new file mode 100644 index 0000000000000000000000000000000000000000..e08c300fc4b8b7d6e1eb339e64eb06ad61696d0d --- /dev/null +++ b/examples/person_detection/src/main.cc @@ -0,0 +1,27 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#include "main_functions.h" + +// This is the default main used on systems that have the standard C entry +// point. Other devices (for example FreeRTOS or ESP32) that have different +// requirements for entry code (like an app_main function) should specialize +// this main.cc file in a target-specific subfolder. +int main(int argc, char* argv[]) { + setup(); + while (true) { + loop(); + } +} diff --git a/examples/person_detection/src/main_functions.cc b/examples/person_detection/src/main_functions.cc new file mode 100644 index 0000000000000000000000000000000000000000..7c3eaae37c387b85cd18374e740238e6230c3d21 --- /dev/null +++ b/examples/person_detection/src/main_functions.cc @@ -0,0 +1,115 @@ +/* Copyright 2022 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#include "main_functions.h" + +#include "detection_responder.h" +#include "image_provider.h" +#include "model_settings.h" +#include "tensorflow/lite/micro/micro_interpreter.h" +#include "tensorflow/lite/micro/micro_log.h" +#include "tensorflow/lite/micro/micro_mutable_op_resolver.h" +#include "tensorflow/lite/micro/models/person_detect_model_data.h" +#include "tensorflow/lite/micro/system_setup.h" +#include "tensorflow/lite/schema/schema_generated.h" + +// Globals, used for compatibility with Arduino-style sketches. +namespace { +const tflite::Model* model = nullptr; +tflite::MicroInterpreter* interpreter = nullptr; +TfLiteTensor* input = nullptr; + +// In order to use optimized tensorflow lite kernels, a signed int8_t quantized +// model is preferred over the legacy unsigned model format. This means that +// throughout this project, input images must be converted from unisgned to +// signed format. The easiest and quickest way to convert from unsigned to +// signed 8-bit integers is to subtract 128 from the unsigned value to get a +// signed value. + +// An area of memory to use for input, output, and intermediate arrays. +constexpr int kTensorArenaSize = 136 * 1024; +alignas(16) static uint8_t tensor_arena[kTensorArenaSize]; +} // namespace + +// The name of this function is important for Arduino compatibility. +void setup() { + tflite::InitializeTarget(); + + // Map the model into a usable data structure. This doesn't involve any + // copying or parsing, it's a very lightweight operation. + model = tflite::GetModel(g_person_detect_model_data); + if (model->version() != TFLITE_SCHEMA_VERSION) { + MicroPrintf( + "Model provided is schema version %d not equal " + "to supported version %d.", + model->version(), TFLITE_SCHEMA_VERSION); + return; + } + + // Pull in only the operation implementations we need. + // This relies on a complete list of all the ops needed by this graph. + + // NOLINTNEXTLINE(runtime-global-variables) + + static tflite::MicroMutableOpResolver<5> micro_op_resolver; + micro_op_resolver.AddAveragePool2D(tflite::Register_AVERAGE_POOL_2D_INT8()); + micro_op_resolver.AddConv2D(tflite::Register_CONV_2D_INT8()); + micro_op_resolver.AddDepthwiseConv2D( + tflite::Register_DEPTHWISE_CONV_2D_INT8()); + micro_op_resolver.AddReshape(); + micro_op_resolver.AddSoftmax(tflite::Register_SOFTMAX_INT8()); + + // Build an interpreter to run the model with. + // NOLINTNEXTLINE(runtime-global-variables) + static tflite::MicroInterpreter static_interpreter( + model, micro_op_resolver, tensor_arena, kTensorArenaSize); + interpreter = &static_interpreter; + + // Allocate memory from the tensor_arena for the model's tensors. + TfLiteStatus allocate_status = interpreter->AllocateTensors(); + if (allocate_status != kTfLiteOk) { + MicroPrintf("AllocateTensors() failed"); + return; + } + + // Get information about the memory area to use for the model's input. + input = interpreter->input(0); +} + +// The name of this function is important for Arduino compatibility. +void loop() { + // Get image from provider. + if (kTfLiteOk != + GetImage(kNumCols, kNumRows, kNumChannels, input->data.int8)) { + MicroPrintf("Image capture failed."); + } + + // Run the model on this input and make sure it succeeds. + if (kTfLiteOk != interpreter->Invoke()) { + MicroPrintf("Invoke failed."); + } + + TfLiteTensor* output = interpreter->output(0); + + // Process the inference results. + int8_t person_score = output->data.uint8[kPersonIndex]; + int8_t no_person_score = output->data.uint8[kNotAPersonIndex]; + + int8_t person_score_f = + ((person_score - output->params.zero_point) * output->params.scale) * 100 + 0.5; + int8_t no_person_score_f = + ((no_person_score - output->params.zero_point) * output->params.scale) * 100 + 0.5 ; + RespondToDetection(person_score_f, no_person_score_f); +} diff --git a/examples/person_detection/src/main_functions.h b/examples/person_detection/src/main_functions.h new file mode 100644 index 0000000000000000000000000000000000000000..2620097a8339d8be324748c382dba0bd83eb3e22 --- /dev/null +++ b/examples/person_detection/src/main_functions.h @@ -0,0 +1,37 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#ifndef TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_MAIN_FUNCTIONS_H_ +#define TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_MAIN_FUNCTIONS_H_ + +// Expose a C friendly interface for main functions. +#ifdef __cplusplus +extern "C" { +#endif + +// Initializes all data needed for the example. The name is important, and needs +// to be setup() for Arduino compatibility. +void setup(); + +// Runs one iteration of data gathering and inference. This should be called +// repeatedly from the application code. The name needs to be loop() for Arduino +// compatibility. +void loop(); + +#ifdef __cplusplus +} +#endif + +#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_MAIN_FUNCTIONS_H_ diff --git a/examples/person_detection/src/model_settings.cc b/examples/person_detection/src/model_settings.cc new file mode 100644 index 0000000000000000000000000000000000000000..2d4ad1e289b6450bc47bf5b52d4aa928abe6654d --- /dev/null +++ b/examples/person_detection/src/model_settings.cc @@ -0,0 +1,21 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#include "model_settings.h" + +const char* kCategoryLabels[kCategoryCount] = { + "notperson", + "person", +}; diff --git a/examples/person_detection/src/model_settings.h b/examples/person_detection/src/model_settings.h new file mode 100644 index 0000000000000000000000000000000000000000..f94d58ed652ede2db9b85e03d0877f565b2437dd --- /dev/null +++ b/examples/person_detection/src/model_settings.h @@ -0,0 +1,35 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#ifndef TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_MODEL_SETTINGS_H_ +#define TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_MODEL_SETTINGS_H_ + +// Keeping these as constant expressions allow us to allocate fixed-sized arrays +// on the stack for our working memory. + +// All of these values are derived from the values used during model training, +// if you change your model you'll need to update these constants. +constexpr int kNumCols = 96; +constexpr int kNumRows = 96; +constexpr int kNumChannels = 1; + +constexpr int kMaxImageSize = kNumCols * kNumRows * kNumChannels; + +constexpr int kCategoryCount = 2; +constexpr int kPersonIndex = 1; +constexpr int kNotAPersonIndex = 0; +extern const char* kCategoryLabels[kCategoryCount]; + +#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_MODEL_SETTINGS_H_ diff --git a/main.c b/main.c new file mode 100644 index 0000000000000000000000000000000000000000..3dd0c0860f0305ad80558ba46ebf160a5a775b7a --- /dev/null +++ b/main.c @@ -0,0 +1,8 @@ +#include +#include + +int main() +{ + uk_pr_crit("Hello World~~~~~~~~\n"); + return 0; +} diff --git a/scripts/setup.sh b/scripts/setup.sh new file mode 100644 index 0000000000000000000000000000000000000000..2c0110b6f30466fd36fa06a4b7ae0c0560ebcc31 --- /dev/null +++ b/scripts/setup.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +test ! -d "workdir" && echo "Cloning repositories ..." || true +test ! -d "workdir/tenon" && git clone git@gitee.com:tenonos/tenon.git workdir/tenon -b master || true +test ! -d "workdir/libs/compiler-rt" && git clone git@gitee.com:tenonos-mirror/lib-compiler-rt.git -b RELEASE-0.16.0 workdir/libs/compiler-rt || true +test ! -d "workdir/libs/cxx" && git clone git@gitee.com:tenonos-mirror/lib-libcxx.git -b RELEASE-0.16.0 workdir/libs/cxx || true +test ! -d "workdir/libs/cxxabi" && git clone git@gitee.com:tenonos-mirror/lib-libcxxabi.git -b RELEASE-0.16.0 workdir/libs/cxxabi || true +test ! -d "workdir/libs/musl" && git clone git@gitee.com:tenonos-mirror/lib-musl.git -b RELEASE-0.16.0 workdir/libs/musl || true +test ! -d "workdir/libs/unwind" && git clone git@gitee.com:tenonos-mirror/lib-libunwind.git -b RELEASE-0.16.0 workdir/libs/unwind || true +test ! -d "workdir/libs/tflite-micro" && git clone git@gitee.com:tenonos/lib-tflite-micro.git -b master workdir/libs/tflite-micro || true +test ! -d "workdir/libs/flatbuffers" && git clone git@gitee.com:tenonos-mirror/lib-flatbuffers.git -b master workdir/libs/flatbuffers || true +test ! -d "workdir/libs/gemmlowp" && git clone git@gitee.com:tenonos-mirror/lib-gemmlowp.git -b master workdir/libs/gemmlowp || true +test ! -d "workdir/libs/ruy" && git clone git@gitee.com:tenonos/lib-ruy.git -b master workdir/libs/ruy || true +test ! -d "workdir/libs/kissfft" && git clone git@gitee.com:tenonos/lib-kissfft.git -b master workdir/libs/kissfft || true