From cbc00281738bcb4b9016118f917a8ed599dd61bb Mon Sep 17 00:00:00 2001 From: Wentao Wu Date: Fri, 24 Nov 2023 17:32:41 +0800 Subject: [PATCH] k230 canmv docs release v0.2 --- .gitignore | 5 + .gitlab-ci.yml | 31 +- Makefile | 31 + _static/img/ch-flag.a61145a4.svg | 9 + _static/img/logo.2f7049e2.svg | 6 + _static/topbar.css | 176 + _templates/versions.html | 41 + conf.py | 75 + exts/sphinx_rtd_dark_mode/__init__.py | 27 + exts/sphinx_rtd_dark_mode/dark_mode_loader.py | 63 + .../static/dark_mode_css/custom.css | 77 + .../static/dark_mode_css/dark.css | 559 + .../static/dark_mode_css/general.css | 68 + .../static/dark_mode_js/default_dark.js | 13 + .../static/dark_mode_js/default_light.js | 13 + .../static/dark_mode_js/theme_switcher.js | 39 + index.rst | 16 + preprocess.py | 35 + requirements.txt | 32 + zh/00_hardware/.keep | 1 - zh/01_software/example/.keep | 1 - ...1\351\231\220\345\205\254\345\217\270.txt" | 8 - ...56\351\242\230\350\247\243\347\255\224.md" | 69 + ...45\351\227\250\346\214\207\345\215\227.md" | 2 +- ...10\346\234\254\350\257\264\346\230\216.md" | 113 + zh/api/api.rst | 25 + ...345\235\227API\346\211\213\345\206\214.md" | 0 ...345\235\227API\346\211\213\345\206\214.md" | 0 .../cipher/images/canaan-cover.png | Bin .../cipher/images/canaan-lable.png | Bin .../cipher/images/logo.png | Bin ...345\235\227API\346\211\213\345\206\214.md" | 0 .../images/balena-Etcher-finish.jpg | Bin .../images/balena-Etcher-flash-from-file.jpg | Bin .../images/balena-Etcher-flash.jpg | Bin .../images/balena-Etcher-select-target.jpg | Bin .../images/canaan-cover.png | Bin .../images/canaan-lable.png | Bin zh/{01_software => api}/images/ide-2.png | Bin zh/{01_software => api}/images/ide-3.png | Bin zh/{01_software => api}/images/ide-4.png | Bin zh/{01_software => api}/images/ide-5.png | Bin zh/{01_software => api}/images/ide.png | Bin zh/api/images/ide_image.png | Bin 0 -> 260638 bytes .../images/linux-serial.jpg | Bin zh/{01_software => api}/images/logo.png | Bin .../images/micropython-start.jpg | Bin .../images/openmv-ide-connect.png | Bin .../images/windows-serial.jpg | Bin ...345\235\227API\346\211\213\345\206\214.md" | 4 +- ...345\235\227API\346\211\213\345\206\214.md" | 4 +- ...345\235\227API\346\211\213\345\206\214.md" | 4 +- ...345\235\227API\346\211\213\345\206\214.md" | 18 +- ...anMV_IOMUX_API\346\211\213\345\206\214.md" | 4 +- ...345\235\227API\346\211\213\345\206\214.md" | 0 ...345\235\227API\346\211\213\345\206\214.md" | 137 + ...345\235\227API\346\211\213\345\206\214.md" | 4 +- ...345\235\227API\346\211\213\345\206\214.md" | 4 +- .../machine/images/canaan-cover.png | Bin .../machine/images/canaan-lable.png | Bin .../machine/images/logo.png | Bin ...345\235\227API\346\211\213\345\206\214.md" | 0 ...345\235\227API\346\211\213\345\206\214.md" | 0 ...345\235\227API\346\211\213\345\206\214.md" | 0 ...345\235\227API\346\211\213\345\206\214.md" | 0 ...345\235\227API\346\211\213\345\206\214.md" | 0 ...345\235\227API\346\211\213\345\206\214.md" | 330 + ...345\235\227API\346\211\213\345\206\214.md" | 2 +- ...345\235\227API\346\211\213\345\206\214.md" | 306 + .../mpp/images/canaan-cover.png | Bin .../mpp/images/canaan-lable.png | Bin .../mpp/images/k230-canmv-camera-top.png | Bin zh/{01_software => api}/mpp/images/logo.png | Bin ...se_runtime_API\346\211\213\345\206\214.md" | 524 + ...72\344\276\213\350\257\264\346\230\216.md" | 9859 +++++++++++++++++ ...72\350\204\270\346\243\200\346\265\213.md" | 0 zh/example/cipher/cipher.md | 316 + zh/example/demo/face_detection.md | 384 + zh/example/example.rst | 24 + .../images/canaan-cover.png | Bin .../images/canmv-face-detect-result.jpg | Bin .../example/images/canmv-face-detect-run.png | Bin zh/{template => example}/images/logo.png | Bin zh/example/machine/adc/adc.md | 14 + zh/example/machine/fft/fft.md | 34 + zh/example/machine/fpioa/fpioa.md | 25 + zh/example/machine/gpio/gpio.md | 15 + zh/example/machine/i2c/i2c.md | 54 + zh/example/machine/pwm/pwm.md | 19 + zh/example/machine/spi/spi.md | 63 + zh/example/machine/timer/timer.md | 14 + zh/example/machine/wdt/wdt.md | 21 + zh/example/media/acodec.md | 145 + zh/example/media/audio.md | 125 + zh/example/media/camera.md | 132 + zh/example/media/display.md | 76 + zh/example/media/media.md | 131 + zh/example/media/mp4muxer.md | 63 + zh/example/media/player.md | 32 + zh/example/media/venc.md | 136 + ...3\345\206\214_\346\250\241\346\235\277.md" | 118 - ...77\347\224\250\350\257\264\346\230\216.md" | 0 ...77\347\224\250\350\257\264\346\230\216.md" | 8 + ...77\347\224\250\350\257\264\346\230\216.md" | 177 + ...77\347\224\250\350\257\264\346\230\216.md" | 0 zh/userguide/images/balena-Etcher-finish.jpg | Bin 0 -> 73170 bytes .../images/balena-Etcher-flash-from-file.jpg | Bin 0 -> 156630 bytes zh/userguide/images/balena-Etcher-flash.jpg | Bin 0 -> 44966 bytes .../images/balena-Etcher-select-target.jpg | Bin 0 -> 60778 bytes zh/userguide/images/canaan-cover.png | Bin 0 -> 73229 bytes .../images/canaan-lable.png | Bin zh/userguide/images/ide-2.png | Bin 0 -> 73143 bytes zh/userguide/images/ide-3.png | Bin 0 -> 7768 bytes zh/userguide/images/ide-4.png | Bin 0 -> 70573 bytes zh/userguide/images/ide-5.png | Bin 0 -> 79890 bytes zh/userguide/images/ide.png | Bin 0 -> 72636 bytes zh/userguide/images/ide_image.png | Bin 0 -> 260638 bytes zh/userguide/images/linux-serial.jpg | Bin 0 -> 14828 bytes zh/userguide/images/logo.png | Bin 0 -> 1601 bytes zh/userguide/images/micropython-start.jpg | Bin 0 -> 252227 bytes zh/userguide/images/openmv-ide-connect.png | Bin 0 -> 98165 bytes zh/userguide/images/windows-serial.jpg | Bin 0 -> 37025 bytes zh/userguide/userguide.rst | 9 + 123 files changed, 14709 insertions(+), 161 deletions(-) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 _static/img/ch-flag.a61145a4.svg create mode 100644 _static/img/logo.2f7049e2.svg create mode 100644 _static/topbar.css create mode 100644 _templates/versions.html create mode 100644 conf.py create mode 100644 exts/sphinx_rtd_dark_mode/__init__.py create mode 100644 exts/sphinx_rtd_dark_mode/dark_mode_loader.py create mode 100644 exts/sphinx_rtd_dark_mode/static/dark_mode_css/custom.css create mode 100644 exts/sphinx_rtd_dark_mode/static/dark_mode_css/dark.css create mode 100644 exts/sphinx_rtd_dark_mode/static/dark_mode_css/general.css create mode 100644 exts/sphinx_rtd_dark_mode/static/dark_mode_js/default_dark.js create mode 100644 exts/sphinx_rtd_dark_mode/static/dark_mode_js/default_light.js create mode 100644 exts/sphinx_rtd_dark_mode/static/dark_mode_js/theme_switcher.js create mode 100644 index.rst create mode 100755 preprocess.py create mode 100644 requirements.txt delete mode 100644 zh/00_hardware/.keep delete mode 100644 zh/01_software/example/.keep delete mode 100644 "zh/02_other/\345\205\215\350\264\243\345\243\260\346\230\216_\345\214\227\344\272\254\345\230\211\346\245\240\346\215\267\346\200\235\344\277\241\346\201\257\346\212\200\346\234\257\346\234\211\351\231\220\345\205\254\345\217\270.txt" create mode 100755 "zh/CanMV-K230\345\270\270\350\247\201\351\227\256\351\242\230\350\247\243\347\255\224.md" create mode 100755 "zh/CanMV-K230\347\211\210\346\234\254\350\257\264\346\230\216.md" create mode 100755 zh/api/api.rst rename "zh/01_software/cipher/K230_CanMV_Hashlib\346\250\241\345\235\227API\346\211\213\345\206\214.md" => "zh/api/cipher/K230_CanMV_Hashlib\346\250\241\345\235\227API\346\211\213\345\206\214.md" (100%) mode change 100644 => 100755 rename "zh/01_software/cipher/K230_CanMV_Ucryptolib\346\250\241\345\235\227API\346\211\213\345\206\214.md" => "zh/api/cipher/K230_CanMV_Ucryptolib\346\250\241\345\235\227API\346\211\213\345\206\214.md" (100%) mode change 100644 => 100755 rename zh/{01_software => api}/cipher/images/canaan-cover.png (100%) mode change 100644 => 100755 rename zh/{01_software => api}/cipher/images/canaan-lable.png (100%) mode change 100644 => 100755 rename zh/{01_software => api}/cipher/images/logo.png (100%) rename zh/01_software/extmod/uctypes.md => "zh/api/extmod/K230_CanMV_uctypes\346\250\241\345\235\227API\346\211\213\345\206\214.md" (100%) mode change 100644 => 100755 rename zh/{01_software => api}/images/balena-Etcher-finish.jpg (100%) mode change 100644 => 100755 rename zh/{01_software => api}/images/balena-Etcher-flash-from-file.jpg (100%) mode change 100644 => 100755 rename zh/{01_software => api}/images/balena-Etcher-flash.jpg (100%) mode change 100644 => 100755 rename zh/{01_software => api}/images/balena-Etcher-select-target.jpg (100%) mode change 100644 => 100755 rename zh/{01_software => api}/images/canaan-cover.png (100%) mode change 100644 => 100755 rename zh/{01_software => api}/images/canaan-lable.png (100%) mode change 100644 => 100755 rename zh/{01_software => api}/images/ide-2.png (100%) rename zh/{01_software => api}/images/ide-3.png (100%) rename zh/{01_software => api}/images/ide-4.png (100%) rename zh/{01_software => api}/images/ide-5.png (100%) rename zh/{01_software => api}/images/ide.png (100%) create mode 100755 zh/api/images/ide_image.png rename zh/{01_software => api}/images/linux-serial.jpg (100%) mode change 100644 => 100755 rename zh/{01_software => api}/images/logo.png (100%) rename zh/{01_software => api}/images/micropython-start.jpg (100%) mode change 100644 => 100755 rename zh/{01_software => api}/images/openmv-ide-connect.png (100%) rename zh/{01_software => api}/images/windows-serial.jpg (100%) mode change 100644 => 100755 rename "zh/01_software/machine/K230 CanMV ADC API\346\211\213\345\206\214.md" => "zh/api/machine/K230_CanMV_ADC\346\250\241\345\235\227API\346\211\213\345\206\214.md" (92%) mode change 100644 => 100755 rename "zh/01_software/machine/K230 CanMV FFT API\346\211\213\345\206\214.md" => "zh/api/machine/K230_CanMV_FFT\346\250\241\345\235\227API\346\211\213\345\206\214.md" (94%) mode change 100644 => 100755 rename "zh/01_software/machine/K230 CanMV GPIO API\346\211\213\345\206\214.md" => "zh/api/machine/K230_CanMV_GPIO\346\250\241\345\235\227API\346\211\213\345\206\214.md" (94%) mode change 100644 => 100755 rename "zh/01_software/machine/K230_CanMV_I2C\346\250\241\345\235\227API\346\211\213\345\206\214.md" => "zh/api/machine/K230_CanMV_I2C\346\250\241\345\235\227API\346\211\213\345\206\214.md" (96%) rename "zh/01_software/machine/K230 CanMV IOMUX API\346\211\213\345\206\214.md" => "zh/api/machine/K230_CanMV_IOMUX_API\346\211\213\345\206\214.md" (96%) rename "zh/01_software/machine/K230_CanMV_PWM\346\250\241\345\235\227API\346\211\213\345\206\214.md" => "zh/api/machine/K230_CanMV_PWM\346\250\241\345\235\227API\346\211\213\345\206\214.md" (100%) mode change 100644 => 100755 create mode 100755 "zh/api/machine/K230_CanMV_SPI\346\250\241\345\235\227API\346\211\213\345\206\214.md" rename "zh/01_software/machine/K230 CanMV Timer API\346\211\213\345\206\214.md" => "zh/api/machine/K230_CanMV_Timer\346\250\241\345\235\227API\346\211\213\345\206\214.md" (95%) mode change 100644 => 100755 rename "zh/01_software/machine/K230 CanMV WDT API\346\211\213\345\206\214.md" => "zh/api/machine/K230_CanMV_WDT\346\250\241\345\235\227API\346\211\213\345\206\214.md" (93%) mode change 100644 => 100755 rename zh/{01_software => api}/machine/images/canaan-cover.png (100%) mode change 100644 => 100755 rename zh/{01_software => api}/machine/images/canaan-lable.png (100%) mode change 100644 => 100755 rename zh/{01_software => api}/machine/images/logo.png (100%) rename "zh/01_software/mpp/K230_CanMV_Audio\346\250\241\345\235\227API\346\211\213\345\206\214.md" => "zh/api/mpp/K230_CanMV_Audio\346\250\241\345\235\227API\346\211\213\345\206\214.md" (100%) mode change 100644 => 100755 rename "zh/01_software/mpp/K230_CanMV_Camera\346\250\241\345\235\227API\346\211\213\345\206\214.md" => "zh/api/mpp/K230_CanMV_Camera\346\250\241\345\235\227API\346\211\213\345\206\214.md" (100%) rename "zh/01_software/mpp/K230_CanMV_Display\346\250\241\345\235\227API\346\211\213\345\206\214.md" => "zh/api/mpp/K230_CanMV_Display\346\250\241\345\235\227API\346\211\213\345\206\214.md" (100%) mode change 100644 => 100755 rename "zh/01_software/mpp/K230_CanMV_MP4\346\250\241\345\235\227API\346\211\213\345\206\214.md" => "zh/api/mpp/K230_CanMV_MP4\346\250\241\345\235\227API\346\211\213\345\206\214.md" (100%) mode change 100644 => 100755 rename "zh/01_software/mpp/K230_CanMV_Media\346\250\241\345\235\227API\346\211\213\345\206\214.md" => "zh/api/mpp/K230_CanMV_Media\346\250\241\345\235\227API\346\211\213\345\206\214.md" (100%) create mode 100755 "zh/api/mpp/K230_CanMV_VDEC\346\250\241\345\235\227API\346\211\213\345\206\214.md" rename "zh/01_software/mpp/K230_CanMV_VENC\346\250\241\345\235\227API\346\211\213\345\206\214.md" => "zh/api/mpp/K230_CanMV_VENC\346\250\241\345\235\227API\346\211\213\345\206\214.md" (98%) mode change 100644 => 100755 create mode 100755 "zh/api/mpp/K230_CanMV_\346\222\255\346\224\276\345\231\250\346\250\241\345\235\227API\346\211\213\345\206\214.md" rename zh/{01_software => api}/mpp/images/canaan-cover.png (100%) mode change 100644 => 100755 rename zh/{01_software => api}/mpp/images/canaan-lable.png (100%) mode change 100644 => 100755 rename zh/{01_software => api}/mpp/images/k230-canmv-camera-top.png (100%) rename zh/{01_software => api}/mpp/images/logo.png (100%) create mode 100755 "zh/api/nncase_runtime/K230_CanMV_nncase_runtime_API\346\211\213\345\206\214.md" create mode 100755 "zh/example/K230_CanMV_AI_Demo\347\244\272\344\276\213\350\257\264\346\230\216.md" rename "zh/01_software/example/K230_Canmv\347\244\272\344\276\213\350\256\262\350\247\243-\344\272\272\350\204\270\346\243\200\346\265\213.md" => "zh/example/K230_Canmv\347\244\272\344\276\213\350\256\262\350\247\243-\344\272\272\350\204\270\346\243\200\346\265\213.md" (100%) create mode 100755 zh/example/cipher/cipher.md create mode 100755 zh/example/demo/face_detection.md create mode 100755 zh/example/example.rst rename zh/{template => example}/images/canaan-cover.png (100%) mode change 100644 => 100755 rename zh/{01_software => }/example/images/canmv-face-detect-result.jpg (100%) rename zh/{01_software => }/example/images/canmv-face-detect-run.png (100%) rename zh/{template => example}/images/logo.png (100%) create mode 100755 zh/example/machine/adc/adc.md create mode 100755 zh/example/machine/fft/fft.md create mode 100755 zh/example/machine/fpioa/fpioa.md create mode 100755 zh/example/machine/gpio/gpio.md create mode 100755 zh/example/machine/i2c/i2c.md create mode 100755 zh/example/machine/pwm/pwm.md create mode 100755 zh/example/machine/spi/spi.md create mode 100755 zh/example/machine/timer/timer.md create mode 100755 zh/example/machine/wdt/wdt.md create mode 100755 zh/example/media/acodec.md create mode 100755 zh/example/media/audio.md create mode 100755 zh/example/media/camera.md create mode 100755 zh/example/media/display.md create mode 100755 zh/example/media/media.md create mode 100755 zh/example/media/mp4muxer.md create mode 100755 zh/example/media/player.md create mode 100755 zh/example/media/venc.md delete mode 100644 "zh/template/K230_CanMV_XXX\346\250\241\345\235\227API\346\211\213\345\206\214_\346\250\241\346\235\277.md" rename "zh/01_software/K230_CanMV ramdisk\344\275\277\347\224\250\350\257\264\346\230\216.md" => "zh/userguide/K230_CanMV ramdisk\344\275\277\347\224\250\350\257\264\346\230\216.md" (100%) rename "zh/01_software/K230_CanMV_IDE\344\275\277\347\224\250\350\257\264\346\230\216.md" => "zh/userguide/K230_CanMV_IDE\344\275\277\347\224\250\350\257\264\346\230\216.md" (87%) mode change 100644 => 100755 create mode 100755 "zh/userguide/K230_CanMV_nncase_runtime_\344\275\277\347\224\250\350\257\264\346\230\216.md" rename "zh/01_software/K230_CanMV\344\275\277\347\224\250\350\257\264\346\230\216.md" => "zh/userguide/K230_CanMV\344\275\277\347\224\250\350\257\264\346\230\216.md" (100%) mode change 100644 => 100755 create mode 100755 zh/userguide/images/balena-Etcher-finish.jpg create mode 100755 zh/userguide/images/balena-Etcher-flash-from-file.jpg create mode 100755 zh/userguide/images/balena-Etcher-flash.jpg create mode 100755 zh/userguide/images/balena-Etcher-select-target.jpg create mode 100755 zh/userguide/images/canaan-cover.png rename zh/{template => userguide}/images/canaan-lable.png (100%) mode change 100644 => 100755 create mode 100755 zh/userguide/images/ide-2.png create mode 100755 zh/userguide/images/ide-3.png create mode 100755 zh/userguide/images/ide-4.png create mode 100755 zh/userguide/images/ide-5.png create mode 100755 zh/userguide/images/ide.png create mode 100755 zh/userguide/images/ide_image.png create mode 100755 zh/userguide/images/linux-serial.jpg create mode 100755 zh/userguide/images/logo.png create mode 100755 zh/userguide/images/micropython-start.jpg create mode 100755 zh/userguide/images/openmv-ide-connect.png create mode 100755 zh/userguide/images/windows-serial.jpg create mode 100755 zh/userguide/userguide.rst diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e84257d --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +_build +venv +*.pyc +_templates/layout.html + diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c49336f..8542529 100755 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -59,7 +59,10 @@ markdown-link-check: - uname -a - whoami - pwd - - find . -name \*.md -print0 | xargs -0 -n1 markdown-link-check -q + #- find . -name \*.md -print0 | xargs -0 -n1 markdown-link-check -q + - git fetch + - git diff origin/dev --name-only -z + - git diff origin/dev --name-only -z | (grep "\\.md$" || echo zh/CanMV-K230常见问题解答.md) | xargs markdown-link-check # new MR open markdownlint: @@ -76,7 +79,10 @@ markdownlint: - whoami - pwd #- markdownlint-cli2 *.md **/*.md **/**/*.md **/**/**/*.md **/**/**/**/*.md - - find . -name \*.md -print0 | xargs -0 markdownlint-cli2 + #- find . -name \*.md -print0 | xargs -0 markdownlint-cli2 + - git fetch + - git diff origin/dev --name-only -z + - git diff origin/dev --name-only -z | (grep "\\.md$" || echo zh/CanMV-K230常见问题解答.md) | xargs markdownlint-cli2 .setup_env: before_script: @@ -137,3 +143,24 @@ markdownlint: - echo "---push to github---" - git push --atomic --tags -u -f github main || git push --atomic --tags -u -f github main || git push --atomic --tags -u -f github main +build-web-docs: + stage: build + rules: + - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "dev" + image: ai.b-bug.org:5000/python:web-docs + tags: + - k230 + environment: + name: dev + url: https://ai.b-bug.org/k230/k230_canmv_docs/dev/ + script: + - git fetch + - git checkout dev + - git pull + - python3 preprocess.py + - git config --global user.email "auto@canaan-creative.com" + - git config --global user.name "GitLab CI" + - git commit "*.md" -m "remove cover" + - make mhtml + - rm -rf /data1/k230/k230_canmv_docs/* + - cp -r _build/* /data1/k230/k230_canmv_docs diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3d6647d --- /dev/null +++ b/Makefile @@ -0,0 +1,31 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SPHINXMULTIVERSION ?= sphinx-multiversion +SOURCEDIR = . +BUILDDIR = _build +WEB_DOCS_BUILDER_USER ?= gitlab+deploy-token-8 +WEB_DOCS_BUILDER_TOKEN ?= _qsc99tPFsbcBhSbXH4S + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile _templates/layout.html + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +mhtml: _templates/layout.html + @$(SPHINXMULTIVERSION) "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +_templates/layout.html: + git clone --depth 1 https://$(WEB_DOCS_BUILDER_USER):$(WEB_DOCS_BUILDER_TOKEN)@g.a-bug.org/huangziyi/web-docs-builder.git + cp web-docs-builder/layout.html _templates/layout.html + rm -rf web-docs-builder diff --git a/_static/img/ch-flag.a61145a4.svg b/_static/img/ch-flag.a61145a4.svg new file mode 100644 index 0000000..9f340c6 --- /dev/null +++ b/_static/img/ch-flag.a61145a4.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/_static/img/logo.2f7049e2.svg b/_static/img/logo.2f7049e2.svg new file mode 100644 index 0000000..6a6e0f5 --- /dev/null +++ b/_static/img/logo.2f7049e2.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/_static/topbar.css b/_static/topbar.css new file mode 100644 index 0000000..5c28c60 --- /dev/null +++ b/_static/topbar.css @@ -0,0 +1,176 @@ +/* Customize for top bar (testing and outdated docs)*/ + +:target { + scroll-margin-top: 50px; +} + +.wy-nav-side +{ + min-height: calc(100% - 50px); + top: 50px; +} + +.wy-nav-content-wrap +{ + margin-top: 50px !important; +} + +/* The navigation bar */ +nav.navbar { + z-index: 3; + overflow: hidden; + background-color: #333; + position: fixed; /* Set the navbar to fixed position */ + top: 0; /* Position the navbar at the top of the page */ + width: 100%; /* Full width */ +} + +/* Links inside the navbar */ +nav.navbar a { + float: left; + display: block; + color: rgba(255,255,255,0.5); + text-align: center; + padding: 14px 16px; + text-decoration: none; + text-wrap: nowrap; +} + +.jn_container-view { + width: 100%; + height: 50px; + background: #0d0d0d; + position: fixed; + left: 0; + top: 0; + z-index: 1501; +} + +.jn_menu-container { + width: 100%; + max-width: 1100px; + height: 50px; + align-items: center; + margin: 0 auto; + display: flex; + position: relative +} + +.jn_menu-container .logo { + width: 157px; + height: 28px; + background: url(img/logo.2f7049e2.svg) no-repeat 100%; + background-size: auto 100%; +} + +.jn_menu-container .menu-list { + display: flex; + height: 100%; + font-size: 16px; + color: rgba(255,255,255,0.4); + margin-left: 78px; + max-width: 506px; +} + +.menu-list .menu-item { + margin-right: 30px; + height: 100%; + cursor: pointer; + display: flex; + align-items: center; +} + +@media (max-width: 768px) { + .logo { + display: none; + } + + .menu-list .menu-item { + margin-right: 0; + } + + .jn_menu-container .menu-list { + margin-left: 0; + justify-content: space-around; + flex-grow: 1; + } + + nav.navbar a { + padding: 3px; + } +} + +.jn_menu-container .menu-item.active a { + color: #fff +} + +.jn_menu-container .menu-item:last-child { + margin-right: 0 +} + +.jn_menu-container .active, +.jn_menu-container .menu-item a:hover { + color: #fff +} + +.jn_menu-container .menu-lang { + position: absolute; + right: 0; + top: 50%; + font-size: 14px; + color: hsla(0, 0%, 100%, .5); + transform: translateY(-50%) +} + +.jn_menu-container .menu-lang .lang-txt { + height: 20px; + padding-right: 28px; + background: url(img/ch-flag.a61145a4.svg) no-repeat 100%; + background-size: auto 70%; + display: block; + cursor: pointer +} + +.menu-doc a { + color: #f2f2f2 !important; +} + +.model-list { + position: absolute; + top: 50px; + background: #0d0d0d; + display: none; + cursor: pointer; + flex-direction: column; +} + +.menu-doc:hover > .model-list { + display: flex; + align-items: center; +} + +.document-select { + padding: 10px !important; + color: #fff; + text-align: start !important; +} + +.document-select:hover { + background-color: #249ee8 !important; +} + +.expanded-menu { + position: relative; +} +.expanded-menu-container { + display: none; + flex-direction: column; + position: absolute; + top: 0; + right: -120px; + width: 120px; + background-color: #0d0d0d; +} +.expanded-menu:hover .expanded-menu-container { + display: flex; +} diff --git a/_templates/versions.html b/_templates/versions.html new file mode 100644 index 0000000..4f17cae --- /dev/null +++ b/_templates/versions.html @@ -0,0 +1,41 @@ +{%- if current_version %} +
+ + Versions + {{ current_version.name }} + + +
+ + {%- if versions.tags %} +
+
Tags
+ {%- for item in versions.tags %} +
{{ item.name }}
+ {%- endfor %} +
+ {%- endif %} + {%- if versions.branches %} +
+
Branches
+ {%- for item in versions.branches %} +
{{ item.name }}
+ {%- endfor %} +
+
+
External links
+
+ K210 CanMV +
+
+ CanMV Docs +
+
+ {%- endif %} +
+
+{%- endif %} diff --git a/conf.py b/conf.py new file mode 100644 index 0000000..08c76b7 --- /dev/null +++ b/conf.py @@ -0,0 +1,75 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +import sys, os +import sphinx_rtd_theme +import datetime + +sys.path.append(os.path.abspath('exts')) + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = os.getenv('PROJECT') or 'K230 CanMV' +copyright = str(datetime.datetime.now().year) + ' ' + (os.getenv('COPYRIGHT') or 'Canaan Inc.') +author = os.getenv('AUTHOR') or 'Canaan' +# release = '0.1' +root_doc = os.getenv('ROOT_DOC') or 'index' + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [ + 'sphinx_copybutton', + 'myst_parser', + 'sphinx_rtd_dark_mode', + 'sphinx_multiversion' +] + +templates_path = ['_templates'] +exclude_patterns = [] + +language = 'zh_CN' + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +myst_heading_anchors = 4 +suppress_warnings = ["myst.header"] + +html_copy_source = True +html_show_sourcelink = False + +html_favicon = 'favicon.ico' + +# html_show_sphinx = False + +# html_theme = 'alabaster' +html_theme = "sphinx_rtd_theme" +html_static_path = ['_static'] + +# if want to add top nav for canann, enable this. +html_css_files = ['topbar.css'] + +default_dark_mode = True + +locale_dirs = ['locale'] + +html_theme_options = { + # 'analytics_id': 'G-XXXXXXXXXX', # Provided by Google in your dashboard + # 'analytics_anonymize_ip': False, + # 'logo_only': False, + 'display_version': True, + 'prev_next_buttons_location': 'bottom', + 'style_external_links': False, + 'vcs_pageview_mode': '', + # 'style_nav_header_background': '#2980B9', + # Toc options + 'collapse_navigation': True, + 'sticky_navigation': True, + 'navigation_depth': 7, + 'includehidden': True, + 'titles_only': False +} diff --git a/exts/sphinx_rtd_dark_mode/__init__.py b/exts/sphinx_rtd_dark_mode/__init__.py new file mode 100644 index 0000000..fd6f49b --- /dev/null +++ b/exts/sphinx_rtd_dark_mode/__init__.py @@ -0,0 +1,27 @@ +""" +Sphinx Read the Docs Dark Mode +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Allows for toggable dark mode on the Read the Docs +theme for Sphinx. +""" + +__title__ = "sphinx-rtd-dark-mode" +__description__ = "Dark mode for the Sphinx Read the Docs theme." +__author__ = "MrDogeBro" +__version__ = "1.2.4" +__license__ = "MIT" + +from sphinx_rtd_dark_mode.dark_mode_loader import DarkModeLoader + + +def setup(app): + app.add_config_value("default_dark_mode", True, "html") + + app.connect("config-inited", DarkModeLoader().configure) + + return { + "version": __version__, + "parallel_read_safe": True, + "parallel_write_safe": True, + } diff --git a/exts/sphinx_rtd_dark_mode/dark_mode_loader.py b/exts/sphinx_rtd_dark_mode/dark_mode_loader.py new file mode 100644 index 0000000..1a32e0c --- /dev/null +++ b/exts/sphinx_rtd_dark_mode/dark_mode_loader.py @@ -0,0 +1,63 @@ +from pathlib import Path + + +class DarkModeLoader: + def __init__(self): + self.config = None + + def configure(self, app, config): + self.config = config + + self.check_sphinx_theme() + + if not self.config.html_static_path: + self.config.html_static_path = [ + str(Path.joinpath(Path(__file__).resolve().parent, "static")) + ] + else: + self.config.html_static_path.append( + str(Path.joinpath(Path(__file__).resolve().parent, "static")) + ) + + if not self.config.default_dark_mode: + self.load_default_theme("light") + self.load_css() + return + + self.load_default_theme("dark") + self.load_css() + + def check_sphinx_theme(self): + if not self.config.html_theme == "sphinx_rtd_theme": + self.config.html_theme = "sphinx_rtd_theme" + + def load_default_theme(self, default_theme: str): + if not self.config.html_js_files: + self.config.html_js_files = [ + "dark_mode_js/default_{default_theme}.js".format( + default_theme=default_theme + ), + "dark_mode_js/theme_switcher.js", + ] + else: + self.config.html_js_files.append( + "dark_mode_js/default_{default_theme}.js".format( + default_theme=default_theme + ) + ) + self.config.html_js_files.append("dark_mode_js/theme_switcher.js") + + def load_css(self): + if "css_files" in self.config.html_context: + self.config.html_context["css_files"].append("_static/dark_mode_css/general.css") + self.config.html_context["css_files"].append("_static/dark_mode_css/dark.css") + return + + if not self.config.html_css_files: + self.config.html_css_files = [ + "dark_mode_css/general.css", + "dark_mode_css/dark.css", + ] + else: + self.config.html_css_files.append("dark_mode_css/general.css") + self.config.html_css_files.append("dark_mode_css/dark.css") diff --git a/exts/sphinx_rtd_dark_mode/static/dark_mode_css/custom.css b/exts/sphinx_rtd_dark_mode/static/dark_mode_css/custom.css new file mode 100644 index 0000000..989c2ad --- /dev/null +++ b/exts/sphinx_rtd_dark_mode/static/dark_mode_css/custom.css @@ -0,0 +1,77 @@ +.wy-side-nav-search input[type='text'] { + border-radius: 3px; +} + +input[type='color'], +input[type='date'], +input[type='datetime-local'], +input[type='datetime'], +input[type='email'], +input[type='month'], +input[type='number'], +input[type='password'], +input[type='search'], +input[type='tel'], +input[type='text'], +input[type='time'], +input[type='url'], +input[type='week'] { + box-shadow: none; +} + +.theme-switcher { + border-radius: 50%; + position: fixed; + right: 1.6em; + bottom: 1.4em; + z-index: 3; + border: none; + height: 2.2em; + width: 2.2em; + background-color: #fcfcfc; + font-size: 20px; + -webkit-box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + color: #404040; + transition: all 0.3s ease-in-out; +} + +.wy-nav-content a, +.wy-nav-content a:visited { + color: #3091d1; +} + +body, +.wy-nav-content-wrap, +.wy-nav-content, +.section, +.highlight, +.rst-content div[class^='highlight'], +.wy-nav-content a, +.btn-neutral, +.btn, +footer, +.wy-nav-side, +.wy-menu-vertical li, +.wy-menu-vertical a, +.wy-side-nav-search .wy-dropdown, +.wy-side-nav-search a, +.wy-side-nav-search input, +html.writer-html4 .rst-content dl:not(.docutils) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + > dt, +.rst-content code, +.rst-content tt, +html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + dl:not(.field-list) + > dt, +code, +.rst-content code.xref, +.rst-content tt.xref { + transition: all 0.2s ease-in-out; +} diff --git a/exts/sphinx_rtd_dark_mode/static/dark_mode_css/dark.css b/exts/sphinx_rtd_dark_mode/static/dark_mode_css/dark.css new file mode 100644 index 0000000..6a47f69 --- /dev/null +++ b/exts/sphinx_rtd_dark_mode/static/dark_mode_css/dark.css @@ -0,0 +1,559 @@ +:root { + /* --dark-text-color: #c1c1c1; */ + --dark-text-color: #ff0000; + --dark-link-color: #249ee8; +} + +html[data-theme='dark'] body { + color: #bfbfbf; +} + +html[data-theme='dark'] .wy-nav-content-wrap { + /* background-color: #101010; */ + background-color: #353535; +} + +html[data-theme='dark'] .wy-nav-content { + /* background-color: #141414; */ + background-color: #393939; +} + +html[data-theme='dark'] .section { + color: var(--dark-text-color); +} + +html[data-theme='dark'] .highlight { + /* background-color: #17181c; */ + background-color: #000000; +} + +html[data-theme='dark'] .highlight .nn { + color: var(--dark-text-color); +} + +html[data-theme='dark'] .highlight .nb { + color: #8bb8df; +} + +html[data-theme='dark'] .highlight .kn, +html[data-theme='dark'] .highlight .kc, +html[data-theme='dark'] .highlight .k { + color: #41c2ea; +} + +html[data-theme='dark'] .highlight .s1, +html[data-theme='dark'] .highlight .s2 { + color: #b3e87f; +} + +html[data-theme='dark'] .highlight .nt { + color: #ccb350; +} + +html[data-theme='dark'] .highlight .c1 { + color: #27ae60; + font-style:normal !important; +} + +html[data-theme='dark'] .rst-content div[class^='highlight'] { + /* border-color: #1a1a1a; */ + border-color: #6e6e6e; +} + +html[data-theme='dark'] .rst-content div[class^='highlight'] pre { + font-size: 14px !important; +} + +html[data-theme='dark'] .wy-nav-content a, +html[data-theme='dark'] .wy-nav-content a:visited { + color: var(--dark-link-color); +} + +html[data-theme='dark'] .btn-neutral { + /* background-color: #17181c !important; */ + background-color: #363738 !important; + color: #c1c1c1 !important; +} + +html[data-theme='dark'] .btn-neutral:hover { + /* background-color: #101114 !important; */ + background-color: #353639 !important; +} + +/* +html[data-theme='dark'] .btn-neutral:visited { + color: #c1c1c1 !important; +} +*/ + +html[data-theme='dark'] .btn { + box-shadow: none; +} + +html[data-theme='dark'] footer { + color: #bdbdbd; +} + +html[data-theme='dark'] .wy-nav-side { + /* background-color: #0d0d0d; */ + background-color: #323232; +} + +html[data-theme='dark'] .wy-menu-vertical li.current { + /* background-color: #141414; */ + background-color: #393939; +} + +html[data-theme='dark'] .wy-menu-vertical li.current > a, +html[data-theme='dark'] .wy-menu-vertical li.on a { + /* background-color: #141415; */ + background-color: #39393A; + color: var(--dark-text-color); +} + +html[data-theme='dark'] .wy-menu-vertical li.toctree-l1.current > a, +html[data-theme='dark'] .wy-menu-vertical li.current a { + /* border-color: #0b0c0d; */ + border-color: #303132; +} + +html[data-theme='dark'] .wy-menu-vertical li.current a { + color: #bbb; +} + +html[data-theme='dark'] .wy-menu-vertical li.current a:hover { + background-color: #303030; +} + +html[data-theme='dark'] .wy-menu-vertical a:hover, +html[data-theme='dark'] .wy-menu-vertical li.current > a:hover, +html[data-theme='dark'] .wy-menu-vertical li.on a:hover { + /* background-color: #1e1e1e; */ + background-color: #434343; +} + +html[data-theme='dark'] .wy-menu-vertical li.toctree-l2.current > a, +html[data-theme='dark'] + .wy-menu-vertical + li.toctree-l2.current + li.toctree-l3 + > a { + /* background-color: #18181a; */ + background-color: #3D3D3F; +} + +html[data-theme='dark'] .wy-side-nav-search { + /* background-color: #0b152d; */ + /* background-color: #1b1e25; */ + background-color: #0d0d0d; +} + +html[data-theme='dark'] .wy-side-nav-search .wy-dropdown > a, +html[data-theme='dark'] .wy-side-nav-search > a { + color: #ddd; +} + +html[data-theme='dark'] .wy-side-nav-search input[type='text'] { + border-color: #111; + /* background-color: #141414; */ + background-color: #393939; + color: var(--dark-text-color); +} + +html[data-theme='dark'] .theme-switcher { + /* background-color: #0b0c0d; */ + background-color: #303132; + /* color: var(--dark-text-color); */ + color: #c1c1c1; +} + +html[data-theme='dark'].writer-html4 .rst-content dl:not(.docutils) > dt, +html[data-theme='dark'].writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + > dt { + background-color: #0b0b0b; + color: #007dce; + border-color: #282828; +} + +html[data-theme='dark'] .rst-content code, +html[data-theme='dark'] .rst-content tt { + color: var(--dark-text-color); +} + +html[data-theme='dark'].writer-html4 + .rst-content + dl:not(.docutils) + dl:not(.field-list) + > dt, +html[data-theme='dark'].writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + dl:not(.field-list) + > dt { + background-color: #0f0f0f; + color: #959595; + border-color: #2b2b2b; +} + +html[data-theme='dark'] .rst-content code, +html[data-theme='dark'] .rst-content tt, +html[data-theme='dark'] code { + /* background-color: #2d2d2d; */ + /* border-color: #1c1c1c; */ + background-color: #525252; + border-color: #414141; +} + +html[data-theme='dark'] .rst-content code.xref, +html[data-theme='dark'] .rst-content tt.xref, +html[data-theme='dark'] a .rst-content code, +html[data-theme='dark'] a .rst-content tt { + color: #cecece; +} + +html[data-theme='dark'] .rst-content .hint, +html[data-theme='dark'] .rst-content .important, +html[data-theme='dark'] .rst-content .tip, +html[data-theme='dark'] .rst-content .wy-alert-success.admonition, +html[data-theme='dark'] .rst-content .wy-alert-success.admonition-todo, +html[data-theme='dark'] .rst-content .wy-alert-success.attention, +html[data-theme='dark'] .rst-content .wy-alert-success.caution, +html[data-theme='dark'] .rst-content .wy-alert-success.danger, +html[data-theme='dark'] .rst-content .wy-alert-success.error, +html[data-theme='dark'] .rst-content .wy-alert-success.note, +html[data-theme='dark'] .rst-content .wy-alert-success.seealso, +html[data-theme='dark'] .rst-content .wy-alert-success.warning, +html[data-theme='dark'] .wy-alert.wy-alert-success { + background-color: #00392e; +} + +html[data-theme='dark'] .rst-content .hint .admonition-title, +html[data-theme='dark'] .rst-content .hint .wy-alert-title, +html[data-theme='dark'] .rst-content .important .admonition-title, +html[data-theme='dark'] .rst-content .important .wy-alert-title, +html[data-theme='dark'] .rst-content .tip .admonition-title, +html[data-theme='dark'] .rst-content .tip .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-success.admonition-todo + .admonition-title, +html[data-theme='dark'] + .rst-content + .wy-alert-success.admonition-todo + .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-success.admonition + .admonition-title, +html[data-theme='dark'] + .rst-content + .wy-alert-success.admonition + .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-success.attention + .admonition-title, +html[data-theme='dark'] + .rst-content + .wy-alert-success.attention + .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-success.caution + .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-success.caution .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-success.danger .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-success.danger .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-success.error .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-success.error .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-success.note .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-success.note .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-success.seealso + .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-success.seealso .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-success.warning + .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-success.warning .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert.wy-alert-success + .admonition-title, +html[data-theme='dark'] + .wy-alert.wy-alert-success + .rst-content + .admonition-title, +html[data-theme='dark'] .wy-alert.wy-alert-success .wy-alert-title { + background-color: #006a56; +} + +html[data-theme='dark'] .rst-content .note, +html[data-theme='dark'] .rst-content .seealso, +html[data-theme='dark'] .rst-content .wy-alert-info.admonition, +html[data-theme='dark'] .rst-content .wy-alert-info.admonition-todo, +html[data-theme='dark'] .rst-content .wy-alert-info.attention, +html[data-theme='dark'] .rst-content .wy-alert-info.caution, +html[data-theme='dark'] .rst-content .wy-alert-info.danger, +html[data-theme='dark'] .rst-content .wy-alert-info.error, +html[data-theme='dark'] .rst-content .wy-alert-info.hint, +html[data-theme='dark'] .rst-content .wy-alert-info.important, +html[data-theme='dark'] .rst-content .wy-alert-info.tip, +html[data-theme='dark'] .rst-content .wy-alert-info.warning, +html[data-theme='dark'] .wy-alert.wy-alert-info { + background-color: #002c4d; +} + +html[data-theme='dark'] .rst-content .note .admonition-title, +html[data-theme='dark'] .rst-content .note .wy-alert-title, +html[data-theme='dark'] .rst-content .seealso .admonition-title, +html[data-theme='dark'] .rst-content .seealso .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-info.admonition-todo + .admonition-title, +html[data-theme='dark'] + .rst-content + .wy-alert-info.admonition-todo + .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-info.admonition + .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-info.admonition .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-info.attention .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-info.attention .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-info.caution .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-info.caution .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-info.danger .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-info.danger .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-info.error .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-info.error .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-info.hint .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-info.hint .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-info.important .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-info.important .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-info.tip .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-info.tip .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-info.warning .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-info.warning .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert.wy-alert-info .admonition-title, +html[data-theme='dark'] .wy-alert.wy-alert-info .rst-content .admonition-title, +html[data-theme='dark'] .wy-alert.wy-alert-info .wy-alert-title { + background-color: #004a7b; +} + +html[data-theme='dark'] .rst-content .admonition-todo, +html[data-theme='dark'] .rst-content .attention, +html[data-theme='dark'] .rst-content .caution, +html[data-theme='dark'] .rst-content .warning, +html[data-theme='dark'] .rst-content .wy-alert-warning.admonition, +html[data-theme='dark'] .rst-content .wy-alert-warning.danger, +html[data-theme='dark'] .rst-content .wy-alert-warning.error, +html[data-theme='dark'] .rst-content .wy-alert-warning.hint, +html[data-theme='dark'] .rst-content .wy-alert-warning.important, +html[data-theme='dark'] .rst-content .wy-alert-warning.note, +html[data-theme='dark'] .rst-content .wy-alert-warning.seealso, +html[data-theme='dark'] .rst-content .wy-alert-warning.tip, +html[data-theme='dark'] .wy-alert.wy-alert-warning { + background-color: #533500; +} + +html[data-theme='dark'] .rst-content .admonition-todo .admonition-title, +html[data-theme='dark'] .rst-content .admonition-todo .wy-alert-title, +html[data-theme='dark'] .rst-content .attention .admonition-title, +html[data-theme='dark'] .rst-content .attention .wy-alert-title, +html[data-theme='dark'] .rst-content .caution .admonition-title, +html[data-theme='dark'] .rst-content .caution .wy-alert-title, +html[data-theme='dark'] .rst-content .warning .admonition-title, +html[data-theme='dark'] .rst-content .warning .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-warning.admonition + .admonition-title, +html[data-theme='dark'] + .rst-content + .wy-alert-warning.admonition + .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-warning.danger .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-warning.danger .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-warning.error .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-warning.error .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-warning.hint .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-warning.hint .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-warning.important + .admonition-title, +html[data-theme='dark'] + .rst-content + .wy-alert-warning.important + .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-warning.note .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-warning.note .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-warning.seealso + .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-warning.seealso .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-warning.tip .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-warning.tip .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert.wy-alert-warning + .admonition-title, +html[data-theme='dark'] + .wy-alert.wy-alert-warning + .rst-content + .admonition-title, +html[data-theme='dark'] .wy-alert.wy-alert-warning .wy-alert-title { + background-color: #803b00; +} + +html[data-theme='dark'] .rst-content .danger, +html[data-theme='dark'] .rst-content .error, +html[data-theme='dark'] .rst-content .wy-alert-danger.admonition, +html[data-theme='dark'] .rst-content .wy-alert-danger.admonition-todo, +html[data-theme='dark'] .rst-content .wy-alert-danger.attention, +html[data-theme='dark'] .rst-content .wy-alert-danger.caution, +html[data-theme='dark'] .rst-content .wy-alert-danger.hint, +html[data-theme='dark'] .rst-content .wy-alert-danger.important, +html[data-theme='dark'] .rst-content .wy-alert-danger.note, +html[data-theme='dark'] .rst-content .wy-alert-danger.seealso, +html[data-theme='dark'] .rst-content .wy-alert-danger.tip, +html[data-theme='dark'] .rst-content .wy-alert-danger.warning, +html[data-theme='dark'] .wy-alert.wy-alert-danger { + background-color: #82231a; +} + +html[data-theme='dark'] .rst-content .danger .admonition-title, +html[data-theme='dark'] .rst-content .danger .wy-alert-title, +html[data-theme='dark'] .rst-content .error .admonition-title, +html[data-theme='dark'] .rst-content .error .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-danger.admonition-todo + .admonition-title, +html[data-theme='dark'] + .rst-content + .wy-alert-danger.admonition-todo + .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-danger.admonition + .admonition-title, +html[data-theme='dark'] + .rst-content + .wy-alert-danger.admonition + .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-danger.attention + .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-danger.attention .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-danger.caution .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-danger.caution .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-danger.hint .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-danger.hint .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert-danger.important + .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-danger.important .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-danger.note .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-danger.note .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-danger.seealso .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-danger.seealso .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-danger.tip .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-danger.tip .wy-alert-title, +html[data-theme='dark'] .rst-content .wy-alert-danger.warning .admonition-title, +html[data-theme='dark'] .rst-content .wy-alert-danger.warning .wy-alert-title, +html[data-theme='dark'] + .rst-content + .wy-alert.wy-alert-danger + .admonition-title, +html[data-theme='dark'] + .wy-alert.wy-alert-danger + .rst-content + .admonition-title, +html[data-theme='dark'] .wy-alert.wy-alert-danger .wy-alert-title { + background-color: #b9372b; +} + +html[data-theme='dark'] .wy-nav-top { + background-color: #0b152d; +} + +html[data-theme='dark'] .rst-content table.docutils thead, +html[data-theme='dark'] .rst-content table.field-list thead, +html[data-theme='dark'] .wy-table thead { + color: var(--dark-text-color); +} + +html[data-theme='dark'] + .rst-content + table.docutils:not(.field-list) + tr:nth-child(2n-1) + td, +html[data-theme='dark'] .wy-table-backed, +html[data-theme='dark'] html[data-theme='dark'] .wy-table-odd td, +html[data-theme='dark'] .wy-table-striped tr:nth-child(2n-1) td { + /* background-color: #181818; */ + background-color: #3D3D3D; +} + +html[data-theme='dark'] .rst-content table.docutils td, +html[data-theme='dark'] .wy-table-bordered-all td, +html[data-theme='dark'].writer-html5 .rst-content table.docutils th, +html[data-theme='dark'] .rst-content table.docutils, +html[data-theme='dark'] .wy-table-bordered-all { + border-color: #262626; +} + +html[data-theme='dark'] .rst-content table.docutils caption, +html[data-theme='dark'] .rst-content table.field-list caption, +html[data-theme='dark'] .wy-table caption { + color: var(--dark-text-color); +} + +html[data-theme='dark'] .wy-menu-vertical li.toctree-l3.current > a, +html[data-theme='dark'] + .wy-menu-vertical + li.toctree-l3.current + li.toctree-l4 + > a { + /* background-color: #18181a; */ + background-color: #3D3D3F; +} + +html[data-theme='dark'] + .wy-menu-vertical + li.toctree-l1 + > a.reference.internal:hover { + background-color: #303030; +} + +html[data-theme='dark'] + .wy-menu-vertical + li.toctree-l2 + > a.reference.internal:hover { + background-color: #313131; +} + +html[data-theme='dark'] + .wy-menu-vertical + li.toctree-l3 + > a.reference.internal:hover { + background-color: #323232; +} + +html[data-theme='dark'] + .wy-menu-vertical + li.toctree-l4 + > a.reference.internal:hover { + background-color: #333333; +} diff --git a/exts/sphinx_rtd_dark_mode/static/dark_mode_css/general.css b/exts/sphinx_rtd_dark_mode/static/dark_mode_css/general.css new file mode 100644 index 0000000..aa614f8 --- /dev/null +++ b/exts/sphinx_rtd_dark_mode/static/dark_mode_css/general.css @@ -0,0 +1,68 @@ +input[type='color'], +input[type='date'], +input[type='datetime-local'], +input[type='datetime'], +input[type='email'], +input[type='month'], +input[type='number'], +input[type='password'], +input[type='search'], +input[type='tel'], +input[type='text'], +input[type='time'], +input[type='url'], +input[type='week'] { + box-shadow: none; +} + +.theme-switcher { + border-radius: 50%; + position: fixed; + right: 1.6em; + bottom: 1.4em; + z-index: 3; + border: none; + height: 2.2em; + width: 2.2em; + background-color: #fcfcfc; + font-size: 20px; + -webkit-box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + color: #404040; + transition: all 0.3s ease-in-out; +} + +body, +.wy-nav-content-wrap, +.wy-nav-content, +.section, +.highlight, +.rst-content div[class^='highlight'], +.wy-nav-content a, +.btn-neutral, +.btn, +footer, +.wy-nav-side, +.wy-menu-vertical li, +.wy-menu-vertical a, +.wy-side-nav-search .wy-dropdown, +.wy-side-nav-search a, +.wy-side-nav-search input, +html.writer-html4 .rst-content dl:not(.docutils) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + > dt, +.rst-content code, +.rst-content tt, +html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + dl:not(.field-list) + > dt, +code, +.rst-content code.xref, +.rst-content tt.xref { + transition: all 0.2s ease-in-out; +} diff --git a/exts/sphinx_rtd_dark_mode/static/dark_mode_js/default_dark.js b/exts/sphinx_rtd_dark_mode/static/dark_mode_js/default_dark.js new file mode 100644 index 0000000..ea63e07 --- /dev/null +++ b/exts/sphinx_rtd_dark_mode/static/dark_mode_js/default_dark.js @@ -0,0 +1,13 @@ +const loadTheme = () => { + let theme = localStorage.getItem('theme'); + + if (theme !== null) { + if (theme === 'dark') + document.documentElement.setAttribute('data-theme', 'dark'); + } else { + localStorage.setItem('theme', 'dark'); + document.documentElement.setAttribute('data-theme', 'dark'); + } +}; + +loadTheme(); diff --git a/exts/sphinx_rtd_dark_mode/static/dark_mode_js/default_light.js b/exts/sphinx_rtd_dark_mode/static/dark_mode_js/default_light.js new file mode 100644 index 0000000..2b19f92 --- /dev/null +++ b/exts/sphinx_rtd_dark_mode/static/dark_mode_js/default_light.js @@ -0,0 +1,13 @@ +const loadTheme = () => { + let theme = localStorage.getItem('theme'); + + if (theme !== null) { + if (theme === 'dark') + document.documentElement.setAttribute('data-theme', 'dark'); + } else { + localStorage.setItem('theme', 'light'); + document.documentElement.setAttribute('data-theme', 'light'); + } +}; + +loadTheme(); diff --git a/exts/sphinx_rtd_dark_mode/static/dark_mode_js/theme_switcher.js b/exts/sphinx_rtd_dark_mode/static/dark_mode_js/theme_switcher.js new file mode 100644 index 0000000..860bd5d --- /dev/null +++ b/exts/sphinx_rtd_dark_mode/static/dark_mode_js/theme_switcher.js @@ -0,0 +1,39 @@ +const createThemeSwitcher = () => { + let btn = document.createElement('BUTTON'); + btn.className = 'theme-switcher'; + btn.id = 'themeSwitcher'; + btn.innerHTML = + ''; + document.body.appendChild(btn); + + if (localStorage.getItem('theme') === 'dark') $('#themeMoon').hide(0); + else $('#themeSun').hide(0); +}; + +$(document).ready(() => { + createThemeSwitcher(); + $('#themeSwitcher').click(switchTheme); + + $('footer').html( + $('footer').html() + + 'Dark theme provided by MrDogeBro.' + ); +}); + +const switchTheme = () => { + if (localStorage.getItem('theme') === 'dark') { + localStorage.setItem('theme', 'light'); + document.documentElement.setAttribute('data-theme', 'light'); + + $('#themeSun').fadeOut(200, () => { + $('#themeMoon').fadeIn(200); + }); + } else { + localStorage.setItem('theme', 'dark'); + document.documentElement.setAttribute('data-theme', 'dark'); + + $('#themeMoon').fadeOut(200, () => { + $('#themeSun').fadeIn(200); + }); + } +}; diff --git a/index.rst b/index.rst new file mode 100644 index 0000000..4236081 --- /dev/null +++ b/index.rst @@ -0,0 +1,16 @@ +.. K230 documentation master file, created by + sphinx-quickstart on Thu Oct 12 15:18:20 2023. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to K230 CanMV's documentation! +================================ + +.. toctree:: + :maxdepth: 2 + + zh/CanMV-K230快速入门指南.md + zh/userguide/userguide.rst + zh/example/example.rst + zh/api/api.rst + zh/CanMV-K230常见问题解答.md \ No newline at end of file diff --git a/preprocess.py b/preprocess.py new file mode 100755 index 0000000..2cd6bed --- /dev/null +++ b/preprocess.py @@ -0,0 +1,35 @@ +# 移除封面、免责声明等内容 + +import glob + +if __name__ == '__main__': + docs = glob.glob("**/*.md", recursive=True) + # docs = glob.glob("zh/02_applications/business_poc/K230_场景实战_智能门锁.md") + for d in docs: + with open(d, 'rb') as f: + text = f.read() + pos1 = text.find(b'![cover]') + if pos1 < 0: + print(f"{d} does not match") + continue + pos2 = text.find(b'[TOC]') + if pos2 < 0: + pos2 = text.find(b'[toc]') + if pos2 < 0: + pos3 = text.find(b'page-break-after') + if pos3 >= 0: + pos2 = text.find(b'page-break-after', pos3 + 16) + if pos2 >= 0: + pos2 += 31 + else: + pos2 = pos3 + 31 + else: + pos2 += 5 + else: + pos2 += 5 + if pos1 < 0 or pos2 < 0: + print(f"{d} does not match") + continue + with open(d, 'wb') as f: + f.write(text[:pos1]) + f.write(text[pos2:]) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..25e29e6 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,32 @@ +alabaster==0.7.13 +Babel==2.12.1 +certifi==2023.7.22 +charset-normalizer==3.2.0 +docutils==0.18.1 +idna==3.4 +imagesize==1.4.1 +importlib-metadata==6.8.0 +Jinja2==3.1.2 +markdown-it-py==2.2.0 +MarkupSafe==2.1.3 +mdit-py-plugins==0.3.5 +mdurl==0.1.2 +myst-parser==1.0.0 +packaging==23.1 +Pygments==2.16.1 +PyYAML==6.0.1 +requests==2.31.0 +snowballstemmer==2.2.0 +sphinx==5.3.0 +sphinx-copybutton==0.5.2 +sphinx-multiversion==0.2.4 +sphinx-rtd-theme==1.3.0 +sphinxcontrib-applehelp==1.0.7 +sphinxcontrib-devhelp==1.0.5 +sphinxcontrib-htmlhelp==2.0.4 +sphinxcontrib-jquery==4.1 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.6 +sphinxcontrib-serializinghtml==1.1.9 +urllib3==2.0.5 +zipp==3.17.0 diff --git a/zh/00_hardware/.keep b/zh/00_hardware/.keep deleted file mode 100644 index 8b13789..0000000 --- a/zh/00_hardware/.keep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/zh/01_software/example/.keep b/zh/01_software/example/.keep deleted file mode 100644 index 8b13789..0000000 --- a/zh/01_software/example/.keep +++ /dev/null @@ -1 +0,0 @@ - diff --git "a/zh/02_other/\345\205\215\350\264\243\345\243\260\346\230\216_\345\214\227\344\272\254\345\230\211\346\245\240\346\215\267\346\200\235\344\277\241\346\201\257\346\212\200\346\234\257\346\234\211\351\231\220\345\205\254\345\217\270.txt" "b/zh/02_other/\345\205\215\350\264\243\345\243\260\346\230\216_\345\214\227\344\272\254\345\230\211\346\245\240\346\215\267\346\200\235\344\277\241\346\201\257\346\212\200\346\234\257\346\234\211\351\231\220\345\205\254\345\217\270.txt" deleted file mode 100644 index 28fdbd3..0000000 --- "a/zh/02_other/\345\205\215\350\264\243\345\243\260\346\230\216_\345\214\227\344\272\254\345\230\211\346\245\240\346\215\267\346\200\235\344\277\241\346\201\257\346\212\200\346\234\257\346\234\211\351\231\220\345\205\254\345\217\270.txt" +++ /dev/null @@ -1,8 +0,0 @@ -免责声明 - - 嘉楠提醒您,本文档所提供的交付件仅供客户开发参考。在使用本文件夹所提供的交付件前,请您务必仔细阅读并透彻理解本声明。您可以选择不使用本文件夹中的交付件,但如果您使用,您的使用行为将被视为对本声明全部内容的认可。 - 本文档所提供的交付件仍然是“按现状”提供,不附有任何种类的陈述与保证,在法律许可的最大范围内,嘉楠声明免除所有默示的陈述与保证,包括但不限于默示的有关适销、非侵权和适用于某种特定用途的陈述与保证。本清单中所提供的数据在不同的测试环境下可能存在一定的偏差,因使用本清单中所提供的数据而导致的所有设计、开发错误,或其他一切因使用本目录中所提供的数据而可能遭致的意外、疏忽、侵权及其造成的损失(包括但不限于直接的、间接的、后果性的或附带性的损失),其后果由您自行承担,嘉楠对其概不负责,亦不承担任何法律责任。 - - - 声明单位:北京嘉楠捷思信息技术有限公司 - 日 期:2023-5-31 diff --git "a/zh/CanMV-K230\345\270\270\350\247\201\351\227\256\351\242\230\350\247\243\347\255\224.md" "b/zh/CanMV-K230\345\270\270\350\247\201\351\227\256\351\242\230\350\247\243\347\255\224.md" new file mode 100755 index 0000000..d70b7d7 --- /dev/null +++ "b/zh/CanMV-K230\345\270\270\350\247\201\351\227\256\351\242\230\350\247\243\347\255\224.md" @@ -0,0 +1,69 @@ +# CanMV-K230 常见问题解答 + +![cover](images/canaan-cover.png) + +版权所有©2023北京嘉楠捷思信息技术有限公司 + +
+ +## 免责声明 + +您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)及其关联公司的商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的正确性、可靠性、完整性、适销性、符合特定目的和不侵权提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导参考。 + +由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。 + +## 商标声明 + +![logo](images/logo.png)、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。 + +**版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。** +非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。 + +
+ +## 目录 + +[TOC] + +## 前言 + +### 概述 + +本文档主要介绍了K230 SDK V0.9.0 版本发布相关的内容,包括当前版本支持的硬件、功能、使用限制等。 + +### 读者对象 + +本文档(本指南)主要适用于以下人员: + +- 技术支持工程师 +- 软件开发工程师 + +### 缩略词定义 + +| 简称 | 说明 | +|--------------------|--------------------------------------------------------| +| K230 USIP LP3 EVB | USIP封装形式的K230芯片搭载LPDDR3的开发板 | +| VENC | Video Encoder,视频编码模块 | +| VDEC | Video Decoder,视频解码模块 | +| VICAP | Video Input Capture,图像输入采集模块 | +| VO | Video Output,视频输出模块 | +| AI | Audio Input,音频输入模块 | +| AO | Audio Output,音频输出模块 | +| AENC | Audio Encoder,音频编码模块 | +| ADEC | Audio Decoder,音频解码模块 | +| NonAI-2D | 2D图形加速处理模块,支持OSD叠加,画框,CSC变换等功能。 | +| MCM | Multi Camera Management ,多摄像头管理 | + +### 修订记录 + +| 文档版本号 | 修改说明 | 修改者 | 日期 | +|------------|----------|------------|----------| +| V1.0 | 初版 | SDK 部 | 2023-9-4 | + +## 1. 版本信息 + +| 所属产品 | 版本号 | 发布日期 | +|----------|--------|----------| +| K230 CanMV | V1.0.0 | 2023-9-4| + +## 2.常见问题解答 diff --git "a/zh/CanMV-K230\345\277\253\351\200\237\345\205\245\351\227\250\346\214\207\345\215\227.md" "b/zh/CanMV-K230\345\277\253\351\200\237\345\205\245\351\227\250\346\214\207\345\215\227.md" index 1c97e9c..8177a28 100755 --- "a/zh/CanMV-K230\345\277\253\351\200\237\345\205\245\351\227\250\346\214\207\345\215\227.md" +++ "b/zh/CanMV-K230\345\277\253\351\200\237\345\205\245\351\227\250\346\214\207\345\215\227.md" @@ -1,4 +1,4 @@ -# K230 SDK使用说明 +# CanMV-K230 快速入门指南 ![cover](images/canaan-cover.png) diff --git "a/zh/CanMV-K230\347\211\210\346\234\254\350\257\264\346\230\216.md" "b/zh/CanMV-K230\347\211\210\346\234\254\350\257\264\346\230\216.md" new file mode 100755 index 0000000..0f03907 --- /dev/null +++ "b/zh/CanMV-K230\347\211\210\346\234\254\350\257\264\346\230\216.md" @@ -0,0 +1,113 @@ +# CanMV-K230 版本说明 + +![cover](images/canaan-cover.png) + +版权所有©2023北京嘉楠捷思信息技术有限公司 + +
+ +## 免责声明 + +您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)及其关联公司的商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的正确性、可靠性、完整性、适销性、符合特定目的和不侵权提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导参考。 + +由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。 + +## 商标声明 + +![logo](images/logo.png)、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。 + +**版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。** +非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。 + +
+ +## 目录 + +[TOC] + +## 前言 + +### 概述 + +本文档主要介绍了K230 CanMV V0.2.0 版本发布相关的内容,包括当前版本支持的硬件、功能、使用限制等。 + +### 读者对象 + +本文档(本指南)主要适用于以下人员: + +- 技术支持工程师 +- 软件开发工程师 + +### 缩略词定义 + +| 简称 | 说明 | +| --- | --- | + +### 修订记录 + +| 文档版本号 | 修改说明 | 修改者 | 日期 | +| --- | --- | --- | --- | +| V0.2.0 | 初版 | SDK 部 | 2023-11-23 | + +## 1. 版本信息 + +| 所属产品 | 版本号 | 发布日期 | +|----------|--------|----------| +| K230 CanMV | V0.2.0 | 2023-11-23 | + +## 2. 支持的硬件 + +K230平台支持CanMV-K230等主板 + +## 3. 版本使用限制说明 + +无 + +## 4. 版本功能统计 + +### 4.1 基本功能 + +| ID | 支持版本 | 功能概要 | 功能描述 | 备注 | +| --- | --- | --- | --- | --- | +| 1 | V0.2.0 | Camera | 支持获取sensor图像 | | +| 2 | V0.2.0 | Display | 支持HDMI显示 | | +| 3 | V0.2.0 | 加密模块 | 支持硬件SHA256、AES | | +| 4 | V0.2.0 | VPU | 支持编解码 | | +| 5 | V0.2.0 | audio | 支持音频、内置编解码器 | | +| 6 | V0.2.0 | gpio | 支持GPIO | | +| 7 | V0.2.0 | adc | 支持模数转换 | | +| 8 | V0.2.0 | fft | 支持傅里叶变换 | | +| 9 | V0.2.0 | i2c | 支持i2c通信 | | +| 10 | V0.2.0 | pwm | 支持输出PWM | | +| 11 | V0.2.0 | spi | 支持SPI通信 | | +| 12 | V0.2.0 | timer | 支持定时器 | | +| 13 | V0.2.0 | wdt | 支持看门狗 | | + +### 4.2 AI Demo + +| ID | 支持版本 | 功能概要 | 功能描述 | 备注 | +| --- | --- | --- | --- | --- | +| 1 | V0.2.0 | 人脸检测 | | | +| 2 | V0.2.0 | COCO目标检测 | | | +| 3 | V0.2.0 | yolov8 | | |-seg +| 4 | V0.2.0 | 车牌检测 | | | +| 5 | V0.2.0 | OCR识别 | | | +| 6 | V0.2.0 | 手掌检测 | | | +| 7 | V0.2.0 | 人体检测 | | | +| 8 | V0.2.0 | 人体姿态估计 | | | +| 9 | V0.2.0 | KWS | | | +| 10 | V0.2.0 | 人脸关键点检测 | | | +| 11 | V0.2.0 | 人脸解析 | | | +| 12 | V0.2.0 | 人脸识别 | | | +| 13 | V0.2.0 | OCR检测 | | | +| 14 | V0.2.0 | 车牌识别 | | | +| 15 | V0.2.0 | 人脸姿态角 | | | +| 16 | V0.2.0 | 石头剪刀布 | | | +| 17 | V0.2.0 | 手掌关键点检测 | | | +| 18 | V0.2.0 | 静态手势识别 | | | +| 19 | V0.2.0 | 人脸mesh | | | + +## 5. 版本的遗留问题及限制说明 + +| ID | 功能模块 | 问题/限制描述 | 备注 | +| --- | --- | --- | --- | diff --git a/zh/api/api.rst b/zh/api/api.rst new file mode 100755 index 0000000..5ba1ee7 --- /dev/null +++ b/zh/api/api.rst @@ -0,0 +1,25 @@ +CanMV API 手册 +=========== +.. toctree:: + :maxdepth: 1 + + cipher/K230_CanMV_Hashlib模块API手册.md + cipher/K230_CanMV_Ucryptolib模块API手册.md + extmod/K230_CanMV_uctypes模块API手册.md + machine/K230_CanMV_ADC模块API手册.md + machine/K230_CanMV_FFT模块API手册.md + machine/K230_CanMV_GPIO模块API手册.md + machine/K230_CanMV_I2C模块API手册.md + machine/K230_CanMV_IOMUX_API手册.md + machine/K230_CanMV_PWM模块API手册.md + machine/K230_CanMV_SPI模块API手册.md + machine/K230_CanMV_Timer模块API手册.md + machine/K230_CanMV_WDT模块API手册.md + mpp/K230_CanMV_Audio模块API手册.md + mpp/K230_CanMV_Camera模块API手册.md + mpp/K230_CanMV_Display模块API手册.md + mpp/K230_CanMV_Media模块API手册.md + mpp/K230_CanMV_MP4模块API手册.md + mpp/K230_CanMV_VDEC模块API手册.md + mpp/K230_CanMV_VENC模块API手册.md + mpp/K230_CanMV_播放器模块API手册.md \ No newline at end of file diff --git "a/zh/01_software/cipher/K230_CanMV_Hashlib\346\250\241\345\235\227API\346\211\213\345\206\214.md" "b/zh/api/cipher/K230_CanMV_Hashlib\346\250\241\345\235\227API\346\211\213\345\206\214.md" old mode 100644 new mode 100755 similarity index 100% rename from "zh/01_software/cipher/K230_CanMV_Hashlib\346\250\241\345\235\227API\346\211\213\345\206\214.md" rename to "zh/api/cipher/K230_CanMV_Hashlib\346\250\241\345\235\227API\346\211\213\345\206\214.md" diff --git "a/zh/01_software/cipher/K230_CanMV_Ucryptolib\346\250\241\345\235\227API\346\211\213\345\206\214.md" "b/zh/api/cipher/K230_CanMV_Ucryptolib\346\250\241\345\235\227API\346\211\213\345\206\214.md" old mode 100644 new mode 100755 similarity index 100% rename from "zh/01_software/cipher/K230_CanMV_Ucryptolib\346\250\241\345\235\227API\346\211\213\345\206\214.md" rename to "zh/api/cipher/K230_CanMV_Ucryptolib\346\250\241\345\235\227API\346\211\213\345\206\214.md" diff --git a/zh/01_software/cipher/images/canaan-cover.png b/zh/api/cipher/images/canaan-cover.png old mode 100644 new mode 100755 similarity index 100% rename from zh/01_software/cipher/images/canaan-cover.png rename to zh/api/cipher/images/canaan-cover.png diff --git a/zh/01_software/cipher/images/canaan-lable.png b/zh/api/cipher/images/canaan-lable.png old mode 100644 new mode 100755 similarity index 100% rename from zh/01_software/cipher/images/canaan-lable.png rename to zh/api/cipher/images/canaan-lable.png diff --git a/zh/01_software/cipher/images/logo.png b/zh/api/cipher/images/logo.png similarity index 100% rename from zh/01_software/cipher/images/logo.png rename to zh/api/cipher/images/logo.png diff --git a/zh/01_software/extmod/uctypes.md "b/zh/api/extmod/K230_CanMV_uctypes\346\250\241\345\235\227API\346\211\213\345\206\214.md" old mode 100644 new mode 100755 similarity index 100% rename from zh/01_software/extmod/uctypes.md rename to "zh/api/extmod/K230_CanMV_uctypes\346\250\241\345\235\227API\346\211\213\345\206\214.md" diff --git a/zh/01_software/images/balena-Etcher-finish.jpg b/zh/api/images/balena-Etcher-finish.jpg old mode 100644 new mode 100755 similarity index 100% rename from zh/01_software/images/balena-Etcher-finish.jpg rename to zh/api/images/balena-Etcher-finish.jpg diff --git a/zh/01_software/images/balena-Etcher-flash-from-file.jpg b/zh/api/images/balena-Etcher-flash-from-file.jpg old mode 100644 new mode 100755 similarity index 100% rename from zh/01_software/images/balena-Etcher-flash-from-file.jpg rename to zh/api/images/balena-Etcher-flash-from-file.jpg diff --git a/zh/01_software/images/balena-Etcher-flash.jpg b/zh/api/images/balena-Etcher-flash.jpg old mode 100644 new mode 100755 similarity index 100% rename from zh/01_software/images/balena-Etcher-flash.jpg rename to zh/api/images/balena-Etcher-flash.jpg diff --git a/zh/01_software/images/balena-Etcher-select-target.jpg b/zh/api/images/balena-Etcher-select-target.jpg old mode 100644 new mode 100755 similarity index 100% rename from zh/01_software/images/balena-Etcher-select-target.jpg rename to zh/api/images/balena-Etcher-select-target.jpg diff --git a/zh/01_software/images/canaan-cover.png b/zh/api/images/canaan-cover.png old mode 100644 new mode 100755 similarity index 100% rename from zh/01_software/images/canaan-cover.png rename to zh/api/images/canaan-cover.png diff --git a/zh/01_software/images/canaan-lable.png b/zh/api/images/canaan-lable.png old mode 100644 new mode 100755 similarity index 100% rename from zh/01_software/images/canaan-lable.png rename to zh/api/images/canaan-lable.png diff --git a/zh/01_software/images/ide-2.png b/zh/api/images/ide-2.png similarity index 100% rename from zh/01_software/images/ide-2.png rename to zh/api/images/ide-2.png diff --git a/zh/01_software/images/ide-3.png b/zh/api/images/ide-3.png similarity index 100% rename from zh/01_software/images/ide-3.png rename to zh/api/images/ide-3.png diff --git a/zh/01_software/images/ide-4.png b/zh/api/images/ide-4.png similarity index 100% rename from zh/01_software/images/ide-4.png rename to zh/api/images/ide-4.png diff --git a/zh/01_software/images/ide-5.png b/zh/api/images/ide-5.png similarity index 100% rename from zh/01_software/images/ide-5.png rename to zh/api/images/ide-5.png diff --git a/zh/01_software/images/ide.png b/zh/api/images/ide.png similarity index 100% rename from zh/01_software/images/ide.png rename to zh/api/images/ide.png diff --git a/zh/api/images/ide_image.png b/zh/api/images/ide_image.png new file mode 100755 index 0000000000000000000000000000000000000000..889b19734a0f66effe4547be3ad8c68b084d2ac4 GIT binary patch literal 260638 zcmb@uWmuHqw?3*MC?x{Y-6Gu$3P?B7-6EYs4WN?J9YctebTc$acXv0ELl4XlXW0Lr z?!C{4bDis4=l%A^Jhj%d;=b22VXDe9Sm-3^Po6x%l9QEEfAR#S^~n?DwHK&}CwD5J zyPrIvdLk$F{-bC5;j)+S$L(e4=_nm_ATW!C_UDUVDRM8+x=9bszP(|vSJU6upsC50 zfXu8sBhgzscF}H0l+UF5xL9D4Cn2d{h*A3NmD~|3+bhYGP;?xuIQzNIO#4i6tNtMi zhE%%vpc7!5QM21ldcz3BK#<#Y#IfwW3DeoxnXij|(|)qvQi^DI@S(qn(jCAvK>>tc z<+Zl9Hg(n)U4)VUfjuu97TEy@RNzH$fR^^ zk3xbc#hYU_ET3Oj3;-xENkQ#ff9`pVer>JY)23e&z@gL->;x^?Y+8yH6Ls}=S@66@8-w7vuos;YlwolVBr3mS=$)4l9(!_l+> z_x!KKonP!mB{*$;JkP{v;ry~_-ccy%{baBp`ANO$gqz~sh=!5+5aSmze+Nhd_7&y2 z+Y|OZJl>>n-vJ!s-mb_~#po|*%iX>kS8i<}+!UTIbjy&t!{Xk9PC?+c;Y+6>Pjqnyu;LwhUmJB6K=cLn zxqDP2z{*y)C(==E+I`vFrL}v5R1Tq}3Uj^P=@ee1vshhVWwjOxSKR#pPGkGY3a#|u5N55 z#G*zEVf&JY?4t8gZR3xsKzF!gx!`R@hKuvQZ=UO=ug(Y3)|Ol)X|7Xle(paTy<{wf zpFA>MJ9GD>LO#0ws!xc=ih_2Ic^8QPS`p}_Hq`fW;!}2h9G3;2s zv*0<Hix5qenUc+x*M600osdMApEIqjn~~;ge{f2$IP4^7@MMD2 zTn}GSCS-V!gR*-LIH!|cYlh()!cl?xFz2(F*@44OT00tS=WkvW`x+%;Yd5s$LJv-TM|5_(vioBLC_ys)4beWj8v zuwF@t`t4~za4>50k<^C|PgONFw<}vtPMo3=wO@_%FI_HNp<`nMx&fu=SXlHwvsSCu zDIgs|7#C=^m;3pX(=#5sy85Hmq2b}x}_;`YrpeoG=1{D{V;N?5X zBYJs&h-7EtInR{Q&Qc}R=2si;Q2hs~f0r*h2AYjes-vXro6a6!Fv!X;q*aoZlSrav z<^?q!Px{l@Zd_viZ+Miq;W-cYw6(h`D2$)~do^&x7t$|}C;eY^_Aoe?-69X%pZc(6 zly%MgDORq>!bI(O9z|s}VCRr_BMQSLq6m!nA6?(tYHSG8m9WqHA5%Nr?W;6+T}A(D z^38-k+`2~H!=nuf1*3*%{+zo9$8bn1-IC=v`ahBUltlopbOK>5)&<$44f+d*xTfyx zI;-I8q)+yVlBN6olT_?l^}L-u48Xexzgisf`ID_R3xbYG9s=P9|7PV?swQi;ycwDgX(aXb)f zd>J<@^kh1b!??b5KBRqp>GM%O2~tI3>rW zct5noK3?#k+RKfKSV4I=33RZpr64j*uZw3dyVpZrub}oR^)=BQ`HUk6zwZ^b1pER^ z>lXKyO#@lo{9KEt0YC#Uc|3{q-UxOIEeSVLfo-XkL^42|66_Lui>lb zM5rqETA8GBP3DFTIrtf{|KS4_P6m_lW^S1Sa27hYwV2#{3Q}%hvi<~GQC{^ zCL()@|Gdr6{#5U>()zPB7N)TKtLfvWx4k)#b+=evu-P6ftGSW_>5cBDZrX1dn-{$= ztY(Fdh@T!V2W#&=H@>X96WhJ-&{}YJv^J%p=WZSZ+JPqXmzUx>DLSt)uWDL9S6}CQ zLBbcKu8U<>PQCXrZcaCx6Uw~ERt4AGMOyP;TMc`V6MpGBnAoVC{OFK7ZT@QR?3zU0 zn)O`G$bwqj2-B8gb>j2k$kB+LjZM~KM{A@rVl4`C|CtBb6EDWLCgwdXds*L*OY(QJ zSsWx~20t3Fc~|^zoJ;8aX`3HjJ+N2J*CWJ3*>*}sX{Q@R%@cuUd`~Uun6`A*V^wO2 zd~TS>TE`t;d)(h2v{-SZOued!WG-Z@Gjv=>r%&k6S?9wULfDWTrqg*{tHhf-i%=wr zJQe~j9|EIMCG!nW@Y(C9H3wV{oVJW5b>*AvoGnhIb+y%V$1^K51e5gm3O%e=VDsF1 zS8;jkQg`}z5ENSg{t3QcN53Gd2gBnRj`^YePYqFXXwQ;n0r16VxQ_Z!Z2}VTX)wCcH9a*a5h%$O31dU4KKn z0c#?^QlokHMo`Mc3%HB@@@davl6gU%`PgD(udaqrxaCNOt^i0k&(?Fv@oaU)@fht! zkZJSH@aodN+L@RaG#a{<1Vzm*`R^@(2R&n8Rq~vl??5sfH{o!)v!*ngvN!&rA}&)3 z>G6I7yP!m(rk=_W4=SyUJ^4aQ#Cv* z0@>T3gfK-{I!180QEz5kSOS|z#Jj99Vzj~H-pt{f1U6;Uks8daF};Q;QHu!vnDNg! z&jp9f)OQqV&7&c8hj{NP@SAC z4W_^Ag~|LizPX~e(--$g)mIh<(dkRLRKD%65PqM>$M59NV#;;93NfDtdiFXpkwqi% zWnf7Zw>Sdt-XH2(#_wi{Bn2u^f%O93AP0#XPJDObB`tf&X z()`|L-#Zdrx70=xI9*ot3HuH#R|l-SRa*wfsG@#|-c5Rb4?;86leZs66Z5=rF1m6o zSRX){^+p6or~Rw`GLm>xV+H~Awly4@=de{xZMHEE`EzzaumxIfmIIn5$(4BZ7 zS05W8hu1}$pC0F5SvjIzZ6(o@olP6J_6v5k1FwSNgP9s{hsaA@51iD=%g zHVK#@SJ41e2J2guQ_-<3)n=AvM}-#*6wblX3&h`A1UR$s%CJt=@m1zsyubj@>j?W{ zO#&q-+&3%B5T8tW2qklo`UMVhK!861{PbQuh2sCdJvt9$ z1Bp1!yvwrgu@JHL+O^MvlTt8K%McHIE5dfC_-D<(pxdoHG_=)T#rIoe<9WgLb>ymZ zksEt(%qxjb__z)Lh2sfd#r&@}moEy8QD^Db9<8D9$d@|Hc!0 z#TiJn5Pw})%{%3sZzqn58F)!L1lP}`YJT9T;8piI#jM>`cG;WaB-t->tIr45baBq- zlz+&}(1)2L;!Y2Ciru*=X`jDAO{nbX*bd46$VzBLr^&PKSg4oD1OJUbRF>oauRP}e zF$0n(Y9~CtH3Rfg|J&y@6Q-A!?j-*!Q40V6oJIZb-fh#x0hQ;tt8#nuTRXY&Tb_3E zhR3J%1zdS-jDQd53{T8t4P%e4u0QY2WnFX~zwB!3a&vL5(tQ>23U9LfyE$7*SrRn$ z?<&b!quWB6@h1C~!tJkWYN^5*>$KeH^4I?CotmnsvnlYw3|HdKuo8e-CfYM^>ynz- ziDKeD|Ddr0~GL7PUD7gJw4(+@v#@445 zFy*4F-`CzTFQcxnMvYoKEysp}#-X-EE; zh0IGy8WKjCqvQ_R(PZ`?o4`jps}r|^jfKy`b}PruR);RdhKj867k!RCv*ghJT}|9y z$_l>V0nG*TLRuSZ6^5Ps$q)UGlxRvaiaNkHvsGB$;lWuPU6ch2N{P`%Nu<3$8{or7 zjTSqZuPI+yxat}iW2<$Ej~M%H>$g*50>NG)PtHs}(F0E?8e)XAI z1~)K?X@?O&rCOQ3%gWEqZ_7D?yKZseJxYaxx=9UWdLk6&av<&DeR_o>ctVP@gB}C3 z+L``e5qTH9OcLVcqU8oHk?po^=cXZf8DbW4n^zLpxhc%xSLL+t%W|NGKU^yo0!;G* zMWA#(>o6{g`kh6M=sGd}UX!wiS026-De$PQf=FS(z-K<`M^Y+N?i^P# zk1JAsDZW&1uY`Lg@O=9NSp@@L@~h4n7r3*@-rAUrKhR}Kj-X|(1%RyRsxFqXt zk-yo1{xhgO%XFDUIFw74DAx1JZ%t(U&*NX39HI`4IJ)O!* zQr7BoRX{h)lXP+2K`kADwQk@}OwfdRC>q)HyVlv1KNagFI{F1MlrV}GLS5QGrir9~ zO{k?xY;PGX_;hmS)5fsYOAB|6uvfP4HM~gwwvTgK_$^O)p*Zd{R2_ero@=0Z>RZl* zG`6~t4GMUIlr8@aP37#c2ZJpzvFt?HY{_uln=6UM(w#$L_@kydebTj?k4w`WYeP$U z{j;IdTxn8j9eT-#tMS3(xDE4V3X~O@k?T0zO-|u~iaCWJQn>ctX{u`P59$1(gJyUR zK1_0o;Cd1zXT^i|bG{u9N*^OSMDm8K#R zW@(xnA%3ys4)Vh)l2lIiZdOxL$^B-Fh@@G=ZO(K!_iD?7BGZrxpV|DLb)b`3qxHjc z4KJMMB_@2md@2rv1m@I9#QndSh|S7f$rTpR!D8}?jKhZwM(x0@Uut5mRxAY8J*~~5 z$TK=tBi!aCW&4>pvr+YFtG$4mcX#btlq$2{w5mV&~SYJ`WtESDq6(oygJN(OD*)AF!ny`(f=e_5nm ze<@DC#i~o0tJZ!+$?wYuCa1lR9Kkst*FcDX zf4BEZ>FkObvC9&3%lh1e2@ZQr2K}pX&%SRO_Ikl>&;R*+1M){&qHdj5+5D_q&6go(+~e{W&qEZ~HgvM!6=1jH&5qH4Tl;Q^-V~LfJN8#f#Ck^@>-KbDRi) z_AT-v!VrGOjNB{Kofw1@J^ub$(T@TukpEh1$D*35GI3fx8G3m4XIoGBI6gl9ricF? zd$Tvv*4fQ78Pu8*Nt(%M?#*0mDKgq)JY=f)oS)xnr07S@Kkqj|aWpbCZ&zpautbcB zYBiMdo4@rGE22k@{N+a>1}0HZVj<@;xilz}Ot4CF@EdE)rr*v`>QI(=7O8{k0=P8a zT4YqiwXtlqXGpiZXT}ff&yQcf`d+dU{zrDPb+&+wrpn6LN9^7I^78UY1Tl9op|Njl zBq_hk#UC|PEHa{+fV@cD$^PMfhT)~R2K}SBljCA zwU9)Qqsie3>z%>wx(3Jp)hAZ?sqF5tQD^hbDjfiP9=2y;_h*65HJprgf{@vK=^He0-8Nj-?Za8vDTT|Uf%iI4!)VXb%D7IxRQtP0$Nv!V6i7lUR@t3$S~m&LM#U_d(78QL(ZCJUWHp#+Arqaimr=shbka3x_Q<}Tz9-8`CBoVYZ!hsR zAHyn&u0p>PLlbXCjb^bb2Zm0h^C$E6r zYO~|bpQ-mlXe=-Xdhyf;C7%v&m>D0NTTd;heuuXgKw~5pBxLu4ob#!{?-Cia71rG|BUCP#wFzDg8$ZP7Rr}-=ogdqhbr|V*i_iRLJ{C9G zar-lU{nb_YtW6KK>Vs>+ucjBN{0M;6XfmQ zU#@c^Y$3y)n9JhDx98ZXk}rIs($_n`ld#RsI2GHx!n(X;y6GBFJD?}oKj4gP9y(z6 z1LY)Ui@-jLQ37w}LcT`vk^D{>s!HFo8Z1J#p+e*s^oMqQ5)E;mnNuRi-=S=OASmg# z!d1LUh<}$}8JIy@95&=8qD`TcJ3jD*#)mjYmR2W?Up{XdeMk1^??lx)#zFmgnO#{I zNS#o%4tQE3R$F3)_8t*urlramNMPy@GPftZOE1P28a;YArBqCNJ$io!4+{_9)bR?E z8HSWiByHY%o3p~vlTJ@Lk;P$qS=SX8Ic(8j$)1$Zr#}hAMtg#c2FY?7%EQCH{?rCV zvWRP`p^Rq`=}$K`Z}Y0&>3qPalX4|jt@FXSF}@cJ)95{s&?SyYl{fo{ALJ-(TmxFV zX#(E*@1`civ`-agt(SsVt>o2lEiEl6c>hHWbe;6pa7%h98pZsb|9 z+-s+1XVr|g6(kKa%r9)oO(UnBPL;|iC!)Pp>yxwYAmzdo4L)cwBkD#Uc>ATKpGuk4 zysj>9j(cNUC3;GVA3gusR0e|<>_Z8cy(W%wVWdmpgvlm7j|V70RHDhxf88u6F1RkO z3N%w<5c(!kmRx^G?ja%5+4*3|j%J!c6`gAs3=R(D0S+1A_t z_LT8|PN06laNpw3SoV_d`LM6cKDzd2TSIz^!>~5*{euIWU&XstlP1!^lwX6xRrTf6 zZzIWHE{GusX69b;scIe-u*lZ{r#vdTvyEgcyNxD=nZ#yJn{%Fh=Oodn!70w`aL5#4vHh|m#xgUz3{BFx|h$ne% zC?uIsw;~N<);cfio>$!^gQ5>e3h-jX5b2O-9JaHZwY4YBXob`wmGoF7H5}zIxl?d| zO@Z<~#+}xJg%lY(^W|6e-rdHCJSIH0z6nA-GB?HkoA2|~o8t`LaPsn&9kt2D)Z3NQ z1=}Ujb2jNnl4-%G*JCT2e(eECwoAz^cWjz;Cy9b1ug{2D@0WdSRABWb&A6dEjRfb@ zy}wGn{z^$wKWduSf2PLt&_BDpK*DW}PaO4iuE}^_T63yJB#Cp`{>DEJx2qY7@W*rY zrin6`G3`IC7E5Rz@WFBPmY^F2wbx` z*xNeppvy9D9~mE1|CUdG4tw7u8Vi!U`)08X(5ia*7 zg)e3Cr2wOH`k&kvX$Xb&KbzW4B4t|~DnDa9*BKa{PeD@saNlVEk+m6o^j>IRzd!^g z!i4aR_i0wV_1O`G_j*zT9U=4e>!w9#{yo_I{FK-&!cY(ysQP;^1u*kq~3HaVYE_2g=n z`9~14l(AX~0h;o-w#%sBeso659T|J13d~i6j=qH+;r^yvHQrdGYOcyCVVcOJlHfF!4&@dGb+z zTg3sD2)dm+&y~VXmmo46n`~oLpYNF~WiBYC(L{YP^H*sv@KTpFDCl`V-24@TTOuFn zQFUCz1*c@!PU}PDU-7GDRcrF5TM1q#ggwn z^?yr|xi6h}Ze#O*(q;sOn*{w$GiYd@zTgb36FptV%^B~TrK}HUS8R*SMuuzX0^@Gm z@J~PAuOiZDU)4HlTo!vdUof4}+wV87Z9|3t1`gkoCsCRdyNO4Rr@P4>PRC0PKkWXo zJW@!T@`!Q+G{~{ezYJSSN~omrw^jM6sOQPrF@md}o|-Z^2mYV^>ry&i`y(_|7UH&Z zF(0Mk!1PyiG!yX&iNJ|vYPVEQbB902ue@_(j$gj}?^fwj{x`PpA?$ww51Rk?mk=$w zJnQ%-8WfEXJp@><%*U)@ek*e9g}_VthvgUxyK4~)!FV-PGM5>VNdH&r8|z?(NV2fS z#UY$zz*?%xCgj+%Bt)q0pj_AM{`0Pp6SS1Ro$GPXCTJKT!BJNuM82S_6SU zIsXy1_x?c)4Z}!-=8HUn9x(i9U210Q1?Z(QgN7Gqo##-p*+LIUNlA$9ubBKTh!l}6qRVKWgoiWts>q}`)OJtn|C17te3zjT=D4S>#AvKl)Fe!V6Jjh@i0$HT{^h@4~X&mvDP$ zt};FdWN~n(-G}7>N#}sXrqF5{qo<-!n`wd-;vfBa{IFyq6_zL1QC*A@`BPS#7Q; z<-Y#tK3T^fCRQZ4LcKql9Hp0pof-o4IT^9JoE!X}3au-vJY26^)XdV|(JQ zLv)U%Wy#&}!{!0Dn5^$D9U}U9>N5eKK_DKN&nYeL9Q_B!tEzr8vjzL(>n zkau27FV{9_un`?|$2%|6O+@MUr7eHonF%h}=RP`sU%S5q+w(U?{AuGkFO3CRE`MGw}1#q~Z+n8v#Y6id=+Al%!)9lnhsAYl$??np$p zUJU+RgR|`{w$UM61>_JJ&F8(WM=2|Q@kVL(t=AC!@Sz8&9_pUm%Q<=L9&pe&y6HXE zTRC&4Up7^$Suo~*=! zx7JlDM_Pn=W(o|e=SHKPdd*>gh6G{Vn=>e>Q}=b5)0Mdn*MEkp8m%)?`N@ zxx$%&Ren#!Xep!^lrbw{v<4*e%o4xu5BJ^?L%wb+np*h!(YpQX~hn~3a`Sy(t zO-vgBys5;eVXAXeqjCU7^BMwGM6z9Dwhkt|HsrIrKH;my$HkR+xWBtuyTdlfY{6(0Cc)rn>x3~}ZygFaX-$V`|QilX%DI^J94f`3^v$PDHH;&!8kDSp8 zx>gF6`}mUCDj{blE#N&vz^YbORdIZDZFrM%-1_s0(@EbZ#RB@>OPb=aP+s4Vrcdwt zbo51}RxC`b&`fZ5#R!dNs?4wXwl&g=bCY=$AfPlB{VxaS?U{WwjX*$GOj_ED?Vz$* zjhGL?=hXuVk0GFzv=7kF%Re9HS$gjC{c7dubegdCiLu7pxwwYdXc5ASvuy~sC1i35 z+DGazYI*v-kVz0Y*=*gHhNaI1vHnI&>Gyc&eM4M^sKve{dpC6Woa)@~SokZgZe}-g zwJBs0>bgogvfDa3AiVnLXY6j!YyF)#s|eII|8gGC!S95x=cAZmETQZkTT0GAaH(SH z#Wkrk{EQq7N!>&y zO^o%#=8n+vuy=dN(X4Pcf2w891*JoJq{~Rc6r64k%@Mq(&ev|F*zx00-NG^?*{w{A z9Bl*DR(IN_5^1ZYBf-N3y^5S5W1T~IsAYUF+HLD4Na(1#hn0h`zD4eE(d|kSczCuOv(N$CkKSFCs5-P>YYpTXCBp3h&x4wg>mN6$w6Z@=Baq0EoqgA0BYfdy~I zgV2B!(JVuT(w>*^#8%h(ao5B!D_R3DLHwjX~AMc&*Xrx z{mOg|g7aHe(p9c<*f7%{A1ZSNH%Iyz_!?lbVl=1 z=d}6QnZmZ`Q?LA0TO|GHk)I2#CS@EdY_pg`E)nU4HfpKbRyf076iB3LG+`yFs@|`yR__ zviW&RhmqeNCk%#_>FLd`=oN5depLPdJ4~@EfB0n1r~lS0vNzD? z@){#R+83b16DtibCurzj8AS5oPy2a<7sNxFZGgZKM!M=m`-MBx18i(j5Lkhpk@dIf zKCWKZZM9gUjH8sFp7+ZBOElbPGE|cP`zDitCJgc zXQWw>nF&N;n6Z(Cx!@~PO3#ys9w`*a?IQeAMnLaninJ@9XCxhfSIP?|WdJmaMqo~Y z%oANWd422f4cJYen>Vjuq}#0UQu4ft=ZV&+>vM(5+3@DG%uFPKd!!#-fSBvsoaed- z`a152QHdy0=Q{>d`S*@AJBHs0DsH|kT7yv(erH5>QTm)@+sbhpN3@eo{vRU^un7Eo zp0?c&JEn;uoT+btVNUB2p02Xn^o8GU2H*`V>-KsO#&44!^`7FUrm#5#RlO%#_7&E( zt@$xt@xLIlMKx@pKj>a;%-<7J`W+UoS9B8<#%VbjNKUs=>S>Zy5dYViJPdFbG?0a zFcc)T>rv5|m{*zHy6^e%D08&qeJ8f?5GT_7YW?k#1Z_Pa_9T?TT}>w z6HVD2Tc48MB)FJe50S6r$@RFjpuJtW0YoboG3JeSE20VO%W*9Z)>}3tR(?ld$&&b*8)L?^dExq`J;~a-fnKnM9nl&|ra;N7_C6!$Tz2-01zG-x2_?$Jh$T@QP6XNa3!M8F%$$%P9VCOBM19G;0S+xazYr+hBruOx4LEc9^YrrTnxr>6ys_j+7L9?;A`23uFsXyZRxj{69-^YcoKAm2<3YZ|^ z4EwaHaA=ACP}?DTd8C-qw)W=B87jM7A(hpYy3DX+6KIFk(qqWT$S(Wt*it_Oj=yVKzAuw;d-{n2E$cBIemFgJ#m$6l~4UTzdN*uWDz|NG~)#;XH zz?v#%=5WJvt}t73eS5QcDd%SWHdqPDCzX44g{W>lr_x04SQ96PwngDW`u0i{@$J)I zitVX>4GKJ6A;xAFukyfNO8ygI;G9_aO(mGe^Fy6BvS*~tXVllHWZDf6UvF0&t zWD}*1WSIElSd$PhI#U{EG>ht)WQVzP`AuQnTT6x=S~9w)g`UgLwAvVJxHFW$`MWA? z8l~q)g3vtJk0}vRcCd2=t|YKHm9ky_qGa#64)>s--)hs2#vtD*7Ip zfDl_vmgu?&E$h76nT05^CIabk1I>=;weK@7A9onHy%t%4UQH+lm`8=YCD^JT4Y#(` zo|%|Y;Kwgx{O0B|nPz0$uP;xLxw=X2j0mBw%bA{3_j`NQMe|;r4Z^dwuvXT>;Dad- ziUj4&w|Dt@DyyT=C3JuPnp2!(xEo5jMN33+?RQp-mDPCpUp!gizqRkj7h7kGbocyT zZeJO;I^HpCxb8HzI+md5Zs~G?5``)WbV7%Q7-nTi#qjI=Zfkp95fWOHikVrov;T?w z{P{DHh^G@Egqng3kNM+sPxW+!K9dwNGA{QZaG|+5Sy|Z^h~r(ugO3#h3-pMbFLhe` zw^XcXd>P6IDev;CDwRgzKsIixA*^L`iD=iI3*AJa*p=U6g_f0ZD--sZsL0vb*?#d0 zrT<09+h8LQ@}lB|i^s}})1T^$E|=VS9FumI+FFn%L-j|5B$s|$Upsbu`TZjucJc15 z`&S1?JjBnQ1!xiTabLlzfy}(+43B9#+SUjy#ER?+&B#}zK32YcLrlY zj$buKv<~`eY%FF!9(0xbKS$+apI}k0oCZoODMdccM9Mq+mE^Dg)hOg=*I!ERaU^f$ zeg74%AbR|Ne2F`={PaJ=dp0>&X-+KS$zeU3xxE=JethioI7w1B-3=cdPb@wVR=_&W zF4=>l|B`q~l%J_~JF0smb;5MShQ*PpgoFeK5vC#j&;QeyK{xDTuX7lW;UtLNH!~%L z=FjzNL=w{xF;nH+oXElAnYVNr_6dR zbUZNlGUxaV#mI{x(m&B?%L4e?)YMeo@Bd6rHXIe3VyG0n)L{r1UMu&%V-CSi=5kn4 zTJm4DLr1@t?)QNpYDFfOO%W)fEaBco7r@+{Hs`q(H(*;vK*p2*4!oy!l*pVe>O(LY zs^)tWEAC{`oh<0j7qJkm78q1Wqu`2jk(xFX0FuGMMdvZdUhkv$d~dij-85S_p2co5 z5F@U3GHWe(V15&Gy<0yi@^!#pv}@6Fw^2mwls^4Ln9^kJGP(X@pMWi6|Jd`tG^T)? zB$AF!(ac2xX;ci((yNl5i>UYb_I$OVsw&RWAHIl5&X)jKW&K%HRMgaoh$&*(#tP&0 z7wq`<_dna%**zl(@a`4gHHV8MV<8wUm)rWpu`$)26_4lGmRnBC0iS8?3O;@M^k;~p z>76l+wDLxh+^Xr!UE6v#yMLl7xg96ZIt6NE`L4@7rNCv=uHa>ewt%rgX)ah+g;OM! zdKE^qzDyp1kfAI)zug>%LmTid=lJ;6)|M)wsGuG-D7Z&jIa5fGrRmlHdG8X6c53CV))x(63GTGoSj$`eVQP*LbAwImuPcS29}%Enp09$e!x*=8(Y zn@?E3Ie@i$nLNm|DDNs#{O6aI)(^_{iTAxLyPM(5yzXr2H9aOIbJ#6Jy7HDr8|%Y;_OLWem!7Nte6=sd|)qrafSU3`Mc z0-hqHx-8a|b9tZWvKiDnB}T(mdO_@W0ffe|r%hra6oFR~RL|^chgJ5aazlv5+BC#W zdV$Bv`IwNv;71EoW=6TZ7F+YH(^YPv3I z;GHEpy3yw0ylY@!`&f1-l^sViyJ5cR*mU~!%Q#SL-^r-q>V?4ZAZE0yn83iz>RqHB z)O~Z*}SM7mI-{z*I zQ?UP+*2s`+6ApzN)4#Or;uAl?TSc4I2jHb}al$tzYNH%@HLuJ&m80 zeXkYJv75W|@>k_w?D-3WmEr6TT++Bb^dsbVSd<0=sFF+kV)2WUeo_(IviME$UI*so zjGaAPLVS^+9!0CZAMXPv-rWTulfj_TH*21xSF?t)ujTNPDnzbcIz;?YA=3UOc=r6mKgdUV!WEWjvdpmNk0=8J=!<&!W=%YCyG zs;W$WLrI{y(!a21ZMOBQZ8^1Pk}-pO7E1kgr%8m*{bl@f0WcifuL16VeV(e|@N}gk zj{PB)lojoEZ3}p7vCz51E0T6keQ6*9d&7Ny^Y#kP1>;-~4ifPl#B`waApa(r-C7n0 zz%JWrV}Uz6a#D5T5uf36XF}c5w%aW^gVU^iCbm18mGA#>e{o>FHL%Ui!}Ict2+MC6_Qx?D_989L+ke~6 z6oa@X=0!(5ByaTQF5UkWi{vvYr<7Cxw>2r(S3hIrY|0P;X!7hY;n`5rE>_HDI9qVU zEu%Gh6wfqf+lb$+vt(n!_CMg3fQtxBSM*ovTLI z`1!>C3|GgNWL|g0x4efq$8vrt`q)Pn{=Ba^;}_c!`p1fl&mah5B)=|m>fx~bDh?&opR%+*X7X%5nW4Tf2p~={IZDp5Sfk5LY8~Z>S%n| zs#eMz$6Ml2CI2MeWb2BPit<7!eW#+B>NaLOZ{JBm;`;{b)>-?`N+J@tE-dkIeQ5`Y zgtQZld(>o%9LlwJhGB3$b)RZhzZZ^qXFzx92-zBX&R7|Q`ExYE0u?Bj7<1d^vKKgO zt@1|}2DHJ=4q46JIg%$ikmQgGGwxtG`qXMDAFCUnltjO{ja_P%yH(am1q!SM>REInjc7~uzhs0Qpht4~>P z^oqM*@bYt$bvk9ap#6IB0ttzx2N@49Qm&7k#5``9SGu}C&0>>*vp>yl$$c|6<)CEhOnA}72+J_44OX-*PH}e)F2SV~w^E90p=fcJ;8xr7}+^?0Vhi>x;}V3h9L>N#U)^-6gF9OwPk~L*dxhB3|7XlVA|j zc*3|4(qxC=mB7p!c->30-l4B822v}(;(H9|Kj`kZfY87vY>LH!jWL8rgB`Af70?HY zq+}e^?fm4E8@dzaSKTX2*;`2nJc1;kbZ`W@JfBMtQO7&4-yyYT~H8gyINFd+x=-Um}!{|K* zGPVKsid)23U+TLBJmri&i=?TF;WF^*i|r=9AB`n;E6svm0rbA^?2# zS$>G+3RL(3b^n%!Xx{%v9B7g2vRC%dGN+N^m2u)lXEI)2n<)8^3>WT9_q^dQP+@G| zVM$(u2kY)x_>B6*E}qHZqLllC@A`}e!3D`bqxLv-f7YJOUGsk*fJ7LBj-`*KNg9KH z2)s0g-4lcXs;t^{cF|o|^`>BDb~tjrKqY z#|?Y(KE%sp$f)W3(j92Gs656sb{5Cw&BU>oDbl!mzBJYO;*F3y;#ENFiKT2$^69l4 z-YE=bZ>qJ4&r?vgo!l$jwoywyk?Yx&uRn#9I=(w1upMnq18k3NEesNxa=Q!npg%jjFGuJ7(5?r!TO4w`GaOyxMGp)fSH zSoXIS)|3!kz6W{EQ4eRlHjCAh@ZSDIK{n?rt|ba01lj8hE^bTlX5en9+X{J;3(jan zw8$^}M_Zm;9%WY<;1J+46CEgE= zRO65A(xF$mDy0R(i+=CA@KI2&2a3kmyt^kymB%8W(uB!21VK%fD%*;;-U@K!ymorN z!IY)khFgU8Bl?=p?5!}sQ%&*BQ?%C6!Vegj1iSvP&35#aD=3$%eJ?O?5fZGFBb%ya z&%9t8>Kwyir<|_Z77sh?(;73VNz!-6K*7HPosLz& zW+wt4t(dU2Qi7}#Z%aPW&bb6pGU2Dk>dxh5cy_$d7Rp(fZ>=u0c#(N+>OuJrv zV`)I#eDnmLEKKljVj0}>GaL)u-Le}pf7h3}sf-}usc1qOiN!DX4vB$15S`y4{*Zhr zUup~yCB4d3cB5w%u+ZsP=@8}cORCEY7*_n8wW%BMByX-|0-*wZ^H1Z7|j@UQZ>MQo5qJI95BB zFM2RCR(?EYv;vc>Fl_xZ1bD}Xs%v9y-NCC|rJ(V;hl`oPZA(P*(oq$0JDRXe_V+YT zpnZ~;k8A2{xHD3Dw2as0YQ#sI=DsbR$H4cF3`Zaqce?*{f?Q_4_IN|F7M@pf0NeWI5hq(UioHQOm&1`sFX{ z_;0I@UzXW1z|KzVT7Nh@rBm?m?yMw&Z`@H#Pr!_}b$MtB^%L`d1a^uAe^!SYL?O7<3V-8sN=JJo_x|4L(JdD*iIfy;xQf?VB=McA%r!W2}yCek1}%`-Aq>6i20FY9eCNcQJ)Fi!=Eca{n2? z3|S@P7)K|}brtL%48hAB`CpdPS&@guI0W_HtMHpsjJqGi=+DuEuaW+4$Y*`KaXfsE zY8Lb{g_7j;U6+}(-Fgnjgk;k}K9;jvRO8-+ z`AI7Tq~p0)$J8K{{VM-!c}7_M)yp)GjKli>bjFuEqr>`)T-{$k5ioxQCmhC_6vh95 z*6eN|H^oaNBjk7Bi(uqAI^^ zF=5Icf8+2!>rV;%4$qf0vg>M*&fj10r3TK6bi8X_v=*OdPp?t^-IkL}c8<`Sl_7x* zL)rt?g<8Sn-AZjl72ZjSG?_yds7#;hJ@ELb42xg96?A4fqV3t^py7jESJWY{Q-_6^ zgZ|_3`3k%1tm>%}QTD%|;+@shI2j!^HLW5mDIoZRRZD*8A^z~uB)v+rf-mfVwjF>r ze%}HArt?Dy20imV6#3NOtb8?oaYC@ZV$nbI`C(Xg+WGSUg+UO>ct;8S*?Nuil5vV| z^aJ>OfI>ZV|Fg5H94EiOgeTJf(EOJnV8@jx*;hJ2DD`;Bh*OBb##M z^v3~i;D?Dfr)wN&5>)AF{@zx!-29PFHd#X|{PGoiX)I~mPvvm=T1Fu&fR&hBQTXHv zsA)M{J&Q5rIP4pWEttOECCSS+yzLG&xF@Vv2bF(NEZW3c61xNp?`leSl&rUow42LV z7To7NSR750lXJ8UC{wql4!>P(1KTVKZb2KX<%}YEJ8X?1omQUaBiWv9@4oBryBudd z(4?@obwyG)I3ojJUR=Fz^x}JHIFnm)uiTL0z&E|_aCGSo$4Xsdud<&K{1cY$Kdg8# z_if&V+^Fru!Xf(Z8@Xe9>>9H1!R7dVsZ4q$b)d{Ard02b11H*?Vt@9j?OjLnun$0>+??ib2^;ggovYTKX$Y$mwh;#E?`OG;wcT8B3U~0 zr_D^z#o7B_sex>M>Hr;-NZYk(YT9aBv$x%lY z$}%jtG3faw8tTQd0j~N}v8VpQDbb0~|7AVbKj+Hxv=Pg6?wsfQ>n6pNloWF_W^WpU zAZO&`j$~Iq`vvFYiGjuNKlf!!3FK zj-f~MRkjaW-h?a*#rw`BAtF#fRP!9D{u%N%E8-zjhSJNCHe^mA=lYJF_ijV=$44zy z&tuOEDpoFl8#be}EVM=YtjF)7>EvVIFcJk|gnWv1Nzvqag%iEhoWd6txGJO2c8B<( zzA|!FXjJgdA(uE~ER}R=^svk5e6X4!BGC4Pj?vJYb=eNKQ&vc#LOM49^Fd80xD2s` zd63qeP4u!Ww=8#L$X5(3c69_EkS*jzjyM|i2X)I;Uc9(fyrmhXzHPZJ4QNPhArU}-LTb_l@9;0FD(w18BCbsE_XF|W(xIuS39>@$J-^>%le4T zZXn<5$4z?3_0Sca)eBZ5J$;t$Zm9q!TzPn{)!q<+UPqIx49?CTxuc4S+CDdy8`^xv zvEApqA=r4ur#`Ke zmqtDAR4=?y4}a~gWwI;FkNv!k2l5;1K?iAr~tOAc6XJ<^)~U5@oA z@vbAgwdl2L?E#0oDASi4b95MBEn5B|BAt=q(AyC;44o*4S}gc?yT|j-vX?nmGhvO$ zx_vW9;J*>D$42sKFp)L#OG(MKuh^GPd^9w)&8@AMn9n9{LD{o>U_ht%s$IrROWKHC z(p3KQln~^En16gI2xQtzSUjP`oA$zzwR`mS^bzJ711r}n#g4w>1?de6J?C3xx{5d} zgAqVD5KHP8L5(3p+bOETR9{g^kcuIbuo`iTK&y05d497k&3YG-X2B11SAj#jJ8-tbcU#^0%8bcT|F9Fg)A6XZ^&9*o z?cR7kcr=|)Iq@ptNTwpqu>!5^JU`*jTw1Z&W8a!FnzmXQ4*5`8f@1WJO-w#p>1iv) z;Y+81KBo@*#!1he-C;mCG4xmmuvuWxJ4atf1mi1U$I?)4;zPIHto1ey`NXNB9I4Zk ztIo&n>kCJelf`#319ry zK_7`NAIe>ztBVSO83-3cMjIe9qe}px)+B&fSMiv@UQolPutXKYT>7ATUIgRD}1u96mn%7@#^s;Qo1y*lL6FQ zH6EYI&`I-9NQkcoHA-=Os(6xk-u^c6RK8H-oNNo6xVoIv82&(<=t1q3=reCPjm54e zllVjM<-h#XoLrD>t`BsNIx% z=Mwn>6m$Dr7a6SoFzHtcD^Z#~vb($NN+*A5)VDz++SC4Ml?>vghEwX(j7Sdl7RF}a zuCRO3M(1H2k*iLna!RrEJ}Rhr{4=wbuPXuQ&=l>V?uW|&FvOmuA;5=vN_#c(_Qw>F3j-A$a;uYAO8y}R%!880t*C`!-2-@d|N;39u)a{fr(w-~M}MlBM> zg;sfbQZfr$uuSKJSjB>aoJZiUGp+*8b4mH7_F_Mne}2~xjhYqx2>dhG2!@b0=E8AF zd~2IU0iFbC6Fx+e?(S!TlpRI26So&bjW#8_qC*{m(F=P+4DqSu+gmhx2`HGHS9d=T z^(wzLP;@TUe1(F4ar@ZDZB#n^3vVUEr^24KDL<(@BzTvGka+=z1`IxHMai)L9ZtC? zyHYxE{lZ;BhJ`|At@I_ck0$<#PqiNA|1)P%s^rj=_TkwJ?@Z-*T>LlVNXfp@rYu9D zr{JwTxp63l?wU1Y+@LS~iL!%#=Ixo|Ddc4yvl>b(O%3Bx-wc|L<}7ZT;X|LRme}YK zJtNnj?BS|e`P6YAHij$Q`q_LAsMT(}vpm%Q>l33DUVmOhOSGfsR{*~i%U8n(T$n)j z^?i1p{^QiD7|Q=?By=Hxr{cvZmSzNUnLKN)MUIdPq@^IE(>QZGrd_lH9ps%~Nc1KC&XmWHmV zX;iQEFJDkVA6T|;;PLhjLxVAT^R6Zwx6%UDE}swJ2cU;=yGx@pqaBf+>gOn?r}p5R zHRbD@e!SCkO&)scOy}Kz>)A67r|#?QlewB(#(g`83GQrLUxm>fpE7?TM|%KNjqFq| zNdcxvZQ?=YnUbz~&m|}HV`k}QwiP?enYF_AM*PwJh4r_urx8clJms%w3CSkC3)K@l z$A!))bdCJhX}q2D9cv7h!!Xw~5{=?#-|TBT_dG(PO@n+vEt(sK*s`i_BMRy?g6@b2 z@GbvDcUG{gCov8d#X!1n#CpZBtSWoPBC52ZU+iw18Tn`=VSp7&{N88gMi>8FVBE{z z#kT0s#KJ%B%>OYQX{vp(R0ltjsM?>t>>qTdY$oO9vY$6Bh$%8(&Qe=hSqZZbYX<3* zoje{3QKZO03BIx`Q&&{XSgKM)M}s{?->I)(fyyJWhNCsRy81PVC$yOC(Q0zE=BheDCt+&|1;9aV1oi)Rt-j(PxvQZg^Ep}`7N z&DrPgt_l3)jN(X^KYH#!xi(aJ1HuETEDDhtxiX|YJ6%zKu$aNOv7t6;1lJ_F1|-f? zc~MG(Ny!!9KxbCv!2$^T{Vn};)}icw0`BmQ{a?@8mW5Y7haIi)Ordjo?i-z^BRJtA zvS#NmvHO(;OR6oWUcPGJ=RO#Gc+DYB6R166%YXPhE86mZ&@6&DZZ@kBXG&QOb=4#q zi{98a?bsy4exJo|BD9WTuaM@FvK+MM{k&pg^F50tZ3<1hcG%P+Z|pPI2IuCh+n*>V z+^+l!Hve8Tx(DAoK)GK(GJFm@wp#2JAYgtqc#(V`kqGhOv~kiXi4};UuwFu-)UVUq z-U_PE3?l$i*eOn^=M^Fx_I}5C{-uKNEB=)W0LfnPC`vKDXHm`4|If=~zV2a>wfeK5 z(y-H5I_yk&n>6jb^36}*<7Q`9^z7ie?CoLb(Qxy&(5QX+&q{MzU7&JFENJ*@VxDsA z(j7g&yL>fDU{qc&+a5AsA7hgyC`5o-Po7=B$-LTu-hVeK{Y9+R zDg(#8zn-AqnHjSuMHncMoj#N7Pnb<>WZxxrO;q*A=hZ%jq3OtCdTmPcx@VSe_K<&fT;mQO@Se6)Zq*A+uTc=#)$QdbS&SvCE1(n;9=T zo1g!+m?XoMv06R)(Q^=7Wj*!wmT~i=?$8_5UNi>gOBi9dx)S1pY zM2d`H$*HpiA?&DZHIf6FK`rW2P&QO=kKIj69Y=^8R=fazN3n9x<9AN4f6?7bltlFY z&MZ^`!F@n-cS?pA^go*>5Y(d|J;27hOEFdziT8P$XiZ_MXae6v0J0N`|7# z#ry8(_J`88#KnXI^E;Np1_9t zDEmD|1&43oEgOt94#C4S#gon^WzBVtbD$kY5{IK ze9_hbfT-@h&HpOqL;e#i$}4(_etP|UsrEl_daW*0Ku)*(oQXdE!#Y|`M8U1?87sQ! z0&al~p#U2lS5!e|Cl>54B4tP)G!$ZUP-#ywRLzMKY|SS7*^ItLbGe@)ie}@`2D&QO zev6A1gvnd+tIb1vMh@H8i(aSZ1W%;8ier;%ifh-!c12rO`A&r1`;u{Ysxn4)AI@QX zGbm8Z^O(l+zwvM%#`VI>`OQi4H};DIEQx0a9HRcy>p%M`PodwK6-`swC-flBoa_|c zwGllEXT8Qa^IxIq838OMjj<_}!ZhlPzF$vQc* zm|ATg1eb=_7A^03%@*#KXs(L}ILd{MqVb6`K~Nnj0MEUj8GXAKC*pktdGWB zX=Et4G{iMl=J}4H%R2mX&8u^7tCI;+9GRt+oova(Xm z82XZlAYyW9x@R^KbiR@v$K$=AAG|kU~g3u3dB>nwS)>3E!ilVnF zkfeC+%Tep!O`isJR2_GHjL+7>_F!L&{nd_}DzkTS&py^an#Zfb=!d6>$MO2uz(Zg3 zattU0@auKQ{d+^#x5GcZ)DO~S~H3r@Vp4=kmJxpI7WsIrn zpS@JvCOgBxSUb^urCGFT{Ll;$A~X{T9sFdofEE?jzKm?Ut}8arAH*|ke$ zdNOqn-I2AxHtQ^+BASK{g2@GMv8Z(2qjRTs z6z4c?yv79GFQPDw|I&<%k^+(uzX9>TGZ(CaH2sKA#@dopx?R?{5-{Dhsz7Xc&JRys z6yi$eC;f>UBNPIn2D3CC`)apg=Iszk1`n$Et@2XQ-Cm_j<9d!oMe-ktob}^LbDS{j zufm|xo?G70mVh#uM`wqiMDGK#fVPumhhTpSM+UXffgJ}+(@gc#?x5FKHNRp&?_B1> zwis2WYzJOdBib`ew3ewtj!L`}1ZGc6lAXlgSmc(v){U_)h%1(j2dP)pAfDnqMIh(v zGrdP1%Pvs%zkW3E*yuIobIz2!irv+v{0VhSaD^%9Id>wNkD}m%YBnszsY-jmf%ozp zW#N%fB^Y4}xl&EuV{6Dj(sI9` zIWPC90?&v;L^Sf)R`aw}10__XrqtC((19wHPCuskz9}gm$=~|$``2xGw#>yq3V?I9 zX7#>pW%n>qkK-Hb-{PKg`NBC1WzZVpN|E#nYN+q;{A^DhZHXb5<0~q4pq$i%7ZBg#5ESqlDjZKc+vT5@vBMW^Wc(^mI#tvkF_;LCfIMCGFQ)twv!8e9Cwm!A{ zt2<31a02t@1wRcrJ5|UiPL0nTA}8vJct?^K#bK8i>4HP4d!7)>y62*8+Bf_bZy!+VfRWd<-NV;oUUU}WvOFR|2g#5zyp zGE<|tnmu)JaIk#XF4Q@_r6+<5N2Ld}g`cgzvi3~vTRc+N(kfI6FR&p?Qp$ml13mBB zb&LpUzZreeWQoNEC(auv1srtG|CBcok18x0wt5IhU zWD5_tVz^G59lw}XD{YJ+!2Uu(p+1B;(((ge&&KzdI9iq>ANUN-bw_0h$-Zw0T~Olz z!&0xIIz91lbT!YBXOUx2$!>9KnN&C8keygLXw~=FMAqycazB{q03m#0r;CZ42aa** zdx^z1?YOzVAi(KzU^+|r^b0B1%^B>onwP*(wts4KV}z!Yn3bUupav^ogmoy%_?x!F zdVa%X>y`hCw=IghbLL%}0H=+v(TAZTqv1h0(gu+u4^-E8t&Db9sHo*;=5cTN+x@68 zaA`UxS$75Y0t7*$9O0sus2=WuYi)R1ahPXig@xY))@1y}FHO#%EuqCU!)u)!zH#Yc zVuP1@2k)u6*^@ZjT%JrhU8~mO55*XFM^d zJ!!6{?v2x)#rND3QnM_xbWvoLHsk=cSj(TYv^RmHJPbGZP;TBgi1#0a*+uLk8+|8H z?_5R=D82R}A`=sSN|y`I{sI9Jenjr#AJvmH!s&fNmQ+9{9rV*ajUVYl@7y;56Tyk( zhBt`3$Omw0<(cBX*7Ryo$n{vdd}juhGl__D?dz&&k5Q4xehIfd$yadR_3I(bQE+${ z>!7u6MnMlP;V zk}66pKE!{TNzu6*(l8^}GaNeyi4Nxunl1jrQ18-0>h;jz)yN%To)5c&*qRMtEg6q8 zNZ>aL_0#$x7@RP!-}T-K%Bu*3$j-UD87N}`{T4lgRnr!$p1A9QcS`cGyFX-_X(-~A zc(Fu&pT%1qYlK{)k1cPt2EBv%EG*(SVTic2u8WGRNc z#v@_wC+fef7w1%N48_tAJgtE)1thhT%1u9)rs$?LsDvVq%Gr4hzgQ0AZJ$8XMV4}Wi);k@{|Zl*Sa57z#nH)CiQeoWxemoQW;uhVq#aUb|3VcQR0dDLMg)F3EF z7)$pT_wVziJ_TbQasOB%)Q!INwxfI)xR*ES6)?11%8w&h`_lVpE9fYZtklwvUSaG2 zXZo|qrtJ1k`)HZ+eJsO3`<|>XVSvGvoTWa}y>0wJ%-=b@$Atmlx!Pn@^^2uSU+M_j zXoc8G6)tc^_*L?r|4-p#lC(Shq2okz=DKPtdSamNNTk5LkE) zqI3)YMBhw76e3Qjj1H?@JRNK3Biu$Xh1GFn^w^F(nvI)*W8(55W9ZgmD1yA9bhj{7 zAbj8L?#JflNc7Qe)76cy4fG4#($}X+ry(+T_54PSJjVfgVyR|ze=LaGY0R0pm9cPj zb(q~ib+lH`$K!N_zPdqt&*KLu zfWSH9FQ~SFr+q7Cj*I~s-@_(w?rf}UnXWSg@dk`-lYp);SNOGOKH6~tl4BwOK#k^t zFxMl89wTR~+0;i`0zBxfqfoD_{YfU{8YrGT_SKk5FJ}(X@Lua8&(hawkn+!PpD0F2 ziR6Cz+qZ&mZJ0Rn42~~%s0F5Yr)qkr#-OOZN*)x2G3j|sQU+Bh3=5%VJI8tUzl$Pc zO0=!tP#dpr&MSXdvRh0z&D^_2YqJlR-r(h>nEu**2$=2({Ak97jXK2}E}hFeJ9jbx z0ad%)oGT!Q+fPSe0XU|B9DgoF#Y;*dmp3z9ic@bWaS2~MYG_wI{8FVl_1_Rln&Wv^ zTtN~iynl&;CYN0YI%TA)lYZP*O1I=%ao!Vac8{agt;XO@ei zp5DE0+-UCL$vc(?a*sle@uwT1U7WbHZRf1%=^dKh+O_j*UubbgypgnOQTUU}JZt7( z8o$LyCvU$myBIkt)6}F_cIPDicv3fBC?Hms^=BnI*o>y5C{&`th4-ouFN@~3(VfII zxdxM_sCN*rI-p8 zP%B&XdCQ|Vb~frSG#~q{L>pIl_ED;=976P6&;(i;=!CyF9a~N|cj7cCu9RAE!0c8e zw6|dnj4h8aVNY4c{;r!7Geojy<5Ybcydiir3UUiBT)FbF45a5tnBvy^MD$hir+Nf| zH4ETd>g)8RpBcVcURkZkG3N~R2ZsX)W~j-pFIEn#>;w_D-Xl1b2;a780c>!m8tjrV zs#om@gnE5kPX!<^(gOa7_H&urVP_A@Gao6xGUO=ZNjy?-cdqCjX1l31{VqRX!pg8itlA>Zi*9x;ISQv7uH5gx)v8^W&nd^egzpMm&8Y-9v{C^8F ze=<#9aTGU453fOH#iYx?kbPg^{_#x@3+4dB}o#i&7UnLC^CqT-)*U+8aLT|E%$WG}U%cUaL4Et9)`e1J z=Y@UR(VkbG)a}shW-TA1hDUdIPS+11r9pWomIyX}GF5Nw0PN$ARu2HhWy5)z%gv^$ zVaHViYzCW2w4auh%psD8#GpKm zogGl?hxdQJHt$#qf3S?R&GPo`;~}=l$Ed^Al_!Uw;e3FDY$Qp1d9b8JWUx6| zRa<-BmiM&QgkMFgDaC?AXSnHhC_~hZtHR;vhcT zrbfv>`9gUP=bbR@Y~lDg$|mb~dMxVAjSn-Te|EClD@HhL%BdgtqbYAl?>$G!c@KRu znE3C$K9nxYXn3MOh(36rdt8bIytTn@GpC-y6(3WkUXote5;#F}#8@3=&r-toctZXn zJbF$yEQ2wg2H{#wdIt|sl@TtJw2O-dH}cfgwH`!1y8lQZp5j!vY+mu=?h4zg*+*U1 zU^WMdU2DE69t(8faDu$I5=8Buj4Kh+Nl~p#YPY zuRtLH7edTuoFmqzxF|+*ciC+`{iBdD*W}UwKR^V?0nKW(>M0o3iig(*Q)W}_ zaz|T933G|pv>jag#xJ6s{Z!lXV^&X2Y{Ox^078GNb~eA9h$nR~b76&YXGHasTE5%5 zslRAoBc%!Eu!^+SIXU)4Yd-FeP9Z|~BMX(yGNQMHNaGMvBsvK$?ZeDOs4?m+ILll6 z9~#lyx(7Po@#t8PxfqB1{OQ@*lg=S=tAp92C8u*KY%28^npA7S9Fx=2DYs^irLZ3B zay}+C{In4+IFcHpk)WLpV;{TYfTVY`LHNH`AEWhO(qI@U%gyOMaCJqSp`aLji>8}q zihfMkM%P?r)eYGixqSzVhz(Mmkwu;mno=ZUln9yqc@#yHD*;w#xBRxaVL#!_%{3|A zO(X~3SgaD_0aFDnQa;otD$(t!Tel2$NC~llSWs2rfewOg!8KuV=2} z+lMly13h**4%8iEjhzEm2=3-qexl)C?W&4pT^hk5ylVSV)K@L2QvLxt4Tgd=;$`UuwG zPUG3RR`6Viz>{LZ2nGG_j|vVE;ywe(gzP->2yXIs5>QisAekDeqUi8=ALxVnNzQvG|*YwuX$gQ*|(Ag=8Z2&ALr4Fvb z{eS;yZLq-m>u2;TPc>&{llEQZwr!sFM$I?I~by~J;iQ>b4XOU*XN>( zcY)T`|0g~9ca6!*@IvCEX<#BR> zP4V|Psr~t)?;Qn_%&xxZ=Y_>8(CoUwc8|jf;rR# zKSKI1OZ}YDtct8ko9(jALg&%xsBJSLlihzAA?w>Q(B5COerK5UuN|u zeScwVOS9x!Ve_h_{3Z4t(T(4aT`}L-kaFRao~lFUw1V8CN9}>B#89|ttiis&%AV(j zC)R>|-lJMH)+dATy);CP5Koz68CheW-e^%kjk|h|s3IP(!M3!RRdvuHh17n=TUI?` zedW)f3Y1c{r&Iv;OQ_nj0dVVsY=xK$VvHunfx6VOslM~qL?gI~=b1}F3K(pAHkg?s@iZ>YSl`y?uIKzL5*v3LcT?|8K1>#tUFxeR^7Rfhrp41Z z{b`4y+&76cPl`yrGtiJM4zs^e!;|?4 zwUmb{K|^yFi^B@yy#-@ay?2|_u3`upz~N(sKM_Bqy@-41@Ta-T$m-2DDaoRHa;^Q1 z_I;VtBFh3zdZ!i>ZE0{{NG47Zemxt`XJ=>g zHCA{sGBVGeqI9j1b$)qq*GnHhJyU%ikzM_>J{8(-D8X4lu{`u?U}y-yVk9oasG)o^ zX*UxMK-h}$oXOt3GUjvLT>Z`FwZ?D-+S~M!GnvEp@_%{ti)GX3)IvQwk`VBv>QrNY z4krH56>J&)&T{L^5q8E&MRdwJwiSZ6lK!h5)Ep7!thR9>M{T;G7URnF@J*;&%9wKf zL=JR*97^|&Y&sRk(d?W8^j-W&Zy3Cd&I^!i+$ZL5d-yzj4x`tzZgSZmxzeAHdIY-C zB{ysY&~de#l*4Lfm&SGK2UF85%@b2zO0PI8{O_z!I4?;(l)NQvu&q~qj zk6OcMDttra3W(iIyY(93F_7XE51u$fS3(rPaA!%#65_sn((N9a;)>nk2G;R`cl>Gk zG0Y~>*|FFV+XtGRRO27&)4deAj7j*D%^T-X<7eDkdF7aU+H^_QuQt@;!KXNc#ViOX zXwLkNLZT$aur_DJpb0ueF#auAE8*DBTsz=_sy~6$2B$tE2Jvg-1W>tZlHA^9ve?X6g$Cd_!kdv)Z!BEW;Z_mhhQy_TyBF77ta zU$3tHXu6wsW4HN*;AXP|n6LilmLQZ{;H4TBwX?0u~T?a z$6^-7*C#thi*ZCx1 ze|H(-G4)vO;dnIm`()5}1;?1&DZw?3#9Yo;f`~ zA8wOoQx(y(WW|2u1X-PZ3wMA38dtAcRG8hS9Y=f+QhG=pcI(8K*Q1(4%SW&UM&OLi zb6-+)-_4LaqR_hwOrdANoouJ6hZdi?y=oNr0R8?fdj}qm#hf0vAqOc7?U~=2+TV>_ zJ!|8E{H`q>!ZCdOMhnE2#b}KRILK$c-8#!%0T38!Yn_W0P&vwMoYR|YZsp?X^{DPk zq3ZbM&Z31u4A3&x91tV>d3{k^&C$fzcX_t8yBJ%*$UR)++w#UfS5cRdW3&!O4u#$; z?&KcnM2XQ#ML1Qrqrcaj_KI>4Skqvz(w2JAtf?-p+1FFC;0Y^in){tUnAeE<$lb0N zMVOQUQ3nb#1s_5!Tz^%iHWygtas_(>RGCDm;|h^wb(HL_+kX47hy-EAR99lkatGVG?XcySC(O?z-uq59#;hDSxK@GD#8Rvky$Hg<`{YNY)1l{9m zAX-aeuOM`udh8H$Sy+}vV2D|0*;=iv7Tz+k=N&L_%%WxL_}_i#k@3ZZ*% zPc;><`irw*GFfbT5*ZD@Vm~FUZMz^%XvYV(XMh}jYsq=cM6g&&5 zbGs^y?eU|LRh^%^SDaK zbO<_G#l^)heXO1utpMS9?1juP?j>l=T;^xV>$2HwODLt&H0#=x{Z>#|V92hnkE~Mb zYE;C%geS@tFIoAonC`*Z`c1Yl5HXCls4S4<8$DvFY9d2=Y)&IF7mTmD)Fn4Wn*(xU zt(pFaMS;P3i4!#()VlF_mYC?|#$7!x!elv;oG&-JZy!X?U4(bq7?c}A%Nf|!^%`h& zM|uTBeB1Kj%X+A!km>Ecc+2saVl_$`L-endv}Rdb#>&kp^KZ1SYCTg5difO918j57 zwOicDT-fyPhw32L*vPSp!Zxw&RJ4pTH;L_oqtR;*^)Yh?D#5U_q)Y!kK$Y>F#h&G? zi1^BZrs%@AZ-5O5#7cOIL|_V17LpOQf1byR>)#$*!dRoAfd)}h-c{G_-Cc?{0n8YN zB(cuJM%*s55WvoD{(NQTy`+pkY#UP~dLMfRma>0kS&6?pDtfY9ek5r+De1WIy!RuN z1{B$4_B_ZNA?F?A+y9wI1ityJc#PTMlhbzf+j^^Pdu6-CTC@19_Z7la?T&?u>CO_R z8T}$!olYRHu-OC&ZziBSQ@_SQ-Mg8O8Io`-pWVpF0xK5x-1<9vS4zNv--KQ}_{a;( zMR7CT4}V&-!#OTWYO!vY+13Mt-L#g5DNV6dRcUY==}( zg-kcdDG=mGf#I=_Q*{4u*y>fupyju7Bf4Y0ZLsoND_xynF+@9rpKajjv#0WX^M7(k z3R-NssQ81Ik^S?_X3B8S+-1TIa^Q2C`bJ0(UlDJ_>x3V?KM6y zU=8HA*8Wh3=)p#YT}SWYZ-(x+no{9gez3Ouo*QX!5&U>$3+Uyr47*Y}ayp!==XQsY;xF@C-dVLxOoeyei63TGDqO`QM#L^=) zwkIs@-#GPrM4-Qa66nmI+Mz`!eNzki`Wywv{=4arJ4ITqZGS|Ao07qoW`4M9LWVO8 zLf4sc@Di}?UA~MSx3aP2LXVLj{;4diHUBdfrh;f%(^H0D!y(_!{y(O^GAOQX+q!8q zxVyW%1$PZjaF+nVgS)#m8r&rWcXyZI65QS0;p_9hckX>vUDegS|LnbFk2%K}b4?*^ zQQl>#WT(ikv`YLw)yA7wk6qp&oK0kS5qY9JG8#FXD;1RUY3pGyqI2EL0i#F&Y z+0A7i;n2I>(N*EU*!)JIBHzoNtIXkF6E9^nQ5zYb)a@pP$9m3#`hw^T>;_0#oKLV5 z@J(SI{l?^j#Dz1KSK3WVh=tceBsB*FtWGW`tgAmWs69c5l<2i5?{!Gb7i8+zaZ-Oq zq(sM+Au|s8QqSSxDUGL*xIkW2!a0A?K`32d%6zi2y24w+K2!*lqnBYYcBaFFrT24f z2>3G;R@OD$OeZ*U^0t`)DpvePh}CVCiKhj(cW*B>9@+w*3Sxkg$nNI4(HJ>qt`MEt zt+{Yd!C5q~a;ljV5gP@d!iX)8-k7RPM9k5o8QDPmvQY`JIK{-4TWZftcte<@vf~;g z4GzXcXKhT_)Z}HrZfAyo0^#2V!l9cp!!cxqRC;?8=uRN5u5>V`In^ARe!b(<0B{r7 zw-e7%;{#FmZYU)@^uA*uA~GT-DZ>>F==s6$|3t#xhET^fp_`W}48cYhB+E@DO8B$F z98ouEg%pE|ek5nLl+-ZBi3*G(iEvmtzt|xndAHE|e1*E5tT~<0f#0)=C3AptHLm%A ziz4`eF63vAQnH=pzP7~A#=#$Cx44r2pG8C*chE3UNW5|q(hu{Tws7yNdAq@Sb+u#j?7y2P zdl5ZRC#D>{q7k`oyg>sK9oKC*ykyB}fk7NbMPg=|AC`k~;BwF@Ftn$)rar z*}Z@j^xOOW=^zf%oRaU(0z4v+TAzT7Lky_Y0seug=yKl-t_G5=7Q5*YNYv0e3s`%F z+uJc1aI*SKr9WU6S0Br?9=C|xcQ1T#9!S1E-n{X%@$iJzO@gz+aYVi>#j73%J|)cm zeSiG(^|@mtKW`x1U)6#{tR77_z26Spxku`ELkn}$5f#>$fR`%K8jqE zE@aC=%WJ$@2(Ay+k&q%XA5BycE)Y!@sg|QOYO`?x+b5e+7R})>WwGIJ%|a{|cgEnp z5i4z_(hfOdA36QcQ8l=WfYJ61@rX+Nh9wZUZabS5yeVTjn}~AkAGsIaALtDsY%r=3 z?E)}^aQ@_y1TT55;sx##nPehSux2QtU5i$_E|YM77%;CGi-IwMmTd2dlveFHpZ9n#r)Bc{RaMtWJ2|a`6X6>Is{UpFGTxp2Hs|hjnJ)U zW2>k?nfAyW=88i7_<@L#T(29hjzqm7EMaU&ju|nI4iWFt73_rDyalYtbo*9 zaO;@#HgaO&lqk~-HW(Qj9cwcmRH$mlNOjFwcy227H~&jiyn9 z^i0chDrm}9Xl4XDX{hzIR7Js7GYOLLc$6Y!kJP@i z!Z$Ggf^qFd-RG)6$maCpr#FgvS#mLzLV4>$X^OQjr+w!0rb)Q&F2PDhA4!0+dBrmjz z+;Rw~jU3e5YC!rlxRko4(-07KY5S5MD?eL5Jrfr9RR# z3lWX2UHjD<@Y#m1G^Kp)i}}I0l$z{vd$H9@bq@P>+m)|}xV=E4JDt%x|`o0kr}SO$cC>AM7sKzC={(nIMe)3Sec%ij~X}w z{|?QPGE^(0Xv*-LW*G=tGJ(<*dWAc`)|z38(g@@N^JX2LM*AF}kJ_++#WFwoQ%Yk| zwt!oDGQv8pMv7bkAd)+Kgq?zD{EHQr8Rs6?_T1jNgQ~AN*#4FGdl&n6ZrmCXHW-m} zij4lsT%mWN${gOMU!XV_3``HjD5y;80FZ&(O3XP^kp$t8B;M+kq$}O(ao`|sQ-ju@ zh2rhRv+&$=t)>Mr8oFK)v0{8aMN}6HGNHI zoOSNG8(-g?sI*<`j+ffkAsE}@P_=cn5F8FjD!6)C$0f|>goW#?RdGZaC85Y}4icXj z7`}RDImyS9j<+vEAMYo9;V8TY_}7YnfI8pO_mv5Lv5I6Chob@_q@YyNnmEaERTd3e z+!}A5m$6?EN#%r(SrexC0zlXSaP;ppoWdol$yY1hr{cZEd!MyE5DTG$nO)RtpOxi$ z{u&QdhQI;Sq!lc(^iC_QfjS6gkeb+gqva;F@!#MQacRvCGEO;DUpbj>YM2lyM_W-8 z#`hzhJ$k}b6DyCq;1^`z00Fawm**@)btndl+BghO;1yo6hc1|av_#;vAhhT} zT96EN0BcC@61q>2khB3kM%BJ$7{Ark!aH!<%bZ!>q4nZl0n!dve3i8b(;;m}$Qv0E z>i`gPE>5v(|C#(NlJ^BmXU%*O?&MXN!*Q2T{e02i>|4Vy5@CD)3*pYe`Tqct1!V3; z?M}ZSbGhw+o8I+!7A4x6R86*wZS5@>a>vF#@vR+EjyVl%MUwW7u3%=hVwWWqLj#I1 zVS*rfS<6qoN!;Q{;ZQ@#z!5XGqEIU~t(Z#zx>aQ;8w@#Wh@Zzjg~M~mwL)A>?M*H; zNU;R+ORB_=W%cq<{CyQWBKCFYe$LlU7dV9B^zRWa$S247$)!?)aS{HF3;DB0A{jlq zJPkH>)ld0hwhv1?)V*1p^n&UTp?ze}Ys5*Me_Nbrws{Ax66sU{5sG;+A&8KL3%gNm zcV|WwL>RiAFpq`jwhB`5Uc!+NhLEqD@8T!kj8vo$1Vd#ct$&X09&B9D1SrNu?zuN> zz1Aah+P2z}nydef`0HG^c|#jq%R|J{v~0Y0&!zGjm=nb9xaP2}(T-_98{&qVV$dnd zr57iYAhWPE6qJ3fuTYzHJQt)*5RgsS4kOulpQ;%f8=JKPeI@lXYO3IlA}=-V1l4~< zkXwnk6VNQvUsOnM{W=BQX_l0_t|#FqmWX5|=V$U`@ohwo__FKjx62oD@p}+|R~XZW zs5%F|_NPwbpZMfq@}U!74H~$>(aAzMThvlO04Tf{wXQ?RGt16g6F7-gvuts_;P?Ig z7b(l&*ToJ0ke3g^?BliIG5-<4-z+U?UUtp7uP>1(rjuB=Lv>oOv-U|DW6a?HD+NN- z3H9Fa zok(7nGSdG8+h6?l8S z-!$Ja_(iJ?S12<(^{d|d4ia27qI{6K3cQmTF~4zTF3$5_U3T?AJXKv~H+6hsf9EEC zJhtCz$q$F{Jn#l;8oD7&q#lWqOL?0J6F*H{Y#${iRs~D)ypexnaWL?{wlNK=h4?~s~?kbP!0T`^E>KL zWsD3w5#`;4{mnx38zn!!o`39h_2zm}eXH!i+{#9V;=JwY>M4aagud5{$!gMzHDNmc zBGh?&JO{+e4}ua$%3YMS-$-jl?dAaRse~K1Uri(ayX7W%52IQ#Kye5xR_WxC`Msv8 z!3l_-rKbE%cyCo&MVIHfF*sw{$b*dfOG}(w#c+Xlb4K@Tc%$u;lsoN{eZRawt4qqT>(2`5Jo7TBu}jQ z78+MZDf$vTKB!yU5RC5+_F_XY`76*eE6HBdFPDD~w;UP0pIj*sU`#G_SziJkOb_tf zc6PIrQV3!u+6brLy9OgJ41e5Oc zo-R5t7Po~tJ-u`IE)gEL1FkP_HoRym*R=iS>sY*Sh@Y3k94-Sl`u+&t=Q!N$bj7X+ zZS-L^`NID+ymA$IcnbqS{q>nA+3K*@8^qXn!+AWvVG$YAKJ}dah;{S3M49@?P}-jU zl*PNvFC0{hQ`=dJlDZynUIdRYXUF4>y4_|tv2r^!?RP`Q`0CT?OvchZ9@BlTZ`d_)!}rX7Gbz|DMTYFT1PXj=EX-(9QpW0fyI1rUv==3XCqmI9W@KpxSD*+r&O44$WDjX`R>6)EfU~e*eZzd& zPKwZ%C{0HOp{$UEa-YNR=qYoBXihpQR(`g`CwNI?Y%vG#u8=gT4bB+bZgPC5NE@voajeOewSc-`_cO0s{& zA1D-%9By$hi{G6Eofd{i6LW?*#^^4uDYQUi?%O@mxeER}Ljh4<7T;hcN%~iq*TN_^ zIJSxci(S0gr?@U;|6u@7RLErAUb&mq#c=JyPbOms87{=YBB?6WaftekZ3ABzm$(kki_lGhgp zJC(Cij|)~$OsV9B0gSR4(-@6x7@Z#K4q3mxOvgs1onP-HQGn1WGh5;>0Hfi10zh5s z7~d|#&&3tAr_X^jvVq_qf3v4t${WmgZ-PNA-c^gbOGdv-0fb?)>+j;T7+sfrPki{Mp2l^{bmt<^^!1jJm;{%NG9i+U`UG0~wcu&_#3 z`M}gBf`a%WKt0nkK+!kgQItM<2scgHSmoq6jH_n#RmJM%=sY18&YRBMyabI*OWBJj z(w`I%-5pEB@4p2Ia)+x}30bEvDz+Wr4{w?d){DWGxydh@C(rg`x*rj`TwihY zU6V}U;HeFtzo%cGYt-e`)eG!7$#aF|6*B(Vqf}~B+05`K-h9$T{MJ^r8K(4S8~C~Z z#^Cn;f7vY?jAkM+HO>ar-g5ummeK2@K*=%BsTc=pk0ZdE=7?1Rqzahijqa0^{wiY4p2EWy=nl z(7qLc&nH9o4*|gdwQso_Anzam5-L2iM1}sC{_x^5c1J;2M$U$p zW=iK*LFV_SfQg0$paw;P2q|JA2o4Js8c-fk!)A#XLPpibiCZX3oiN=C8Dm&`nEOM8 z!04J+>yIL;2d$@L7Peu2M!#KCO#L1XqkK6d$jSqoe%MV`3u5JmrbN+&^8$|;gnvNp zRWW5@0xF=M4YdW1?#qpsrZ&#ATm2-%4aO`*NZuk6;1h-9R-NHrUjUeyOn|6w2w`#M zfn%Fn5|9<6ZK0+sAeC6tYN!@nx{u(}#wZ)#E>86DoxA)FxP^^+E0O;TRYgIjvBp? zRSc*>$_CR*8!QS%28FKnojZ9lf%Ani_o?LXKmibne%NJg+Y*4jAS0qB6CseWMj8pU zw2hin%Dy3!tz%0#Hs;nmCJP4K|3dzj4;a%A*%GnP(8doB79+ot@hD1qd|tfB?7S4@ z=MQr0IMJ5`hQX3}qs9r|`>P1aNc~ub*MOXb#>r$ocHCl z&hcsQ=T2!!cJD|c&DAOmR5JU&UI3>_(GyIBn;YHq0C#le_EU>$d0?CGe%vMZLC2Wg zJBD5;Wb;AY2cD9x?2)g!2Y%e!9nIBYKlMpASKdUAw2&`WtnXIbN|4<_c^u?fvQj7c3vVfQe({v9Zx+AS;#pxT{j%4@NvH2Wpq&Ov0p}nJ|$!6_Ob*4KXN66`f*7smeS!D5&9D`9jGQg z*@Q1&ToP^WUwjx@SQaTU{y^IiYcJiteD^~Lk}X=YYtofXKUye3?u_dEw0>?oM1jM+ z7>KSdVNIhB_Z9F7!rEn>+)i5ojq104&ot9wy8N7XmKAKQxwZ0q=T8k@9(^SVAG%2F zz$OZvL|KWpw&?pIceAwd>68Z|oGXDJlBRhI@LP|HIPu-eATD4#TJe?8_b<}v?N8F& z*k4wk6l^)DKLTZQfg#GFrW0-##+hBvUVr#5Af%d?t={>*2+f)8x7cFNBw<607CZ%t z%pGC&jMf8eqD8;U<#q6_Uz1p~R*J3>Q4PdDwbMaJ$o1hy_+pZW_FRkf;b$={6`^DVZaV3H*#lc+zajK`T=h<0zi{Z<2Iki~45*!@Rf1_FBPlTi z)acAV2$8`@ncc5AUT*e~L;2#OC}mWTDEXWu7UbWb$8D!%Y{XjFzbFWB=H=XS${M(T zYCa?kc0v)k`L$K|KqeBnd&u{erE3%e^KC+eq`P>xO6UhkY`R~J6N?7|vDak{)5H@$ z-gY@h?j?OFi@Be@-UnVcpjH^t=*=|O?TD*+dtl{?|A7TUtJm)($bQT3>8IvS`^DPX zTZiEP0-P?g5@`!ITb%UY1RRbyKG(dpKet|qwi3E+P{i?vod!wM>H~J@=oyu|HBci# z3$*?fblbYWR7LjBrjCLo`yY7uQ@HQ(^ax8adQMJdfBB^6XRj^N$$7SEm#L~#p7B~j zZhRGH9@*2$9f)r5q`q9p+kU!<9C`ne%Y$1_7r+ z-S{P;Fx50zCnv-;gAka;6)7Sd3F;+}(FDOo)>lar2)^y6$ji&~I&1>$y53x0H(`al z&422LqWE40@&4F_!^Xj3BSg+?kV-EO-)T+_9zo3ZwKPdlHQDI&;XTN7A`R|-6`=F> z4b)}1kASVdUdWj4x+0o#TQ{VZZogteom`LEJK*j_WD))lEL`*h*b7}Szmh6(E@hli zWC=$ivGs*_g^I_m2R<0w)3pzI<39-hKuMVaY^`E7U(Pg{UcLAQ{%jn0ZH3G_sg&}Z z6a|Ok*X`D>cL_2+QM_;8W@r^%Sow+S1pkZ&}hI*B6fvVC*j<7Us zl9_6>tW0z5P5;U{6P9(UpxNYWMh&}(M-L|w`U`Dfg24_@;K>&S26B9S+{oO#2sMXR z1|-nyu?DZ35h_Xan}sP@8BYTv`Q&(fXtnv!(GIV_LMxKce&8=%oEwI4>(C|lKQyRa zFr$vtbAj==nY|)6PW|0L$%_oauVR_K&=6`{GgBj895jZV`r_y`Xh)wX|L+;9T@4D2 zqi&6sS|W2%?W=abkFdEd z-Esf@Gt!Cc{pG!y99d-ku|--r%g-eAA0$MmYMCtK&fm!sa*mga#$T)0-d7Hkamtvau$f=`n~mt7In&8PE6D zAA!;QuBvX z{(h^Q@qS92cqqE7J8&egtFJUH&SrE*?0U|xzk~mS$oKSlax+C4;v00In&Hr!+pCbl zI_e((Km_CmdK1Z;Mf3652aK@C(gy^z$dJ1JqJ6L5?ATok0$zB5fdME@^<9Ml&o%pH1C$m<&i z%u3DKp$|P>xEM@Q<_3#uy-tJ(ub|rXOHvSsVq8TSRWG;#ohe($tZ^7szIIXt~-g-wug*wryri9Uu%LuWx9~ITq>B!JDA)z ztLxvitP#$FCua#-GIF1_Svy{)wgK8?3JB?7#VVviEjU^hf(%VAmxU6$Az+>ky#OLO z<{-kY^Tv~3Ve2Kvz8R`%-IJm7wuohGDo?z5GZ5kONXZYMrSs8bpnpB<@Nt7OI+1A9 zLij~n;BHP07dedA`4H8>^T|BZWkDM(r4*~~KRrD$J+VHxe{b29I&Cqg(dc~D)LL?H z!u#*Ym`!F2+DKpSj{o^%?CVR6qwlPE_M#BMya<%sZ5^4X{SDe&pTk5uk;=dM5mN`h zCA&BS6>_N`L5pd1_VoJTxRJaf={5kaHK2|<_2`X;X zL{L@-YKM%;MXb;_V1SH{7DsTkELC8`5wU{#_VkEC8>G9sEyj5&g5(=eZ8lJy zG`&jyVO$R3S14J(J|VpscYAzD3ht99=U-Fqu$7FKCNSic4SaM&eO;QH1sTNCpWySwGoO=BvMXBbgc|% zxs^~R1cfu9Il4kb)MB6%B+EF<_MrnF%`90ovbEcZ-hE?P@x_$_Ng?O(Hw%la*2NCw zpdJAD<4C9}1Zv*Ers^+b5^(M?s0w36?BM;sqHpO8<##2uM`8=2o-=VhQT9l3+9LXm zkhO~AS9curgrvypi(`>=>T2$~Sh!x#Eo0k_4y51t5r5u^X*_lBg{ZbMv?b~iw3AwE zj{cg~T@Rv)k-uB z1q31tUJ6WNg_+@&_HOGq<`x%3TC8nxNvW$CQ+yy&c_erD zW@jYJJ6X{X?eB!Be03fgP~&pMs$#`dRQs7r7gu*I7P@b+UgByAu)?bJ{od;-n+-+| zmljJzg!~xl5H}{`>n*mmZ2c+6k z>G-PX)^RBp@9$}ixJ$P#BD9~&_I#GdA zC22!Vv?uXQ&z7V=&&mPOTp@DWr^UalVHND)MJ4BxCT=L`drevp2JUo9{1{A2Yx~5L z&}PQVy?-rT0YUlCHZpX^4N{g+oQz4RQ{+_){{G2XKV@a~wWDd5=VWNhNP|N-$%UD{ z?6rSR&nZT(jaq)^c#s|VL0>-;P}aF?ob+b|CS6Ga^yHm6-|^*ITYr-=ZXXUo#?+`> z)C5r?7u4IWg)or+r;n5oLsch88K5IaDb+2u&maZk@T>^!A1K1kNHOQ3d-dablEG9J z&Z-QVRM}xs1Zwoj)@)*8$Vy3DM5nM9NH#T1_H7&B$Sy&D?K`i7orh$E^zH;D1$F1s&bju|$}e6DTED4GRjfZODghgDCSsjTy6-sr|>&pQgQVK60!F%O*D1 zcE}v?FwTid=;{W1jemg9Ox`vj2OiYy8W_zmqW*TI)1RR7StWQta8O1H@MT=lX$gMS zSeCJ?RV8$J$2uUz-BQ#i6l%Y3+yp`wwk4kf|ikMF;*0eGZ4YQAv0a?V;e=I>4!aCkar4l&G zsSr>3X@;}nQB4JQ=EadP&Rr*du?eU1-=H2G+jA&1(;j->CjcbKxqOt0!nv;{iyz$U z?eraRI*^l8B3Fg)oK02vQ{(x#GsR4tb&*6s%XOi(U&w`2yKW?78hW8A(Klg(M0Z@) zuI9dta}v=M^*iv|L^J2WEcr+a9u*}ii-BEF=;*3iS{Y06mz{8Z)s{b%xo9e_gY)&$ zY=?OVpEQ&rPtusK7gz5s@xAIHNfG`c8O)I49fnzxjr zKHP@KbRj3fd6u;)tuxwcPJwfA7)y0r+`ik3zaiAIbSNOL3wBGS3pQKXjO^N3jz3nV zdE}hWp~y}+a3e5er)BFQWDG>_eBL4GE9J&gZk^02^aK5HnQ(C=%-OC?GPSS+C z8LKd3VHqFzbCIZx(nRe^i~$Y)lNF;8XCb#tMJbfk&G5t3q}UTNPFwT{%QuJ-8;L@u zl>k>eWkV3^N)l&X1uHR}_FYLMpgsf(d+=y+`~AxnwixCc#RBQz%|L_WBvsEUccgEn z^^Kf~qWasaW=4?z54~wZ+F+5A*?_sUj1a6ewa7mOJ3X#|%PZ34U{S8rMxBRMa*1SD zwL-Q^uD~pt(((rXm^__dr7D=lyo6xcDB@!5#aNFS)>BDKeGs(J>Y%?pBF@0Cpnk_U z2#;%RTp>!+^gy1$(xfMX_gLOgsdLP08p{GdDw!Ee`8Y}gUwvL`2*c$-WmbRPY z9{;8Nz;iqKtq(dwmi%(LI(w6u8T$)5*6>^VC-hgD-JR*P6=?K;ZRI|33&Gc)L5 zAsar&;r{@nJ2x0pBQ2G!nfS7vH)|TgV@(TWtP?+{(8EXyE0GVXIixY5g50|$7hA(e zU3wCaDnwH$9evp-^jvV%@rEW@2AK8hsbs4pJAZx6Nl zVw+~)&rdaXT=#o8~HBQ;2S zMAVMvVG`zUfbLfM3sbZB5pX1@f;ms^T`^=kA|P9Bd70PRFeLgLfsgUq0!A}a55r<^`84Gy9N_aTAU z=4Gx`n}v^GXnjT!xq-(TH`FZa#TS#9cUm;fiI#uWsrf?5dopZ<=^rpuRKl*w3m)uD zDW>&YmuEK&oM)_B6ojpX(G#ah10f4c)S1&Ge;e|!u)Hbk1TUu|Y|Mq$pJWBw*zt=W zBwQ+usKW+9_^VhGRd9jtxEww`-y~zuFRLQTI!r8u&LxFc)jUdkp|E-cHA^`UAqW|< zmo#L!gB;z|C?q6AbohC)L1Qb5-TX!4L{&?rJMe``laWuN#S*KU*1MF+sP53o_7^ib zOVluwq`uF3j6#$}yDG9Svr>!ziN*qprS`#v6#k%)9~GNq%NNzyp?bB*LQw5o*rE|- zc7rU?w)>h`eJHJ5eXV;}jKNQ;9>D2U$*JTZcay{6tj~}A-48Ni?(eGvgt4R$BBoJd ze9K=Zc`WVcen=S%=6-Hnwk!7U6`D&SWX3bs#NIZt+ANi0@lfg7KGA?sZ{pog8p$Cw zbkV~(vnK9k+gf=@K(h$a7(jyeYBXbEgsQrRoG1Y#B%~>4AZyMAl)Y)i>5doDTvM=v&{`EReRjihjofom7EJ`WiW{p^@tn@ zaB^}2scwhh7z{IL2zd*%u__oOjT<{Uq9Gt4fSoBX_h)?`2U!P+x}N`vhhShi25s0R z;(i%&5I#A(UP~emE3vg#L3?P-a~X^y$K;d=5rhY!mC*Y&Ipk?bqOI|DfY2yw<;9V)I6h4L$RfcQBywYFf!6ae|roF|M zQ`MACFP1dp!Kr<;17;|<8+|-&m)5qe>B&#<&b|o`5yaeygShx z)!<8D(Q6yh%iJ6~Dk@4#Pp=4ZP61f;IsKYj4Vl==&a5FNV2YdQNwqg?uHNnn$x!lHsgCCC^-G&7xjq@4JT8e&c zlg)$$hgY>+l0`hzQiM(9O>qH|s3B9Qy!?Z`zmPB$E_Cjix%pp-y-U6jd|1P0SAgB@ zt#fSLD9%bv6FZgi#IFUm{Y>hXcJ>=QtG~nJ_=SYh%Nxs~%{p8A31Q5Z^+UR__ zR2_Z+PR0{yl(yS%Ci+T*?&#Vdx1-#*LU1l;N3amB9;^O0qEzD0 zGuwv9luf{FE8rPR2$o3TR6vs~YT}9rOAN<730P^5#<*&J8}KaHF14dG{(pSUACkuV|P5UmS_v{nR9GQR(e=q<#HJwl? z6pQ+jp!Ermdt1k--L*H+r3G?%q=B=lsC1%sP!Z6?iZ6`{RU~=G?a~RKBu0rTR%BEm z(vD6MQFmZ1UZLpT8%2}t4m5o1#Q|rzU}ZWE40B?S1`WWc$Z@N-f!|#Sf|l;q^(tmv z!fOcklOp!5nz#RX&}^oVDD#vEN;AWnG@(_@h65c7P>59mWybYd7Wf&1Rt(EEK{Wb- zr&5iOloFBY!+&J+2BPQt6(Ya86sGRsBZr&Nenl10K0?~&S7^Lt-QP(%oQ?=R4w*h zU;lW4-zE9w&Gl4ox@A6Ib%TC`e56f+W=Q)NZr(1nmxS z2GTEz>Pc~2-w~$&(u&ddiMgKv@IS_@OmGbPVzl9jK4CKqL8`z*6W_;y2 z?z;_>)Zqbn@4X$$=Ax7JKkggBuGg34oGy$-Y(K#`lJ$E8US}Y{7yjb$X`}n|#1o76 z0rl#bpat{0t@rLVh5Ke2gX7-HIuzR@AMxWeB<}%@AJV~HKqATq{yE>H))g7~%SE^D z#$A=eNGI56_79~z0P6>f^4gcU?zi?I8}MMcWFZzDgYE%ja#VLdrg%|O$lVZcUigZ% zdcV4g@AUTssbS`ViSHpFOsKtnaY{Wp;L5ELIq_ zy17s8g7k6G5{ZoG6VOr?LmAk!#WfyD&CuoZsN{6mUw`{9>rI~GXT_sJkjq8+QOb&z)}iD`sM@Gi*;sjJ3Nn1r>iAFMVk(;fQGRcq8TB6_PCM_v zjSJoL@IG0PJ%8+$Om!XG^l$jk3I9OuAgJsgeYfA-%|fW2);{d~kQ!h27Q`0%u%(0n zw1(TYV%1p?^aBQL!KKn4Lvw*w9?(&c0M*;#h(Pc;0tzMba&)*6ude;u!N5JNMxNL`i@)}de}q?&c=KZ^eEHW4V50BxA30B;1XhocRB3U(aUqelJ%v`{ z+SK4rQ_8wE!?h9zc>+Qi0hU!u2RUz<1Ij6PInVbDaWVas6DnC%OYWWiACUkmw(N~K zY?WW@0dQ!c@W#L3PZDSGgcgFUJ^p@XN^$7gKNH<+S=lbO-x=BH|F-;jUKBw=u2kc! zIR*NwXJupWe%iBn!uwVW2De;6(EvOhmCbL0i@pZSWF1=QU*45VsAU+>n|mYp0Ci0h zYH*_ZdKo6%ZyF~U3Wia!$cDEPqcYyR-HmNDO85Qg7e@g_wDC@&pN1cw+D|MdMJ@+6 z22fyUyGn#!S+}Vm+nq6WsI^)yu(T-R2_gBgywD;ZJFATMmR=_x%@I4_X!CR0(6get zf_AGR?)3xSq0#&JyJCB4Z1QUmCXJu&U-E=pk-n`zA>YO&wZc z_-nOu7?Rg}6U`E`{h7Yne#^<-^E0%;lNaMw*5MyOxZ7rL**n|w}_ah&b|K~wVi|c{h{$p6e6-LIoa#I^`W39wU`cyk`i2xgC`N- zuZrHAz3!Fokz*F|DPa6v6f%Xf@vJ~|nm0k!qzoy2kt5q-sw zvF$fQaQF2!`~Ag6oOl@W*6xTJm}yuX=FU5dPW#{{=2L#pVipPx>ukaB5`Lb%dX~T6 z4hxI5?N)g5=X&DC4nmuJ<=e+GBF%F>13C~MuR4)lktbMWC2AUodCKLx-D`K}eeZAd zJui)?y_}5$cQ)$ZC7F_{`{qqE;h81oztJn)+I)^LzwWg9U*rHy$)Nf4gB@1Su>??} zXiH4N{*LS;@vN*9e1)>9g}-z)S@(giD;LYo@8OR&W0p3tCo6g#3&$G+rQWOjjf!yj zo@)7Wfy*{}Z->MSI{l7%r@SS>IkuyR+xytMRsIu9GKbHYgjxzSmhg@V*uw5PEhe1v z87yX(BI0(2eHXG1w)k;+eO7g;s<2A_sl_mFc1dxL5T<~L-%^yp!>_+$M0psUx+|zu zEE){v7vT|mG7fo^r~Q6*By8zP@Ner zRCHmO@~0Qs_Zd>i1=yE+i2A4sOhJQ!O@H$&g5$j0R3Z#Ye5ou2lv09n>ji2(96p-q ze(FlKIN>z0S>+$;#ez%M!ml4fpCVVNwN)k{Umula4`1=m^O-j0w^HIsDp#YkCH8@?Z=M3 z<*xD?m&0(iGYJLUQDISt`x&Y_!B#Z9@$rdljb1mVt3=*LI6c$}z+b@DN?qx=@T>ge zb5Dte@YKJvcV)u>RWq0goa}EuNjG|#UQS$ltn9i&RDhh{V3_$R~&TJBp*I2%rhN2$?ggT zA(;`CwZg)ake4q?wNb`rGTq#QkR?s}N(7IU$U>ndEv$b-BT3IC7H4{$(1%b(0d#eR zW9$pn+#w@lf-Z6PfPrI^nqynU3EmyV_6whjzLtaR|4CPeVu=o&`IP1IW{+}L&i-*u z#yVc_$`T6u5`r)F_4Wdh33>g08v5cHgRR7?gq|Ji#by!N$Pj_KgSmb~$-EYdrdC!2 zk?R&0;{H%0(>nlw&n|Ro*?RaTFd|jj=i#30FGQhId;7f?9@rLvX{U8EXo-6|W+RiL zA?OM3jlVcW77HG1o%KYayr-)?{)0`JDR(5v|h=6f7by#_Pkqb zPoiX_Z26%SxgtDDIsY2=C;#c;%Zfm#0jtLvHKm6Q>`)L;2;4}!#WoYU-LNj;Vs)9F~jT*1VHD$`rpKQXy zaTqj;n}^c{yq>qT1|EA@+tAWWU;)cDgvq|r9TkPx?uXaK) zT`#MRt=p7FG>HX|NMLD(QBu^nS)SO2xoyS?Z;@rT(G`L!e6sP60qWx9nQ z0o*YS6e~8W1^|RwYw&vJd}yq=#36@G2BC3M78w&74}dBJ$(Y1|%d#MXI29t-xRNC~ z=<s!8~&C(+0fx2xpoa>wkpOJ42gtRH5WcM!SSIWzg`m?DLg zFr`ve2)AL_Gw8^c;m#&aR-A;FV5TP&HR+}I4n;;QfNA&Hb@3`NC?EOb9#J0UJ9>UKqj5m~5 zwOf988SHo=7ZydIiz^ookCnccn&y*^)RrxcQ)DV5^wh+#n%f31He-XI(T~Ui&JQ8Y z_e38I>mN15l$RzggS!NGcN=_gcRl+(|9QXvJ6FtNal!2U zJl)k@)zwz~wjL%UckJfXWQYL~JS+WWxU6%oKROXaG!TV%t^T&yQ0l~hTDw*pl$$mt z@W{+T6%F^oF!yyURDON|gZ%BE6mJ^`arqf`^sdSgagvaN(n0+P& za`PRz1s7m&eDj7m8XvD_q8^XJL=7|eS!W~m8eG=|nAH2AHDZtwbIA{vw6r7cb>Llb zS(Z;8AbbYw)nKmW=pFSjao26a_ueO}wS`~By)6nReMLT}acaMhxPC+KXgmhc~%i^O9G1JK*zF-8N5W5z&e zK+{;=R`;Gv<%z>V+oWu{d2tN&$O2}4aJ1s;>Z&LMVNrF_>9gy)k7@3~>AChG zQzClqEUu!LWbyP~C55hZ@e?I6$NKgPM#n=lq9nz>`W1>>bVXpV0fU=TtaM(=z#pw% zZlTIBGLzkHrR6*ns=PZuZYAD(3(!ls=LhKkuLbnq1iWssF~Fl34?fZ2;4ULGF@M@lFdn$*9vS$p6^W%cJAkY=v)u~=4q5p-{Heo=<^K{31KS=I!ur?E@a#zI zRDQD$KU&wfME#>mdT`Nn! z?rExaxiG+$h@E=uUMOjjG-fgDDH;|M{pZ)G%@@W#+Z)}6tr?VZ);4R+T>>q}CS&Re z1-qlJ)Y1eL9opTHu|m27nRsq5Q&gxR>uNf1a9;hpMbY<5iV5Fo<$?_(aT9MW$}+^# z6y`tNcwUBRWQ<;$)$}H?NA9~)Hnw;Dw=nC(kCB1fTi*r~ZN+`SalfVSrfDu<8{W18 zm^DxEnqhM$evDdEWlov{U^-h^ZZZ07994gisb%fMw&dMdnL1!f{|L-ZXRhoGNtWqHIok)tGWzcL(PG9zk- z9|ZLsIqjG#YoU-C#8@zyl|paZwvI4U>;FIFbN&^~!T%dh+_k3rD-8(j9gK7|{gjka z?UulFhj7ysx%9l9pMdciNSuu{(SY%ZHeJAs9Q!aHN9xA5MZ0P_LB1He6r8_kAs1wx zD+*k#jR&Q2urMPVY1zOj5}0&*8w|?TT^>^d`AZIsja@Wm^uJed9*Q%xMNYhwkdi8y z=PZ&#Vg5ZMilu=3t?BPPNFK#+0al}xB^9ND?mt~=AQ{!J9XMawY;avkG5@JqotGQB zY52=!2gr_c$fzF-T8I7~zS??LWdbm%n!tit_G9?I#CH`q_u7314vhFlwwF490K%O* zkd7_)>3$bWHB|cAxlN`GvoH>n{dshjKmSSehWOueg~K`J)azL{yYD>vOs$lq3bLut z>B5DPf@FldL}Adsi)wZKSyB8TYFHblUU4(X99rM?l(Ti0QH7#NA^W)Ea9WgCyw>)Zl|c zUh||h%W}s?D*c{8%%wVDE|@kUf4_^y>z#TXM0#WOY3}8erkILhXu%O9^^|yk4XA#% zcq%oBeus@y;to(}QXS#i{@PAV(GCYDxk~ufw5@bCN}H6nZQB`g*{R^($A4DDRFq;X zQy!&@M1+yCDxMV<78VuNfL$+-DE|=f2VZhlJvceo(qol<{x2SKan!TN*joPxRyhn( z;JhN7uSMk7%mW;Tt)pUMC1Mw+Kny6c_JPK_(%TycL~<)Ee#fS&R;a^1J4R^jaSZV^ z6qJ$Sz9Qice8{?XST=r<%^;@9{N^d^&>MVq?Oa`qap?e|DVB0#BX81(Wft;xeccR} zAOI7vD&sCpgI??3`C}h*eC^RdrH77dEO~0qN$~R*FXgZzql9LJ!!*lG5)m|ohqB7~ z1vp)Gd?LY6dDhm*LljPh>c-d5=;ehE@>9f=FdyvwflJP=-NbOZ@F!a}Dc`M5Ze)9( zcXd3!P5QyAXokN3z`z8N92;g%1poYDscR5h%gUKoAjn^WAhcQGVfwm4{{PE8pOkR0 zP`jn(B4V!LGoHRw;hbg($T3V+eT&zy`@rnuvr=&(H?;xc<3oy$vu=byW}*onjvv2W zfe*|+Z)R=`T!5Q@@9ITIZh$}z4h^U7jcrtiMHUgZjVt&c1?l-yJ1ajO4vHNr{}~Sw z|L+_$6AQ3ja?J{#r#T`u z3VMxoR;d(BF)0>cmjvtyBP|renWILID&6?J2wO3@d0Uw+Xhi}ffwBwRQ(G46u&QMz z0}jvZzP))@GQ-Vd?V+v83H0xc--hj*ov*ubya)J@S@K+5wE&G*e&OEGs0NX2p7 zTx12K@A>kB;v4SW+EXi6gs3nZRRaE#p5wSA-j6LU(_anlAuX*~7m_Q|MNG>Wgcd{EN zsXOgbb9I!LnUCvLz+@1mN25HHI z6A27V(IYBh5XR}Ojmbzx0I1Ib3m}6#%zp!=yK$9 zC!jXOKw6`EXH@|Vt4IvX-xS?K=4r4o2;fA-H@0s%M3L!A(2;{#RnfmgOe{!sb*ZdO z4r`CpN7=Mlaqtrh-4I>=_}qM~W; zv)4eZEF;YM6FTj|25;j1n9IDVxJch}=t868FSTVxCoVMdY%(~_)X6V5C?TBhIK5AE z>LfRjyvk6*>XS;3%RiO~Eq$!M=ox^|(7yvE%rh3d-;I|-{r3)b6jn8Z0!El9pZ*Rn$i-w5~lDvN>zSg`U$A{8%PZ+Yf z7>v%GTGba4%5tj+SFenWiz$O7^&{7p_Lu^hy4x?ew+Jt|Lyc2FNToo8)8^>tW(S{uKbuFc+{><&%_?mC~f-8(#D*8gp|T(~y~;6$RT+yvUf;;A!`fLjEI>nqOX zwgL!U$;5_u$q@w5$>i^4M_z^exPnIixk{}@yZZD zW)VV~;@336s>I__5R;BscoXunBQY6L0zddrI<_|2sx3^fDVI@y*806T`zz=cp8R(( zE4u-!ySvkQ?MJj)_vgJf4&w>_PBuFpw22FCo^6v5x6#^(uZ!%9$$dr`2Ev2OjUkCa z!cvE}vlZVPJxdNt4@+CPlfv#K_gJoy960ROw7q06z7);64ULBV{P}bCrJtokh~%Rj z7riJV6BE;p5$B0|@PUIM9e+Ub`hdgx2|MAiS%beWx^Vtzl5|bBxYCshzOp|PZkMV| zZ3H^>Z6zH06SJ?eCKtNbi^HCc zQd>zLD4N&@-CNC^X(J(FNZP|9*tS8@>IgHQv*ru*UOA-@LlZBEP+-y(!BX}3-I9sD z2R0?i!<7UM->Sv_FjPbKOZ<&aXN}AABhWz0n5VQ2mD4YO70*lj(Pky1|8Er?vVX!4&xcM)^Lzh9=zqG?Gi)=nY z^$n=#+I{P}dbh*H2!&qOT^f3_=CAG$UzfQHYqlT>CDSNtOpMVpL`xB@GT0T4LZxML z=j_RXl;6N4YMLmz{3p;*X;*8gji0`4mR6iGdlrHd&me?ysBxUBtn|Lb#D_HBMc!2^j|7}Tx0d1eN6SS?%?Nwgqi57OCQM3H zQ?30QSm(7xs<(*z$3P%&ugQsg;Gnh=1gSC!FGn6ryYgrc%N%#7jGkz~ ze>$VjZBdws>s4*4svvqhKi4yrPLnJnmjMOL7>o|1jE$w0?yOVcBd@XPg?i5Ni0+Ci z6c~E;%-EJ((WQLS?tZ%2exzNE>PJMNb;j`jZjc63qB>jQIjZ8deXrOTSlt(u7ShcX z>`f^RdTn^QL>h=p1318U z2)G?z_*)v}o7iY!M_;7eDO`+dQy2V}%Xi*EhRKl|*a>5KJJLa_ z{|q*QE^~&BOg~wFk%?n34_8LpWx_DT&)IC%eIZAkh=;-^>%JEFVdFTkI~&7f_Ra?D zs^#vepfgdiyO+U}I!5<>3z$2VdeHMLBM)FLb#!9}U$2yn!;=ZQ(FOaQR7Sv!GEaLg zV|S=WaUxZeAA>Etsq+t+SCGMF@+gqbyt_Opci;)E7aexa~FPZ4fHo>s%cqt_R=(;qjU6}Dg(^vyu`WF)QI+dPAU zAKR~;nmn!v-I*T9)*aV*uEY84!FkNgFTrTWt0{kTLSNxYmV{DlkM;bVSRN3WL1Wsi zyzDRtNL$Uc7soH1(PmKzET;DJ1NOV0&w3KS*IH$I-VVGWgV(Nfd`7P-9|Uw9PvOsr zg~eI6?)qOBU7to;E8n}} zQW(}^TB}Kz^C4aw#4FhNg}mur8>ihyf-<#ZRXWz0x^d?w`?ASg64DjNo;puGTj@ff zkT8c7KJN0JQwLPIAd1LI@JpG~8(Z9*lOWhd%=M*Nm^6eumP!OaWKs)4@g;-OKrHtb zy_k+2R9&nPabG}{3fOrf!T{f3cqiEbI|swvB0!d&++?qDBsW-gL0i`RL|7(aX^NMbPaK=<3(=^h#k>!m*O%(S&^bW zvE3;BA%91?*LFtK6y4lYyb=k6n*WYkj4nsOJ)4YhWlKBTk7b%jE&{L|s{#2A`=xD6E&> ze>(+7%i+B;uDU-I;NJ;QZAS7mJx!cdA;p{yUxvT8eS^_Wy(!w z|EiU3-+e-(;eCqT=8nDx{^OjR(f+gzA}MdIO*7IMA^2x7!dd^&*@WnmS+2tfA1i3( zCix`|U;v=ZyE-3U@CC2n_ByW`&9e~6CC0_C_8N_^lO$MQ>er-x#-VFhb`{EoVhG+7 zr}OipeDX%*9?wL1vOlbSig4;`AGy0$z4Likv#+{`v2`DL3;Xo+hCcueSM@-*{^y3y=dnxjV)}xf>eMye>&CY) zp%H|c!ScdSmF8DZy#dUHJPZWR`1@rDBX(5T-SCg}gcc7vf_VPYMmOa#k9C%jaQrl!>bi z54~kPHnZTfxgw+qSc&y>Qv045yN&hEHuFK-Npmi31ZGLh%&bnn489KhMRz8An4=ClMl?B`ufj}X9V;UwXTn?taV>= zuU^h_yeYIFxxLV@z#c^7p;f|1s1pWz2hGY4>zV{J`t3#TABxeLCPp6F?*#Z;@93~^ zH+p{t-WU0X4Dp2U-}0X?kC~gMx!n2?y>+db1Dw=(b!VRk4cK6a-gu; z&iIaFqOjYg2|>u`5km*`vQmB0(RvkjHJ0?uVV(8F2!eFj`DrnJaS^)Zcg1S}U&`{_ z#k5x2<<-Uf3o$Mk@|m(rIlVp(>n%c&1?$%w4Pwy_Q*5PDSSKh;ZMk0X(n|`Yx{?L4tDY+tqD0#blM=1pQL3MJS_C6$P-Q3^~b!Q6V zv>^UhT{W2QOpN|WjmqnQq^~yE0}jlODs^p368s(oUoNUsC+m+J80dRwVfiQgxAR}J z&C(m@p{9S7i$X;?lh>gbY`>8)i&ItQo$KOVtd&W)+%boaS1}lx3z=7tPiE2juD$k3 zUh!)!t@d_yQcXr8m-QB677A+dMCTzN)>{L=J!JD$)bao%t{-5$dgQnC@=8Y=_ zCaWb-(hcwGTw0u0Tu>BD7hI+eoNM;&pa(8$OqQvZr4W@6gQ#v(F$RT~9<#>>;?K7K z6r2D~X_3~6_W3~udn1NKd)>&5-!_r3EHob`C()NrTr1|_Sh7%ZLE3sz^jvZF3eqh8 z-Q1w+?fGzvLRMKDxh;16)H4q~pD`)t+}&$aQHiUj)kl9C+Tx6F)xin|JW+A9rBr}y z>~Ptf6PPa!2?>b^$0nb&ZM?cu+e)_h($!gYS;hVIyBW2f&7*e4g>xnC(N1>4NbG~* zpabi?x$r)mGCfa6$b5>Q9xs8{l= z8m^HuOB$!~wFItG{q~e4Ll&o!`3t?%QK*=zLewl$nO63nRBG7|!+46iysF)u^utc< zRc15Gq9POrm!1e4Jk%rj>#sR7!`op}M|dUq*a_n+Wn7{DgR*k8$@}ZUezO)YSW1GM zAbwbM38mKrtNUfVGB&8bO!9Q)0K?GAlA!JUjui*dA@Y*%JPi&{Nn9abrSx+$Xg3&rZGQWlJ2Vs-AZqeW5o3iks(f6 zb2&{_4vPko{r&y=c?A1&_mGi2+5w%+#*>M@u^tPi;@FR{9~jdtE~1bn@D;#w*j zB>6w}Rur#22!fAyaXI)!bct7&bJU%0vN0+SYMx+DS;lC^?{9L3kZME@)S^Y0C=#t` z{~i%Z`3uvW=fmdUP+<+53ZgLC6?Z~&9P>N3{g1?bn7uhNPuboVl7moJYDd36N%}!^8~DP zK&1xyw@(7!acaz_Wu`^E%SZx`?5-AbNV9nljK8xWm!8zq(wS%ohmR-g>LHPmA=9 zn+y1#xT~$6^;Vy_ef^sa@I|vkyxszDy1`v$UQcRo<>^@C?I7kVem{xS)~F2tc8Z%0^#3M=_strGyym&zEh;2?aM7jWzAPhJR>7Y`>{DKgE~M5}FQO7Q;8UlcZsRk}csWS19{t{iX_WXcC}}^#ackg>R8Lubv&PLE z1|s*qh&zif>f-8^w(TL;>HCGwzgYoSmYAQM8jtkgGg9=kz>>*tad;2orw;vyy}}7U z)$$x~dgK($p{cC1CwpD)yQN!iq3E5;t5xcYm`-l^05ZguC^?sWr;h{#!+pM)e>fs? zb>MQY@?E!mpI3_oq;(*^RI$LwxTP4q+G86t617ltso2kF&xekzM(F6eB3=n4)f%i4 z%dhJV%EOi6n0hRhUu}tvB6{nHqvg>8$m}>s*z6kASPlR~LtvBaeOvm%+oJ89Vu6t+lK8^Z`Z)_l?6Q2siIk?~r?m zzB6gmd$eV4%`E5(+rY@iOL8SC9)B6l+kSMGdZ&%j0_lCbPR*a8emuc(_smc-#K%%u z?LNdD#|ys1gDkEVpa6T&uX2TJp_TJmlLZkSLiF~{x*L&8VKw8EUqZA4rWPe9bk}dM zJ!+Sjc9o&5d+(MfeGu<_oIcofoKoHw=)c&wvy1Z7BSiadv;1*$y;xJn3pPJ9bmx9X z4xxbw`$2NCj=**`Daf_GByk_e$JTnK^?vP9ffbua*ctiaHI(gTuy*9~a^4FV>8ozc zaoK)iJCzm|SERi&I;{+4+Xz}jz9RDRoG6;~JnHOS5qf6hv4p;o>VcfjaT+>e2Tmf#_bGT|8=c1T?zKH;f5w zJ&=YFvL3Ge+oAN>?V+@7?y{6fbr4y+uBZ%%MBVYQ)JkEZd7OM*rOA`u(1-{d>gyLN zsb$qf14LmyVqcjj?-<`-Ivs!hs01G_S|@+;k0ca#!K?BZQNUvw%2kKCDsUS1I8lbD`Isb!;1ReZ6;h_)qoa z8=@F^I`qgf3kj0+uqBJ=a3bpxO4z#?>(6e^2?p9O@-Fr)OD*1q4Q$@#N4F4&RClAt zi|1UDo$NwN&{gUFcRiK}z1^77)zX|&=Gix3^qf^lNdGat^K{@=1kwMKc0+unVFHev z+D97aEMPMO2LTcnD!e^0k^*bAou<3`fP+p8LI7DYounvo)s|D&T(IJV_w~$4*iWG$&S=X*Lme$e}w zBGc-({rq3|4H}7(gwinC9v>tKg$7hxQM-bmEbK))V?GWt2cZzsw_*wAk-{Ay$ii23@ zM2${$>dh!=OovxD*$E*mJQNJ&SZymi<(do=!KexlaM}@rOmu!@7(2 zOxqisR(l7F-7L=b@O@Ix3eq5^`aIFVDpz#Cc)zeGsk_hoIt91-LN3UAbg0uO+tXs( z`$0?XCfYXNIj1gUS{!p>)wLrR?Iwsec6J2gq9od-DkS?U|C9jAw3qu$6oxnLetK7| z{)J5Or;?J!Pn^o5?y-KB0_=Qy%_&W9@)@d{hX)&jGOPuM4NvBLI@%n>Jaj|+oAi`A zjrl0Z`OMi1EtUEUO{EvuS9qg<+YqxO=m1u~=d16VT6(hn4*LJ)HvW0wCTof^yFNKo z-<`mU%=X_saxbNN8_LA2_5()P*df~LWDJQOS0&pQFrM<&&YvExB<-?XPox* z=j{{A$LC9PFJNiS^XJY&kZ7*0QNZ0$A1CIOM&Sf^bPMOy?~?rr9Ov1;zgZ@ojX2Zc zqCP-VcU7g1#L7-z6cZ2Xg(}cUA0&#kDTAY0DXr`0ZzAZ$2zEd1w;7R@WsLmzbLlZ( z_N%#TUiaIaEZn)w>&XsUn#{RFrP;-xKFLXC3?O9?7L7dYh)L8qWvpu)9j-hanMLph zSLrBqtE1BuY=%)-uBGp6d$;fiU&Mk>w4k)ghD{UoTwt{Q4=3u`q^H93hEMY2n-#TV zORaJ@T4^Xg&-DZ?+0iN0!DH*FyDn*o@PuLVDtm0H9vSUQy^dlO|J+0H;~6@2X2C-%{`kDE61L{FvlZ-w86LOzIbfn<`PjR~t_x z|Jb3`j`N~ad}r+Zm`B&WvqO~$x|C+BTM5f;x)!2Jgicxgbue+NccztoTl^4uF)Dzz zopMtd_HU!X=p#Ny%J;k}DXdu+-UqJ8mp!VOaLJ&V&b`YgUN-mNVOAJxC+=aGAm*nAU4<1|gLu-@J|eB=NC8h7*kV zz6HjZ`l)}o(zG~jKjKN|{cs6pPm+v~w8O|Q_Da$vJ)-cO2IAb>jIw7zf<}QfpVH0& z>k@i*H=3CpI7*he8Lr|x3avtB@9{BHVPPTQGIN>c00I#;uDKGPHbY2`-yTp9 z1G23&-bx z5|U*gB9kG0?wT#j!5s(E4=BrEcqr=XEEEe6Oit3ds30(6z`PP=T+rLpM^SfD4fpnRDM^l^{ZDW2)0YLI?zmr0nhF_evIOA%oM{@`Q4X61Fz%86~T7kJHQTQ zi{~^|=dkFc87KDeiVM>1R^?sH;%N6+aE&lC;ge@jX|DOxarW}E|Ce*ULKFK*&XU+W zD9pgX>=cFKX%4fguO{1vj&aK{7Ed9DiyZWSmZC(l%hDZJnEf5i-7G?t?>(a8cfA6$ zTCs29|Fa|6fmWPF~@F!QXTGK_h3QZZYOw^NB1mz*uc@BehaR#2|iKQBCN{3uzWsNurCB ztV~l4*HpsJnKEZ$!2N_<@-3NyMVDp$!*wccMt+SPaUk3d!-PA@rj&QBI4dOSJ*a%wc}1j;#%&c%x*8GP2Lu18(Ri zFS|QgUB}MK#}CD!%HZM_x1p%q^sqXjg0YGOBDV{%DihA^jOmLK5>;0~G!(vWN=k=$ z4#N;3n+3u0%3V3_&gUej^6ULWuE`MZ*CbO{g;iB1sBhgTB9zN>^T3(gG6 zQ#Zoi_E;tz3@F6EyT|`JuyH51-Wbe;G-sF`aaFlZ_I?{!A_Y~P|K#y?<+sEUP}QZ) z%H^I9>DszbWV8q>HVo$u%{osj?o1tlwtfv~g9zF(7R2upm2)xR7OS^)bO4<_;Kv(^ zM%oWt1Yk!GVf~VI?v(jIOCa8V1xR?{!^Zu^_F{t#p@c*T+shU?z|@xySp1u*f&8({ z85%hv9cuuj0IK1XA*O??xsb?tm)#r8Xu6u@+$$(&50|v{%@;*8%I;v!SC;xRW#kiA zzUX_a#ue)7Oa+Q~0eckkf}PJRlv``qAn8Bkn~T`IM^RSDqb^{F&G3NRCa8Wat?z(m z;Z+6i-CR_mt_)9uom}Aj+FL z*kMel?0kK!Cq+vA^{#(lzHIghV;be=#bMW!Vv_h8YU}!G{q*7-Lt#)CIF&mZ}jP5eL_ChWf+hYXHZuyucdHXghen{$od@bf*@y%|JVJ?(f{?wH2AiH} zpE|P&`M>{GC_w0}Vx?pMDcR}p1aFHVEL20Eo16&3Qk!b7`?hlTB2%518&npwUz+bv z#6gg{enow->JyX|rzx-d@yDj9%?}BWIO_M}aaZh3=ki%IU*@P=I4M^jj(EMWwB9LH zNpC;`IPucxF*B2-&s|vs9GWxyGzGy~cQ}~O%`fmTvRm(Oplut!o(&0Qu7oQ(3q*4k z?Ms%T-5@Yzje~#k=riS}H{1|)VZrps2N<$Nn_?TQO!^&}zUYU=B4#2YMC5WLgq%GA z7sVeUY>M<)?2XKbhkFu*j_&6SRov|pc((>e;vC!_?iVoet5R)=*PoJHg%Po0M)(5y z_c2Izpi&@;N&J!lH=Fs8`K!*0IDxJXH4!q^@jUyPTPdUWyptmWluplS4+a#RA_slm z=6qeAsG7P8g}@s_r@a#I-IfcltFv|}B2-xH@Q)~^#OKL6oEQO4eO->SJd=7dl70d| z^;Lw_RB4Fd0#r7(UA843&Zm_EB(|_?+^c%1E*iarkRZR<51bJRqPu1YwQAD@(&8P-JA}{!|rBuy_W>TJcnxPLax$evWxOOIaZdH>mIje;ib?ySdNMK)ETW7PcS7 zjhPPqI!8U=Lz*Y0;u@xTB+J9kiSGru?10sv3p#<-)ojOWt$4ttnAFOfvoxG3luJ%d z?)qq!?q8wZxCKnbE!LW$>47f9+ivTt`gW7_GbiL{-Zb8$q8b8j;q}B*|8-^(`?BGJ zgf*ddyURar${D#<4cakF-3Ev)>%piJ^JAt{EcCFB!b5CXHcxA$t#=35Prfzb{5%N$ zrnJ`9E;U)ei(&f1MYsLF`ku=rE6rxqd!~6!iiHp>0EMQIN5RIT5@y3@;GaZ_@y|rj zVZ<^mG_X#&>PJ>u8lx_nrFLz`ep`P0LoZ6!b#Wl()?5WyF#~0Ew}R^7&{5%5(%Dm_ z1Sqz+*yXV$Y0&&5cDRVZm_BN;^=n^psOA!Tq5+!f?ph}aCjn~R%86RN;-TQJAEP>_ zFYcG$-TstopsmQ>^VK~u89GTyC5t7H+5{{b{~z}5#-o;V0kkU=6c15^+$D2^l?D!n zt1)h4S65tw4@AQFA?Mzt0C)ke-#^AW_P{uzk)~dCY!ezsrC|YQe;qu6JO|*ZT|9`XqIVX=89ny>A zv?k60T~1TxQcxGUTN!yO7?@JJC?(bRdtof=ompf;%9a zUr8UyPMfx?FhVlg&U12Tm^=23bbMc2{&7eK>i+Ed{_}HIE}P|`u{7@OQI3hAv#0w* z_09;dvvxcH4Glbl7;K+Jpb9?wT*hT>teyF|kq~!S%+P$3lQVR5wA3||c{F+sbO+mX zhRJ=_FT)cI?Cdz3@<#()e3^gh)cHNw`H-Aok#BHqaOzj|q!kF!{EuM7flvNK_pIeV ziI@-;6PGVTKBaxLRm8Z(h3+Db_mr0TTNYPC7OEFKE`++V z1&-h>bJe{cJW^cAqX01R6#$?s1(UC{l@3IZEfzWKAWe!!hC?P^cTwq6%JC}V@TO

&%N! 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

N-ox~%E^RMlL08uf%QIi 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%0AWK1ZfSE7dHf9a%U;zuKpMM+h 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 + +## 免责声明 + +您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)及其关联公司的商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的正确性、可靠性、完整性、适销性、符合特定目的和不侵权提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导参考。 + +由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。 + +## 商标声明 + +![logo](../images/logo.png)、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。 + +**版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。** +非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。 + +

+ +## 目录 + +[TOC] + +## 前言 + +### 概述 + +本文档主要介绍machine模块下的SPI类API。 + +### 读者对象 + +本文档(本指南)主要适用于以下人员: + +- 技术支持工程师 +- 软件开发工程师 + +### 缩略词定义 + +| 简称 | 说明 | +| ---- | ---- | +| SPI | Serial Peripheral Interface | + +### 修订记录 + +| 文档版本号 | 修改说明 | 修改者 | 日期 | +| ---------- | -------- | ---------- | ---------- | +| V1.0 | 初版 | 软件部 | 2023-10-23 | + +## 1. 概述 + +K230内部包含三个SPI硬件模块,片选的极性可配置;支持时钟速率可配。 +通道输出IO配置参考IOMUX模块。 + +## 2. API描述 + +SPI类位于machine模块下 + +### 示例 + +```python +from machine import SPI +# spi init clock 5MHz, polarity 0, phase 0, data bitwide 8bits +spi = SPI(id, baudrate=5000000, polarity=0, phase=0, bits=8) +# Sending data to the slave +spi.write(buf) +# Sending data while reading data to variables +spi.write_readinto(write_buf, read_buf) +# close spi +spi.deinit() +``` + +### 构造函数 + +```python +spi = machine.SPI(id, baudrate=20, polarity=0, phase=0, bits=8) +``` + +【参数】 + +- id: SPI ID, [0~2] (spi.SPI0~spi.SPI2) +- baudrate: SPI时钟baudrate,Fsclk_out=Fssi_clk/BAUDR +- polarity: 极性 +- phase: 相位 +- bits: 数据位宽 + +### write + +```python +spi.write(buf) +``` + +发送数据 + +【参数】 + +- buf: bytearray 类型, 定义了数据及长度 + +【返回值】 + +无 + +### write_readinto + +```python +spi.write_readinto(write_buf, read_buf) +``` + +发送数据,同时读取数据到变量 + +【参数】 + +- write_buf: bytearray 类型, 定义了需要发送的数据及长度 +- read_buf: bytearray 类型, 定义了接收数据存放的位置 + +【返回值】 + +无 + +### deinit + +```python +spi.deinit() +``` + +注销spi + +【参数】 + +无 + +【返回值】 + +无 diff --git "a/zh/01_software/machine/K230 CanMV Timer API\346\211\213\345\206\214.md" "b/zh/api/machine/K230_CanMV_Timer\346\250\241\345\235\227API\346\211\213\345\206\214.md" old mode 100644 new mode 100755 similarity index 95% rename from "zh/01_software/machine/K230 CanMV Timer API\346\211\213\345\206\214.md" rename to "zh/api/machine/K230_CanMV_Timer\346\250\241\345\235\227API\346\211\213\345\206\214.md" index f7f3ef5..37a5f01 --- "a/zh/01_software/machine/K230 CanMV Timer API\346\211\213\345\206\214.md" +++ "b/zh/api/machine/K230_CanMV_Timer\346\250\241\345\235\227API\346\211\213\345\206\214.md" @@ -1,6 +1,6 @@ # K230 CanMV Timer API手册 -![cover](../../template/images/canaan-cover.png) +![cover](../images/canaan-cover.png) 版权所有©2023北京嘉楠捷思信息技术有限公司 @@ -14,7 +14,7 @@ ## 商标声明 -![logo](../../template/images/logo.png)、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。 +![logo](../images/logo.png)、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。 **版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。** 非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。 diff --git "a/zh/01_software/machine/K230 CanMV WDT API\346\211\213\345\206\214.md" "b/zh/api/machine/K230_CanMV_WDT\346\250\241\345\235\227API\346\211\213\345\206\214.md" old mode 100644 new mode 100755 similarity index 93% rename from "zh/01_software/machine/K230 CanMV WDT API\346\211\213\345\206\214.md" rename to "zh/api/machine/K230_CanMV_WDT\346\250\241\345\235\227API\346\211\213\345\206\214.md" index 9c51411..945c758 --- "a/zh/01_software/machine/K230 CanMV WDT API\346\211\213\345\206\214.md" +++ "b/zh/api/machine/K230_CanMV_WDT\346\250\241\345\235\227API\346\211\213\345\206\214.md" @@ -1,6 +1,6 @@ # K230 CanMV WDT API手册 -![cover](../../template/images/canaan-cover.png) +![cover](../images/canaan-cover.png) 版权所有©2023北京嘉楠捷思信息技术有限公司 @@ -14,7 +14,7 @@ ## 商标声明 -![logo](../../template/images/logo.png)、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。 +![logo](../images/logo.png)、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。 **版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。** 非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。 diff --git a/zh/01_software/machine/images/canaan-cover.png b/zh/api/machine/images/canaan-cover.png old mode 100644 new mode 100755 similarity index 100% rename from zh/01_software/machine/images/canaan-cover.png rename to zh/api/machine/images/canaan-cover.png diff --git a/zh/01_software/machine/images/canaan-lable.png b/zh/api/machine/images/canaan-lable.png old mode 100644 new mode 100755 similarity index 100% rename from zh/01_software/machine/images/canaan-lable.png rename to zh/api/machine/images/canaan-lable.png diff --git a/zh/01_software/machine/images/logo.png b/zh/api/machine/images/logo.png similarity index 100% rename from zh/01_software/machine/images/logo.png rename to zh/api/machine/images/logo.png diff --git "a/zh/01_software/mpp/K230_CanMV_Audio\346\250\241\345\235\227API\346\211\213\345\206\214.md" "b/zh/api/mpp/K230_CanMV_Audio\346\250\241\345\235\227API\346\211\213\345\206\214.md" old mode 100644 new mode 100755 similarity index 100% rename from "zh/01_software/mpp/K230_CanMV_Audio\346\250\241\345\235\227API\346\211\213\345\206\214.md" rename to "zh/api/mpp/K230_CanMV_Audio\346\250\241\345\235\227API\346\211\213\345\206\214.md" diff --git "a/zh/01_software/mpp/K230_CanMV_Camera\346\250\241\345\235\227API\346\211\213\345\206\214.md" "b/zh/api/mpp/K230_CanMV_Camera\346\250\241\345\235\227API\346\211\213\345\206\214.md" similarity index 100% rename from "zh/01_software/mpp/K230_CanMV_Camera\346\250\241\345\235\227API\346\211\213\345\206\214.md" rename to "zh/api/mpp/K230_CanMV_Camera\346\250\241\345\235\227API\346\211\213\345\206\214.md" diff --git "a/zh/01_software/mpp/K230_CanMV_Display\346\250\241\345\235\227API\346\211\213\345\206\214.md" "b/zh/api/mpp/K230_CanMV_Display\346\250\241\345\235\227API\346\211\213\345\206\214.md" old mode 100644 new mode 100755 similarity index 100% rename from "zh/01_software/mpp/K230_CanMV_Display\346\250\241\345\235\227API\346\211\213\345\206\214.md" rename to "zh/api/mpp/K230_CanMV_Display\346\250\241\345\235\227API\346\211\213\345\206\214.md" diff --git "a/zh/01_software/mpp/K230_CanMV_MP4\346\250\241\345\235\227API\346\211\213\345\206\214.md" "b/zh/api/mpp/K230_CanMV_MP4\346\250\241\345\235\227API\346\211\213\345\206\214.md" old mode 100644 new mode 100755 similarity index 100% rename from "zh/01_software/mpp/K230_CanMV_MP4\346\250\241\345\235\227API\346\211\213\345\206\214.md" rename to "zh/api/mpp/K230_CanMV_MP4\346\250\241\345\235\227API\346\211\213\345\206\214.md" diff --git "a/zh/01_software/mpp/K230_CanMV_Media\346\250\241\345\235\227API\346\211\213\345\206\214.md" "b/zh/api/mpp/K230_CanMV_Media\346\250\241\345\235\227API\346\211\213\345\206\214.md" similarity index 100% rename from "zh/01_software/mpp/K230_CanMV_Media\346\250\241\345\235\227API\346\211\213\345\206\214.md" rename to "zh/api/mpp/K230_CanMV_Media\346\250\241\345\235\227API\346\211\213\345\206\214.md" diff --git "a/zh/api/mpp/K230_CanMV_VDEC\346\250\241\345\235\227API\346\211\213\345\206\214.md" "b/zh/api/mpp/K230_CanMV_VDEC\346\250\241\345\235\227API\346\211\213\345\206\214.md" new file mode 100755 index 0000000..951d565 --- /dev/null +++ "b/zh/api/mpp/K230_CanMV_VDEC\346\250\241\345\235\227API\346\211\213\345\206\214.md" @@ -0,0 +1,330 @@ +# K230 CanMV VDEC 模块API手册 + +![cover](../images/canaan-cover.png) + +版权所有©2023北京嘉楠捷思信息技术有限公司 + +
+ +## 免责声明 + +您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)及其关联公司的商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的正确性、可靠性、完整性、适销性、符合特定目的和不侵权提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导参考。 + +由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。 + +## 商标声明 + +![logo](../images/logo.png)、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。 + +**版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。** +非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。 + +
+ +## 目录 + +[TOC] + +## 前言 + +### 概述 + +本文档主要介绍K230_CanMV VDEC模块API的使用。 + +### 读者对象 + +本文档(本指南)主要适用于以下人员: + +- 技术支持工程师 +- 软件开发工程师 + +### 缩略词定义 + +| 简称 | 说明 | +| ---- | ---- | +| VDEC | Video Decoder | + +### 修订记录 + +| 文档版本号 | 修改说明 | 修改者 | 日期 | +| ---------- | -------- | ---------- | ---------- | +| V1.0 | 初版 | 孙小朋 | 2023-10-27 | + +## 1. 概述 + +此文档介绍K230_CanMV VDEC模块API,可支持264,265解码,并于vo模块绑定,将解码数据输出到vo显示。 + +## 2. API描述 + +提供Decoder类,该类提供如下方法: + +### Decoder.\_\_init__ + +【描述】 + +构造函数 + +【语法】 + +```python +decoder = Decoder(K_PT_H264) +``` + +【参数】 + +| 参数名称 | 描述 | 输入/输出 | +|-----------------|-------------------------------|-----------| +| type | 编码类型 | 输入 | + +【返回值】 + +| 返回值 | 描述 | +|---------|---------------------------------| +| 0 | 成功 | +| 非 0 | 失败 | + +【注意】 + +VDEC最多支持4路解码 + +【举例】 + +无 + +【相关主题】 + +无 + +### Decoder.Create + +【描述】 + +创建解码器 + +【语法】 + +```python +decoder = Decoder(K_PT_H264) +decoder.create() +``` + +【参数】 + +无 + +【返回值】 + +| 返回值 | 描述 | +|---------|---------------------------------| +| 0 | 成功 | +| 非 0 | 失败 | + +【举例】 + +无 + +【相关主题】 + +无 + +### Decoder.destroy + +【描述】 + +销毁解码器 + +【语法】 + +```python +decoder = Decoder(K_PT_H264) +decoder.destroy() +``` + +【参数】 + +无 + +【返回值】 + +| 返回值 | 描述 | +|--------|------| +| 0 | 成功 | +| 非0 | 失败 | + +【注意】 + +无 + +【举例】 + +无 + +### Decoder.Start + +【描述】 + +开始编码 + +【语法】 + +```python +decoder = Decoder(K_PT_H264) +decoder.Start() +``` + +【参数】 + +【返回值】 + +| 返回值 | 描述 | +|--------|-----| +| 0 | 成功 | +| 非0 | 失败 | + +【注意】 + +无 + +【举例】 + +无 + +### Decoder.decode + +【描述】 + +解码一帧数据 + +【语法】 + +```python +decoder = Decoder(K_PT_H264) +decoder.decode(stream_data) +``` + +【参数】 + +| 参数名称 | 描述 | 输入/输出 | +|----------|-----|----------| +| stream_data | 编码数据 | 输入 | + +【返回值】 + +| 返回值 | 描述 | +|--------|------| +| 0 | 成功 | +| 非0 | 失败 | + +【注意】 + +无 + +【举例】 + +无 + +### Decoder.stop + +【描述】 + +释放一帧码流buffer + +【语法】 + +```python +decoder = Decoder(K_PT_H264) +decoder.stop() +``` + +【参数】 + +无 + +【返回值】 + +| 返回值 | 描述 | +|--------|------| +| 0 | 成功 | +| 非0 | 失败 | + +【注意】 + +无 + +【举例】 + +无 + +## 3. 数据结构描述 + +### StreamData + +【说明】 + +码流结构体 + +【定义】 + +```python +class StreamData: + def __init__(self): + self.data + self.pts +``` + +【成员】 + +| 成员名称 | 描述 | +|---------|------| +| data | 码流数据 | +| pts | 时间戳 | + +【注意事项】 + +无 + +## 4. 示例程序 + +### 例程1 + +```python +from media.media import * +from mpp.payload_struct import * +import media.vdecoder as vdecoder +from media.display import * + +def vdec_vo_test(): + #init display + display.init(LT9611_1920X1080_30FPS) + display.set_plane(400, 200, 1280, 720, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + + #init vdec + vdec = vdecoder.Decoder(K_PT_H265) + ret = media.buffer_init() + if ret: + print("buffer_init failed") + + vdec.create() + vdec.start() + + #bind vdec -> vo + meida_source = media_device(VIDEO_DECODE_MOD_ID, VDEC_DEV_ID, VDEC_CHN_ID_0) + meida_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(meida_source, meida_sink) + + #show vdec data + stream_data = StreamData() + while(1): + stream_data.data = get_one_frame_data()#get one frame + vdec.decode(stream_data) + + #deinit + vdec.stop() + media.destroy_link(meida_source, meida_sink) + vdec.destroy() + time.sleep(1) + display.deinit() + +vdec_vo_test() + +``` diff --git "a/zh/01_software/mpp/K230_CanMV_VENC\346\250\241\345\235\227API\346\211\213\345\206\214.md" "b/zh/api/mpp/K230_CanMV_VENC\346\250\241\345\235\227API\346\211\213\345\206\214.md" old mode 100644 new mode 100755 similarity index 98% rename from "zh/01_software/mpp/K230_CanMV_VENC\346\250\241\345\235\227API\346\211\213\345\206\214.md" rename to "zh/api/mpp/K230_CanMV_VENC\346\250\241\345\235\227API\346\211\213\345\206\214.md" index 86bc54b..420223f --- "a/zh/01_software/mpp/K230_CanMV_VENC\346\250\241\345\235\227API\346\211\213\345\206\214.md" +++ "b/zh/api/mpp/K230_CanMV_VENC\346\250\241\345\235\227API\346\211\213\345\206\214.md" @@ -85,7 +85,7 @@ Encoder.Create(chn, chnAttr) | 非 0 | 失败 | 【注意】 -VENC最多支持4路编码,编码通道号取值范围[0, 3] +VENC最多支持4路编码,编码通道号取值范围[0, 3],其中第4路固定用于 IDE 图像传输,除非不调用 compress_for_ide ,不然建议只使用 [0, 2] 【举例】 diff --git "a/zh/api/mpp/K230_CanMV_\346\222\255\346\224\276\345\231\250\346\250\241\345\235\227API\346\211\213\345\206\214.md" "b/zh/api/mpp/K230_CanMV_\346\222\255\346\224\276\345\231\250\346\250\241\345\235\227API\346\211\213\345\206\214.md" new file mode 100755 index 0000000..7e44e73 --- /dev/null +++ "b/zh/api/mpp/K230_CanMV_\346\222\255\346\224\276\345\231\250\346\250\241\345\235\227API\346\211\213\345\206\214.md" @@ -0,0 +1,306 @@ +# K230 CanMV 播放器 模块API手册 + +![cover](../images/canaan-cover.png) + +版权所有©2023北京嘉楠捷思信息技术有限公司 + +
+ +## 免责声明 + +您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)及其关联公司的商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的正确性、可靠性、完整性、适销性、符合特定目的和不侵权提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导参考。 + +由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。 + +## 商标声明 + +![logo](../images/logo.png)、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。 + +**版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。** +非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。 + +
+ +## 目录 + +[TOC] + +## 前言 + +### 概述 + +本文档主要介绍K230_CanMV 播放器模块API的使用。 + +### 读者对象 + +本文档(本指南)主要适用于以下人员: + +- 技术支持工程师 +- 软件开发工程师 + +### 修订记录 + +| 文档版本号 | 修改说明 | 修改者 | 日期 | +| ---------- | -------- | ---------- | ---------- | +| V1.0 | 初版 | 孙小朋 | 2023-10-27 | + +## 1. 概述 + +此文档介绍K230_CanMV 播放器模块API,可播放mp4格式文件。支持音视频同时播放,音频支持g711a/u,视频支持H264/H265。 + +## 2. API描述 + +提供Player类,该类提供如下方法: + +### Player.load + +【描述】 + +加载文件,当前版本只支持mp4格式文件 + +【语法】 + +```python +player=Player() +player.load("test.mp4") +``` + +【参数】 + +| 参数名称 | 描述 | 输入/输出 | +|-----------------|-------------------------------|-----------| +| filename | 文件名称 | 输入 | + +【返回值】 + +| 返回值 | 描述 | +|---------|---------------------------------| +| 0 | 成功 | +| 非 0 | 失败 | + +【注意】 + +当前版本只支持播放mp4格式文件 + +【举例】 + +无 + +【相关主题】 + +无 + +### Player.start + +【描述】 + +开始播放 + +【语法】 + +```python +player=Player() +player.start() +``` + +【参数】 + +无 + +【返回值】 + +| 返回值 | 描述 | +|--------|------| +| 0 | 成功 | +| 非0 | 失败 | + +【注意】 + +无 + +【举例】 + +无 + +### Player.pause + +【描述】 + +暂停播放 + +【语法】 + +```python +player=Player() +player.pause() +``` + +【参数】 + +无 + +【返回值】 + +| 返回值 | 描述 | +|--------|-----| +| 0 | 成功 | +| 非0 | 失败 | + +【注意】 + +无 + +【举例】 + +无 + +### Player.resume + +【描述】 + +继续播放 + +【语法】 + +```python +player=Player() +player.resume() +``` + +【参数】 + +无 + +【返回值】 + +| 返回值 | 描述 | +|--------|------| +| 0 | 成功 | +| 非0 | 失败 | + +【注意】 + +无 + +【举例】 + +无 + +### Player.stop + +【描述】 + +停止播放 + +【语法】 + +```python +player=Player() +player.stop() +``` + +【参数】 + +无 + +【返回值】 + +| 返回值 | 描述 | +|--------|------| +| 0 | 成功 | +| 非0 | 失败 | + +【注意】 + +无 + +【举例】 + +无 + +### Player.set_event_callback + +【描述】 + +设置播放事件回调函数 + +【参数】 + +| 参数名称 | 描述 | 输入/输出 | +|-----------------|-------------------------------|-----------| +| callback | 回调函数名 | 输入 | + +【语法】 + +```python + +def player_event(event,data): + pass + +player=Player() +player.set_event_callback(callback=player_event) +``` + +【参数】 + +无 + +【返回值】 + +| 返回值 | 描述 | +|--------|------| +| 0 | 成功 | +| 非0 | 失败 | + +【注意】 + +无 + +【举例】 + +无 + +## 3. 数据结构描述 + +### playe_event_type + +【描述】 + +编码格式类型 + +【成员】 + +| 成员名称 | 描述 | +|---------|------| +| K_PLAYER_EVENT_EOF | 播放结束 | +| K_PLAYER_EVENT_PROGRESS| 播放进度 | + +## 4. 示例程序 + +### 例程1 + +```python +from media.player import * + +start_play = False +def player_event(event,data): + global start_play + if(event == K_PLAYER_EVENT_EOF): + start_play = False + +def play_mp4_test(filename): + global start_play + player=Player() + player.load(filename) + player.set_event_callback(player_event) + player.start() + start_play = True + + while(start_play): + time.sleep(0.1) + + player.stop() + print("play over") + +play_mp4_test("/sdcard/app/tests/test.mp4") +``` diff --git a/zh/01_software/mpp/images/canaan-cover.png b/zh/api/mpp/images/canaan-cover.png old mode 100644 new mode 100755 similarity index 100% rename from zh/01_software/mpp/images/canaan-cover.png rename to zh/api/mpp/images/canaan-cover.png diff --git a/zh/01_software/mpp/images/canaan-lable.png b/zh/api/mpp/images/canaan-lable.png old mode 100644 new mode 100755 similarity index 100% rename from zh/01_software/mpp/images/canaan-lable.png rename to zh/api/mpp/images/canaan-lable.png diff --git a/zh/01_software/mpp/images/k230-canmv-camera-top.png b/zh/api/mpp/images/k230-canmv-camera-top.png similarity index 100% rename from zh/01_software/mpp/images/k230-canmv-camera-top.png rename to zh/api/mpp/images/k230-canmv-camera-top.png diff --git a/zh/01_software/mpp/images/logo.png b/zh/api/mpp/images/logo.png similarity index 100% rename from zh/01_software/mpp/images/logo.png rename to zh/api/mpp/images/logo.png diff --git "a/zh/api/nncase_runtime/K230_CanMV_nncase_runtime_API\346\211\213\345\206\214.md" "b/zh/api/nncase_runtime/K230_CanMV_nncase_runtime_API\346\211\213\345\206\214.md" new file mode 100755 index 0000000..0e4a6b6 --- /dev/null +++ "b/zh/api/nncase_runtime/K230_CanMV_nncase_runtime_API\346\211\213\345\206\214.md" @@ -0,0 +1,524 @@ +# K230 CanMV nncase_runtime 模块API手册 + +![cover](../images/canaan-cover.png) + +版权所有©2023北京嘉楠捷思信息技术有限公司 + +
+ +## 免责声明 + +您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)及其关联公司的商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的正确性、可靠性、完整性、适销性、符合特定目的和不侵权提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导参考。 + +由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。 + +## 商标声明 + +![logo](../images/logo.png)、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。 + +**版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。** +非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。 + +
+ +## 目录 + +[toc] + +## 前言 + +### 概述 + +此文档介绍CanMV nncase_runtime模块,用于指导开发人员使用MicroPython调用KPU和AI2D模块。 + +### 读者对象 + +本文档(本指南)主要适用于以下人员: + +- 技术支持工程师 +- 软件开发工程师 + +### 缩略词定义 + +| 简称 | 说明 | +| ------------------- | ------------------------------------------- | +| nncase_runtime | k230 nncase runtime包,包含KPU模块和AI2D模块 | +| nncase_runtime.kpu | kpu模块 | +| nncase_runtime.ai2d | ai2d模块 | + +### 修订记录 + +| 文档版本号 | 修改说明 | 修改者 | 日期 | +| ---------- | -------- | ------ | ---------- | +| V1.0 | 初版 | 杨浩琪 | 2023-09-18 | + +## 1. 概述 + +此文档介绍CanMV nncase_runtime模块,用于指导开发人员使用MicroPython调用KPU和AI2D模块。 + +## 2. API描述 + +### 2.1 from_numpy + +【描述】 +从MicroPython中ulab.numpy创建runtime_tensor。 + +【语法】 + +```Python +runtime_tensor = nncase_runtime.from_numpy(ulab.numpy) +``` + +【参数】 + +| 参数名称 | 描述 | 输入/输出 | +| ---------- | --------- | --------- | +| ulab.numpy | numpy对象 | 输入 | + +【返回值】 + +| 返回值 | 描述 | +| -------------- | ---------------------------- | +| runtime_tensor | 返回创建好的runtime_tensor。 | +| 其他 | 失败,抛出C++异常。 | + +### 2.2 to_numpy + +【描述】 + +将runtime_tensor转为ulab.numpy。 + +【语法】 + +```Python +runtime_tensor = kpu.get_output_tensor(0) +result = runtime_tensor.to_numpy() +``` + +【参数】 + +无。 + +【返回值】 + +| 返回值 | 描述 | +| ---------- | ---------------------------------------- | +| ulab.numpy | 返回从runtime_tensor转换后的ulab.numpy。 | +| 其他 | 失败 | + +### 2.3 nncase_runtime.kpu + +kpu模块提供调用KPU硬件来完成开发板上推理神经网络模型的基础函数,主要包括加载模型,设置输入数据,执行推理,获取输出结果等功能。 + +#### 2.3.1 load_kmodel + +【描述】 + +加载编译生成的kmodel格式的神经网络。 + +【语法】 + +```Python +load_kmodel(read_bin) +load_kmodel(path) +``` + +【参数】 + +| 参数名称 | 描述 | 输入/输出 | +| -------- | ------------------ | --------- | +| read_bin | kmodel的二进制内容 | 输入 | +| path | kmodel的路径 | 输入 | + +【返回值】 + +| 返回值 | 描述 | +| ------ | ------------------- | +| 无 | 成功。 | +| 其他 | 失败,抛出C++异常。 | + +#### 2.3.2 set_input_tensor + +【描述】 + +设置kmodel推理时的runtime_tensor。 + +【语法】 + +```Python +set_input_tensor(index, runtime_tensor) +``` + +【参数】 + +| 参数名称 | 描述 | 输入/输出 | +| -------------- | ------------------ | --------- | +| index | kmodel的输入索引。 | 输入 | +| runtime_tensor | 包含输入数据信息。 | 输入 | + +【返回值】 + +| 返回值 | 描述 | +| ------ | ------------------- | +| 无 | 成功。 | +| 其他 | 失败,抛出C++异常。 | + +#### 2.3.3 get_input_tensor + +【描述】 + +获取kmodel推理时的runtime_tensor。 + +【语法】 + +```Python +get_input_tensor(index) +``` + +【参数】 + +| 参数名称 | 描述 | 输入/输出 | +| -------- | ------------------ | --------- | +| index | kmodel的输入索引。 | 输入 | + +【返回值】 + +| 返回值 | 描述 | +| -------------- | ------------------- | +| runtime_tensor | 包含输入数据信息。 | +| 其他 | 失败,抛出C++异常。 | + +#### 2.3.4 set_output_tensor + +【描述】 + +设置kmodel推理后的输出结果。 + +【语法】 + +```Python +set_output_tensor(index, runtime_tensor) +``` + +【参数】 + +| 参数名称 | 描述 | 输入/输出 | +| -------------- | ------------------ | --------- | +| index | kmodel的输出索引。 | 输入 | +| runtime_tensor | 输出结果。 | 输入 | + +【返回值】 + +| 返回值 | 描述 | +| ------ | ------------------- | +| 无 | 成功。 | +| 其他 | 失败,抛出C++异常。 | + +#### 2.3.5 get_output_tensor + +【描述】 + +获取kmodel推理后的输出结果。 + +【语法】 + +```Python +get_output_tensor(index) +``` + +【参数】 + +| 参数名称 | 描述 | 输入/输出 | +| -------- | ------------------ | --------- | +| index | kmodel的输出索引。 | 输入 | + +【返回值】 + +| 返回值 | 描述 | +| :------------- | ----------------------------- | +| runtime_tensor | 获取第index个runtime_tensor。 | +| 其他 | 失败,抛出C++异常。 | + +#### 2.3.6 run + +【描述】 + +启动kmodel推理 + +【语法】 + +```Python +run() +``` + +【返回值】 + +| 返回值 | 描述 | +| :----- | ------------------- | +| 无 | 推理成功 | +| 其他 | 失败,抛出C++异常。 | + +#### 2.3.7 inputs_size + +【描述】 + +获取kmodel的输入个数。 + +【语法】 + +```Python +inputs_size() +``` + +【返回值】 + +| 返回值 | 描述 | +| :----- | ------------------- | +| size_t | kmodel的输入个数。 | +| 其他 | 失败,抛出C++异常。 | + +#### 2.3.8 outputs_size + +【描述】 + +获取kmodel的输出个数。 + +【语法】 + +```Python +outputs_size() +``` + +【返回值】 + +| 返回值 | 描述 | +| :----- | ------------------- | +| size_t | kmodel的输出个数。 | +| 其他 | 失败,抛出C++异常。 | + +#### 2.3.9 get_input_desc + +【描述】 + +获取指定索引的输入的描述信息。 + +【语法】 + +```Python +get_input_desc(index) +``` + +【参数】 + +| 参数名称 | 描述 | 输入/输出 | +| -------- | ------------------ | --------- | +| index | kmodel的输入索引。 | 输入 | + +【返回值】 + +| 返回值 | 描述 | +| :---------- | -------------------------------------------------- | +| MemoryRange | 第index个输入信息:`dtype`, `start`, `size`。 | + +#### 2.3.10 get_output_desc + +【描述】 + +获取指定索引的输出的描述信息。 + +【语法】 + +```Python +get_output_desc(index) +``` + +【参数】 + +| 参数名称 | 描述 | 输入/输出 | +| -------- | ------------------ | --------- | +| index | kmodel的输入索引。 | 输入 | + +【返回值】 + +| 返回值 | 描述 | +| :---------- | -------------------------------------------------- | +| MemoryRange | 第index个输出信息:`dtype`, `start`, `size`。 | + +### 2.4 nncase_runtime.ai2d + +#### 2.4.1 build + +【描述】 + +ai2d_builder的构造函数. + +【语法】 + +```Python +build(input_shape, output_shape) +``` + +【参数】 + +| 名称 | 描述 | +| ------------ | -------- | +| input_shape | 输入形状 | +| output_shape | 输出形状 | + +【返回值 】 + +| 返回值 | 描述 | +| :----------- | ---------------------------- | +| ai2d_builder | 返回ai2d_builder,用于执行。 | +| 其他 | 失败,抛出C++异常。 | + +#### 2.4.2 run + +配置寄存器并启动AI2D的计算. + +【定义】 + +```Python +ai2d_builder.run(input_tensor, output_tensor) +``` + +【参数】 + +| 名称 | 描述 | +| ------------- | ---------- | +| input_tensor | 输入tensor | +| output_tensor | 输出tensor | + +【返回值】 + +| 返回值 | 描述 | +| ------ | ------------------- | +| 无 | 成功。 | +| 其他 | 失败,抛出C++异常。 | + +#### 2.4.3 set_dtype + +【描述】 + +用于设置AI2D计算过程中的数据类型. + +【定义】 + +```Python +set_dtype(src_format, dst_format, src_type, dst_type) +``` + +【参数】 + +| 名称 | 类型 | 描述 | +| ---------- | ----------- | ------------ | +| src_format | ai2d_format | 输入数据格式 | +| dst_format | ai2d_format | 输出数据格式 | +| src_type | datatype_t | 输入数据类型 | +| dst_type | datatype_t | 输出数据类型 | + +#### 2.4.4 set_crop_param + +【描述】 + +用于配置crop相关的参数. + +【定义】 + +```Python +set_crop_param(crop_flag, start_x, start_y, width, height) +``` + +【参数】 + +| 名称 | 类型 | 描述 | +| --------- | ---- | ------------------ | +| crop_flag | bool | 是否开启crop功能 | +| start_x | int | 宽度方向的起始像素 | +| start_y | int | 高度方向的起始像素 | +| width | int | 宽度方向的crop长度 | +| height | int | 高度方向的crop长度 | + +#### 2.4.5 set_shift_param + +【描述】 + +用于配置shift相关的参数. + +【定义】 + +```Python +set_shift_param(shift_flag, shift_val) +``` + +【参数】 + +| 名称 | 类型 | 描述 | +| ---------- | ---- | ----------------- | +| shift_flag | bool | 是否开启shift功能 | +| shift_val | int | 右移的比特数 | + +#### 2.4.6 set_pad_param + +【描述】 + +用于配置pad相关的参数. + +【定义】 + +```Python +set_pad_param(pad_flag, paddings, pad_mode, pad_val) +``` + +【参数】 + +| 名称 | 类型 | 描述 | +| -------- | ---- | --------------------------------------------------------------------------------------------- | +| pad_flag | bool | 是否开启pad功能 | +| paddings | list | 各个维度的padding, size=8,分别表示dim0到dim4的前后padding的个数,其中dim0/dim1固定配置{0, 0} | +| pad_mode | int | 只支持pad constant,配置0即可 | +| pad_val | list | 每个channel的padding value | + +#### 2.4.7 set_resize_param + +【描述】 + +用于配置resize相关的参数. + +【定义】 + +```Python +set_resize_param(resize_flag, interp_method, interp_mode) +``` + +【参数】 + +| 名称 | 类型 | 描述 | +| ------------- | ------------------ | ------------------ | +| resize_flag | bool | 是否开启resize功能 | +| interp_method | ai2d_interp_method | resize插值方法 | +| interp_mode | ai2d_interp_mode | resize模式 | + +#### 2.4.8 set_affine_param + +【描述】 + +用于配置affine相关的参数. + +【定义】 + +```Python +set_affine_param(affine_flag, interp_method, cord_round, bound_ind, bound_val, bound_smooth, M) +``` + +【参数】 + +| 名称 | 类型 | 描述 | +| ------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| affine_flag | bool | 是否开启affine功能 | +| interp_method | ai2d_interp_method | Affine采用的插值方法 | +| cord_round | uint32_t | 整数边界0或者1 | +| bound_ind | uint32_t | 边界像素模式0或者1 | +| bound_val | uint32_t | 边界填充值 | +| bound_smooth | uint32_t | 边界平滑0或者1 | +| M | list | 仿射变换矩阵对应的vector,仿射变换为Y=\[a_0, a_1; a_2, a_3\] \cdot X + \[b_0, b_1\] $, 则 M=[a_0,a_1,b_0,a_2,a_3,b_1 ] | diff --git "a/zh/example/K230_CanMV_AI_Demo\347\244\272\344\276\213\350\257\264\346\230\216.md" "b/zh/example/K230_CanMV_AI_Demo\347\244\272\344\276\213\350\257\264\346\230\216.md" new file mode 100755 index 0000000..98ef584 --- /dev/null +++ "b/zh/example/K230_CanMV_AI_Demo\347\244\272\344\276\213\350\257\264\346\230\216.md" @@ -0,0 +1,9859 @@ +# K230 CanMV AI Demo示例说明 + +![cover](images/canaan-cover.png) + +版权所有©2023北京嘉楠捷思信息技术有限公司 + +
+ +## 免责声明 + +您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)及其关联公司的商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的正确性、可靠性、完整性、适销性、符合特定目的和不侵权提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导参考。 + +由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。 + +## 商标声明 + +![logo](images/logo.png)、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。 + +**版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。** +非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。 + +
+ +## 目录 + +[TOC] + +## 前言 + +### 概述 + +本文档主要介绍如何写AI Demo。 + +### 读者对象 + +本文档(本指南)主要适用于以下人员: + +- 技术支持工程师 +- 软件开发工程师 + +## 一、概述 + +本文档包括19个AI Demo,这些示例程序都实现从摄像头采集数据、kpu推理到显示器展示的流程,应用到了K230 CanMV 平台的多个硬件模块:AI2D,KPU,Camera,Display等。 + +这些AI Demo分为两种类型:单模型、多模型,涵盖物体、人脸、人手、人体、车牌、OCR等方向;参考该文档,k230用户可以更快上手K230 AI应用的开发,实现预期效果。 + +更多AI Demo后续即将解锁。 + +| 单模型示例 | 多模型示例 | +| ------------ | -------------- | +| 人脸检测 | 人脸关键点检测 | +| COCO目标检测 | 人脸识别 | +| yolov8-seg | 人脸姿态角 | +| 车牌检测 | 人脸解析 | +| OCR检测 | 车牌识别 | +| 手掌检测 | 石头剪刀布 | +| 人体检测 | OCR识别 | +| 人体姿态估计 | 手掌关键点检测 | +| KWS | 静态手势识别 | +| | 人脸mesh | + +## 二、AI Demo单模型示例解析 + +### 1.分模块解析 + +#### 1.1 模块引入 + +```python +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn #nncase运行时模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +from media.camera import * #摄像头模块 +from media.display import * #显示模块 +from media.media import * #软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +import aidemo #aidemo模块,封装ai demo相关后处理、画图操作 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time #时间统计 +import gc #垃圾回收模块 +``` + +| 模块 | 说明 | +| ---------------------- | ------------------------------------------------------------ | +| image(必选) | 图像模块,主要用于读取、图像绘制元素(框、点等)等操作 | +| media.camera(必选) | [摄像头模块](https://github.com/kendryte/k230_canmv_docs/blob/main/zh/01_software/mpp/K230_CanMV_Camera%E6%A8%A1%E5%9D%97API%E6%89%8B%E5%86%8C.md) | +| media.display (必选) | [显示模块](https://github.com/kendryte/k230_canmv_docs/blob/main/zh/01_software/mpp/K230_CanMV_Display%E6%A8%A1%E5%9D%97API%E6%89%8B%E5%86%8C.md) | +| media.media(必选) | [媒体软件抽象模块,主要封装媒体数据链路以及媒体缓冲区](https://github.com/kendryte/k230_canmv_docs/blob/main/zh/01_software/mpp/K230_CanMV_Media%E6%A8%A1%E5%9D%97API%E6%89%8B%E5%86%8C.md) | +| nncase_runtime(必选) | nncase运行时模块, 封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 | +| aidemo(可选) | 封装部分ai demo相关后处理、复杂画图操作 | +| aicube(可选) | 封装基于ai cube训练的检测分割等任务的后处理 | +| ulab.numpy (可选) | [类似python numpy操作,但也会有一些接口不同](https://micropython-ulab.readthedocs.io/en/latest/ ) | +| time(可选) | 时间统计 | +| gc(可选) | [垃圾回收模块](https://docs.micropython.org/en/latest/library/gc.html),自动回收 | + +#### 1.2 参数配置 + +不同模型(kmodel)根据自己需要设置参数信息,包括显示、AI原图、kmodel参数、文件配置、调试模式等。 + +```python +#********************for config.py******************** +# display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) # 显示宽度要求16位对齐 +DISPLAY_HEIGHT = 1080 + +# ai原图分辨率,sensor默认出图为16:9,若需不形变原图,最好按照16:9比例设置宽高 +OUT_RGB888P_WIDTH = ALIGN_UP(1024, 16) # ai原图宽度要求16位对齐 +OUT_RGB888P_HEIGH = 576 + +# kmodel相关参数设置 +# kmodel输入shape,NCHW,RGB +kmodel_input_shape = (1,3,320,320) +# ai原图padding +rgb_mean = [104,117,123] +# 其它kmodel参数 +...... + +# 文件配置 +root_dir = '/sdcard/app/tests/' +kmodel_file = root_dir + 'kmodel/face_detection_320.kmodel' # kmodel路径 +anchors_path = root_dir + 'utils/prior_data_320.bin' # kmodel anchor +# 调试模型,0:不调试,>0:打印对应级别调试信息 +debug_mode = 0 +``` + +#### 1.3 时间统计工具 + +ScopedTiming 类是一个用来测量代码块执行时间的上下文管理器。上下文管理器通过定义包含 `__enter__` 和 `__exit__` 方法的类来创建。当在 with 语句中使用该类的实例时,`__enter__` 在进入 with 块时被调用,`__exit__` 在离开时被调用。 + +```python +#********************for scoped_timing.py******************** +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") +``` + +**使用示例:** + +```python +import ulab.numpy as np +debug_mode = 1 +a = np.ones(10**6, dtype=np.float) +with ScopedTiming("kpu_pre_process",debug_mode > 0): + a = a * 1.000001 + 0.000001 +``` + +#### 1.4 nncase使用:ai2d + +ai2d主要是用于对输入原图预处理进行硬件加速,然后把预处理结果喂给kmodel。 + +##### (1)ai2d基础用法示例 + +```python +import nncase_runtime as nn +# 注:此示例仅为基础用法,其它demo可根据实际情况调整 +def get_pad_one_side_param(): + # 右padding或下padding,获取padding参数 + dst_w = kmodel_input_shape[3] # kmodel输入宽(w) + dst_h = kmodel_input_shape[2] # kmodel输入高(h) + + # OUT_RGB888P_WIDTH:原图宽(w) + # OUT_RGB888P_HEIGH:原图高(h) + # 计算最小的缩放比例,等比例缩放 + ratio_w = dst_w / OUT_RGB888P_WIDTH + ratio_h = dst_h / OUT_RGB888P_HEIGH + if ratio_w < ratio_h: + ratio = ratio_w + else: + ratio = ratio_h + # 计算经过缩放后的新宽和新高 + new_w = (int)(ratio * OUT_RGB888P_WIDTH) + new_h = (int)(ratio * OUT_RGB888P_HEIGH) + + # 计算需要添加的padding,以使得kmodel输入的宽高和原图一致 + dw = (dst_w - new_w) / 2 + dh = (dst_h - new_h) / 2 + # 四舍五入,确保padding是整数 + top = (int)(round(0)) + bottom = (int)(round(dh * 2 + 0.1)) + left = (int)(round(0)) + right = (int)(round(dw * 2 - 0.1)) + return [0, 0, 0, 0, top, bottom, left, right] + +def ai2d_demo(rgb888p_img): + # 初始化AI2D模块 + # rgb888p_img为Image对象 + with ScopedTiming("ai2d_init",debug_mode > 0): + # (1)创建ai2d实例 + ai2d = nn.ai2d() + # (2)设置ai2d参数 + # 设置ai2d输入、输出格式和数据类型 + ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + # 设置padding参数 + ai2d.set_pad_param(True, get_pad_one_side_param(), 0, rgb_mean) + # 设置resize参数 + ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + + # (3)根据ai2d参数构建ai2d_builder + global ai2d_builder + ai2d_builder = ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], kmodel_input_shape) + + # (4)创建ai2d输出,用于保存ai2d输出结果 + global ai2d_output_tensor + data = np.ones(kmodel_input_shape, dtype=np.uint8) + ai2d_output_tensor = nn.from_numpy(data) + + # (5)创建ai2d输入对象,并将对象从numpy转换为tensor + ai2d_input = rgb888p_img.to_numpy_ref() + ai2d_input_tensor = nn.from_numpy(ai2d_input) + + # (6)根据输入,ai2d参数,运行得到ai2d输出,将结果保存到ai2d_output_tensor中 + ai2d_builder.run(ai2d_input_tensor, ai2d_output_tensor) + # dump ai2d结果查看,查看结果是否正确(此时保存格式为nn.ai2d_format.NCHW_FMT,NCHW、RGB格式,需要转换为图片格式后再查看) + #ai2d_out_data = fp_ai2d_output_tensor.to_numpy() # + #with open("/sdcard/app/ai2d_out.bin", "wb") as file: + #file.write(ai2d_out_data.tobytes()) + + # (7)删除 ai2d、ai2d_input_tensor、ai2d_output_tensor、ai2d_builder 变量,释放对它所引用对象的内存引用 + del ai2d + del ai2d_input_tensor + del ai2d_output_tensor + del ai2d_builder +``` + +##### (2)ai2d示例用法一:ai2d参数固定 + +**ai2d参数固定**:针对视频流的不同帧,ai2d参数固定使用示例 + +eg:人脸检测模型,对于模型输入,需要将原图进行预处理(padding、resize)之后,然后再喂给kmodel;若是原图从sensor中取出,分辨率固定,则padding的上下左右位置是固定的,此时可以使用以下模板对原图进行预处理 + +```python +import nncase_runtime as nn +#ai2d:ai2d实例 +#ai2d_input_tensor:ai2d输入 +#ai2d_output_tensor:ai2d输出 +#ai2d_builder:根据ai2d参数,构建的ai2d_builder对象 +global ai2d,ai2d_input_tensor,ai2d_output_tensor,ai2d_builder + +def get_pad_one_side_param(): + # 右padding或下padding,获取padding参数 + ..... + return [0, 0, 0, 0, top, bottom, left, right] + +def ai2d_init(): + # 初始化AI2D模块 + with ScopedTiming("ai2d_init",debug_mode > 0): + global ai2d + # (1)创建ai2d实例 + ai2d = nn.ai2d() + # (2)设置ai2d参数 + # 设置ai2d输入、输出格式和数据类型 + ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + # 设置padding参数 + ai2d.set_pad_param(True, get_pad_one_side_param(), 0, rgb_mean) + # 设置resize参数 + ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + + # (3)创建ai2d输出,用于保存ai2d输出结果 + global ai2d_output_tensor + data = np.ones(kmodel_input_shape, dtype=np.uint8) + ai2d_output_tensor = nn.from_numpy(data) + + # (4)根据ai2d参数构建ai2d_builder,因为ai2d的参数不变,因此只需创建一次ai2d_builder + global ai2d_builder + ai2d_builder = ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], kmodel_input_shape) + + +def ai2d_run(rgb888p_img): + with ScopedTiming("ai2d_run",debug_mode > 0): + global ai2d_input_tensor,ai2d_output_tensor + # (1)创建ai2d输入对象,并将对象从numpy转换为tensor + ai2d_input = rgb888p_img.to_numpy_ref() + ai2d_input_tensor = nn.from_numpy(ai2d_input) + + # (2)根据输入,ai2d参数,运行得到ai2d输出,将结果保存到ai2d_output_tensor中 + ai2d_builder.run(ai2d_input_tensor, ai2d_output_tensor) + +def ai2d_release(): + with ScopedTiming("ai2d_release",debug_mode > 0): + global ai2d_input_tensor + # 删除 ai2d_input_tensor 变量,释放对它所引用对象的内存引用 + del ai2d_input_tensor +``` + +**使用示例:** + +```python +ai2d_init() # ai2d初始化 +while True: + rgb888p_img = camera_read(CAM_DEV_ID_0) # 从sensor拿到一帧图像 + ai2d_run(rgb888p_img) # 对sensor原图像预处理 + ai2d_release() # 释放ai2d_input_tensor,因为每帧原图不同,ai2d_input_tensor指向的对象都会改变,所以每次都需释放内存 +...... +global ai2d,ai2d_output_tensor,ai2d_builder #只需释放一次 +del ai2d # 释放ai2d,因为ai2d指向的对象是固定的 +del ai2d_output_tensor # 释放ai2d_output_tensor,因为ai2d_output_tensor指向的对象是固定的 +del ai2d_builder # 释放ai2d_builder,因为ai2d的参数未变,ai2d_builder指向的对象是固定的 +``` + +##### (3)ai2d示例用法二:ai2d参数不固定 + +**ai2d参数不固定**:针对视频流的不同帧,ai2d参数实时变化 + +eg:人脸关键点检测模型,对于模型输入,需要将原图进行预处理(affine)之后,然后再喂给kmodel;即使原图从sensor中取出,分辨率固定,但是affine的参数是实时改变的,此时可以使用以下模板对原图进行预处理。 + +```python +import nncase_runtime as nn +# fld_ai2d:人脸关键点ai2d实例 +# fld_ai2d_input_tensor:人脸关键点ai2d输入 +# fld_ai2d_output_tensor:人脸关键点ai2d输出 +# fld_ai2d_builder:根据人脸关键点ai2d参数,构建的人脸关键点ai2d_builder对象 +global fld_ai2d,fld_ai2d_input_tensor,fld_ai2d_output_tensor,fld_ai2d_builder +# affine参数 +global matrix_dst + +def get_affine_matrix(bbox): + # 根据人脸检测框获取仿射矩阵,用于将边界框映射到模型输入空间 + with ScopedTiming("get_affine_matrix", debug_mode > 1): + ...... + return matrix_dst + +def fld_ai2d_init(): + with ScopedTiming("fld_ai2d_init",debug_mode > 0): + #for face landmark + global fld_ai2d + # (1)创建人脸关键点ai2d对象 + fld_ai2d = nn.ai2d() + + global fld_ai2d_output_tensor + # (2)创建人脸关键点ai2d_output_tensor对象 + data = np.ones(fld_kmodel_input_shape, dtype=np.uint8) + fld_ai2d_output_tensor = nn.from_numpy(data) + +def fld_ai2d_run(rgb888p_img,det): + # 人脸关键点ai2d运行,rgb888p_img是Image对象,det为人脸检测框 + with ScopedTiming("fld_ai2d_run",debug_mode > 0): + global fld_ai2d,fld_ai2d_input_tensor,fld_ai2d_output_tensor + # (1)创建ai2d_input_tensor + # Image对象转换为numpy对象 + ai2d_input = rgb888p_img.to_numpy_ref() + # 将numpy对象转换为ai2d_tensor + fld_ai2d_input_tensor = nn.from_numpy(ai2d_input) + + # (2)设置ai2d参数 + # 设置ai2d输入、输出格式、数据类型 + fld_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + global matrix_dst + # 根据检测框获取affine参数 + matrix_dst = get_affine_matrix(det) + affine_matrix = [matrix_dst[0][0],matrix_dst[0][1],matrix_dst[0][2], + matrix_dst[1][0],matrix_dst[1][1],matrix_dst[1][2]] + # 设置affine参数 + fld_ai2d.set_affine_param(True,nn.interp_method.cv2_bilinear,0, 0, 127, 1,affine_matrix) + + global fld_ai2d_builder + # (3)根据新的ai2d affine参数,创建新的ai2d_builder对象 + fld_ai2d_builder = fld_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], fld_kmodel_input_shape) + # (4)ai2d_builder运行,将结果保存到fld_ai2d_output_tensor + fld_ai2d_builder.run(fld_ai2d_input_tensor, fld_ai2d_output_tensor) + +def fld_ai2d_release(): + with ScopedTiming("fld_ai2d_release",debug_mode > 0): + global fld_ai2d_input_tensor,fld_ai2d_builder + del fld_ai2d_input_tensor #删除fld_ai2d_input_tensor变量,释放对它所引用对象的内存引用 + del fld_ai2d_builder #删除fld_ai2d_builder变量,释放对它所引用对象的内存引用 +``` + +**使用示例:** + +```python +# ************main************ +fld_ai2d_init() # ai2d初始化 +while True: + rgb888p_img = camera_read(CAM_DEV_ID_0) # 从sensor拿到一帧图像 + fld_ai2d_run(rgb888p_img,det) # 根据det,对sensor原图预处理 + fld_ai2d_release() # 释放ai2d_input_tensor、ai2d_builder,因为每帧原图不同,ai2d_input_tensor指向的对象都会改变,所以每次都需释放内存;因为ai2d的参数实时改变,ai2d_builder对象需要每次创建,也需要每次都释放内存 +...... +global fld_ai2d,fld_ai2d_output_tensor #只需释放一次 +del fld_ai2d # 释放fld_ai2d,因为ai2d指向的对象是固定的 +del fld_ai2d_output_tensor # 释放fld_ai2d_output_tensor,因为fld_ai2d_output_tensor指向的对象是固定的 +``` + +#### 1.5 nncase使用:kpu + +##### (1)kpu基础用法 + +```python +import nncase_runtime as nn + +# (1)初始化kpu对象 +kpu_obj = nn.kpu() +# (2)加载kmodel +kpu_obj.load_kmodel(kmodel_file) + +# (3)设置kpu输入 +kmodel_input_shape = (1,3,320,320) +data = np.ones(kmodel_input_shape, dtype=np.uint8) +kmodel_input_tensor = nn.from_numpy(data) +kpu_obj.set_input_tensor(0, kmodel_input_tensor) + +# (4)kpu运行 +kpu_obj.run() + +# (5)获取kpu模型输出 +results = [] +for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + del data #tensor对象用完之后释放内存 + results.append(result) + +#(6)kpu后处理 +...... + +# (7)释放kpu对象 +del kpu_obj +``` + +##### (2)kpu示例用法:kpu配合ai2d使用 + +```python +import nncase_runtime as nn +global ai2d,ai2d_input_tensor,ai2d_output_tensor,ai2d_builder #ai2d相关对象 +global current_kmodel_obj #当前kpu对象 + +def kpu_init(kmodel_file): + # 初始化kpu对象,并加载kmodel + with ScopedTiming("kpu_init",debug_mode > 0): + # (1)初始化kpu对象 + kpu_obj = nn.kpu() + # (2)加载kmodel + kpu_obj.load_kmodel(kmodel_file) + # (3)ai2d初始化,模型输入需要预处理的情况下,kpu需要配合ai2d使用 + ai2d_init() + return kpu_obj + +def kpu_pre_process(rgb888p_img): + # kpu预处理,rgb888p_img是Image对象,原图 + # (1)ai2d运行,对原图进行预处理 + ai2d_run(rgb888p_img) + with ScopedTiming("kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,ai2d_output_tensor + # (2)将ai2d输出tensor设置为kpu模型输入 + current_kmodel_obj.set_input_tensor(0, ai2d_output_tensor) + +def kpu_get_output(): + # 获取kpu输出 + with ScopedTiming("kpu_get_output",debug_mode > 0): + global current_kmodel_obj + # 获取kpu输出,将输出转换为numpy格式,以便进行后处理 + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + del data #tensor对象用完之后释放内存 + results.append(result) + return results + +def kpu_run(kpu_obj,rgb888p_img): + # kpu推理运行 + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)kpu预处理 + kpu_pre_process(rgb888p_img) + with ScopedTiming("kpu_run",debug_mode > 0): + # (2)kpu运行 + kpu_obj.run() + # (3)ai2d释放 + ai2d_release() + # (4)获取模型输出 + results = kpu_get_output() + # (5)kpu后处理,获取检测结果 + with ScopedTiming("kpu_post",debug_mode > 0): + post_ret = aidemo.face_det_post_process(confidence_threshold,nms_threshold,kmodel_input_shape[2],prior_data,[OUT_RGB888P_WIDTH,OUT_RGB888P_HEIGH],results) + + # (6)返回人脸检测框 + if len(post_ret)==0: + return post_ret + else: + return post_ret[0] + +# kpu释放 +def kpu_deinit(kpu_obj): + with ScopedTiming("kpu_deinit",debug_mode > 0): + global ai2d,ai2d_output_tensor + del kpu_obj #删除kpu_obj变量,释放对它所引用对象的内存引用 + del ai2d #删除ai2d变量,释放对它所引用对象的内存引用 + del ai2d_output_tensor #删除ai2d_output_tensor变量,释放对它所引用对象的内存引用 +``` + +使用示例: + +```python +kmodel_file = "/sdcard/app/kmodel/face_detection_320.kmodel" +fd_kmodel = kpu_init(kmodel_file) +while True: + rgb888p_img = camera_read(CAM_DEV_ID_0) # 从sensor拿到一帧图像 + dets = kpu_run(fd_kmodel,rgb888p_img) # kmodel推理 + ...... +...... +kpu_deinit(fd_kmodel) # 释放kmodel +``` + +#### 1.6 媒体使用 + +##### 1.6.1 camera + +```python +from media.camera import * +DISPLAY_WIDTH = ALIGN_UP(1920, 16) +DISPLAY_HEIGHT = 1080 + +OUT_RGB888P_WIDTH = ALIGN_UP(1024, 16) +OUT_RGB888P_HEIGH = 576 + +def camera_init(dev_id): + # 根据设备id初始化camera + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # 设置camera的两路输出,一路输出用于显示,一路输出用于ai + + # (1)设置显示输出 + # 设置指定设备id的chn0的输出宽高 + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + # 设置指定设备id的chn0的输出格式为yuv420sp + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # (2)设置AI输出 + # 设置指定设备id的chn2的输出宽高 + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + # 设置指定设备id的chn2的输出格式为rgb88planar + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +def camera_start(dev_id): + # 启动sensor + camera.start_stream(dev_id) + +def camera_read(dev_id): + # 读取指定设备chn2的一帧图像,即获取一帧AI原图 + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +def camera_release_image(dev_id,rgb888p_img): + # 释放指定设备chn2一帧图像 + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +def camera_stop(dev_id): + # 释放sensor + camera.stop_stream(dev_id) +``` + +**使用示例:** + +```python +from media.camera import * + +# 初始化camera 0 +camera_init(CAM_DEV_ID_0) +......(camera_start还要配合其它操作,稍后在media模块介绍) +# 启动sensor +camera_start(CAM_DEV_ID_0) +time.sleep(5) +rgb888p_img = None +while True: + # 读取一帧图像 + rgb888p_img = camera_read(CAM_DEV_ID_0) + if rgb888p_img == -1: + # 若是未成功获取图像 + print("face_detect_test, capture_image failed") + # 释放当前图像 + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + ....... + # 释放当前图像 + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None +``` + +##### 1.6.2 display + +```python +from media.display import * +# draw_img:用于画图 +# osd_img:用于显示 +global draw_img,osd_img + +#for display +def display_init(): + # 使用hdmi用于显示 + display.init(LT9611_1920X1080_30FPS) + # 设置显示宽高、格式等 + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +def display_deinit(): + # 释放与显示相关的资源 + display.deinit() + +def display_draw(dets): + # 将检测框画到显示上 + with ScopedTiming("display_draw",debug_mode >0): + global draw_img,osd_img + if dets: + # 清空draw_img + draw_img.clear() + + # 画检测框 + for det in dets: + x, y, w, h = map(lambda x: int(round(x, 0)), det[:4]) + x = x * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + y = y * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + w = w * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + h = h * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH + # 先将框画到draw_img,argb + draw_img.draw_rectangle(x,y, w, h, color=(255, 255, 0, 255)) + # 将draw_img拷贝到osd_img + draw_img.copy_to(osd_img) + # 将osd_img显示到hdmi上 + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + # 清空draw_img + draw_img.clear() + # 将draw_img拷贝到osd_img + draw_img.copy_to(osd_img) + # 将透明图显示到hdmi上 + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) +``` + +**使用示例:** + +```python +from media.display import * +# 显示初始化 +display_init() +while True: + ...... + dets = kpu_run(kpu_face_detect,rgb888p_img) + # 将检测框画到显示屏幕 + display_draw(dets) + ...... +# 显示资源释放 +display_deinit() +``` + +##### 1.6.3 media + +```python +from media.media import * + +global buffer,media_source,media_sink #for media +def media_init(): + # (1)配置媒体缓冲区 + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + ret = media.buffer_config(config) + + # (2)创建由参数media_source和media_sink指定的媒体链路,链路创建成功后,数据流会自动从media_source流入media_sink,无需用户干预 + global media_source, media_sink + # 创建指向指定sensor id,chn0的source + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + # 创建指向指定显示的sink + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + # 创建子sensor的chn0的输出,到指定显示的链路 + media.create_link(media_source, media_sink) + + # (3)初始化K230 CanMV平台媒体缓冲区 + ret = media.buffer_init() + if ret: + return ret + + global buffer, draw_img, osd_img + # (4)构建用于画图的对象 + # 使用media模块构建osd_image内存,用于显示 + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 创建用于画框、画点的Image + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_MPGC) + # 用于画框、画点结果,防止画的过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +def media_deinit(): + # 释放media资源 + global buffer,media_source, media_sink + # (1)释放buffer + media.release_buffer(buffer) + # (2)销毁已经创建的媒体链路 + media.destroy_link(media_source, media_sink) + + # (3)去初始化K230 CanMV平台媒体缓冲区 + ret = media.buffer_deinit() + return ret +``` + +**使用示例:** + +```python +# camera初始化 +camera_init(CAM_DEV_ID_0) +# 显示初始化 +display_init() + +rgb888p_img = None +try: + ret = media_init() #媒体初始化(注:媒体初始化必须在camera_start之前,确保media缓冲区已配置完全) + if ret: + print("face_detect_test, buffer init failed") + return ret + + camera_start(CAM_DEV_ID_0) # 启动camera + time.sleep(5) # sleep 5s保证camera启动完全,可以拿到正确的图像 + while True: + with ScopedTiming("total",1): + # (1)读取一帧图像 + rgb888p_img = camera_read(CAM_DEV_ID_0) + if rgb888p_img == -1: + # 若读取失败,则释放当前帧 + print("face_detect_test, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # for rgb888planar + if rgb888p_img.format() == image.RGBP888: + # (2)kpu推理,获取推理结果 + dets = kpu_run(kpu_face_detect,rgb888p_img) + # (3)将推理结果画到原图 + display_draw(dets) + + # (4)释放当前帧 + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None +except Exception as e: + print(f"An error occurred during buffer used: {e}") +finally: + # 注:无论程序是否正常停止,确保释放以下资源。保证下次的正确运行 + if rgb888p_img is not None: + #先release掉申请的内存,再stop camera + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + # 释放camera资源 + camera_stop(CAM_DEV_ID_0) + # 释放显示资源 + display_deinit() + # 释放kpu资源 + kpu_deinit(kpu_face_detect) + # 垃圾回收 + gc.collect() + time.sleep(1) + # 释放媒体资源 + ret = media_deinit() + if ret: + print("face_detect_test, buffer_deinit failed") + return ret +``` + +### 2.人脸检测 + +```python +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn #nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +from media.camera import * #摄像头模块 +from media.display import * #显示模块 +from media.media import * #软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +import aidemo #aidemo模块,封装ai demo相关后处理、画图操作 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time #时间统计 +import gc #垃圾回收模块 + +#********************for config.py******************** +# display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) # 显示宽度要求16位对齐 +DISPLAY_HEIGHT = 1080 + +# ai原图分辨率,sensor默认出图为16:9,若需不形变原图,最好按照16:9比例设置宽高 +OUT_RGB888P_WIDTH = ALIGN_UP(1920, 16) # ai原图宽度要求16位对齐 +OUT_RGB888P_HEIGH = 1080 + +# kmodel参数设置 +# kmodel输入shape +kmodel_input_shape = (1,3,320,320) +# ai原图padding +rgb_mean = [104,117,123] +# kmodel其它参数设置 +confidence_threshold = 0.5 +top_k = 5000 +nms_threshold = 0.2 +keep_top_k = 750 +vis_thres = 0.5 +variance = [0.1, 0.2] +anchor_len = 4200 +score_dim = 2 +det_dim = 4 +keypoint_dim = 10 + +# 文件配置 +# kmodel文件配置 +root_dir = '/sdcard/app/tests/' +kmodel_file = root_dir + 'kmodel/face_detection_320.kmodel' +# anchor文件配置 +anchors_path = root_dir + 'utils/prior_data_320.bin' +# 调试模型,0:不调试,>0:打印对应级别调试信息 +debug_mode = 0 + +#********************for scoped_timing.py******************** +# 时间统计类 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +#********************for ai_utils.py******************** +# 当前kmodel +global current_kmodel_obj +# ai2d: ai2d实例 +# ai2d_input_tensor: ai2d输入 +# ai2d_output_tensor:ai2d输出 +# ai2d_builder: 根据ai2d参数,构建的ai2d_builder对象 +global ai2d,ai2d_input_tensor,ai2d_output_tensor,ai2d_builder #for ai2d +print('anchors_path:',anchors_path) +# 读取anchor文件,为后处理做准备 +prior_data = np.fromfile(anchors_path, dtype=np.float) +prior_data = prior_data.reshape((anchor_len,det_dim)) + +def get_pad_one_side_param(): + # 右padding或下padding,获取padding参数 + dst_w = kmodel_input_shape[3] # kmodel输入宽(w) + dst_h = kmodel_input_shape[2] # kmodel输入高(h) + + # OUT_RGB888P_WIDTH:原图宽(w) + # OUT_RGB888P_HEIGH:原图高(h) + # 计算最小的缩放比例,等比例缩放 + ratio_w = dst_w / OUT_RGB888P_WIDTH + ratio_h = dst_h / OUT_RGB888P_HEIGH + if ratio_w < ratio_h: + ratio = ratio_w + else: + ratio = ratio_h + # 计算经过缩放后的新宽和新高 + new_w = (int)(ratio * OUT_RGB888P_WIDTH) + new_h = (int)(ratio * OUT_RGB888P_HEIGH) + + # 计算需要添加的padding,以使得kmodel输入的宽高和原图一致 + dw = (dst_w - new_w) / 2 + dh = (dst_h - new_h) / 2 + # 四舍五入,确保padding是整数 + top = (int)(round(0)) + bottom = (int)(round(dh * 2 + 0.1)) + left = (int)(round(0)) + right = (int)(round(dw * 2 - 0.1)) + return [0, 0, 0, 0, top, bottom, left, right] + +def ai2d_init(): + # 人脸检测模型ai2d初始化 + with ScopedTiming("ai2d_init",debug_mode > 0): + # (1)创建ai2d对象 + global ai2d + ai2d = nn.ai2d() + # (2)设置ai2d参数 + ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + ai2d.set_pad_param(True, get_pad_one_side_param(), 0, rgb_mean) + ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + + # (3)创建ai2d_output_tensor,用于保存ai2d输出 + global ai2d_output_tensor + data = np.ones(kmodel_input_shape, dtype=np.uint8) + ai2d_output_tensor = nn.from_numpy(data) + + # (4)ai2d_builder,根据ai2d参数、输入输出大小创建ai2d_builder对象 + global ai2d_builder + ai2d_builder = ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], kmodel_input_shape) + + +def ai2d_run(rgb888p_img): + # 对原图rgb888p_img进行预处理 + with ScopedTiming("ai2d_run",debug_mode > 0): + global ai2d_input_tensor,ai2d_output_tensor + # (1)根据原图构建ai2d_input_tensor对象 + ai2d_input = rgb888p_img.to_numpy_ref() + ai2d_input_tensor = nn.from_numpy(ai2d_input) + # (2)运行ai2d_builder,将结果保存到ai2d_output_tensor中 + ai2d_builder.run(ai2d_input_tensor, ai2d_output_tensor) + +def ai2d_release(): + # 释放ai2d_input_tensor + with ScopedTiming("ai2d_release",debug_mode > 0): + global ai2d_input_tensor + del ai2d_input_tensor + +def kpu_init(kmodel_file): + # 初始化kpu对象,并加载kmodel + with ScopedTiming("kpu_init",debug_mode > 0): + # 初始化kpu对象 + kpu_obj = nn.kpu() + # 加载kmodel + kpu_obj.load_kmodel(kmodel_file) + # 初始化ai2d + ai2d_init() + return kpu_obj + +def kpu_pre_process(rgb888p_img): + # 使用ai2d对原图进行预处理(padding,resize) + ai2d_run(rgb888p_img) + with ScopedTiming("kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,ai2d_output_tensor + # 将ai2d输出设置为kpu输入 + current_kmodel_obj.set_input_tensor(0, ai2d_output_tensor) + +def kpu_get_output(): + with ScopedTiming("kpu_get_output",debug_mode > 0): + global current_kmodel_obj + # 获取模型输出,并将结果转换为numpy,以便进行人脸检测后处理 + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + del data + results.append(result) + return results + +def kpu_run(kpu_obj,rgb888p_img): + # kpu推理 + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)原图预处理,并设置模型输入 + kpu_pre_process(rgb888p_img) + # (2)kpu推理 + with ScopedTiming("kpu_run",debug_mode > 0): + kpu_obj.run() + # (3)释放ai2d资源 + ai2d_release() + # (4)获取kpu输出 + results = kpu_get_output() + # (5)kpu结果后处理 + with ScopedTiming("kpu_post",debug_mode > 0): + post_ret = aidemo.face_det_post_process(confidence_threshold,nms_threshold,kmodel_input_shape[2],prior_data,[OUT_RGB888P_WIDTH,OUT_RGB888P_HEIGH],results) + + # (6)返回人脸检测框 + if len(post_ret)==0: + return post_ret + else: + return post_ret[0] + + +def kpu_deinit(kpu_obj): + # kpu释放 + with ScopedTiming("kpu_deinit",debug_mode > 0): + global ai2d,ai2d_output_tensor + del kpu_obj #删除kpu_obj变量,释放对它所引用对象的内存引用 + del ai2d #删除ai2d变量,释放对它所引用对象的内存引用 + del ai2d_output_tensor #删除ai2d_output_tensor变量,释放对它所引用对象的内存引用 + +#********************for media_utils.py******************** +global draw_img,osd_img #for display +global buffer,media_source,media_sink #for media + +# for display,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.2 +def display_init(): + # hdmi显示初始化 + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +def display_deinit(): + # 释放显示资源 + display.deinit() + +def display_draw(dets): + # hdmi画检测框 + with ScopedTiming("display_draw",debug_mode >0): + global draw_img,osd_img + if dets: + draw_img.clear() + for det in dets: + x, y, w, h = map(lambda x: int(round(x, 0)), det[:4]) + x = x * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + y = y * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + w = w * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + h = h * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH + draw_img.draw_rectangle(x,y, w, h, color=(255, 255, 0, 255), thickness = 2) + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + draw_img.clear() + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +#for camera,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.1 +def camera_init(dev_id): + # camera初始化 + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +def camera_start(dev_id): + # camera启动 + camera.start_stream(dev_id) + +def camera_read(dev_id): + # 读取一帧图像 + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +def camera_release_image(dev_id,rgb888p_img): + # 释放一帧图像 + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +def camera_stop(dev_id): + # 停止camera + camera.stop_stream(dev_id) + +#for media,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.3 +def media_init(): + # meida初始化 + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 用于画框 + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_MPGC) + # 用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +def media_deinit(): + # meida资源释放 + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + + +#********************for face_detect.py******************** +def face_detect_inference(): + print("face_detect_test start") + # kpu初始化 + kpu_face_detect = kpu_init(kmodel_file) + # camera初始化 + camera_init(CAM_DEV_ID_0) + # 显示初始化 + display_init() + + rgb888p_img = None + # 注意:将一定要将一下过程包在try中,用于保证程序停止后,资源释放完毕;确保下次程序仍能正常运行 + try: + # 注意:媒体初始化(注:媒体初始化必须在camera_start之前,确保media缓冲区已配置完全) + ret = media_init() + if ret: + print("face_detect_test, buffer init failed") + return ret + # 启动camera + camera_start(CAM_DEV_ID_0) + time.sleep(5) + while True: + with ScopedTiming("total",1): + # (1)读取一帧图像 + rgb888p_img = camera_read(CAM_DEV_ID_0) + # (2)若读取失败,释放当前帧 + if rgb888p_img == -1: + print("face_detect_test, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # (3)若读取成功,推理当前帧 + if rgb888p_img.format() == image.RGBP888: + # (3.1)推理当前图像,并获取检测结果 + dets = kpu_run(kpu_face_detect,rgb888p_img) + # (3.2)将结果画到显示器 + display_draw(dets) + + # (4)释放当前帧 + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + + except Exception as e: + # 捕捉运行运行中异常,并打印错误 + print(f"An error occurred during buffer used: {e}") + finally: + # 释放当前帧 + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + # 停止camera + camera_stop(CAM_DEV_ID_0) + # 释放显示资源 + display_deinit() + # 释放kpu资源 + kpu_deinit(kpu_face_detect) + # 垃圾回收 + gc.collect() + time.sleep(1) + # 释放媒体资源 + ret = media_deinit() + if ret: + print("face_detect_test, buffer_deinit failed") + return ret + + print("face_detect_test end") + return 0 + +if __name__ == '__main__': + face_detect_inference() +``` + +### 3.COCO目标检测 + +```python +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn #nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +from media.camera import * #摄像头模块 +from media.display import * #显示模块 +from media.media import * #软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time #时间统计 +import gc #垃圾回收模块 + +##config.py +#display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) +DISPLAY_HEIGHT = 1080 + +#ai 原图输入分辨率 +OUT_RGB888P_WIDTH = ALIGN_UP(320, 16) +OUT_RGB888P_HEIGHT = 320 + +#多目标检测 kmodel 输入 shape +kmodel_input_shape = (1,3,320,320) + +#多目标检测 相关参数设置 +confidence_threshold = 0.2 # 多目标检测分数阈值 +nms_threshold = 0.2 # 非最大值抑制阈值 +x_factor = float(OUT_RGB888P_WIDTH)/kmodel_input_shape[3] # 原始图像分辨率宽与kmodel宽输入大小比值 +y_factor = float(OUT_RGB888P_HEIGHT)/kmodel_input_shape[2] # 原始图像分辨率高与kmodel高输入大小比值 +keep_top_k = 50 # 最大输出检测框的数量 + +#文件配置 +root_dir = '/sdcard/app/tests/' +kmodel_file = root_dir + 'kmodel/yolov8n_320.kmodel' # kmodel文件的路径 +debug_mode = 0 # debug模式 大于0(调试)、 反之 (不调试) + +#颜色板 用于作图 +color_four = [(255, 220, 20, 60), (255, 119, 11, 32), (255, 0, 0, 142), (255, 0, 0, 230), + (255, 106, 0, 228), (255, 0, 60, 100), (255, 0, 80, 100), (255, 0, 0, 70), + (255, 0, 0, 192), (255, 250, 170, 30), (255, 100, 170, 30), (255, 220, 220, 0), + (255, 175, 116, 175), (255, 250, 0, 30), (255, 165, 42, 42), (255, 255, 77, 255), + (255, 0, 226, 252), (255, 182, 182, 255), (255, 0, 82, 0), (255, 120, 166, 157), + (255, 110, 76, 0), (255, 174, 57, 255), (255, 199, 100, 0), (255, 72, 0, 118), + (255, 255, 179, 240), (255, 0, 125, 92), (255, 209, 0, 151), (255, 188, 208, 182), + (255, 0, 220, 176), (255, 255, 99, 164), (255, 92, 0, 73), (255, 133, 129, 255), + (255, 78, 180, 255), (255, 0, 228, 0), (255, 174, 255, 243), (255, 45, 89, 255), + (255, 134, 134, 103), (255, 145, 148, 174), (255, 255, 208, 186), + (255, 197, 226, 255), (255, 171, 134, 1), (255, 109, 63, 54), (255, 207, 138, 255), + (255, 151, 0, 95), (255, 9, 80, 61), (255, 84, 105, 51), (255, 74, 65, 105), + (255, 166, 196, 102), (255, 208, 195, 210), (255, 255, 109, 65), (255, 0, 143, 149), + (255, 179, 0, 194), (255, 209, 99, 106), (255, 5, 121, 0), (255, 227, 255, 205), + (255, 147, 186, 208), (255, 153, 69, 1), (255, 3, 95, 161), (255, 163, 255, 0), + (255, 119, 0, 170), (255, 0, 182, 199), (255, 0, 165, 120), (255, 183, 130, 88), + (255, 95, 32, 0), (255, 130, 114, 135), (255, 110, 129, 133), (255, 166, 74, 118), + (255, 219, 142, 185), (255, 79, 210, 114), (255, 178, 90, 62), (255, 65, 70, 15), + (255, 127, 167, 115), (255, 59, 105, 106), (255, 142, 108, 45), (255, 196, 172, 0), + (255, 95, 54, 80), (255, 128, 76, 255), (255, 201, 57, 1), (255, 246, 0, 122), + (255, 191, 162, 208)] + +#标签 多目标检测的所有可识别类别 +labels = ["person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush"] + +#scoped_timing.py 用于debug模式输出程序块运行时间 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + + +#ai_utils.py +global current_kmodel_obj # 定义全局的 kpu 对象 +global ai2d,ai2d_input_tensor,ai2d_output_tensor,ai2d_builder # 定义全局 ai2d 对象,并且定义 ai2d 的输入、输出 以及 builder + + +# 多目标检测 非最大值抑制方法实现 +def py_cpu_nms(boxes,scores,thresh): + """Pure Python NMS baseline.""" + x1 = boxes[:, 0] + y1 = boxes[:, 1] + x2 = boxes[:, 2] + y2 = boxes[:, 3] + + areas = (x2 - x1 + 1) * (y2 - y1 + 1) + order = np.argsort(scores,axis = 0)[::-1] + + keep = [] + while order.size > 0: + i = order[0] + keep.append(i) + new_x1 = [] + new_x2 = [] + new_y1 = [] + new_y2 = [] + new_areas = [] + for order_i in order: + new_x1.append(x1[order_i]) + new_x2.append(x2[order_i]) + new_y1.append(y1[order_i]) + new_y2.append(y2[order_i]) + new_areas.append(areas[order_i]) + new_x1 = np.array(new_x1) + new_x2 = np.array(new_x2) + new_y1 = np.array(new_y1) + new_y2 = np.array(new_y2) + xx1 = np.maximum(x1[i], new_x1) + yy1 = np.maximum(y1[i], new_y1) + xx2 = np.minimum(x2[i], new_x2) + yy2 = np.minimum(y2[i], new_y2) + + w = np.maximum(0.0, xx2 - xx1 + 1) + h = np.maximum(0.0, yy2 - yy1 + 1) + inter = w * h + + new_areas = np.array(new_areas) + ovr = inter / (areas[i] + new_areas - inter) + new_order = [] + for ovr_i,ind in enumerate(ovr): + if ind < thresh: + new_order.append(order[ovr_i]) + order = np.array(new_order,dtype=np.uint8) + return keep + +# 多目标检测 接收kmodel输出的后处理方法 +def kpu_post_process(output_data): + with ScopedTiming("kpu_post_process", debug_mode > 0): + boxes_ori = output_data[:,0:4] + scores_ori = output_data[:,4:] + confs_ori = np.max(scores_ori,axis=-1) + inds_ori = np.argmax(scores_ori,axis=-1) + + boxes = [] + scores = [] + inds = [] + + for i in range(len(boxes_ori)): + if confs_ori[i] > confidence_threshold: + scores.append(confs_ori[i]) + inds.append(inds_ori[i]) + x = boxes_ori[i,0] + y = boxes_ori[i,1] + w = boxes_ori[i,2] + h = boxes_ori[i,3] + left = int((x - 0.5 * w) * x_factor) + top = int((y - 0.5 * h) * y_factor) + right = int((x + 0.5 * w) * x_factor) + bottom = int((y + 0.5 * h) * y_factor) + boxes.append([left,top,right,bottom]) + + if len(boxes)==0: + return [] + + boxes = np.array(boxes) + scores = np.array(scores) + inds = np.array(inds) + + # do NMS + keep = py_cpu_nms(boxes,scores,nms_threshold) + dets = np.concatenate((boxes, scores.reshape((len(boxes),1)), inds.reshape((len(boxes),1))), axis=1) + + dets_out = [] + for keep_i in keep: + dets_out.append(dets[keep_i]) + dets_out = np.array(dets_out) + + # keep top-K faster NMS + dets_out = dets_out[:keep_top_k, :] + return dets_out + +# ai2d 初始化 +def ai2d_init(): + with ScopedTiming("ai2d_init",debug_mode > 0): + global ai2d + ai2d = nn.ai2d() + ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + + global ai2d_out_tensor + data = np.ones(kmodel_input_shape, dtype=np.uint8) + ai2d_out_tensor = nn.from_numpy(data) + + global ai2d_builder + ai2d_builder = ai2d.build([1,3,OUT_RGB888P_HEIGHT,OUT_RGB888P_WIDTH], kmodel_input_shape) + +# ai2d 运行 +def ai2d_run(rgb888p_img): + with ScopedTiming("ai2d_run",debug_mode > 0): + global ai2d_input_tensor,ai2d_out_tensor + ai2d_input = rgb888p_img.to_numpy_ref() + ai2d_input_tensor = nn.from_numpy(ai2d_input) + + ai2d_builder.run(ai2d_input_tensor, ai2d_out_tensor) + +# ai2d 释放内存 +def ai2d_release(): + with ScopedTiming("ai2d_release",debug_mode > 0): + global ai2d_input_tensor + del ai2d_input_tensor + +# kpu 初始化 +def kpu_init(kmodel_file): + # init kpu and load kmodel + with ScopedTiming("kpu_init",debug_mode > 0): + kpu_obj = nn.kpu() + kpu_obj.load_kmodel(kmodel_file) + + ai2d_init() + return kpu_obj + +# kpu 输入预处理 +def kpu_pre_process(rgb888p_img): + ai2d_run(rgb888p_img) + with ScopedTiming("kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,ai2d_out_tensor + # set kpu input + current_kmodel_obj.set_input_tensor(0, ai2d_out_tensor) + +# kpu 获得 kmodel 输出 +def kpu_get_output(): + with ScopedTiming("kpu_get_output",debug_mode > 0): + global current_kmodel_obj + results = [] + data = current_kmodel_obj.get_output_tensor(0) + result = data.to_numpy() + + result = result.reshape((result.shape[0] * result.shape[1], result.shape[2])) + result = result.transpose() + tmp2 = result.copy() + del data + results.append(tmp2) + return results + +# kpu 运行 +def kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1) 原图预处理,并设置模型输入 + kpu_pre_process(rgb888p_img) + # (2) kpu运行 + with ScopedTiming("kpu_run",debug_mode > 0): + kpu_obj.run() + # (3) 释放ai2d资源 + ai2d_release() + # (4) 获取kpu输出 + results = kpu_get_output() + # (5) kpu结果后处理 + dets = kpu_post_process(results[0]) + # (6) 返回多目标检测结果 + return dets + +# kpu 释放内存 +def kpu_deinit(kpu_obj): + with ScopedTiming("kpu_deinit",debug_mode > 0): + global ai2d,ai2d_out_tensor + del kpu_obj + del ai2d + del ai2d_out_tensor + +#media_utils.py +global draw_img,osd_img #for display 定义全局 作图image对象 +global buffer,media_source,media_sink #for media 定义 media 程序中的中间存储对象 + +#for display 初始化 +def display_init(): + # use hdmi for display + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +# display 释放内存 +def display_deinit(): + display.deinit() + +# display 作图过程 将所有目标检测框以及类别、分数值的作图 +def display_draw(dets): + with ScopedTiming("display_draw",debug_mode >0): + global draw_img,osd_img + if dets: + draw_img.clear() + for det in dets: + x1, y1, x2, y2 = map(lambda x: int(round(x, 0)), det[:4]) + w = (x2 - x1) * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + h = (y2 - y1) * DISPLAY_HEIGHT // OUT_RGB888P_HEIGHT + draw_img.draw_rectangle(x1 * DISPLAY_WIDTH // OUT_RGB888P_WIDTH, + y1 * DISPLAY_HEIGHT // OUT_RGB888P_HEIGHT, w, h, color=color_four[int(det[5])]) + draw_img.draw_string( int(x1 * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) , int(y1 * DISPLAY_HEIGHT // OUT_RGB888P_HEIGHT)-50, + " " + labels[int(det[5])] + " " + str(round(det[4],2)) , color=color_four[int(det[5])] , scale=4) + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + draw_img.clear() + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +#for camera 初始化 +def camera_init(dev_id): + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +# camera 开启 +def camera_start(dev_id): + camera.start_stream(dev_id) + +# camera 读取图像 +def camera_read(dev_id): + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +# camera 图像释放 +def camera_release_image(dev_id,rgb888p_img): + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +# camera 结束 +def camera_stop(dev_id): + camera.stop_stream(dev_id) + +#for media 初始化 +def media_init(): + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 图层1,用于画框 + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_MPGC) + # 图层2,用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +# media 释放内存 +def media_deinit(): + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + + +#**********for ob_detect.py********** +def ob_detect_inference(): + print("ob_detect start") + kpu_ob_detect = kpu_init(kmodel_file) # 创建多目标检测的 kpu 对象 + camera_init(CAM_DEV_ID_0) # 初始化 camera + display_init() # 初始化 display + + rgb888p_img = None + try: + ret = media_init() + if ret: + print("ob_detect, buffer init failed") + return ret + + camera_start(CAM_DEV_ID_0) + time.sleep(5) + while True: + with ScopedTiming("total",1): + rgb888p_img = camera_read(CAM_DEV_ID_0) # 读取一帧图片 + if rgb888p_img == -1: + print("ob_detect, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # for rgb888planar + if rgb888p_img.format() == image.RGBP888: + dets = kpu_run(kpu_ob_detect,rgb888p_img) # 执行多目标检测 kpu运行 以及 后处理过程 + display_draw(dets) # 将得到的检测结果 绘制到 display + + camera_release_image(CAM_DEV_ID_0,rgb888p_img) # camera 释放图像 + rgb888p_img = None + # gc.collect() + except Exception as e: + print(f"An error occurred during buffer used: {e}") + finally: + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + camera_stop(CAM_DEV_ID_0) # 停止camera + display_deinit() # 释放 display + kpu_deinit(kpu_ob_detect) # 释放 kpu + gc.collect() + time.sleep(1) + ret = media_deinit() # 释放 整个media + if ret: + print("ob_detect, buffer_deinit failed") + return ret + + print("ob_detect_test end") + return 0 + +if __name__ == '__main__': + ob_detect_inference() +``` + +### 4.yolov8-seg + +```python +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn #nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +from media.camera import * #摄像头模块 +from media.display import * #显示模块 +from media.media import * #软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time #时间统计 +import gc #垃圾回收模块 +import aidemo #aidemo模块,封装ai demo相关后处理、画图操作 + +##config.py +#display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) +DISPLAY_HEIGHT = 1080 + +#ai原图分辨率输入 +OUT_RGB888P_WIDTH = ALIGN_UP(320, 16) +OUT_RGB888P_HEIGHT = 320 + +#多目标分割 kmodel 输入参数配置 +kmodel_input_shape = (1,3,320,320) # kmodel输入分辨率 +rgb_mean = [114,114,114] # ai2d padding 值 + +#多目标分割 相关参数设置 +confidence_threshold = 0.2 # 多目标分割分数阈值 +nms_threshold = 0.5 # 非最大值抑制阈值 +mask_thres = 0.5 # 多目标分割掩码阈值 + +#文件配置 +root_dir = '/sdcard/app/tests/' +kmodel_file = root_dir + 'kmodel/yolov8n_seg_320.kmodel' # kmodel文件的路径 +debug_mode = 0 # debug模式 大于0(调试)、 反之 (不调试) + +#标签 多目标分割的所有可识别类别 +labels = ["person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush"] + +#scoped_timing.py 用于debug模式输出程序块运行时间 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + + +#ai_utils.py +global current_kmodel_obj # 定义全局的 kpu 对象 +global ai2d,ai2d_input_tensor,ai2d_output_tensor,ai2d_builder # 定义全局 ai2d 对象,并且定义 ai2d 的输入、输出 以及 builder + +# 多目标分割 接收kmodel输出的后处理方法 +def kpu_post_process(output_datas): + with ScopedTiming("kpu_post_process", debug_mode > 0): + global masks + mask_dets = aidemo.segment_postprocess(output_datas,[OUT_RGB888P_HEIGHT,OUT_RGB888P_WIDTH],[kmodel_input_shape[2],kmodel_input_shape[3]],[DISPLAY_HEIGHT,DISPLAY_WIDTH],confidence_threshold,nms_threshold,mask_thres,masks) + return mask_dets + +# 获取kmodel输入图像resize比例 以及 padding的上下左右像素数量 +def get_pad_param(): + #右padding或下padding + dst_w = kmodel_input_shape[3] + dst_h = kmodel_input_shape[2] + + ratio_w = float(dst_w) / OUT_RGB888P_WIDTH + ratio_h = float(dst_h) / OUT_RGB888P_HEIGHT + if ratio_w < ratio_h: + ratio = ratio_w + else: + ratio = ratio_h + + new_w = (int)(ratio * OUT_RGB888P_WIDTH) + new_h = (int)(ratio * OUT_RGB888P_HEIGHT) + dw = (dst_w - new_w) / 2 + dh = (dst_h - new_h) / 2 + + top = (int)(round(dh - 0.1)) + bottom = (int)(round(dh + 0.1)) + left = (int)(round(dw - 0.1)) + right = (int)(round(dw + 0.1)) + return [0, 0, 0, 0, top, bottom, left, right] + +# ai2d 初始化 +def ai2d_init(): + with ScopedTiming("ai2d_init",debug_mode > 0): + global ai2d + ai2d = nn.ai2d() + ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + ai2d.set_pad_param(True, get_pad_param(), 0, rgb_mean) + ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + + global ai2d_out_tensor + data = np.ones(kmodel_input_shape, dtype=np.uint8) + ai2d_out_tensor = nn.from_numpy(data) + + global ai2d_builder + ai2d_builder = ai2d.build([1,3,OUT_RGB888P_HEIGHT,OUT_RGB888P_WIDTH], kmodel_input_shape) + +# ai2d 运行 +def ai2d_run(rgb888p_img): + with ScopedTiming("ai2d_run",debug_mode > 0): + global ai2d_input_tensor,ai2d_out_tensor + ai2d_input = rgb888p_img.to_numpy_ref() + ai2d_input_tensor = nn.from_numpy(ai2d_input) + + ai2d_builder.run(ai2d_input_tensor, ai2d_out_tensor) + +# ai2d 释放内存 +def ai2d_release(): + with ScopedTiming("ai2d_release",debug_mode > 0): + global ai2d_input_tensor + del ai2d_input_tensor + +# kpu 初始化 +def kpu_init(kmodel_file): + # init kpu and load kmodel + with ScopedTiming("kpu_init",debug_mode > 0): + kpu_obj = nn.kpu() + kpu_obj.load_kmodel(kmodel_file) + + ai2d_init() + return kpu_obj + +# kpu 输入预处理 +def kpu_pre_process(rgb888p_img): + ai2d_run(rgb888p_img) + with ScopedTiming("kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,ai2d_out_tensor + # set kpu input + current_kmodel_obj.set_input_tensor(0, ai2d_out_tensor) + +# kpu 获得 kmodel 输出 +def kpu_get_output(): + with ScopedTiming("kpu_get_output",debug_mode > 0): + global current_kmodel_obj + results = [] + data_0 = current_kmodel_obj.get_output_tensor(0) + result_0 = data_0.to_numpy() + del data_0 + results.append(result_0) + + data_1 = current_kmodel_obj.get_output_tensor(1) + result_1 = data_1.to_numpy() + del data_1 + results.append(result_1) + + return results + +# kpu 运行 +def kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1) 原图预处理,并设置模型输入 + kpu_pre_process(rgb888p_img) + # (2) kpu 运行 + with ScopedTiming("kpu_run",debug_mode > 0): + kpu_obj.run() + # (3) 释放ai2d资源 + ai2d_release() + # (4) 获取kpu输出 + results = kpu_get_output() + # (5) kpu结果后处理 + seg_res = kpu_post_process(results) + # (6) 返回 分割 mask 结果 + return seg_res + +# kpu 释放内存 +def kpu_deinit(kpu_obj): + with ScopedTiming("kpu_deinit",debug_mode > 0): + global ai2d,ai2d_out_tensor + del kpu_obj + del ai2d + del ai2d_out_tensor + +#media_utils.py +global draw_img,osd_img,masks #for display 定义全局 作图image对象 +global buffer,media_source,media_sink #for media 定义 media 程序中的中间存储对象 + +#for display 初始化 +def display_init(): + # use hdmi for display + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +# display 释放内存 +def display_deinit(): + display.deinit() + +# display 作图过程 将所有目标分割对象以及类别、分数值的作图 +def display_draw(seg_res): + with ScopedTiming("display_draw",debug_mode >0): + global draw_img,osd_img,masks + if seg_res[0]: + dets = seg_res[0] + ids = seg_res[1] + scores = seg_res[2] + + for i, det in enumerate(dets): + x1, y1, w, h = map(lambda x: int(round(x, 0)), det) + draw_img.draw_string( int(x1) , int(y1)-50, " " + labels[int(ids[i])] + " " + str(round(scores[i],2)) , color=(255,0,0,0), scale=4) + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + draw_img.clear() + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +#for camera 初始化 +def camera_init(dev_id): + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +# camera 开启 +def camera_start(dev_id): + camera.start_stream(dev_id) + +# camera 读取图像 +def camera_read(dev_id): + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +# camera 图像释放 +def camera_release_image(dev_id,rgb888p_img): + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +# camera 结束 +def camera_stop(dev_id): + camera.stop_stream(dev_id) + +#for media 初始化 +def media_init(): + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img, osd_img, masks + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 图层1,用于画框 + masks = np.zeros((1,DISPLAY_HEIGHT,DISPLAY_WIDTH,4)) + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888,alloc=image.ALLOC_REF,data=masks) + # 图层2,用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +# media 释放内存 +def media_deinit(): + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + + +#**********for seg.py********** +def seg_inference(): + print("seg start") + kpu_seg = kpu_init(kmodel_file) # 创建多目标分割的 kpu 对象 + camera_init(CAM_DEV_ID_0) # 初始化 camera + display_init() # 初始化 display + + rgb888p_img = None + try: + ret = media_init() + if ret: + print("seg, buffer init failed") + return ret + + camera_start(CAM_DEV_ID_0) + time.sleep(5) + while True: + with ScopedTiming("total",1): + rgb888p_img = camera_read(CAM_DEV_ID_0) # 读取一帧图片 + if rgb888p_img == -1: + print("seg, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # for rgb888planar + if rgb888p_img.format() == image.RGBP888: + seg_res = kpu_run(kpu_seg,rgb888p_img) # 执行多目标分割 kpu 运行 以及 后处理过程 + display_draw(seg_res) # 将得到的分割结果 绘制到 display + + camera_release_image(CAM_DEV_ID_0,rgb888p_img) # camera 释放图像 + rgb888p_img = None + #gc.collect() + except Exception as e: + print(f"An error occurred during buffer used: {e}") + finally: + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + camera_stop(CAM_DEV_ID_0) # 停止 camera + display_deinit() # 释放 display + kpu_deinit(kpu_seg) # 释放 kpu + gc.collect() + time.sleep(1) + ret = media_deinit() # 释放 整个media + if ret: + print("seg, buffer_deinit failed") + return ret + + print("seg end") + return 0 + +if __name__ == '__main__': + seg_inference() +``` + +### 5.车牌检测 + +```python +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn #nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +from media.camera import * #摄像头模块 +from media.display import * #显示模块 +from media.media import * #软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time #时间统计 +import gc #垃圾回收模块 +import aidemo #aidemo模块,封装ai demo相关后处理、画图操作 + +##config.py +#display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) +DISPLAY_HEIGHT = 1080 + +#ai原图分辨率输入 +OUT_RGB888P_WIDTH = ALIGN_UP(1920, 16) +OUT_RGB888P_HEIGHT = 1080 + +#车牌检测 kmodel 输入shape +kmodel_input_shape = (1,3,640,640) + +#车牌检测 相关参数设置 +obj_thresh = 0.2 #车牌检测分数阈值 +nms_thresh = 0.2 #检测框 非极大值抑制 阈值 + +#文件配置 +root_dir = '/sdcard/app/tests/' +kmodel_file = root_dir + 'kmodel/LPD_640.kmodel' # kmodel 文件的路径 +debug_mode = 0 # debug模式 大于0(调试)、 反之 (不调试) + +#scoped_timing.py 用于debug模式输出程序块运行时间 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + + +#ai_utils.py +global current_kmodel_obj # 定义全局的 kpu 对象 +global ai2d,ai2d_input_tensor,ai2d_output_tensor,ai2d_builder # 定义全局 ai2d 对象,并且定义 ai2d 的输入、输出 以及 builder + +# 车牌检测 接收kmodel输出的后处理方法 +def kpu_post_process(output_data): + with ScopedTiming("kpu_post_process", debug_mode > 0): + results = aidemo.licence_det_postprocess(output_data,[OUT_RGB888P_HEIGHT,OUT_RGB888P_WIDTH],[kmodel_input_shape[2],kmodel_input_shape[3]],obj_thresh,nms_thresh) + return results + +# ai2d 初始化 +def ai2d_init(): + with ScopedTiming("ai2d_init",debug_mode > 0): + global ai2d + ai2d = nn.ai2d() + ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + + global ai2d_out_tensor + data = np.ones(kmodel_input_shape, dtype=np.uint8) + ai2d_out_tensor = nn.from_numpy(data) + + global ai2d_builder + ai2d_builder = ai2d.build([1,3,OUT_RGB888P_HEIGHT,OUT_RGB888P_WIDTH], kmodel_input_shape) + +# ai2d 运行 +def ai2d_run(rgb888p_img): + with ScopedTiming("ai2d_run",debug_mode > 0): + global ai2d_input_tensor,ai2d_out_tensor + ai2d_input = rgb888p_img.to_numpy_ref() + ai2d_input_tensor = nn.from_numpy(ai2d_input) + + ai2d_builder.run(ai2d_input_tensor, ai2d_out_tensor) + +# ai2d 释放内存 +def ai2d_release(): + with ScopedTiming("ai2d_release",debug_mode > 0): + global ai2d_input_tensor + del ai2d_input_tensor + +# kpu 初始化 +def kpu_init(kmodel_file): + # init kpu and load kmodel + with ScopedTiming("kpu_init",debug_mode > 0): + kpu_obj = nn.kpu() + kpu_obj.load_kmodel(kmodel_file) + + ai2d_init() + return kpu_obj + +# kpu 输入预处理 +def kpu_pre_process(rgb888p_img): + ai2d_run(rgb888p_img) + with ScopedTiming("kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,ai2d_out_tensor + # set kpu input + current_kmodel_obj.set_input_tensor(0, ai2d_out_tensor) + +# kpu 获得 kmodel 输出 +def kpu_get_output(): + with ScopedTiming("kpu_get_output",debug_mode > 0): + global current_kmodel_obj + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + tmp2 = result.copy() + del data + results.append(tmp2) + return results + +# kpu 运行 +def kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1) 原图预处理,并设置模型输入 + kpu_pre_process(rgb888p_img) + # (2) kpu 运行 + with ScopedTiming("kpu_run",debug_mode > 0): + kpu_obj.run() + # (3) 释放ai2d资源 + ai2d_release() + # (4) 获取kpu输出 + results = kpu_get_output() + # (5) kpu结果后处理 + dets = kpu_post_process(results) + # (6) 返回 车牌检测框 结果 + return dets + +# kpu 释放内存 +def kpu_deinit(kpu_obj): + with ScopedTiming("kpu_deinit",debug_mode > 0): + global ai2d,ai2d_out_tensor + del kpu_obj + del ai2d + del ai2d_out_tensor + +#media_utils.py +global draw_img,osd_img #for display 定义全局 作图image对象 +global buffer,media_source,media_sink #for media 定义 media 程序中的中间存储对象 + +#for display 初始化 +def display_init(): + # use hdmi for display + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +# display 释放内存 +def display_deinit(): + display.deinit() + +# display 作图过程 将所有车牌检测框绘制到屏幕上 +def display_draw(dets): + with ScopedTiming("display_draw",debug_mode >0): + global draw_img,osd_img + if dets: + draw_img.clear() + point_8 = np.zeros((8),dtype=np.int16) + for det in dets: + for i in range(4): + x = det[i * 2 + 0]/OUT_RGB888P_WIDTH*DISPLAY_WIDTH + y = det[i * 2 + 1]/OUT_RGB888P_HEIGHT*DISPLAY_HEIGHT + point_8[i * 2 + 0] = int(x) + point_8[i * 2 + 1] = int(y) + for i in range(4): + draw_img.draw_line(point_8[i * 2 + 0],point_8[i * 2 + 1],point_8[(i+1) % 4 * 2 + 0],point_8[(i+1) % 4 * 2 + 1],color=(255, 0, 255, 0),thickness=2) + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + draw_img.clear() + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +#for camera 初始化 +def camera_init(dev_id): + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_BGR_888_PLANAR) + +# camera 开启 +def camera_start(dev_id): + camera.start_stream(dev_id) + +# camera 读取图像 +def camera_read(dev_id): + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +# camera 图像释放 +def camera_release_image(dev_id,rgb888p_img): + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +# camera 结束 +def camera_stop(dev_id): + camera.stop_stream(dev_id) + +#for media 初始化 +def media_init(): + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 图层1,用于画框 + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_MPGC) + # 图层2,用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +# media 释放内存 +def media_deinit(): + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + + +#**********for licence_det.py********** +def licence_det_inference(): + print("licence_det start") + kpu_licence_det = kpu_init(kmodel_file) # 创建车牌检测的 kpu 对象 + camera_init(CAM_DEV_ID_0) # 初始化 camera + display_init() # 初始化 display + + rgb888p_img = None + try: + ret = media_init() + if ret: + print("licence_det, buffer init failed") + return ret + + camera_start(CAM_DEV_ID_0) + time.sleep(5) + while True: + with ScopedTiming("total",1): + rgb888p_img = camera_read(CAM_DEV_ID_0) # 读取一帧图片 + if rgb888p_img == -1: + print("licence_det, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # for rgb888planar + if rgb888p_img.format() == image.RGBP888: + dets = kpu_run(kpu_licence_det,rgb888p_img) # 执行车牌检测 kpu 运行 以及后处理过程 + display_draw(dets) # 将得到的 检测结果 绘制到 display + + camera_release_image(CAM_DEV_ID_0,rgb888p_img) # camera 释放图像 + rgb888p_img = None + # gc.collect() + except Exception as e: + print(f"An error occurred during buffer used: {e}") + finally: + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + camera_stop(CAM_DEV_ID_0) # 停止 camera + display_deinit() # 释放 display + kpu_deinit(kpu_licence_det) # 释放 kpu + gc.collect() + time.sleep(1) + ret = media_deinit() # 释放整个media + if ret: + print("licence_det, buffer_deinit failed") + return ret + + print("licence_det end") + return 0 + +if __name__ == '__main__': + licence_det_inference() +``` + +### 6.OCR检测 + +```python +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn #nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +from media.camera import * #摄像头模块 +from media.display import * #显示模块 +from media.media import * #软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time #时间统计 +import gc #垃圾回收模块 +import os #操作系统接口模块 +import aicube #aicube模块,封装检测分割等任务相关后处理 + +# display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) +DISPLAY_HEIGHT = 1080 + +# ai原图分辨率输入 +OUT_RGB888P_WIDTH = ALIGN_UP(640, 16) +OUT_RGB888P_HEIGH = 360 + +# kmodel输入参数配置 +kmodel_input_shape_det = (1,3,640,640) # kmodel输入分辨率 +rgb_mean = [0,0,0] # ai2d padding的值 + +# kmodel相关参数设置 +mask_threshold = 0.25 # 二值化mask阈值 +box_threshold = 0.3 # 检测框分数阈值 + +# 文件配置 +root_dir = '/sdcard/app/tests/' +kmodel_file_det = root_dir + 'kmodel/ocr_det_int16.kmodel' # kmodel加载路径 +debug_mode = 0 # 调试模式 大于0(调试)、 反之 (不调试) + +# scoped_timing.py 用于debug模式输出程序块运行时间 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +# ai utils +global current_kmodel_obj # 定义全局kpu对象 +global ai2d_det,ai2d_input_tensor_det,ai2d_output_tensor_det,ai2d_builder_det,ai2d_input_det # 定义全局 ai2d 对象,并且定义 ai2d 的输入、输出 以及 builder + +# padding方法,一边padding,右padding或者下padding +def get_pad_one_side_param(out_img_size,input_img_size): + # 右padding或下padding + dst_w = out_img_size[0] + dst_h = out_img_size[1] + + input_width = input_img_size[0] + input_high = input_img_size[1] + + ratio_w = dst_w / input_width + ratio_h = dst_h / input_high + if ratio_w < ratio_h: + ratio = ratio_w + else: + ratio = ratio_h + + new_w = (int)(ratio * input_width) + new_h = (int)(ratio * input_high) + dw = (dst_w - new_w) / 2 + dh = (dst_h - new_h) / 2 + + top = (int)(round(0)) + bottom = (int)(round(dh * 2 + 0.1)) + left = (int)(round(0)) + right = (int)(round(dw * 2 - 0.1)) + return [0, 0, 0, 0, top, bottom, left, right] + + +# ai2d 初始化,用于实现输入的预处理 +def ai2d_init_det(): + with ScopedTiming("ai2d_init",debug_mode > 0): + global ai2d_det + ai2d_det = nn.ai2d() + ai2d_det.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + ai2d_det.set_pad_param(True, get_pad_one_side_param([kmodel_input_shape_det[3],kmodel_input_shape_det[2]], [OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH]), 0, [0, 0, 0]) + ai2d_det.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + global ai2d_output_tensor_det + data = np.ones(kmodel_input_shape_det, dtype=np.uint8) + ai2d_output_tensor_det = nn.from_numpy(data) + global ai2d_builder_det + ai2d_builder_det = ai2d_det.build([1, 3, OUT_RGB888P_HEIGH, OUT_RGB888P_WIDTH], [1, 3, kmodel_input_shape_det[2], kmodel_input_shape_det[3]]) + + +# ai2d 运行,完成ai2d_init_det设定的预处理 +def ai2d_run_det(rgb888p_img): + with ScopedTiming("ai2d_run",debug_mode > 0): + global ai2d_input_tensor_det,ai2d_builder_det,ai2d_input_det + ai2d_input_det = rgb888p_img.to_numpy_ref() + ai2d_input_tensor_det = nn.from_numpy(ai2d_input_det) + global ai2d_output_tensor_det + ai2d_builder_det.run(ai2d_input_tensor_det, ai2d_output_tensor_det) + + +# ai2d 释放输入tensor +def ai2d_release_det(): + with ScopedTiming("ai2d_release",debug_mode > 0): + global ai2d_input_tensor_det + del ai2d_input_tensor_det + +# kpu 初始化 +def kpu_init_det(kmodel_file): + # init kpu and load kmodel + with ScopedTiming("kpu_init",debug_mode > 0): + kpu_obj = nn.kpu() + kpu_obj.load_kmodel(kmodel_file) + ai2d_init_det() + return kpu_obj + +# 预处理方法 +def kpu_pre_process_det(rgb888p_img): + # 运行ai2d,将ai2d预处理的输出设置为kmodel的输入tensor + ai2d_run_det(rgb888p_img) + with ScopedTiming("kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,ai2d_output_tensor_det + # set kpu input + current_kmodel_obj.set_input_tensor(0, ai2d_output_tensor_det) + +# 获取kmodel的推理输出 +def kpu_get_output(): + with ScopedTiming("kpu_get_output",debug_mode > 0): + global current_kmodel_obj + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + del data + results.append(result) + return results + +# kpu 运行 +def kpu_run_det(kpu_obj,rgb888p_img): + # kpu推理 + global current_kmodel_obj + current_kmodel_obj = kpu_obj + #(1)原图像预处理并设置模型输入 + kpu_pre_process_det(rgb888p_img) + #(2)kpu推理 + with ScopedTiming("kpu_run",debug_mode > 0): + kpu_obj.run() + #(3)释放ai2d资源 + ai2d_release_det() + #(4)获取kpu输出 + results = kpu_get_output() + #(5)CHW转HWC + global ai2d_input_det + tmp = (ai2d_input_det.shape[0], ai2d_input_det.shape[1], ai2d_input_det.shape[2]) + ai2d_input_det = ai2d_input_det.reshape((ai2d_input_det.shape[0], ai2d_input_det.shape[1] * ai2d_input_det.shape[2])) + ai2d_input_det = ai2d_input_det.transpose() + tmp2 = ai2d_input_det.copy() + tmp2 = tmp2.reshape((tmp[1], tmp[2], tmp[0])) + #(6)后处理,aicube.ocr_post_process接口说明: + # 接口:aicube.ocr_post_process(threshold_map,ai_isp,kmodel_input_shape,isp_shape,mask_threshold,box_threshold); + # 参数说明: + # threshold_map: DBNet模型的输出为(N,kmodel_input_shape_det[2],kmodel_input_shape_det[3],2),两个通道分别为threshold map和segmentation map + # 后处理过程只使用threshold map,因此将results[0][:,:,:,0] reshape成一维传给接口使用。 + # ai_isp:后处理还会返回基于原图的检测框裁剪数据,因此要将原图数据reshape为一维传给接口处理。 + # kmodel_input_shape:kmodel输入分辨率。 + # isp_shape:AI原图分辨率。要将kmodel输出分辨率的检测框坐标映射到原图分辨率上,需要使用这两个分辨率的值。 + # mask_threshold:用于二值化图像获得文本区域。 + # box_threshold:检测框分数阈值,低于该阈值的检测框不计入结果。 + with ScopedTiming("kpu_post",debug_mode > 0): + # 调用aicube模块的ocr_post_process完成ocr检测的后处理 + # det_results结构为[[crop_array_nhwc,[p1_x,p1_y,p2_x,p2_y,p3_x,p3_y,p4_x,p4_y]],...] + det_results = aicube.ocr_post_process(results[0][:, :, :, 0].reshape(-1), tmp2.reshape(-1), + [kmodel_input_shape_det[3], kmodel_input_shape_det[2]], + [OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH], mask_threshold, box_threshold) + return det_results + + +# kpu 释放内存 +def kpu_deinit_det(kpu_obj): + with ScopedTiming("kpu_deinit",debug_mode > 0): + global ai2d_det,ai2d_output_tensor_det,ai2d_input_tensor_det + del kpu_obj + del ai2d_det + del ai2d_output_tensor_det + #del ai2d_input_tensor_det + +#********************for media_utils.py******************** + +global draw_img,osd_img #for display +global buffer,media_source,media_sink #for media + +#display 初始化 +def display_init(): + # use hdmi for display + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +# display 释放内存 +def display_deinit(): + display.deinit() + +# display 作图过程,将OCR检测后处理得到的框绘制到OSD上并显示 +def display_draw(det_results): + with ScopedTiming("display_draw",debug_mode >0): + global draw_img,osd_img + if det_results: + draw_img.clear() + # 循环绘制所有检测到的框 + for j in det_results: + # 将原图的坐标点转换成显示的坐标点,循环绘制四条直线,得到一个矩形框 + for i in range(4): + x1 = j[1][(i * 2)] / OUT_RGB888P_WIDTH * DISPLAY_WIDTH + y1 = j[1][(i * 2 + 1)] / OUT_RGB888P_HEIGH * DISPLAY_HEIGHT + x2 = j[1][((i + 1) * 2) % 8] / OUT_RGB888P_WIDTH * DISPLAY_WIDTH + y2 = j[1][((i + 1) * 2 + 1) % 8] / OUT_RGB888P_HEIGH * DISPLAY_HEIGHT + draw_img.draw_line((int(x1), int(y1), int(x2), int(y2)), color=(255, 0, 0, 255), + thickness=5) + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + draw_img.clear() + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +#for camera 初始化 +def camera_init(dev_id): + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +# camera 启动视频流 +def camera_start(dev_id): + camera.start_stream(dev_id) + +# camera 捕获一帧图像 +def camera_read(dev_id): + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +# camera 释放内存 +def camera_release_image(dev_id,rgb888p_img): + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +# 停止视频流 +def camera_stop(dev_id): + camera.stop_stream(dev_id) + +#for media 初始化 +def media_init(): + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 图层1,用于画框 + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_MPGC) + # 图层2,用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +# media 释放buffer,销毁link +def media_deinit(): + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + +# +def ocr_det_inference(): + print("ocr_det_test start") + kpu_ocr_det = kpu_init_det(kmodel_file_det) # 创建ocr检测任务的kpu对象 + camera_init(CAM_DEV_ID_0) # 初始化 camera + display_init() # 初始化 display + rgb888p_img = None + try: + ret = media_init() + if ret: + print("ocr_det_test, buffer init failed") + return ret + + camera_start(CAM_DEV_ID_0) + time.sleep(5) + while True: + with ScopedTiming("total",1): + rgb888p_img = camera_read(CAM_DEV_ID_0) # 读取一帧图像 + if rgb888p_img == -1: + print("ocr_det_test, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # for rgb888planar + if rgb888p_img.format() == image.RGBP888: + det_results = kpu_run_det(kpu_ocr_det,rgb888p_img) # kpu运行获取kmodel的推理输出 + display_draw(det_results) # 绘制检测结果,并显示 + camera_release_image(CAM_DEV_ID_0,rgb888p_img) # 释放内存 + rgb888p_img = None + # gc.collect() + except Exception as e: + print(f"An error occurred during buffer used: {e}") + finally: + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + camera_stop(CAM_DEV_ID_0) # 停止camera + display_deinit() # 释放display + kpu_deinit_det(kpu_ocr_det) # 释放kpu + gc.collect() + time.sleep(1) + ret = media_deinit() # 释放整个media + if ret: + print("ocr_det_test, buffer_deinit failed") + return ret + + print("ocr_det_test end") + return 0 + +if __name__ == '__main__': + ocr_det_inference() +``` + +### 7.手掌检测 + +```python +import aicube #aicube模块,封装检测分割等任务相关后处理 +from media.camera import * #摄像头模块 +from media.display import * #显示模块 +from media.media import * #软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 + +import nncase_runtime as nn #nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 + +import time #时间统计 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 + +import gc #垃圾回收模块 + +##config.py +#display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) +DISPLAY_HEIGHT = 1080 + +##ai原图分辨率输入 +OUT_RGB888P_WIDTH = ALIGN_UP(1920, 16) +OUT_RGB888P_HEIGH = 1080 + +#kmodel输入shape +kmodel_input_shape = (1,3,512,512) # kmodel输入分辨率 + +#kmodel相关参数设置 +confidence_threshold = 0.2 # 手掌检测阈值,用于过滤roi +nms_threshold = 0.5 # 手掌检测框阈值,用于过滤重复roi +kmodel_frame_size = [512,512] # 手掌检测输入图片尺寸 +frame_size = [OUT_RGB888P_WIDTH,OUT_RGB888P_HEIGH] # 直接输入图片尺寸 +strides = [8,16,32] # 输出特征图的尺寸与输入图片尺寸的比 +num_classes = 1 # 模型输出类别数 +nms_option = False # 是否所有检测框一起做NMS,False则按照不同的类分别应用NMS +labels = ["hand"] # 模型输出类别名称 + +root_dir = '/sdcard/app/tests/' +kmodel_file = root_dir + 'kmodel/hand_det.kmodel' # kmodel文件的路径 +anchors = [26,27, 53,52, 75,71, 80,99, 106,82, 99,134, 140,113, 161,172, 245,276] #anchor设置 + +debug_mode = 0 # debug模式 大于0(调试)、 反之 (不调试) + +#scoped_timing.py 用于debug模式输出程序块运行时间 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +#ai_utils.py +global current_kmodel_obj # 定义全局的 kpu 对象 +global ai2d,ai2d_input_tensor,ai2d_output_tensor,ai2d_builder # 定义全局 ai2d 对象,并且定义 ai2d 的输入、输出 以及 builder + + +# ai2d 初始化 +def ai2d_init(): + with ScopedTiming("ai2d_init",debug_mode > 0): + global ai2d + global ai2d_builder + global ai2d_output_tensor + # 计算padding值 + ori_w = OUT_RGB888P_WIDTH + ori_h = OUT_RGB888P_HEIGH + width = kmodel_frame_size[0] + height = kmodel_frame_size[1] + ratiow = float(width) / ori_w + ratioh = float(height) / ori_h + if ratiow < ratioh: + ratio = ratiow + else: + ratio = ratioh + new_w = int(ratio * ori_w) + new_h = int(ratio * ori_h) + dw = float(width - new_w) / 2 + dh = float(height - new_h) / 2 + top = int(round(dh - 0.1)) + bottom = int(round(dh + 0.1)) + left = int(round(dw - 0.1)) + right = int(round(dw - 0.1)) + + ai2d = nn.ai2d() + ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + ai2d.set_pad_param(True, [0,0,0,0,top,bottom,left,right], 0, [114,114,114]) + ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel ) + ai2d_builder = ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], [1,3,height,width]) + data = np.ones(kmodel_input_shape, dtype=np.uint8) + ai2d_output_tensor = nn.from_numpy(data) + +# ai2d 运行 +def ai2d_run(rgb888p_img): + with ScopedTiming("ai2d_run",debug_mode > 0): + global ai2d_input_tensor,ai2d_output_tensor + ai2d_input = rgb888p_img.to_numpy_ref() + ai2d_input_tensor = nn.from_numpy(ai2d_input) + ai2d_builder.run(ai2d_input_tensor, ai2d_output_tensor) + +# ai2d 释放内存 +def ai2d_release(): + with ScopedTiming("ai2d_release",debug_mode > 0): + global ai2d_input_tensor + del ai2d_input_tensor + +# kpu 初始化 +def kpu_init(kmodel_file): + # init kpu and load kmodel + with ScopedTiming("kpu_init",debug_mode > 0): + kpu_obj = nn.kpu() + kpu_obj.load_kmodel(kmodel_file) + + ai2d_init() + return kpu_obj + +# kpu 输入预处理 +def kpu_pre_process(rgb888p_img): + ai2d_run(rgb888p_img) + with ScopedTiming("kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,ai2d_output_tensor + # set kpu input + current_kmodel_obj.set_input_tensor(0, ai2d_output_tensor) + +# kpu 获得 kmodel 输出 +def kpu_get_output(): + with ScopedTiming("kpu_get_output",debug_mode > 0): + global current_kmodel_obj + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + + result = result.reshape((result.shape[0]*result.shape[1]*result.shape[2]*result.shape[3])) + tmp2 = result.copy() + del result + results.append(tmp2) + return results + +# kpu 运行 +def kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)原图预处理,并设置模型输入 + kpu_pre_process(rgb888p_img) + # (2)手掌检测 kpu 运行 + with ScopedTiming("kpu_run",debug_mode > 0): + current_kmodel_obj.run() + # (3)释放手掌检测 ai2d 资源 + ai2d_release() + # (4)获取手掌检测 kpu 输出 + results = kpu_get_output() + # (5)手掌检测 kpu 结果后处理 + dets = aicube.anchorbasedet_post_process( results[0], results[1], results[2], kmodel_frame_size, frame_size, strides, num_classes, confidence_threshold, nms_threshold, anchors, nms_option) + # (6)返回手掌检测结果 + return dets + +# kpu 释放内存 +def kpu_deinit(kpu_obj): + with ScopedTiming("kpu_deinit",debug_mode > 0): + global ai2d, ai2d_output_tensor + del kpu_obj + del ai2d + del ai2d_output_tensor + +#media_utils.py +global draw_img,osd_img,masks #for display 定义全局 作图image对象 +global buffer,media_source,media_sink #for media 定义 media 程序中的中间存储对象 + +#for display 初始化 +def display_init(): + # use hdmi for display + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +# display 释放内存 +def display_deinit(): + display.deinit() + +# display 作图过程 框出所有检测到的手以及标出得分 +def display_draw(dets): + with ScopedTiming("display_draw",debug_mode >0): + global draw_img,osd_img + + if dets: + draw_img.clear() + for det_box in dets: + x1, y1, x2, y2 = det_box[2],det_box[3],det_box[4],det_box[5] + w = float(x2 - x1) * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + h = float(y2 - y1) * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH + + x1 = int(x1 * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + y1 = int(y1 * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH) + x2 = int(x2 * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + y2 = int(y2 * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH) + + if (h<(0.1*DISPLAY_HEIGHT)): + continue + if (w<(0.25*DISPLAY_WIDTH) and ((x1<(0.03*DISPLAY_WIDTH)) or (x2>(0.97*DISPLAY_WIDTH)))): + continue + if (w<(0.15*DISPLAY_WIDTH) and ((x1<(0.01*DISPLAY_WIDTH)) or (x2>(0.99*DISPLAY_WIDTH)))): + continue + draw_img.draw_rectangle(x1 , y1 , int(w) , int(h) , color=(255, 0, 255, 0)) + draw_img.draw_string( x1 , y1-50, " " + labels[det_box[0]] + " " + str(round(det_box[1],2)) , color=(255,0, 255, 0), scale=4) + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + draw_img.clear() + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +#for camera 初始化 +def camera_init(dev_id): + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +# camera 开启 +def camera_start(dev_id): + camera.start_stream(dev_id) + +# camera 读取图像 +def camera_read(dev_id): + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +# camera 图像释放 +def camera_release_image(dev_id,rgb888p_img): + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +# camera 结束 +def camera_stop(dev_id): + camera.stop_stream(dev_id) + +#for media 初始化 +def media_init(): + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 图层1,用于画框 + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_MPGC) + # 图层2,用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +# media 释放内存 +def media_deinit(): + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + +#**********for hand_detect.py********** +def hand_detect_inference(): + print("hand_detect_test start") + kpu_hand_detect = kpu_init(kmodel_file) # 创建手掌检测的 kpu 对象 + camera_init(CAM_DEV_ID_0) # 初始化 camera + display_init() # 初始化 display + + rgb888p_img = None + try: + ret = media_init() + if ret: + print("hand_detect_test, buffer init failed") + return ret + + camera_start(CAM_DEV_ID_0) + while True: + with ScopedTiming("total",1): + rgb888p_img = camera_read(CAM_DEV_ID_0) # 读取一帧图片 + if rgb888p_img == -1: + print("hand_detect_test, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # for rgb888planar + if rgb888p_img.format() == image.RGBP888: + dets = kpu_run(kpu_hand_detect,rgb888p_img) # 执行手掌检测 kpu 运行 以及 后处理过程 + display_draw(dets) # 将得到的检测结果 绘制到 display + + camera_release_image(CAM_DEV_ID_0,rgb888p_img) # camera 释放图像 + rgb888p_img = None + #gc.collect() + except Exception as e: + print(f"An error occurred during buffer used: {e}") + finally: + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + camera_stop(CAM_DEV_ID_0) # 停止 camera + display_deinit() # 释放 display + kpu_deinit(kpu_hand_detect) # 释放 kpu + gc.collect() + ret = media_deinit() # 释放 整个media + if ret: + print("hand_detect_test, buffer_deinit failed") + return ret + + print("hand_detect_test end") + return 0 + +if __name__ == '__main__': + hand_detect_inference() +``` + +### 8.人体检测 + +```python +import aicube #aicube模块,封装检测分割等任务相关后处理 +from media.camera import * #摄像头模块 +from media.display import * #显示模块 +from media.media import * #软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 + +import nncase_runtime as nn #nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 + +import time #时间统计 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 + +import gc #垃圾回收模块 + +##config.py +#display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) +DISPLAY_HEIGHT = 1080 + +##ai原图分辨率输入 +OUT_RGB888P_WIDTH = ALIGN_UP(1920, 16) +OUT_RGB888P_HEIGH = 1080 + +#kmodel输入shape +kmodel_input_shape = (1,3,640,640) # kmodel输入分辨率 + +#kmodel相关参数设置 +confidence_threshold = 0.2 # 行人检测阈值,用于过滤roi +nms_threshold = 0.6 # 行人检测框阈值,用于过滤重复roi +kmodel_frame_size = [640,640] # 行人检测输入图片尺寸 +frame_size = [OUT_RGB888P_WIDTH,OUT_RGB888P_HEIGH] # 直接输入图片尺寸 +strides = [8,16,32] # 输出特征图的尺寸与输入图片尺寸的比 +num_classes = 1 # 模型输出类别数 +nms_option = False # 是否所有检测框一起做NMS,False则按照不同的类分别应用NMS +labels = ["person"] # 模型输出类别名称 + +root_dir = '/sdcard/app/tests/' +kmodel_file = root_dir + 'kmodel/person_detect_yolov5n.kmodel' # kmodel文件的路径 +anchors = [10, 13, 16, 30, 33, 23, 30, 61, 62, 45, 59, 119, 116, 90, 156, 198, 373, 326] #anchor设置 + +debug_mode = 0 # debug模式 大于0(调试)、 反之 (不调试) +total_debug_mode = 1 + +#scoped_timing.py 用于debug模式输出程序块运行时间 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +#ai_utils.py +global current_kmodel_obj # 定义全局的 kpu 对象 +global ai2d,ai2d_input_tensor,ai2d_output_tensor,ai2d_builder # 定义全局 ai2d 对象,并且定义 ai2d 的输入、输出 以及 builder + + +# ai2d 初始化 +def ai2d_init(): + with ScopedTiming("ai2d_init",debug_mode > 0): + global ai2d + global ai2d_builder + global ai2d_output_tensor + # 计算padding值 + ori_w = OUT_RGB888P_WIDTH + ori_h = OUT_RGB888P_HEIGH + width = kmodel_frame_size[0] + height = kmodel_frame_size[1] + ratiow = float(width) / ori_w + ratioh = float(height) / ori_h + if ratiow < ratioh: + ratio = ratiow + else: + ratio = ratioh + new_w = int(ratio * ori_w) + new_h = int(ratio * ori_h) + dw = float(width - new_w) / 2 + dh = float(height - new_h) / 2 + top = int(round(dh - 0.1)) + bottom = int(round(dh + 0.1)) + left = int(round(dw - 0.1)) + right = int(round(dw - 0.1)) + + ai2d = nn.ai2d() + ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + ai2d.set_pad_param(True, [0,0,0,0,top,bottom,left,right], 0, [114,114,114]) + ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel ) + ai2d_builder = ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], [1,3,height,width]) + data = np.ones(kmodel_input_shape, dtype=np.uint8) + ai2d_output_tensor = nn.from_numpy(data) + +# ai2d 运行 +def ai2d_run(rgb888p_img): + with ScopedTiming("ai2d_run",debug_mode > 0): + global ai2d_input_tensor,ai2d_output_tensor + ai2d_input = rgb888p_img.to_numpy_ref() + ai2d_input_tensor = nn.from_numpy(ai2d_input) + ai2d_builder.run(ai2d_input_tensor, ai2d_output_tensor) + +# ai2d 释放内存 +def ai2d_release(): + with ScopedTiming("ai2d_release",debug_mode > 0): + global ai2d_input_tensor + del ai2d_input_tensor + +# kpu 初始化 +def kpu_init(kmodel_file): + # init kpu and load kmodel + with ScopedTiming("kpu_init",debug_mode > 0): + kpu_obj = nn.kpu() + kpu_obj.load_kmodel(kmodel_file) + + ai2d_init() + return kpu_obj + +# kpu 输入预处理 +def kpu_pre_process(rgb888p_img): + ai2d_run(rgb888p_img) + with ScopedTiming("kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,ai2d_output_tensor + # set kpu input + current_kmodel_obj.set_input_tensor(0, ai2d_output_tensor) + +# kpu 获得 kmodel 输出 +def kpu_get_output(): + with ScopedTiming("kpu_get_output",debug_mode > 0): + global current_kmodel_obj + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + + result = result.reshape((result.shape[0]*result.shape[1]*result.shape[2]*result.shape[3])) + tmp2 = result.copy() + del result + results.append(tmp2) + return results + +# kpu 运行 +def kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)原图预处理,并设置模型输入 + kpu_pre_process(rgb888p_img) + # (2)行人检测 kpu 运行 + with ScopedTiming("kpu_run",debug_mode > 0): + current_kmodel_obj.run() + # (3)释放行人检测 ai2d 资源 + ai2d_release() + # (4)获取行人检测 kpu 输出 + results = kpu_get_output() + # (5)行人检测 kpu 结果后处理 + with ScopedTiming("kpu_post_process",debug_mode > 0): + dets = aicube.anchorbasedet_post_process( results[0], results[1], results[2], kmodel_frame_size, frame_size, strides, num_classes, confidence_threshold, nms_threshold, anchors, nms_option) + # (6)返回行人检测结果 + return dets + +# kpu 释放内存 +def kpu_deinit(kpu_obj): + with ScopedTiming("kpu_deinit",debug_mode > 0): + global ai2d, ai2d_output_tensor + del kpu_obj + del ai2d + del ai2d_output_tensor + +#media_utils.py +global draw_img,osd_img,masks #for display 定义全局 作图image对象 +global buffer,media_source,media_sink #for media 定义 media 程序中的中间存储对象 + +#for display 初始化 +def display_init(): + # use hdmi for display + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +# display 释放内存 +def display_deinit(): + display.deinit() + +# display 作图过程 框出所有检测到的人以及标出得分 +def display_draw(dets): + with ScopedTiming("display_draw",debug_mode >0): + global draw_img,osd_img + + if dets: + draw_img.clear() + for det_box in dets: + x1, y1, x2, y2 = det_box[2],det_box[3],det_box[4],det_box[5] + w = float(x2 - x1) * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + h = float(y2 - y1) * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH + + x1 = int(x1 * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + y1 = int(y1 * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH) + x2 = int(x2 * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + y2 = int(y2 * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH) + + if (h<(0.1*DISPLAY_HEIGHT)): + continue + if (w<(0.25*DISPLAY_WIDTH) and ((x1<(0.03*DISPLAY_WIDTH)) or (x2>(0.97*DISPLAY_WIDTH)))): + continue + if (w<(0.15*DISPLAY_WIDTH) and ((x1<(0.01*DISPLAY_WIDTH)) or (x2>(0.99*DISPLAY_WIDTH)))): + continue + draw_img.draw_rectangle(x1 , y1 , int(w) , int(h) , color=(255, 0, 255, 0),thickness = 2) + draw_img.draw_string( x1 , y1-50, " " + labels[det_box[0]] + " " + str(round(det_box[1],2)) , color=(255,0, 255, 0), scale=4) + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + draw_img.clear() + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +#for camera 初始化 +def camera_init(dev_id): + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +# camera 开启 +def camera_start(dev_id): + camera.start_stream(dev_id) + +# camera 读取图像 +def camera_read(dev_id): + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +# camera 图像释放 +def camera_release_image(dev_id,rgb888p_img): + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +# camera 结束 +def camera_stop(dev_id): + camera.stop_stream(dev_id) + +#for media 初始化 +def media_init(): + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 图层1,用于画框 + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_MPGC) + # 图层2,用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +# media 释放内存 +def media_deinit(): + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + +#**********for person_detect.py********** +def person_detect_inference(): + print("person_detect_test start") + kpu_person_detect = kpu_init(kmodel_file) # 创建行人检测的 kpu 对象 + camera_init(CAM_DEV_ID_0) # 初始化 camera + display_init() # 初始化 display + + rgb888p_img = None + try: + ret = media_init() + if ret: + print("person_detect_test, buffer init failed") + return ret + + camera_start(CAM_DEV_ID_0) + while True: + with ScopedTiming("total",total_debug_mode): + rgb888p_img = camera_read(CAM_DEV_ID_0) # 读取一帧图片 + if rgb888p_img == -1: + print("person_detect_test, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # for rgb888planar + if rgb888p_img.format() == image.RGBP888: + dets = kpu_run(kpu_person_detect,rgb888p_img) # 执行行人检测 kpu 运行 以及 后处理过程 + display_draw(dets) # 将得到的检测结果 绘制到 display + + camera_release_image(CAM_DEV_ID_0,rgb888p_img) # camera 释放图像 + rgb888p_img = None + # gc.collect() + except Exception as e: + print(f"An error occurred during buffer used: {e}") + finally: + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + camera_stop(CAM_DEV_ID_0) # 停止 camera + display_deinit() # 释放 display + kpu_deinit(kpu_person_detect) # 释放 kpu + gc.collect() + ret = media_deinit() # 释放 整个media + if ret: + print("person_detect_test, buffer_deinit failed") + return ret + + print("person_detect_test end") + return 0 + +if __name__ == '__main__': + person_detect_inference() +``` + +### 9.人体姿态估计 + +```python +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn #nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +from media.camera import * #摄像头模块 +from media.display import * #显示模块 +from media.media import * #软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time #时间统计 +import gc #垃圾回收模块 +import aidemo #aidemo模块,封装ai demo相关后处理、画图操作 + +##config.py +#display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) +DISPLAY_HEIGHT = 1080 + +#ai原图分辨率输入 +OUT_RGB888P_WIDTH = ALIGN_UP(1920, 16) +OUT_RGB888P_HEIGHT = 1080 + +#人体关键点检测 kmodel 输入参数配置 +kmodel_input_shape = (1,3,640,640) # kmodel输入分辨率 +rgb_mean = [114,114,114] # ai2d padding 值 + +#人体关键点 相关参数设置 +confidence_threshold = 0.2 # 人体关键点检测分数阈值 +nms_threshold = 0.5 # 非最大值抑制阈值 + +#文件配置 +root_dir = '/sdcard/app/tests/' +kmodel_file = root_dir + 'kmodel/yolov8n-pose.kmodel' # kmodel文件的路径 +debug_mode = 0 # debug模式 大于0(调试)、 反之 (不调试) + +#骨骼信息 +SKELETON = [(16, 14),(14, 12),(17, 15),(15, 13),(12, 13),(6, 12),(7, 13),(6, 7),(6, 8),(7, 9),(8, 10),(9, 11),(2, 3),(1, 2),(1, 3),(2, 4),(3, 5),(4, 6),(5, 7)] +#肢体颜色 +LIMB_COLORS = [(255, 51, 153, 255),(255, 51, 153, 255),(255, 51, 153, 255),(255, 51, 153, 255),(255, 255, 51, 255),(255, 255, 51, 255),(255, 255, 51, 255),(255, 255, 128, 0),(255, 255, 128, 0),(255, 255, 128, 0),(255, 255, 128, 0),(255, 255, 128, 0),(255, 0, 255, 0),(255, 0, 255, 0),(255, 0, 255, 0),(255, 0, 255, 0),(255, 0, 255, 0),(255, 0, 255, 0),(255, 0, 255, 0)] +#关键点颜色 +KPS_COLORS = [(255, 0, 255, 0),(255, 0, 255, 0),(255, 0, 255, 0),(255, 0, 255, 0),(255, 0, 255, 0),(255, 255, 128, 0),(255, 255, 128, 0),(255, 255, 128, 0),(255, 255, 128, 0),(255, 255, 128, 0),(255, 255, 128, 0),(255, 51, 153, 255),(255, 51, 153, 255),(255, 51, 153, 255),(255, 51, 153, 255),(255, 51, 153, 255),(255, 51, 153, 255)] + +#scoped_timing.py 用于debug模式输出程序块运行时间 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + + +#ai_utils.py +global current_kmodel_obj # 定义全局的 kpu 对象 +global ai2d,ai2d_input_tensor,ai2d_output_tensor,ai2d_builder # 定义全局 ai2d 对象,并且定义 ai2d 的输入、输出 以及 builder + +# 人体关键点检测 接收kmodel输出的后处理方法 +def kpu_post_process(output_datas): + with ScopedTiming("kpu_post_process", debug_mode > 0): + results = aidemo.person_kp_postprocess(output_datas,[OUT_RGB888P_HEIGHT,OUT_RGB888P_WIDTH],[kmodel_input_shape[2],kmodel_input_shape[3]],confidence_threshold,nms_threshold) + return results + +# 获取kmodel输入图像resize比例 以及 padding的上下左右像素数量 +def get_pad_param(): + #右padding或下padding + dst_w = kmodel_input_shape[3] + dst_h = kmodel_input_shape[2] + + ratio_w = float(dst_w) / OUT_RGB888P_WIDTH + ratio_h = float(dst_h) / OUT_RGB888P_HEIGHT + if ratio_w < ratio_h: + ratio = ratio_w + else: + ratio = ratio_h + + new_w = (int)(ratio * OUT_RGB888P_WIDTH) + new_h = (int)(ratio * OUT_RGB888P_HEIGHT) + dw = (dst_w - new_w) / 2 + dh = (dst_h - new_h) / 2 + + top = (int)(round(dh)) + bottom = (int)(round(dh)) + left = (int)(round(dw)) + right = (int)(round(dw)) + return [0, 0, 0, 0, top, bottom, left, right] + +# ai2d 初始化 +def ai2d_init(): + with ScopedTiming("ai2d_init",debug_mode > 0): + global ai2d + ai2d = nn.ai2d() + ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + ai2d.set_pad_param(True, get_pad_param(), 0, rgb_mean) + ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + + global ai2d_out_tensor + data = np.ones(kmodel_input_shape, dtype=np.uint8) + ai2d_out_tensor = nn.from_numpy(data) + + global ai2d_builder + ai2d_builder = ai2d.build([1,3,OUT_RGB888P_HEIGHT,OUT_RGB888P_WIDTH], kmodel_input_shape) + +# ai2d 运行 +def ai2d_run(rgb888p_img): + with ScopedTiming("ai2d_run",debug_mode > 0): + global ai2d_input_tensor,ai2d_out_tensor + ai2d_input = rgb888p_img.to_numpy_ref() + ai2d_input_tensor = nn.from_numpy(ai2d_input) + + ai2d_builder.run(ai2d_input_tensor, ai2d_out_tensor) + +# ai2d 释放内存 +def ai2d_release(): + with ScopedTiming("ai2d_release",debug_mode > 0): + global ai2d_input_tensor + del ai2d_input_tensor + +# kpu 初始化 +def kpu_init(kmodel_file): + # init kpu and load kmodel + with ScopedTiming("kpu_init",debug_mode > 0): + kpu_obj = nn.kpu() + kpu_obj.load_kmodel(kmodel_file) + + ai2d_init() + return kpu_obj + +# kpu 输入预处理 +def kpu_pre_process(rgb888p_img): + ai2d_run(rgb888p_img) + with ScopedTiming("kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,ai2d_out_tensor + # set kpu input + current_kmodel_obj.set_input_tensor(0, ai2d_out_tensor) + +# kpu 获得 kmodel 输出 +def kpu_get_output(): + with ScopedTiming("kpu_get_output",debug_mode > 0): + global current_kmodel_obj + data = current_kmodel_obj.get_output_tensor(0) + result = data.to_numpy() + del data + + return result + +# kpu 运行 +def kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1) 原图预处理,并设置模型输入 + kpu_pre_process(rgb888p_img) + # (2) kpu 运行 + with ScopedTiming("kpu_run",debug_mode > 0): + kpu_obj.run() + # (3) 释放ai2d资源 + ai2d_release() + # (4) 获取kpu输出 + results = kpu_get_output() + # (5) kpu结果后处理 + kp_res = kpu_post_process(results) + # (6) 返回 人体关键点检测 结果 + return kp_res + +# kpu 释放内存 +def kpu_deinit(kpu_obj): + with ScopedTiming("kpu_deinit",debug_mode > 0): + global ai2d,ai2d_out_tensor + del kpu_obj + del ai2d + del ai2d_out_tensor + +#media_utils.py +global draw_img,osd_img #for display 定义全局 作图image对象 +global buffer,media_source,media_sink #for media 定义 media 程序中的中间存储对象 + +#for display 初始化 +def display_init(): + # use hdmi for display + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +# display 释放内存 +def display_deinit(): + display.deinit() + +# display 作图过程 将所有目标关键点作图 +def display_draw(res): + with ScopedTiming("display_draw",debug_mode >0): + global draw_img,osd_img + if res[0]: + draw_img.clear() + kpses = res[1] + for i in range(len(res[0])): + for k in range(17+2): + if (k < 17): + kps_x = round(kpses[i][k][0]) + kps_y = round(kpses[i][k][1]) + kps_s = kpses[i][k][2] + + kps_x1 = int(float(kps_x) * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + kps_y1 = int(float(kps_y) * DISPLAY_HEIGHT // OUT_RGB888P_HEIGHT) + + if (kps_s > 0): + draw_img.draw_circle(kps_x1,kps_y1,5,KPS_COLORS[k],4) + ske = SKELETON[k] + pos1_x = round(kpses[i][ske[0]-1][0]) + pos1_y = round(kpses[i][ske[0]-1][1]) + + pos1_x_ = int(float(pos1_x) * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + pos1_y_ = int(float(pos1_y) * DISPLAY_HEIGHT // OUT_RGB888P_HEIGHT) + + pos2_x = round(kpses[i][(ske[1] -1)][0]) + pos2_y = round(kpses[i][(ske[1] -1)][1]) + + pos2_x_ = int(float(pos2_x) * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + pos2_y_ = int(float(pos2_y) * DISPLAY_HEIGHT // OUT_RGB888P_HEIGHT) + + pos1_s = kpses[i][(ske[0] -1)][2] + pos2_s = kpses[i][(ske[1] -1)][2] + + if (pos1_s > 0.0 and pos2_s >0.0): + draw_img.draw_line(pos1_x,pos1_y,pos2_x,pos2_y,LIMB_COLORS[k],4) + + else: + draw_img.clear() + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +#for camera 初始化 +def camera_init(dev_id): + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +# camera 开启 +def camera_start(dev_id): + camera.start_stream(dev_id) + +# camera 读取图像 +def camera_read(dev_id): + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +# camera 图像释放 +def camera_release_image(dev_id,rgb888p_img): + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +# camera 结束 +def camera_stop(dev_id): + camera.stop_stream(dev_id) + +#for media 初始化 +def media_init(): + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 图层1,用于画框 + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_MPGC) + # 图层2,用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +# media 释放内存 +def media_deinit(): + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + + +#**********for person_kp_detect.py********** +def person_kp_detect_inference(): + print("person_kp_detect start") + kpu_person_kp_detect = kpu_init(kmodel_file) # 创建人体关键点检测的 kpu 对象 + camera_init(CAM_DEV_ID_0) # 初始化 camera + display_init() # 初始化 display + + rgb888p_img = None + try: + ret = media_init() + if ret: + print("person_kp_detect, buffer init failed") + return ret + + camera_start(CAM_DEV_ID_0) + time.sleep(5) + while True: + with ScopedTiming("total",1): + rgb888p_img = camera_read(CAM_DEV_ID_0) # 读取一帧图片 + if rgb888p_img == -1: + print("person_kp_detect, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # for rgb888planar + if rgb888p_img.format() == image.RGBP888: + person_kp_detect_res = kpu_run(kpu_person_kp_detect,rgb888p_img) # 执行人体关键点检测 kpu 运行 以及 后处理过程 + display_draw(person_kp_detect_res) # 将得到的人体关键点结果 绘制到 display + + camera_release_image(CAM_DEV_ID_0,rgb888p_img) # camera 释放图像 + rgb888p_img = None + #gc.collect() + except Exception as e: + print(f"An error occurred during buffer used: {e}") + finally: + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + camera_stop(CAM_DEV_ID_0) # 停止 camera + display_deinit() # 释放 display + kpu_deinit(kpu_person_kp_detect) # 释放 kpu + gc.collect() + time.sleep(1) + ret = media_deinit() # 释放 整个media + if ret: + print("person_kp_detect, buffer_deinit failed") + return ret + + print("person_kp_detect end") + return 0 + +if __name__ == '__main__': + person_kp_detect_inference() +``` + +### 10.KWS + +```python +from media.pyaudio import * # 音频模块 +from media.media import * # 软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +import media.wave as wave # wav音频处理模块 +import nncase_runtime as nn # nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +import ulab.numpy as np # 类似python numpy操作,但也会有一些接口不同 +import aidemo # aidemo模块,封装ai demo相关前处理、后处理等操作 +import time # 时间统计 +import struct # 字节字符转换模块 +import gc # 垃圾回收模块 +import os # 操作系统接口模块 + +# key word spotting任务 +# 检测阈值 +THRESH = 0.5 +# 有关音频流的宏变量 +SAMPLE_RATE = 16000 # 采样率16000Hz,即每秒采样16000次 +CHANNELS = 1 # 通道数 1为单声道,2为立体声 +FORMAT = paInt16 # 音频输入输出格式 paInt16 +CHUNK = int(0.3 * 16000) # 每次读取音频数据的帧数,设置为0.3s的帧数16000*0.3=4800 + +root_dir='/sdcard/app/tests/' +kmodel_file_kws = root_dir+"kmodel/kws.kmodel" # kmodel加载路径 +reply_wav_file = root_dir+"utils/wozai.wav" # kws唤醒词回复音频路径 +debug_mode = 0 # 调试模式,大于0(调试)、 反之 (不调试) + + +# scoped_timing.py 用于debug模式输出程序块运行时间 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +global current_kmodel_obj # 定义全局kpu对象 +global p,cache_np,fp,input_stream,output_stream,audio_input_tensor,cache_input_tensor # 定义全局音频流对象,输入输出流对象,并且定义kws处理接口FeaturePipeline对象fp,输入输出tensor和缓冲cache_np + +# 初始化kws音频流相关变量 +def init_kws(): + with ScopedTiming("init_kws",debug_mode > 0): + global p,cache_np,fp,input_stream,output_stream,cache_input_tensor + # 初始化模型的cache输入 + cache_np = np.zeros((1, 256, 105), dtype=np.float) + cache_input_tensor = nn.from_numpy(cache_np) + # 初始化音频预处理接口 + fp = aidemo.kws_fp_create() + # 初始化音频流 + p = PyAudio() + p.initialize(CHUNK) + ret = media.buffer_init() + if ret: + print("record_audio, buffer_init failed") + # 用于采集实时音频数据 + input_stream = p.open( + format=FORMAT, + channels=CHANNELS, + rate=SAMPLE_RATE, + input=True, + frames_per_buffer=CHUNK + ) + + # 用于播放回复音频 + output_stream = p.open( + format=FORMAT, + channels=CHANNELS, + rate=SAMPLE_RATE, + output=True, + frames_per_buffer=CHUNK + ) + +# kws 初始化kpu +def kpu_init_kws(): + with ScopedTiming("init_kpu",debug_mode > 0): + # 初始化kpu并加载kmodel + kpu = nn.kpu() + kpu.load_kmodel(kmodel_file_kws) + return kpu + +# kws音频预处理 +def kpu_pre_process_kws(pcm_data_list): + global current_kmodel_obj + global fp,input_stream,audio_input_tensor,cache_input_tensor + with ScopedTiming("pre_process",debug_mode > 0): + # 将pcm数据处理为模型输入的特征向量 + mp_feats = aidemo.kws_preprocess(fp, pcm_data_list)[0] + mp_feats_np = np.array(mp_feats) + mp_feats_np = mp_feats_np.reshape((1, 30, 40)) + audio_input_tensor = nn.from_numpy(mp_feats_np) + cache_input_tensor = nn.from_numpy(cache_np) + current_kmodel_obj.set_input_tensor(0, audio_input_tensor) + current_kmodel_obj.set_input_tensor(1, cache_input_tensor) + +# kws任务kpu运行并完成后处理 +def kpu_run_kws(kpu_obj,pcm_data_list): + global current_kmodel_obj,cache_np,output_stream + current_kmodel_obj = kpu_obj + # (1)kws音频数据预处理 + kpu_pre_process_kws(pcm_data_list) + # (2)kpu推理 + with ScopedTiming("kpu_run",debug_mode > 0): + kpu_obj.run() + # (3)获取模型输出 + logits = kpu_obj.get_output_tensor(0) + cache_tensor = kpu_obj.get_output_tensor(1) # 更新缓存输入 + logits_np = logits.to_numpy() + cache_np=cache_tensor.to_numpy() + del logits + del cache_tensor + # (4)后处理argmax + max_logits = np.max(logits_np, axis=1)[0] + max_p = np.max(max_logits) + idx = np.argmax(max_logits) + # 如果分数大于阈值,且idx==1(即包含唤醒词),播放回复音频 + if max_p > THRESH and idx == 1: + print("====Detected XiaonanXiaonan!====") + wf = wave.open(reply_wav_file, "rb") + wav_data = wf.read_frames(CHUNK) + while wav_data: + output_stream.write(wav_data) + wav_data = wf.read_frames(CHUNK) + time.sleep(1) # 时间缓冲,用于播放声音 + wf.close() + else: + print("Deactivated!") + + +# kws推理过程 +def kws_inference(): + # 记录音频帧帧数 + global p,fp,input_stream,output_stream + # 初始化 + init_kws() + kpu_kws=kpu_init_kws() + pcm_data_list = [] + try: + while True: + with ScopedTiming("total", 1): + pcm_data_list.clear() + # 对实时音频流进行推理 + pcm_data = input_stream.read() # 获取的音频流数据字节数,len(pcm_data)=0.3*16000*2=9600,即以16000Hz的采样率采样0.3s,每次采样数据为paInt16格式占2个字节 + # 获取音频流数据 + for i in range(0, len(pcm_data), 2): + # 每两个字节组织成一个有符号整数,然后将其转换为浮点数,即为一次采样的数据,加入到当前一帧(0.3s)的数据列表中 + int_pcm_data = struct.unpack("0:打印对应级别调试信息 +debug_mode = 0 + +# 人脸关键点不同部位关键点列表 +dict_kp_seq = [ + [43, 44, 45, 47, 46, 50, 51, 49, 48], # left_eyebrow + [97, 98, 99, 100, 101, 105, 104, 103, 102], # right_eyebrow + [35, 36, 33, 37, 39, 42, 40, 41], # left_eye + [89, 90, 87, 91, 93, 96, 94, 95], # right_eye + [34, 88], # pupil + [72, 73, 74, 86], # bridge_nose + [77, 78, 79, 80, 85, 84, 83], # wing_nose + [52, 55, 56, 53, 59, 58, 61, 68, 67, 71, 63, 64], # out_lip + [65, 54, 60, 57, 69, 70, 62, 66], # in_lip + [1, 9, 10, 11, 12, 13, 14, 15, 16, 2, 3, 4, 5, 6, 7, 8, 0, 24, 23, 22, 21, 20, 19, 18, 32, 31, 30, 29, 28, 27, 26, 25, 17] # basin +] + +# 人脸关键点不同部位(顺序同dict_kp_seq)颜色配置,argb +color_list_for_osd_kp = [ + (255, 0, 255, 0), + (255, 0, 255, 0), + (255, 255, 0, 255), + (255, 255, 0, 255), + (255, 255, 0, 0), + (255, 255, 170, 0), + (255, 255, 255, 0), + (255, 0, 255, 255), + (255, 255, 220, 50), + (255, 30, 30, 255) +] + +#********************for scoped_timing.py******************** +# 时间统计类 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +#********************for ai_utils.py******************** +global current_kmodel_obj #当前kpu对象 +# fd_ai2d: 人脸检测ai2d实例 +# fd_ai2d_input_tensor: 人脸检测ai2d输入 +# fd_ai2d_output_tensor: 人脸检测ai2d输入 +# fd_ai2d_builder: 根据人脸检测ai2d参数,构建的人脸检测ai2d_builder对象 +global fd_ai2d,fd_ai2d_input_tensor,fd_ai2d_output_tensor,fd_ai2d_builder +# fld_ai2d: 人脸关键点ai2d实例 +# fld_ai2d_input_tensor: 人脸关键点ai2d输入 +# fld_ai2d_output_tensor:人脸关键点ai2d输入 +# fld_ai2d_builder: 根据人脸关键点ai2d参数,构建的人脸关键点ai2d_builder对象 +global fld_ai2d,fld_ai2d_input_tensor,fld_ai2d_output_tensor,fld_ai2d_builder +global matrix_dst #人脸仿射变换矩阵 + +#读取anchor文件,为人脸检测后处理做准备 +print('anchors_path:',anchors_path) +prior_data = np.fromfile(anchors_path, dtype=np.float) +prior_data = prior_data.reshape((anchor_len,det_dim)) + +def get_pad_one_side_param(): + # 右padding或下padding,获取padding参数 + dst_w = fd_kmodel_input_shape[3] # kmodel输入宽(w) + dst_h = fd_kmodel_input_shape[2] # kmodel输入高(h) + + # OUT_RGB888P_WIDTH:原图宽(w) + # OUT_RGB888P_HEIGH:原图高(h) + # 计算最小的缩放比例,等比例缩放 + ratio_w = dst_w / OUT_RGB888P_WIDTH + ratio_h = dst_h / OUT_RGB888P_HEIGH + if ratio_w < ratio_h: + ratio = ratio_w + else: + ratio = ratio_h + # 计算经过缩放后的新宽和新高 + new_w = (int)(ratio * OUT_RGB888P_WIDTH) + new_h = (int)(ratio * OUT_RGB888P_HEIGH) + + # 计算需要添加的padding,以使得kmodel输入的宽高和原图一致 + dw = (dst_w - new_w) / 2 + dh = (dst_h - new_h) / 2 + # 四舍五入,确保padding是整数 + top = (int)(round(0)) + bottom = (int)(round(dh * 2 + 0.1)) + left = (int)(round(0)) + right = (int)(round(dw * 2 - 0.1)) + return [0, 0, 0, 0, top, bottom, left, right] + +def fd_ai2d_init(): + # 人脸检测模型ai2d初始化 + with ScopedTiming("fd_ai2d_init",debug_mode > 0): + # (1)创建人脸检测ai2d对象 + global fd_ai2d + fd_ai2d = nn.ai2d() + # (2)设置人脸检测ai2d参数 + fd_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + fd_ai2d.set_pad_param(True, get_pad_one_side_param(), 0, rgb_mean) + fd_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + + #(3)人脸检测ai2d_builder,根据人脸检测ai2d参数、输入输出大小创建ai2d_builder对象 + global fd_ai2d_builder + fd_ai2d_builder = fd_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], fd_kmodel_input_shape) + + #(4)创建人脸检测ai2d_output_tensor,用于保存人脸检测ai2d输出 + global fd_ai2d_output_tensor + data = np.ones(fd_kmodel_input_shape, dtype=np.uint8) + fd_ai2d_output_tensor = nn.from_numpy(data) + +def fd_ai2d_run(rgb888p_img): + # 根据人脸检测ai2d参数,对原图rgb888p_img进行预处理 + with ScopedTiming("fd_ai2d_run",debug_mode > 0): + global fd_ai2d_input_tensor,fd_ai2d_output_tensor,fd_ai2d_builder + # (1)根据原图构建ai2d_input_tensor对象 + ai2d_input = rgb888p_img.to_numpy_ref() + fd_ai2d_input_tensor = nn.from_numpy(ai2d_input) + # (2)运行人脸检测ai2d_builder,将结果保存到人脸检测ai2d_output_tensor中 + fd_ai2d_builder.run(fd_ai2d_input_tensor, fd_ai2d_output_tensor) + +def fd_ai2d_release(): + # 释放人脸检测ai2d_input_tensor + with ScopedTiming("fd_ai2d_release",debug_mode > 0): + global fd_ai2d_input_tensor + del fd_ai2d_input_tensor + + +def fd_kpu_init(kmodel_file): + # 初始化人脸检测kpu对象,并加载kmodel + with ScopedTiming("fd_kpu_init",debug_mode > 0): + # 初始化人脸检测kpu对象 + kpu_obj = nn.kpu() + # 加载人脸检测kmodel + kpu_obj.load_kmodel(kmodel_file) + # 初始化人脸检测ai2d + fd_ai2d_init() + return kpu_obj + +def fd_kpu_pre_process(rgb888p_img): + # 设置人脸检测kpu输入 + # 使用人脸检测ai2d对原图进行预处理(padding,resize) + fd_ai2d_run(rgb888p_img) + with ScopedTiming("fd_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,fd_ai2d_output_tensor + # 设置人脸检测kpu输入 + current_kmodel_obj.set_input_tensor(0, fd_ai2d_output_tensor) + +def fd_kpu_get_output(): + # 获取人脸检测kpu输出 + with ScopedTiming("fd_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + # 获取模型输出,并将结果转换为numpy,以便进行人脸检测后处理 + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + del data + results.append(result) + return results + +def fd_kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)原图预处理,并设置模型输入 + fd_kpu_pre_process(rgb888p_img) + # (2)人脸检测kpu推理 + with ScopedTiming("fd kpu_run",debug_mode > 0): + kpu_obj.run() + # (3)释放人脸检测ai2d资源 + fd_ai2d_release() + # (4)获取人俩检测kpu输出 + results = fd_kpu_get_output() + # (5)人脸检测kpu结果后处理 + with ScopedTiming("fd kpu_post",debug_mode > 0): + post_ret = aidemo.face_det_post_process(confidence_threshold,nms_threshold,fd_kmodel_input_shape[2],prior_data, + [OUT_RGB888P_WIDTH,OUT_RGB888P_HEIGH],results) + # (6)返回人脸检测框 + if len(post_ret)==0: + return post_ret + else: + return post_ret[0] #0:det,1:landm,2:score + +def fd_kpu_deinit(kpu_obj): + # kpu释放 + with ScopedTiming("fd_kpu_deinit",debug_mode > 0): + global fd_ai2d, fd_ai2d_output_tensor + del kpu_obj #删除人脸检测kpu_obj变量,释放对它所引用对象的内存引用 + del fd_ai2d #删除人脸检测ai2d变量,释放对它所引用对象的内存引用 + del fd_ai2d_output_tensor #删除人脸检测ai2d_output_tensor变量,释放对它所引用对象的内存引用 + +###############for face recognition############### +def get_affine_matrix(bbox): + # 获取仿射矩阵,用于将边界框映射到模型输入空间 + with ScopedTiming("get_affine_matrix", debug_mode > 1): + # 从边界框提取坐标和尺寸 + x1, y1, w, h = map(lambda x: int(round(x, 0)), bbox[:4]) + # 计算缩放比例,使得边界框映射到模型输入空间的一部分 + scale_ratio = (fld_kmodel_input_shape[2]) / (max(w, h) * 1.5) + # 计算边界框中心点在模型输入空间的坐标 + cx = (x1 + w / 2) * scale_ratio + cy = (y1 + h / 2) * scale_ratio + # 计算模型输入空间的一半长度 + half_input_len = fld_kmodel_input_shape[2] / 2 + + # 创建仿射矩阵并进行设置 + matrix_dst = np.zeros((2, 3), dtype=np.float) + matrix_dst[0, 0] = scale_ratio + matrix_dst[0, 1] = 0 + matrix_dst[0, 2] = half_input_len - cx + matrix_dst[1, 0] = 0 + matrix_dst[1, 1] = scale_ratio + matrix_dst[1, 2] = half_input_len - cy + return matrix_dst + +def fld_ai2d_init(): + # 人脸关键点ai2d初始化 + with ScopedTiming("fld_ai2d_init",debug_mode > 0): + # (1)创建人脸关键点ai2d对象 + global fld_ai2d + fld_ai2d = nn.ai2d() + + # (2)创建人脸关键点ai2d_output_tensor对象,用于存放ai2d输出 + global fld_ai2d_output_tensor + data = np.ones(fld_kmodel_input_shape, dtype=np.uint8) + fld_ai2d_output_tensor = nn.from_numpy(data) + +def fld_ai2d_run(rgb888p_img,det): + # 人脸关键点ai2d推理 + with ScopedTiming("fld_ai2d_run",debug_mode > 0): + global fld_ai2d,fld_ai2d_input_tensor,fld_ai2d_output_tensor + #(1)根据原图ai2d_input_tensor对象 + ai2d_input = rgb888p_img.to_numpy_ref() + fld_ai2d_input_tensor = nn.from_numpy(ai2d_input) + + # (2)根据新的det设置新的人脸关键点ai2d参数 + fld_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + global matrix_dst + matrix_dst = get_affine_matrix(det) + affine_matrix = [matrix_dst[0][0],matrix_dst[0][1],matrix_dst[0][2], + matrix_dst[1][0],matrix_dst[1][1],matrix_dst[1][2]] + fld_ai2d.set_affine_param(True,nn.interp_method.cv2_bilinear,0, 0, 127, 1,affine_matrix) + + # (3)根据新的人脸关键点ai2d参数,构建人脸关键点ai2d_builder + global fld_ai2d_builder + fld_ai2d_builder = fld_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], fld_kmodel_input_shape) + # (4)推理人脸关键点ai2d,将预处理的结果保存到fld_ai2d_output_tensor + fld_ai2d_builder.run(fld_ai2d_input_tensor, fld_ai2d_output_tensor) + +def fld_ai2d_release(): + # 释放人脸关键点ai2d_input_tensor、ai2d_builder + with ScopedTiming("fld_ai2d_release",debug_mode > 0): + global fld_ai2d_input_tensor,fld_ai2d_builder + del fld_ai2d_input_tensor + del fld_ai2d_builder + +def fld_kpu_init(kmodel_file): + # 人脸关键点kpu初始化 + with ScopedTiming("fld_kpu_init",debug_mode > 0): + # 初始化人脸关键点kpu对象 + kpu_obj = nn.kpu() + # 加载人脸关键点kmodel + kpu_obj.load_kmodel(kmodel_file) + # 初始化人脸关键点ai2d + fld_ai2d_init() + return kpu_obj + +def fld_kpu_pre_process(rgb888p_img,det): + # 人脸关键点kpu预处理 + # 人脸关键点ai2d推理,根据det对原图进行预处理 + fld_ai2d_run(rgb888p_img,det) + with ScopedTiming("fld_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,fld_ai2d_output_tensor + # 将人脸关键点ai2d输出设置为人脸关键点kpu输入 + current_kmodel_obj.set_input_tensor(0, fld_ai2d_output_tensor) + #ai2d_out_data = fld_ai2d_output_tensor.to_numpy() + #with open("/sdcard/app/ai2d_out.bin", "wb") as file: + #file.write(ai2d_out_data.tobytes()) + +def fld_kpu_get_output(): + with ScopedTiming("fld_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + # 获取人脸关键点kpu输出 + data = current_kmodel_obj.get_output_tensor(0) + result = data.to_numpy() + del data + return result + +def fld_kpu_post_process(pred): + # 人脸关键点kpu推理结果后处理 + with ScopedTiming("fld_kpu_post_process",debug_mode > 0): + # (1)将人脸关键点输出变换模型输入 + half_input_len = fld_kmodel_input_shape[2] // 2 + pred = pred.flatten() + for i in range(len(pred)): + pred[i] += (pred[i] + 1) * half_input_len + + # (2)获取仿射矩阵的逆矩阵 + global matrix_dst + matrix_dst_inv = aidemo.invert_affine_transform(matrix_dst) + matrix_dst_inv = matrix_dst_inv.flatten() + + # (3)对每个关键点进行逆变换 + half_out_len = len(pred) // 2 + for kp_id in range(half_out_len): + old_x = pred[kp_id * 2] + old_y = pred[kp_id * 2 + 1] + + # 逆变换公式 + new_x = old_x * matrix_dst_inv[0] + old_y * matrix_dst_inv[1] + matrix_dst_inv[2] + new_y = old_x * matrix_dst_inv[3] + old_y * matrix_dst_inv[4] + matrix_dst_inv[5] + + pred[kp_id * 2] = new_x + pred[kp_id * 2 + 1] = new_y + + return pred + +def fld_kpu_run(kpu_obj,rgb888p_img,det): + # 人脸关键点kpu推理 + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)人脸关键点kpu预处理,设置kpu输入 + fld_kpu_pre_process(rgb888p_img,det) + # (2)人脸关键点kpu推理 + with ScopedTiming("fld_kpu_run",debug_mode > 0): + kpu_obj.run() + # (3)释放人脸关键点ai2d + fld_ai2d_release() + # (4)获取人脸关键点kpu输出 + result = fld_kpu_get_output() + # (5)人脸关键点后处理 + result = fld_kpu_post_process(result) + return result + +def fld_kpu_deinit(kpu_obj): + # 人脸关键点kpu释放 + with ScopedTiming("fld_kpu_deinit",debug_mode > 0): + global fld_ai2d,fld_ai2d_output_tensor + del kpu_obj # 删除kpu_obj变量,释放对它所引用对象的内存引用 + del fld_ai2d # 删除fld_ai2d变量,释放对它所引用对象的内存引用 + del fld_ai2d_output_tensor # 删除fld_ai2d_output_tensor变量,释放对它所引用对象的内存引用 + +#********************for media_utils.py******************** +global draw_img_ulab,draw_img,osd_img #for display +global buffer,media_source,media_sink #for media + +# for display,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.2 +def display_init(): + # 设置使用hdmi进行显示 + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +def display_deinit(): + # 释放显示资源 + display.deinit() + +def display_draw(dets,landmark_preds): + # 在显示器画人脸轮廓 + with ScopedTiming("display_draw",debug_mode >0): + global draw_img_ulab,draw_img,osd_img + if dets: + draw_img.clear() + for pred in landmark_preds: + # (1)获取单个人脸框对应的人脸关键点 + for sub_part_index in range(len(dict_kp_seq)): + # (2)构建人脸某个区域关键点集 + sub_part = dict_kp_seq[sub_part_index] + face_sub_part_point_set = [] + for kp_index in range(len(sub_part)): + real_kp_index = sub_part[kp_index] + x, y = pred[real_kp_index * 2], pred[real_kp_index * 2 + 1] + + x = int(x * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + y = int(y * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH) + face_sub_part_point_set.append((x, y)) + + # (3)画人脸不同区域的轮廓 + if sub_part_index in (9, 6): + color = np.array(color_list_for_osd_kp[sub_part_index],dtype = np.uint8) + face_sub_part_point_set = np.array(face_sub_part_point_set) + + aidemo.polylines(draw_img_ulab, face_sub_part_point_set,False,color,5,8,0) + + elif sub_part_index == 4: + color = color_list_for_osd_kp[sub_part_index] + for kp in face_sub_part_point_set: + x,y = kp[0],kp[1] + draw_img.draw_circle(x,y ,2, color, 1) + else: + color = np.array(color_list_for_osd_kp[sub_part_index],dtype = np.uint8) + face_sub_part_point_set = np.array(face_sub_part_point_set) + aidemo.contours(draw_img_ulab, face_sub_part_point_set,-1,color,2,8) + + # (4)将轮廓结果拷贝到osd + draw_img.copy_to(osd_img) + # (5)将osd显示到屏幕 + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + # (1)清空用来画框的图像 + draw_img.clear() + # (2)清空osd + draw_img.copy_to(osd_img) + # (3)显示透明图层 + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +#for camera,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.1 +def camera_init(dev_id): + # camera初始化 + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +def camera_start(dev_id): + # camera启动 + camera.start_stream(dev_id) + +def camera_read(dev_id): + # 读取一帧图像 + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +def camera_release_image(dev_id,rgb888p_img): + # 释放一帧图像 + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +def camera_stop(dev_id): + # 停止camera + camera.stop_stream(dev_id) + +#for media,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.3 +def media_init(): + # meida初始化 + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img_ulab,draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 用于画框 + draw_img_ulab = np.zeros((DISPLAY_HEIGHT,DISPLAY_WIDTH,4),dtype=np.uint8) + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_REF,data = draw_img_ulab) + # 用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +def media_deinit(): + # meida资源释放 + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + +#********************for face_detect.py******************** +def face_landmark_inference(): + print("face_landmark_test start") + # 人脸检测kpu初始化 + kpu_face_detect = fd_kpu_init(fd_kmodel_file) + # 人脸关键点kpu初始化 + kpu_face_landmark = fld_kpu_init(fr_kmodel_file) + # camera初始化 + camera_init(CAM_DEV_ID_0) + # 显示初始化 + display_init() + + rgb888p_img = None + # 注意:将一定要将一下过程包在try中,用于保证程序停止后,资源释放完毕;确保下次程序仍能正常运行 + try: + # 注意:媒体初始化(注:媒体初始化必须在camera_start之前,确保media缓冲区已配置完全) + ret = media_init() + if ret: + print("face_detect_test, buffer init failed") + return ret + + # 启动camera + camera_start(CAM_DEV_ID_0) + time.sleep(5) + while True: + with ScopedTiming("total",1): + # (1)读取一帧图像 + rgb888p_img = camera_read(CAM_DEV_ID_0) + # (2)若读取失败,释放当前帧 + if rgb888p_img == -1: + print("face_detect_test, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + # (3)若读取成功,推理当前帧 + if rgb888p_img.format() == image.RGBP888: + # (3.1)推理当前图像,并获取人脸检测结果 + dets = fd_kpu_run(kpu_face_detect,rgb888p_img) + # (3.2)针对每个人脸框,推理得到对应人脸关键点 + landmark_result = [] + for det in dets: + ret = fld_kpu_run(kpu_face_landmark,rgb888p_img,det) + landmark_result.append(ret) + # (3.3)将人脸关键点画到屏幕上 + display_draw(dets,landmark_result) + + # (4)释放当前帧 + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + #with ScopedTiming("gc collect", debug_mode > 0): + #gc.collect() + except Exception as e: + # 捕捉运行运行中异常,并打印错误 + print(f"An error occurred during buffer used: {e}") + finally: + # 释放当前帧 + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + # 停止camera + camera_stop(CAM_DEV_ID_0) + # 释放显示资源 + display_deinit() + # 释放kpu资源 + fd_kpu_deinit(kpu_face_detect) + fld_kpu_deinit(kpu_face_landmark) + # 垃圾回收 + gc.collect() + time.sleep(1) + # 释放媒体资源 + ret = media_deinit() + if ret: + print("face_landmark_test, buffer_deinit failed") + return ret + + print("face_landmark_test end") + return 0 + +if __name__ == '__main__': + face_landmark_inference() +``` + +### 2. 人脸识别 + +**人脸注册:** + +```python +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn #nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +import aidemo #aidemo模块,封装ai demo相关后处理、画图操作 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time #时间统计 +import gc #垃圾回收模块 +import os #操作系统接口模块 +import math #数学模块 + +#********************for config.py******************** +# kmodel输入shape +# 人脸检测kmodel输入shape +fd_kmodel_input_shape = (1,3,320,320) +# 人脸识别kmodel输入shape +fr_kmodel_input_shape = (1,3,112,112) +# ai原图padding +rgb_mean = [104,117,123] + +#kmodel相关参数设置 +#人脸检测 +confidence_threshold = 0.5 #人脸检测阈值 +top_k = 5000 +nms_threshold = 0.2 +keep_top_k = 750 +vis_thres = 0.5 +variance = [0.1, 0.2] +anchor_len = 4200 +score_dim = 2 +det_dim = 4 +keypoint_dim = 10 +#人脸识别 +max_register_face = 100 #数据库最多人脸个数 +feature_num = 128 #人脸识别特征维度 + +# 文件配置 +# 人脸检测kmodel +root_dir = '/sdcard/app/tests/' +fd_kmodel_file = root_dir + 'kmodel/face_detection_320.kmodel' +# 人脸识别kmodel +fr_kmodel_file = root_dir + 'kmodel/face_recognition.kmodel' +# 人脸检测anchor +anchors_path = root_dir + 'utils/prior_data_320.bin' +# 人脸注册数据库 +database_dir = root_dir + 'utils/db/' +# 人脸注册数据库原图 +database_img_dir = root_dir + 'utils/db_img/' +# 调试模型,0:不调试,>0:打印对应级别调试信息 +debug_mode = 0 + +#********************for scoped_timing.py******************** +# 时间统计类 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +#********************for ai_utils.py******************** +global current_kmodel_obj #当前kpu实例 +# fd_ai2d: 人脸检测ai2d实例 +# fd_ai2d_input_tensor: 人脸检测ai2d输入 +# fd_ai2d_output_tensor: 人脸检测ai2d输入 +# fd_ai2d_builder: 根据人脸检测ai2d参数,构建的人脸检测ai2d_builder对象 +global fd_ai2d,fd_ai2d_input_tensor,fd_ai2d_output_tensor,fd_ai2d_builder +# fr_ai2d: 人脸识别ai2d实例 +# fr_ai2d_input_tensor: 人脸识别ai2d输入 +# fr_ai2d_output_tensor: 人脸识别ai2d输入 +# fr_ai2d_builder: 根据人脸识别ai2d参数,构建的人脸识别ai2d_builder对象 +global fr_ai2d,fr_ai2d_input_tensor,fr_ai2d_output_tensor,fr_ai2d_builder +global valid_register_face #数据库中有效人脸个数 + +#读取anchor文件,为人脸检测后处理做准备 +print('anchors_path:',anchors_path) +prior_data = np.fromfile(anchors_path, dtype=np.float) +prior_data = prior_data.reshape((anchor_len,det_dim)) + +def get_pad_one_side_param(rgb888p_img): + # 右padding或下padding,获取padding参数 + with ScopedTiming("get_pad_one_side_param", debug_mode > 1): + dst_w = fd_kmodel_input_shape[3] # kmodel输入宽(w) + dst_h = fd_kmodel_input_shape[2] # kmodel输入高(h) + + # 计算最小的缩放比例,等比例缩放 + ratio_w = dst_w / rgb888p_img.shape[3] + ratio_h = dst_h / rgb888p_img.shape[2] + if ratio_w < ratio_h: + ratio = ratio_w + else: + ratio = ratio_h + + # 计算经过缩放后的新宽和新高 + new_w = (int)(ratio * rgb888p_img.shape[3]) + new_h = (int)(ratio * rgb888p_img.shape[2]) + + # 计算需要添加的padding,以使得kmodel输入的宽高和原图一致 + dw = (dst_w - new_w) / 2 + dh = (dst_h - new_h) / 2 + # 四舍五入,确保padding是整数 + top = (int)(round(0)) + bottom = (int)(round(dh * 2 + 0.1)) + left = (int)(round(0)) + right = (int)(round(dw * 2 - 0.1)) + return [0, 0, 0, 0, top, bottom, left, right] + +def fd_ai2d_init(): + # 人脸检测模型ai2d初始化 + with ScopedTiming("fd_ai2d_init",debug_mode > 0): + # (1)创建人脸检测ai2d对象 + global fd_ai2d + fd_ai2d = nn.ai2d() + + #(2)创建人脸检测ai2d_output_tensor,用于保存人脸检测ai2d输出 + global fd_ai2d_output_tensor + data = np.ones(fd_kmodel_input_shape, dtype=np.uint8) + fd_ai2d_output_tensor = nn.from_numpy(data) + +def fd_ai2d_run(rgb888p_img): + # 根据人脸检测ai2d参数,对原图rgb888p_img进行预处理 + with ScopedTiming("fd_ai2d_run",debug_mode > 0): + global fd_ai2d,fd_ai2d_input_tensor,fd_ai2d_output_tensor,fd_ai2d_builder + # (1)根据原图构建ai2d_input_tensor对象 + fd_ai2d_input_tensor = nn.from_numpy(rgb888p_img) + # (2)根据新的图像设置新的人脸检测ai2d参数 + fd_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + fd_ai2d.set_pad_param(True, get_pad_one_side_param(rgb888p_img), 0, rgb_mean) + fd_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + # (3)根据新的人脸检测ai2d参数,构建人脸检测ai2d_builder + fd_ai2d_builder = fd_ai2d.build(rgb888p_img.shape, fd_kmodel_input_shape) + # (4)运行人脸检测ai2d_builder,将结果保存到人脸检测ai2d_output_tensor中 + fd_ai2d_builder.run(fd_ai2d_input_tensor, fd_ai2d_output_tensor) + +def fd_ai2d_release(): + # 释放人脸检测ai2d部分资源 + with ScopedTiming("fd_ai2d_release",debug_mode > 0): + global fd_ai2d_input_tensor,fd_ai2d_builder + del fd_ai2d_input_tensor + del fd_ai2d_builder + + +def fd_kpu_init(kmodel_file): + # 初始化人脸检测kpu对象,并加载kmodel + with ScopedTiming("fd_kpu_init",debug_mode > 0): + # 初始化人脸检测kpu对象 + kpu_obj = nn.kpu() + # 加载人脸检测kmodel + kpu_obj.load_kmodel(kmodel_file) + # 初始化人脸检测ai2d + fd_ai2d_init() + return kpu_obj + +def fd_kpu_pre_process(rgb888p_img): + # 设置人脸检测kpu输入 + # 使用人脸检测ai2d对原图进行预处理(padding,resize) + fd_ai2d_run(rgb888p_img) + with ScopedTiming("fd_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,fd_ai2d_output_tensor + # 设置人脸检测kpu输入 + current_kmodel_obj.set_input_tensor(0, fd_ai2d_output_tensor) + +def fd_kpu_get_output(): + # 获取人脸检测kpu输出 + with ScopedTiming("fd_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + # 获取模型输出,并将结果转换为numpy,以便进行人脸检测后处理 + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + del data + results.append(result) + return results + +def fd_kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)原图预处理,并设置模型输入 + fd_kpu_pre_process(rgb888p_img) + # (2)人脸检测kpu推理 + with ScopedTiming("fd kpu_run",debug_mode > 0): + kpu_obj.run() + # (3)释放人脸检测ai2d资源 + fd_ai2d_release() + # (4)获取人俩检测kpu输出 + results = fd_kpu_get_output() + # (5)人脸检测kpu结果后处理 + with ScopedTiming("fd kpu_post",debug_mode > 0): + post_ret = aidemo.face_det_post_process(confidence_threshold,nms_threshold,fd_kmodel_input_shape[2],prior_data, + [rgb888p_img.shape[3],rgb888p_img.shape[2]],results) + # (6)返回人脸关键点 + if len(post_ret)==0: + return post_ret + else: + return post_ret[0],post_ret[1] #0:det,1:landm,2:score + +def fd_kpu_deinit(kpu_obj): + # kpu释放 + with ScopedTiming("fd_kpu_deinit",debug_mode > 0): + global fd_ai2d, fd_ai2d_output_tensor + del kpu_obj #删除人脸检测kpu_obj变量,释放对它所引用对象的内存引用 + del fd_ai2d #删除人脸检测ai2d变量,释放对它所引用对象的内存引用 + del fd_ai2d_output_tensor #删除人脸检测ai2d_output_tensor变量,释放对它所引用对象的内存引用 + +###############for face recognition############### +# 标准5官 +umeyama_args_112 = [ + 38.2946 , 51.6963 , + 73.5318 , 51.5014 , + 56.0252 , 71.7366 , + 41.5493 , 92.3655 , + 70.7299 , 92.2041 +] + +def svd22(a): + # svd + s = [0.0, 0.0] + u = [0.0, 0.0, 0.0, 0.0] + v = [0.0, 0.0, 0.0, 0.0] + + s[0] = (math.sqrt((a[0] - a[3]) ** 2 + (a[1] + a[2]) ** 2) + math.sqrt((a[0] + a[3]) ** 2 + (a[1] - a[2]) ** 2)) / 2 + s[1] = abs(s[0] - math.sqrt((a[0] - a[3]) ** 2 + (a[1] + a[2]) ** 2)) + v[2] = math.sin((math.atan2(2 * (a[0] * a[1] + a[2] * a[3]), a[0] ** 2 - a[1] ** 2 + a[2] ** 2 - a[3] ** 2)) / 2) if \ + s[0] > s[1] else 0 + v[0] = math.sqrt(1 - v[2] ** 2) + v[1] = -v[2] + v[3] = v[0] + u[0] = -(a[0] * v[0] + a[1] * v[2]) / s[0] if s[0] != 0 else 1 + u[2] = -(a[2] * v[0] + a[3] * v[2]) / s[0] if s[0] != 0 else 0 + u[1] = (a[0] * v[1] + a[1] * v[3]) / s[1] if s[1] != 0 else -u[2] + u[3] = (a[2] * v[1] + a[3] * v[3]) / s[1] if s[1] != 0 else u[0] + v[0] = -v[0] + v[2] = -v[2] + + return u, s, v + + +def image_umeyama_112(src): + # 使用Umeyama算法计算仿射变换矩阵 + SRC_NUM = 5 + SRC_DIM = 2 + src_mean = [0.0, 0.0] + dst_mean = [0.0, 0.0] + + for i in range(0,SRC_NUM * 2,2): + src_mean[0] += src[i] + src_mean[1] += src[i + 1] + dst_mean[0] += umeyama_args_112[i] + dst_mean[1] += umeyama_args_112[i + 1] + + src_mean[0] /= SRC_NUM + src_mean[1] /= SRC_NUM + dst_mean[0] /= SRC_NUM + dst_mean[1] /= SRC_NUM + + src_demean = [[0.0, 0.0] for _ in range(SRC_NUM)] + dst_demean = [[0.0, 0.0] for _ in range(SRC_NUM)] + + for i in range(SRC_NUM): + src_demean[i][0] = src[2 * i] - src_mean[0] + src_demean[i][1] = src[2 * i + 1] - src_mean[1] + dst_demean[i][0] = umeyama_args_112[2 * i] - dst_mean[0] + dst_demean[i][1] = umeyama_args_112[2 * i + 1] - dst_mean[1] + + A = [[0.0, 0.0], [0.0, 0.0]] + for i in range(SRC_DIM): + for k in range(SRC_DIM): + for j in range(SRC_NUM): + A[i][k] += dst_demean[j][i] * src_demean[j][k] + A[i][k] /= SRC_NUM + + T = [[1, 0, 0], [0, 1, 0], [0, 0, 1]] + U, S, V = svd22([A[0][0], A[0][1], A[1][0], A[1][1]]) + + T[0][0] = U[0] * V[0] + U[1] * V[2] + T[0][1] = U[0] * V[1] + U[1] * V[3] + T[1][0] = U[2] * V[0] + U[3] * V[2] + T[1][1] = U[2] * V[1] + U[3] * V[3] + + scale = 1.0 + src_demean_mean = [0.0, 0.0] + src_demean_var = [0.0, 0.0] + for i in range(SRC_NUM): + src_demean_mean[0] += src_demean[i][0] + src_demean_mean[1] += src_demean[i][1] + + src_demean_mean[0] /= SRC_NUM + src_demean_mean[1] /= SRC_NUM + + for i in range(SRC_NUM): + src_demean_var[0] += (src_demean_mean[0] - src_demean[i][0]) * (src_demean_mean[0] - src_demean[i][0]) + src_demean_var[1] += (src_demean_mean[1] - src_demean[i][1]) * (src_demean_mean[1] - src_demean[i][1]) + + src_demean_var[0] /= SRC_NUM + src_demean_var[1] /= SRC_NUM + + scale = 1.0 / (src_demean_var[0] + src_demean_var[1]) * (S[0] + S[1]) + T[0][2] = dst_mean[0] - scale * (T[0][0] * src_mean[0] + T[0][1] * src_mean[1]) + T[1][2] = dst_mean[1] - scale * (T[1][0] * src_mean[0] + T[1][1] * src_mean[1]) + T[0][0] *= scale + T[0][1] *= scale + T[1][0] *= scale + T[1][1] *= scale + return T + +def get_affine_matrix(sparse_points): + # 获取affine变换矩阵 + with ScopedTiming("get_affine_matrix", debug_mode > 1): + # 使用Umeyama算法计算仿射变换矩阵 + matrix_dst = image_umeyama_112(sparse_points) + matrix_dst = [matrix_dst[0][0],matrix_dst[0][1],matrix_dst[0][2], + matrix_dst[1][0],matrix_dst[1][1],matrix_dst[1][2]] + return matrix_dst + +def fr_ai2d_init(): + with ScopedTiming("fr_ai2d_init",debug_mode > 0): + # (1)人脸识别ai2d初始化 + global fr_ai2d + fr_ai2d = nn.ai2d() + + # (2)人脸识别ai2d_output_tensor初始化,用于存放ai2d输出 + global fr_ai2d_output_tensor + data = np.ones(fr_kmodel_input_shape, dtype=np.uint8) + fr_ai2d_output_tensor = nn.from_numpy(data) + +def fr_ai2d_run(rgb888p_img,sparse_points): + # 人脸识别ai2d推理 + with ScopedTiming("fr_ai2d_run",debug_mode > 0): + global fr_ai2d,fr_ai2d_input_tensor,fr_ai2d_output_tensor + #(1)根据原图创建人脸识别ai2d_input_tensor对象 + fr_ai2d_input_tensor = nn.from_numpy(rgb888p_img) + #(2)根据新的人脸关键点设置新的人脸识别ai2d参数 + fr_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + affine_matrix = get_affine_matrix(sparse_points) + fr_ai2d.set_affine_param(True,nn.interp_method.cv2_bilinear,0, 0, 127, 1,affine_matrix) + global fr_ai2d_builder + # (3)根据新的人脸识别ai2d参数,构建识别ai2d_builder + fr_ai2d_builder = fr_ai2d.build(rgb888p_img.shape, fr_kmodel_input_shape) + # (4)推理人脸识别ai2d,将预处理的结果保存到fr_ai2d_output_tensor + fr_ai2d_builder.run(fr_ai2d_input_tensor, fr_ai2d_output_tensor) + +def fr_ai2d_release(): + # 释放人脸识别ai2d_input_tensor、ai2d_builder + with ScopedTiming("fr_ai2d_release",debug_mode > 0): + global fr_ai2d_input_tensor,fr_ai2d_builder + del fr_ai2d_input_tensor + del fr_ai2d_builder + +def fr_kpu_init(kmodel_file): + # 人脸识别kpu初始化 + with ScopedTiming("fr_kpu_init",debug_mode > 0): + # 初始化人脸识别kpu对象 + kpu_obj = nn.kpu() + # 加载人脸识别kmodel + kpu_obj.load_kmodel(kmodel_file) + # 初始化人脸识别ai2d + fr_ai2d_init() + return kpu_obj + +def fr_kpu_pre_process(rgb888p_img,sparse_points): + # 人脸识别kpu预处理 + # 人脸识别ai2d推理,根据关键点对原图进行预处理 + fr_ai2d_run(rgb888p_img,sparse_points) + with ScopedTiming("fr_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,fr_ai2d_output_tensor + # 将人脸识别ai2d输出设置为人脸识别kpu输入 + current_kmodel_obj.set_input_tensor(0, fr_ai2d_output_tensor) + + #ai2d_out_data = fr_ai2d_output_tensor.to_numpy() + #print('ai2d_out_data.shape:',ai2d_out_data.shape) + #with open("/sdcard/app/ai2d_out.bin", "wb") as file: + #file.write(ai2d_out_data.tobytes()) + +def fr_kpu_get_output(): + # 获取人脸识别kpu输出 + with ScopedTiming("fr_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + data = current_kmodel_obj.get_output_tensor(0) + result = data.to_numpy() + del data + return result[0] + +def fr_kpu_run(kpu_obj,rgb888p_img,sparse_points): + # 人脸识别kpu推理 + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)人脸识别kpu预处理,设置kpu输入 + fr_kpu_pre_process(rgb888p_img,sparse_points) + # (2)人脸识别kpu推理 + with ScopedTiming("fr kpu_run",debug_mode > 0): + kpu_obj.run() + # (3)释放人脸识别ai2d + fr_ai2d_release() + # (4)获取人脸识别kpu输出 + results = fr_kpu_get_output() + return results + +def fr_kpu_deinit(kpu_obj): + # 人脸识别kpu相关资源释放 + with ScopedTiming("fr_kpu_deinit",debug_mode > 0): + global fr_ai2d + del kpu_obj + del fr_ai2d + +#********************for face_detect.py******************** +def image2rgb888array(img): #4维 + # 将Image转换为rgb888格式 + with ScopedTiming("fr_kpu_deinit",debug_mode > 0): + img_data_rgb888=img.to_rgb888() + # hwc,rgb888 + img_hwc=img_data_rgb888.to_numpy_ref() + shape=img_hwc.shape + img_tmp = img_hwc.reshape((shape[0] * shape[1], shape[2])) + img_tmp_trans = img_tmp.transpose() + img_res=img_tmp_trans.copy() + # chw,rgb888 + img_return=img_res.reshape((1,shape[2],shape[0],shape[1])) + return img_return + +def face_registration_inference(): + print("face_registration_test start") + # 人脸检测kpu初始化 + kpu_face_detect = fd_kpu_init(fd_kmodel_file) + # 人脸识别kpu初始化 + kpu_face_reg = fr_kpu_init(fr_kmodel_file) + try: + # 获取图像列表 + img_list = os.listdir(database_img_dir) + for img_file in img_list: + with ScopedTiming("total",1): + # (1)读取一张图像 + full_img_file = database_img_dir + img_file + print(full_img_file) + img = image.Image(full_img_file) + rgb888p_img_ndarry = image2rgb888array(img) + + #(2)推理得到人脸检测kpu,得到人脸检测框、人脸五点 + dets,landms = fd_kpu_run(kpu_face_detect,rgb888p_img_ndarry) + if dets: + if dets.shape[0] == 1: + #(3)若是只检测到一张人脸,则将该人脸注册到数据库 + db_i_name = img_file.split('.')[0] + for landm in landms: + reg_result = fr_kpu_run(kpu_face_reg,rgb888p_img_ndarry,landm) + #print('\nwrite bin:',database_dir+'{}.bin'.format(db_i_name)) + with open(database_dir+'{}.bin'.format(db_i_name), "wb") as file: + file.write(reg_result.tobytes()) + else: + print('Only one person in a picture when you sign up') + else: + print('No person detected') + + gc.collect() + except Exception as e: + print(f"An error occurred during buffer used: {e}") + finally: + # 释放kpu资源 + fd_kpu_deinit(kpu_face_detect) + fr_kpu_deinit(kpu_face_reg) + # 垃圾回收 + gc.collect() + time.sleep(1) + + print("face_registration_test end") + return 0 + +if __name__ == '__main__': + face_registration_inference() +``` + +**人脸识别:** + +```python +import ulab.numpy as np # 类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn # nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +from media.camera import * # 摄像头模块 +from media.display import * # 显示模块 +from media.media import * # 软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +import aidemo # aidemo模块,封装ai demo相关后处理、画图操作 +import image # 图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time # 时间统计 +import gc # 垃圾回收模块 +import os # 操作系统接口模块 +import math # 数学模块 + +#********************for config.py******************** +# display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) # 显示宽度要求16位对齐 +DISPLAY_HEIGHT = 1080 + +# ai原图分辨率,sensor默认出图为16:9,若需不形变原图,最好按照16:9比例设置宽高 +OUT_RGB888P_WIDTH = ALIGN_UP(1920, 16) # ai原图宽度要求16位对齐 +OUT_RGB888P_HEIGH = 1080 + +# kmodel输入shape +# 人脸检测kmodel输入shape +fd_kmodel_input_shape = (1,3,320,320) +# 人脸识别kmodel输入shape +fr_kmodel_input_shape = (1,3,112,112) +# ai原图padding +rgb_mean = [104,117,123] + +#kmodel相关参数设置 +#人脸检测 +confidence_threshold = 0.5 #人脸检测阈值 +top_k = 5000 +nms_threshold = 0.2 +keep_top_k = 750 +vis_thres = 0.5 +variance = [0.1, 0.2] +anchor_len = 4200 +score_dim = 2 +det_dim = 4 +keypoint_dim = 10 +#人脸识别 +max_register_face = 100 # 数据库最多人脸个数 +feature_num = 128 # 人脸识别特征维度 +face_recognition_threshold = 0.75 # 人脸识别阈值 + +#文件配置 +# 人脸检测kmodel +root_dir = '/sdcard/app/tests/' +fd_kmodel_file = root_dir + 'kmodel/face_detection_320.kmodel' +# 人脸识别kmodel +fr_kmodel_file = root_dir + 'kmodel/face_recognition.kmodel' +# 人脸检测anchor +anchors_path = root_dir + 'utils/prior_data_320.bin' +# 人脸数据库 +database_dir = root_dir + 'utils/db/' +# 调试模型,0:不调试,>0:打印对应级别调试信息 +debug_mode = 0 + +#********************for scoped_timing.py******************** +# 时间统计类 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +#********************for ai_utils.py******************** +global current_kmodel_obj #当前kpu实例 +# fd_ai2d: 人脸检测ai2d实例 +# fd_ai2d_input_tensor: 人脸检测ai2d输入 +# fd_ai2d_output_tensor: 人脸检测ai2d输入 +# fd_ai2d_builder: 根据人脸检测ai2d参数,构建的人脸检测ai2d_builder对象 +global fd_ai2d,fd_ai2d_input_tensor,fd_ai2d_output_tensor,fd_ai2d_builder +# fr_ai2d: 人脸识别ai2d实例 +# fr_ai2d_input_tensor: 人脸识别ai2d输入 +# fr_ai2d_output_tensor: 人脸识别ai2d输入 +# fr_ai2d_builder: 根据人脸识别ai2d参数,构建的人脸识别ai2d_builder对象 +global fr_ai2d,fr_ai2d_input_tensor,fr_ai2d_output_tensor,fr_ai2d_builder +# valid_register_face: 数据库中有效人脸个数 +# db_name: 数据库人名列表 +# db_data: 数据库特征列表 +global valid_register_face,db_name,db_data + +#读取anchor文件,为人脸检测后处理做准备 +print('anchors_path:',anchors_path) +prior_data = np.fromfile(anchors_path, dtype=np.float) +prior_data = prior_data.reshape((anchor_len,det_dim)) + +def get_pad_one_side_param(): + # 右padding或下padding,获取padding参数 + dst_w = fd_kmodel_input_shape[3] # kmodel输入宽(w) + dst_h = fd_kmodel_input_shape[2] # kmodel输入高(h) + + # OUT_RGB888P_WIDTH:原图宽(w) + # OUT_RGB888P_HEIGH:原图高(h) + # 计算最小的缩放比例,等比例缩放 + ratio_w = dst_w / OUT_RGB888P_WIDTH + ratio_h = dst_h / OUT_RGB888P_HEIGH + if ratio_w < ratio_h: + ratio = ratio_w + else: + ratio = ratio_h + # 计算经过缩放后的新宽和新高 + new_w = (int)(ratio * OUT_RGB888P_WIDTH) + new_h = (int)(ratio * OUT_RGB888P_HEIGH) + + # 计算需要添加的padding,以使得kmodel输入的宽高和原图一致 + dw = (dst_w - new_w) / 2 + dh = (dst_h - new_h) / 2 + # 四舍五入,确保padding是整数 + top = (int)(round(0)) + bottom = (int)(round(dh * 2 + 0.1)) + left = (int)(round(0)) + right = (int)(round(dw * 2 - 0.1)) + return [0, 0, 0, 0, top, bottom, left, right] + +def fd_ai2d_init(): + # 人脸检测模型ai2d初始化 + with ScopedTiming("fd_ai2d_init",debug_mode > 0): + # (1)创建人脸检测ai2d对象 + global fd_ai2d + fd_ai2d = nn.ai2d() + # (2)设置人脸检测ai2d参数 + fd_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + fd_ai2d.set_pad_param(True, get_pad_one_side_param(), 0, rgb_mean) + fd_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + + #(3)人脸检测ai2d_builder,根据人脸检测ai2d参数、输入输出大小创建ai2d_builder对象 + global fd_ai2d_builder + fd_ai2d_builder = fd_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], fd_kmodel_input_shape) + + #(4)创建人脸检测ai2d_output_tensor,用于保存人脸检测ai2d输出 + global fd_ai2d_output_tensor + data = np.ones(fd_kmodel_input_shape, dtype=np.uint8) + fd_ai2d_output_tensor = nn.from_numpy(data) + +def fd_ai2d_run(rgb888p_img): + # 根据人脸检测ai2d参数,对原图rgb888p_img进行预处理 + with ScopedTiming("fd_ai2d_run",debug_mode > 0): + global fd_ai2d_input_tensor,fd_ai2d_output_tensor,fd_ai2d_builder + # (1)根据原图构建ai2d_input_tensor对象 + ai2d_input = rgb888p_img.to_numpy_ref() + fd_ai2d_input_tensor = nn.from_numpy(ai2d_input) + # (2)运行人脸检测ai2d_builder,将结果保存到人脸检测ai2d_output_tensor中 + fd_ai2d_builder.run(fd_ai2d_input_tensor, fd_ai2d_output_tensor) + +def fd_ai2d_release(): + # 释放人脸检测ai2d_input_tensor + with ScopedTiming("fd_ai2d_release",debug_mode > 0): + global fd_ai2d_input_tensor + del fd_ai2d_input_tensor + + +def fd_kpu_init(kmodel_file): + # 初始化人脸检测kpu对象,并加载kmodel + with ScopedTiming("fd_kpu_init",debug_mode > 0): + # 初始化人脸检测kpu对象 + kpu_obj = nn.kpu() + # 加载人脸检测kmodel + kpu_obj.load_kmodel(kmodel_file) + # 初始化人脸检测ai2d + fd_ai2d_init() + return kpu_obj + +def fd_kpu_pre_process(rgb888p_img): + # 设置人脸检测kpu输入 + # 使用人脸检测ai2d对原图进行预处理(padding,resize) + fd_ai2d_run(rgb888p_img) + with ScopedTiming("fd_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,fd_ai2d_output_tensor + # 设置人脸检测kpu输入 + current_kmodel_obj.set_input_tensor(0, fd_ai2d_output_tensor) + +def fd_kpu_get_output(): + # 获取人脸检测kpu输出 + with ScopedTiming("fd_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + # 获取模型输出,并将结果转换为numpy,以便进行人脸检测后处理 + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + del data + results.append(result) + return results + +def fd_kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)原图预处理,并设置模型输入 + fd_kpu_pre_process(rgb888p_img) + # (2)人脸检测kpu推理 + with ScopedTiming("fd kpu_run",debug_mode > 0): + kpu_obj.run() + # (3)释放人脸检测ai2d资源 + fd_ai2d_release() + # (4)获取人俩检测kpu输出 + results = fd_kpu_get_output() + # (5)人脸检测kpu结果后处理 + with ScopedTiming("fd kpu_post",debug_mode > 0): + post_ret = aidemo.face_det_post_process(confidence_threshold,nms_threshold,fd_kmodel_input_shape[2],prior_data, + [OUT_RGB888P_WIDTH,OUT_RGB888P_HEIGH],results) + # (6)返回人脸检测框 + if len(post_ret)==0: + return post_ret,post_ret + else: + return post_ret[0],post_ret[1] #0:det,1:landm,2:score + +def fd_kpu_deinit(kpu_obj): + # kpu释放 + with ScopedTiming("fd_kpu_deinit",debug_mode > 0): + global fd_ai2d, fd_ai2d_output_tensor + del kpu_obj #删除人脸检测kpu_obj变量,释放对它所引用对象的内存引用 + del fd_ai2d #删除人脸检测ai2d变量,释放对它所引用对象的内存引用 + del fd_ai2d_output_tensor #删除人脸检测ai2d_output_tensor变量,释放对它所引用对象的内存引用 + +###############for face recognition############### +##for database +def database_init(): + # 数据初始化,构建数据库人名列表和数据库特征列表 + with ScopedTiming("database_init", debug_mode > 1): + global valid_register_face,db_name,db_data + valid_register_face = 0 + db_name = [] + db_data = [] + + db_file_list = os.listdir(database_dir) + for db_file in db_file_list: + if not db_file.endswith('.bin'): + continue + if valid_register_face >= max_register_face: + break + valid_index = valid_register_face + full_db_file = database_dir + db_file + with open(full_db_file, 'rb') as f: + data = f.read() + feature = np.frombuffer(data, dtype=np.float) + db_data.append(feature) + name = db_file.split('.')[0] + db_name.append(name) + valid_register_face += 1 + +def database_reset(): + # 数据库清空 + with ScopedTiming("database_reset", debug_mode > 1): + global valid_register_face,db_name,db_data + print("database clearing...") + db_name = [] + db_data = [] + valid_register_face = 0 + print("database clear Done!") + +def database_search(feature): + # 数据库查询 + with ScopedTiming("database_search", debug_mode > 1): + global valid_register_face,db_name,db_data + v_id = -1 + v_score_max = 0.0 + + # 将当前人脸特征归一化 + feature /= np.linalg.norm(feature) + # 遍历当前人脸数据库,统计最高得分 + for i in range(valid_register_face): + db_feature = db_data[i] + db_feature /= np.linalg.norm(db_feature) + # 计算数据库特征与当前人脸特征相似度 + v_score = np.dot(feature, db_feature)/2 + 0.5 + if v_score > v_score_max: + v_score_max = v_score + v_id = i + + if v_id == -1: + # 数据库中无人脸 + return 'unknown' + elif v_score_max < face_recognition_threshold: + # 小于人脸识别阈值,未识别 + print('v_score_max:',v_score_max) + return 'unknown' + else: + # 识别成功 + result = 'name: {}, score:{}'.format(db_name[v_id],v_score_max) + return result + +# 标准5官 +umeyama_args_112 = [ + 38.2946 , 51.6963 , + 73.5318 , 51.5014 , + 56.0252 , 71.7366 , + 41.5493 , 92.3655 , + 70.7299 , 92.2041 +] + +def svd22(a): + # svd + s = [0.0, 0.0] + u = [0.0, 0.0, 0.0, 0.0] + v = [0.0, 0.0, 0.0, 0.0] + + s[0] = (math.sqrt((a[0] - a[3]) ** 2 + (a[1] + a[2]) ** 2) + math.sqrt((a[0] + a[3]) ** 2 + (a[1] - a[2]) ** 2)) / 2 + s[1] = abs(s[0] - math.sqrt((a[0] - a[3]) ** 2 + (a[1] + a[2]) ** 2)) + v[2] = math.sin((math.atan2(2 * (a[0] * a[1] + a[2] * a[3]), a[0] ** 2 - a[1] ** 2 + a[2] ** 2 - a[3] ** 2)) / 2) if \ + s[0] > s[1] else 0 + v[0] = math.sqrt(1 - v[2] ** 2) + v[1] = -v[2] + v[3] = v[0] + u[0] = -(a[0] * v[0] + a[1] * v[2]) / s[0] if s[0] != 0 else 1 + u[2] = -(a[2] * v[0] + a[3] * v[2]) / s[0] if s[0] != 0 else 0 + u[1] = (a[0] * v[1] + a[1] * v[3]) / s[1] if s[1] != 0 else -u[2] + u[3] = (a[2] * v[1] + a[3] * v[3]) / s[1] if s[1] != 0 else u[0] + v[0] = -v[0] + v[2] = -v[2] + + return u, s, v + + +def image_umeyama_112(src): + # 使用Umeyama算法计算仿射变换矩阵 + SRC_NUM = 5 + SRC_DIM = 2 + src_mean = [0.0, 0.0] + dst_mean = [0.0, 0.0] + + for i in range(0,SRC_NUM * 2,2): + src_mean[0] += src[i] + src_mean[1] += src[i + 1] + dst_mean[0] += umeyama_args_112[i] + dst_mean[1] += umeyama_args_112[i + 1] + + src_mean[0] /= SRC_NUM + src_mean[1] /= SRC_NUM + dst_mean[0] /= SRC_NUM + dst_mean[1] /= SRC_NUM + + src_demean = [[0.0, 0.0] for _ in range(SRC_NUM)] + dst_demean = [[0.0, 0.0] for _ in range(SRC_NUM)] + + for i in range(SRC_NUM): + src_demean[i][0] = src[2 * i] - src_mean[0] + src_demean[i][1] = src[2 * i + 1] - src_mean[1] + dst_demean[i][0] = umeyama_args_112[2 * i] - dst_mean[0] + dst_demean[i][1] = umeyama_args_112[2 * i + 1] - dst_mean[1] + + A = [[0.0, 0.0], [0.0, 0.0]] + for i in range(SRC_DIM): + for k in range(SRC_DIM): + for j in range(SRC_NUM): + A[i][k] += dst_demean[j][i] * src_demean[j][k] + A[i][k] /= SRC_NUM + + T = [[1, 0, 0], [0, 1, 0], [0, 0, 1]] + U, S, V = svd22([A[0][0], A[0][1], A[1][0], A[1][1]]) + + T[0][0] = U[0] * V[0] + U[1] * V[2] + T[0][1] = U[0] * V[1] + U[1] * V[3] + T[1][0] = U[2] * V[0] + U[3] * V[2] + T[1][1] = U[2] * V[1] + U[3] * V[3] + + scale = 1.0 + src_demean_mean = [0.0, 0.0] + src_demean_var = [0.0, 0.0] + for i in range(SRC_NUM): + src_demean_mean[0] += src_demean[i][0] + src_demean_mean[1] += src_demean[i][1] + + src_demean_mean[0] /= SRC_NUM + src_demean_mean[1] /= SRC_NUM + + for i in range(SRC_NUM): + src_demean_var[0] += (src_demean_mean[0] - src_demean[i][0]) * (src_demean_mean[0] - src_demean[i][0]) + src_demean_var[1] += (src_demean_mean[1] - src_demean[i][1]) * (src_demean_mean[1] - src_demean[i][1]) + + src_demean_var[0] /= SRC_NUM + src_demean_var[1] /= SRC_NUM + + scale = 1.0 / (src_demean_var[0] + src_demean_var[1]) * (S[0] + S[1]) + T[0][2] = dst_mean[0] - scale * (T[0][0] * src_mean[0] + T[0][1] * src_mean[1]) + T[1][2] = dst_mean[1] - scale * (T[1][0] * src_mean[0] + T[1][1] * src_mean[1]) + T[0][0] *= scale + T[0][1] *= scale + T[1][0] *= scale + T[1][1] *= scale + return T + +def get_affine_matrix(sparse_points): + # 获取放射变换矩阵 + with ScopedTiming("get_affine_matrix", debug_mode > 1): + # 使用Umeyama算法计算仿射变换矩阵 + matrix_dst = image_umeyama_112(sparse_points) + matrix_dst = [matrix_dst[0][0],matrix_dst[0][1],matrix_dst[0][2], + matrix_dst[1][0],matrix_dst[1][1],matrix_dst[1][2]] + return matrix_dst + +def fr_ai2d_init(): + with ScopedTiming("fr_ai2d_init",debug_mode > 0): + # (1)人脸识别ai2d初始化 + global fr_ai2d + fr_ai2d = nn.ai2d() + + # (2)人脸识别ai2d_output_tensor初始化,用于存放ai2d输出 + global fr_ai2d_output_tensor + data = np.ones(fr_kmodel_input_shape, dtype=np.uint8) + fr_ai2d_output_tensor = nn.from_numpy(data) + +def fr_ai2d_run(rgb888p_img,sparse_points): + # 人脸识别ai2d推理 + with ScopedTiming("fr_ai2d_run",debug_mode > 0): + global fr_ai2d,fr_ai2d_input_tensor,fr_ai2d_output_tensor + #(1)根据原图创建人脸识别ai2d_input_tensor对象 + ai2d_input = rgb888p_img.to_numpy_ref() + fr_ai2d_input_tensor = nn.from_numpy(ai2d_input) + #(2)根据新的人脸关键点设置新的人脸识别ai2d参数 + fr_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + affine_matrix = get_affine_matrix(sparse_points) + fr_ai2d.set_affine_param(True,nn.interp_method.cv2_bilinear,0, 0, 127, 1,affine_matrix) + global fr_ai2d_builder + # (3)根据新的人脸识别ai2d参数,构建识别ai2d_builder + fr_ai2d_builder = fr_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], fr_kmodel_input_shape) + # (4)推理人脸识别ai2d,将预处理的结果保存到fr_ai2d_output_tensor + fr_ai2d_builder.run(fr_ai2d_input_tensor, fr_ai2d_output_tensor) + +def fr_ai2d_release(): + # 释放人脸识别ai2d_input_tensor、ai2d_builder + with ScopedTiming("fr_ai2d_release",debug_mode > 0): + global fr_ai2d_input_tensor,fr_ai2d_builder + del fr_ai2d_input_tensor + del fr_ai2d_builder + +def fr_kpu_init(kmodel_file): + # 人脸识别kpu初始化 + with ScopedTiming("fr_kpu_init",debug_mode > 0): + # 初始化人脸识别kpu对象 + kpu_obj = nn.kpu() + # 加载人脸识别kmodel + kpu_obj.load_kmodel(kmodel_file) + # 初始化人脸识别ai2d + fr_ai2d_init() + # 数据库初始化 + database_init() + return kpu_obj + +def fr_kpu_pre_process(rgb888p_img,sparse_points): + # 人脸识别kpu预处理 + # 人脸识别ai2d推理,根据关键点对原图进行预处理 + fr_ai2d_run(rgb888p_img,sparse_points) + with ScopedTiming("fr_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,fr_ai2d_output_tensor + # 将人脸识别ai2d输出设置为人脸识别kpu输入 + current_kmodel_obj.set_input_tensor(0, fr_ai2d_output_tensor) + + #ai2d_out_data = fr_ai2d_output_tensor.to_numpy() + #print('ai2d_out_data.shape:',ai2d_out_data.shape) + #with open("/sdcard/app/ai2d_out.bin", "wb") as file: + #file.write(ai2d_out_data.tobytes()) + +def fr_kpu_get_output(): + # 获取人脸识别kpu输出 + with ScopedTiming("fr_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + data = current_kmodel_obj.get_output_tensor(0) + result = data.to_numpy() + del data + return result[0] + +def fr_kpu_run(kpu_obj,rgb888p_img,sparse_points): + # 人脸识别kpu推理 + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)人脸识别kpu预处理,设置kpu输入 + fr_kpu_pre_process(rgb888p_img,sparse_points) + # (2)人脸识别kpu推理 + with ScopedTiming("fr kpu_run",debug_mode > 0): + kpu_obj.run() + # (3)释放人脸识别ai2d + fr_ai2d_release() + # (4)获取人脸识别kpu输出 + results = fr_kpu_get_output() + # (5)在数据库中查找当前人脸特征 + recg_result = database_search(results) + return recg_result + +def fr_kpu_deinit(kpu_obj): + # 人脸识别kpu相关资源释放 + with ScopedTiming("fr_kpu_deinit",debug_mode > 0): + global fr_ai2d + del kpu_obj + del fr_ai2d + +#********************for media_utils.py******************** +global draw_img,osd_img #for display +global buffer,media_source,media_sink #for media + +# for display,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.2 +def display_init(): + # hdmi显示初始化 + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +def display_deinit(): + # 释放显示资源 + display.deinit() + +def display_draw(dets,recg_results): + # 在显示器上写人脸识别结果 + with ScopedTiming("display_draw",debug_mode >0): + global draw_img,osd_img + if dets: + draw_img.clear() + for i,det in enumerate(dets): + # (1)画人脸框 + x1, y1, w, h = map(lambda x: int(round(x, 0)), det[:4]) + x1 = x1 * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + y1 = y1 * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH + w = w * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + h = h * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH + draw_img.draw_rectangle(x1,y1, w, h, color=(255,0, 255, 0)) + + # (2)写人脸识别结果 + recg_text = recg_results[i] + draw_img.draw_string(x1,y1,recg_text,color=(255,0, 0, 255),scale=4) + + # (3)将画图结果拷贝到osd + draw_img.copy_to(osd_img) + # (4)将osd显示到屏幕 + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + # (1)清空用来画框的图像 + draw_img.clear() + # (2)清空osd + draw_img.copy_to(osd_img) + # (3)显示透明图层 + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +#for camera,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.1 +def camera_init(dev_id): + # camera初始化 + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_BGR_888_PLANAR) + +def camera_start(dev_id): + # camera启动 + camera.start_stream(dev_id) + +def camera_read(dev_id): + # 读取一帧图像 + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +def camera_release_image(dev_id,rgb888p_img): + # 释放一帧图像 + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +def camera_stop(dev_id): + # 停止camera + camera.stop_stream(dev_id) + +#for media,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.3 +def media_init(): + # meida初始化 + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 用于画框 + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_MPGC) + # 用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +def media_deinit(): + # meida资源释放 + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + +#********************for face_detect.py******************** +def face_recognition_inference(): + print("face_recognition_test start") + # 人脸检测kpu初始化 + kpu_face_detect = fd_kpu_init(fd_kmodel_file) + # 人脸关键点kpu初始化 + kpu_face_recg = fr_kpu_init(fr_kmodel_file) + # camera初始化 + camera_init(CAM_DEV_ID_0) + # 显示初始化 + display_init() + + rgb888p_img = None + # 注意:将一定要将一下过程包在try中,用于保证程序停止后,资源释放完毕;确保下次程序仍能正常运行 + try: + # 注意:媒体初始化(注:媒体初始化必须在camera_start之前,确保media缓冲区已配置完全) + ret = media_init() + if ret: + print("face_detect_test, buffer init failed") + return ret + + # 启动camera + camera_start(CAM_DEV_ID_0) + time.sleep(5) + while True: + with ScopedTiming("total",1): + # (1)读取一帧图像 + rgb888p_img = camera_read(CAM_DEV_ID_0) + # (2)若读取失败,释放当前帧 + if rgb888p_img == -1: + print("face_detect_test, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # (3)若读取成功,推理当前帧 + if rgb888p_img.format() == image.RGBP888: + # (3.1)推理当前图像,并获取人脸检测结果 + dets,landms = fd_kpu_run(kpu_face_detect,rgb888p_img) + recg_result = [] + for landm in landms: + # (3.2)针对每个人脸五官点,推理得到人脸特征,并计算特征在数据库中相似度 + ret = fr_kpu_run(kpu_face_recg,rgb888p_img,landm) + recg_result.append(ret) + # (3.3)将识别结果画到显示器上 + display_draw(dets,recg_result) + + # (4)释放当前帧 + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + gc.collect() + except Exception as e: + # 捕捉运行运行中异常,并打印错误 + print(f"An error occurred during buffer used: {e}") + finally: + # 释放当前帧 + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + # 停止camera + camera_stop(CAM_DEV_ID_0) + # 释放显示资源 + display_deinit() + # 释放kpu资源 + fd_kpu_deinit(kpu_face_detect) + fr_kpu_deinit(kpu_face_recg) + # 垃圾回收 + gc.collect() + time.sleep(1) + # 释放媒体资源 + ret = media_deinit() + if ret: + print("face_recognition_test, buffer_deinit failed") + return ret + + print("face_recognition_test end") + return 0 + +if __name__ == '__main__': + face_recognition_inference() +``` + +### 3.人脸姿态角 + +```python +import ulab.numpy as np # 类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn # nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +from media.camera import * # 摄像头模块 +from media.display import * # 显示模块 +from media.media import * # 软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +import aidemo # aidemo模块,封装ai demo相关后处理、画图操作 +import image # 图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time # 时间统计 +import gc # 垃圾回收模块 +import os # 操作系统接口模块 +import math # 数学模块 + +#********************for config.py******************** +# display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) # 显示宽度要求16位对齐 +DISPLAY_HEIGHT = 1080 + +# ai原图分辨率,sensor默认出图为16:9,若需不形变原图,最好按照16:9比例设置宽高 +OUT_RGB888P_WIDTH = ALIGN_UP(1920, 16) # ai原图宽度要求16位对齐 +OUT_RGB888P_HEIGH = 1080 + +# kmodel参数设置 +# 人脸检测kmodel输入shape +fd_kmodel_input_shape = (1,3,320,320) +# 人脸姿态估计kmodel输入shape +fp_kmodel_input_shape = (1,3,120,120) +# ai原图padding +rgb_mean = [104,117,123] + +#人脸检测kmodel其它参数设置 +confidence_threshold = 0.5 # 人脸检测阈值 +top_k = 5000 +nms_threshold = 0.2 +keep_top_k = 750 +vis_thres = 0.5 +variance = [0.1, 0.2] +anchor_len = 4200 +score_dim = 2 +det_dim = 4 +keypoint_dim = 10 + +# 文件配置 +# 人脸检测kmodel文件配置 +root_dir = '/sdcard/app/tests/' +fd_kmodel_file = root_dir + 'kmodel/face_detection_320.kmodel' +# 人脸姿态估计kmodel文件配置 +fp_kmodel_file = root_dir + 'kmodel/face_pose.kmodel' +# anchor文件配置 +anchors_path = root_dir + 'utils/prior_data_320.bin' +# 调试模型,0:不调试,>0:打印对应级别调试信息 +debug_mode = 0 + +#********************for scoped_timing.py******************** +# 时间统计类 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +#********************for ai_utils.py******************** +global current_kmodel_obj #当前kpu对象 +# fd_ai2d: 人脸检测ai2d实例 +# fd_ai2d_input_tensor: 人脸检测ai2d输入 +# fd_ai2d_output_tensor: 人脸检测ai2d输入 +# fd_ai2d_builder: 根据人脸检测ai2d参数,构建的人脸检测ai2d_builder对象 +global fd_ai2d,fd_ai2d_input_tensor,fd_ai2d_output_tensor,fd_ai2d_builder +# fld_ai2d: 人脸姿态估计ai2d实例 +# fld_ai2d_input_tensor: 人脸姿态估计ai2d输入 +# fld_ai2d_output_tensor:人脸姿态估计ai2d输入 +# fld_ai2d_builder: 根据人脸姿态估计ai2d参数,构建的人脸姿态估计ai2d_builder对象 +global fp_ai2d,fp_ai2d_input_tensor,fp_ai2d_output_tensor,fp_ai2d_builder +global matrix_dst #人脸仿射变换矩阵 +#读取anchor文件,为人脸检测后处理做准备 +print('anchors_path:',anchors_path) +prior_data = np.fromfile(anchors_path, dtype=np.float) +prior_data = prior_data.reshape((anchor_len,det_dim)) + +def get_pad_one_side_param(): + # 右padding或下padding,获取padding参数 + dst_w = fd_kmodel_input_shape[3] # kmodel输入宽(w) + dst_h = fd_kmodel_input_shape[2] # kmodel输入高(h) + + # OUT_RGB888P_WIDTH:原图宽(w) + # OUT_RGB888P_HEIGH:原图高(h) + # 计算最小的缩放比例,等比例缩放 + ratio_w = dst_w / OUT_RGB888P_WIDTH + ratio_h = dst_h / OUT_RGB888P_HEIGH + if ratio_w < ratio_h: + ratio = ratio_w + else: + ratio = ratio_h + # 计算经过缩放后的新宽和新高 + new_w = (int)(ratio * OUT_RGB888P_WIDTH) + new_h = (int)(ratio * OUT_RGB888P_HEIGH) + + # 计算需要添加的padding,以使得kmodel输入的宽高和原图一致 + dw = (dst_w - new_w) / 2 + dh = (dst_h - new_h) / 2 + # 四舍五入,确保padding是整数 + top = (int)(round(0)) + bottom = (int)(round(dh * 2 + 0.1)) + left = (int)(round(0)) + right = (int)(round(dw * 2 - 0.1)) + return [0, 0, 0, 0, top, bottom, left, right] + +def fd_ai2d_init(): + # 人脸检测模型ai2d初始化 + with ScopedTiming("fd_ai2d_init",debug_mode > 0): + # (1)创建人脸检测ai2d对象 + global fd_ai2d + fd_ai2d = nn.ai2d() + # (2)设置人脸检测ai2d参数 + fd_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + fd_ai2d.set_pad_param(True, get_pad_one_side_param(), 0, rgb_mean) + fd_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + + #(3)人脸检测ai2d_builder,根据人脸检测ai2d参数、输入输出大小创建ai2d_builder对象 + global fd_ai2d_builder + fd_ai2d_builder = fd_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], fd_kmodel_input_shape) + + #(4)创建人脸检测ai2d_output_tensor,用于保存人脸检测ai2d输出 + global fd_ai2d_output_tensor + data = np.ones(fd_kmodel_input_shape, dtype=np.uint8) + fd_ai2d_output_tensor = nn.from_numpy(data) + +def fd_ai2d_run(rgb888p_img): + # 根据人脸检测ai2d参数,对原图rgb888p_img进行预处理 + with ScopedTiming("fd_ai2d_run",debug_mode > 0): + global fd_ai2d_input_tensor,fd_ai2d_output_tensor,fd_ai2d_builder + # (1)根据原图构建ai2d_input_tensor对象 + ai2d_input = rgb888p_img.to_numpy_ref() + fd_ai2d_input_tensor = nn.from_numpy(ai2d_input) + # (2)运行人脸检测ai2d_builder,将结果保存到人脸检测ai2d_output_tensor中 + fd_ai2d_builder.run(fd_ai2d_input_tensor, fd_ai2d_output_tensor) + +def fd_ai2d_release(): + # 释放人脸检测ai2d_input_tensor + with ScopedTiming("fd_ai2d_release",debug_mode > 0): + global fd_ai2d_input_tensor + del fd_ai2d_input_tensor + + +def fd_kpu_init(kmodel_file): + # 初始化人脸检测kpu对象,并加载kmodel + with ScopedTiming("fd_kpu_init",debug_mode > 0): + # 初始化人脸检测kpu对象 + kpu_obj = nn.kpu() + # 加载人脸检测kmodel + kpu_obj.load_kmodel(kmodel_file) + # 初始化人脸检测ai2d + fd_ai2d_init() + return kpu_obj + +def fd_kpu_pre_process(rgb888p_img): + # 设置人脸检测kpu输入 + # 使用人脸检测ai2d对原图进行预处理(padding,resize) + fd_ai2d_run(rgb888p_img) + with ScopedTiming("fd_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,fd_ai2d_output_tensor + # 设置人脸检测kpu输入 + current_kmodel_obj.set_input_tensor(0, fd_ai2d_output_tensor) + +def fd_kpu_get_output(): + # 获取人脸检测kpu输出 + with ScopedTiming("fd_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + # 获取模型输出,并将结果转换为numpy,以便进行人脸检测后处理 + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + del data + results.append(result) + return results + +def fd_kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)原图预处理,并设置模型输入 + fd_kpu_pre_process(rgb888p_img) + # (2)人脸检测kpu推理 + with ScopedTiming("fd kpu_run",debug_mode > 0): + kpu_obj.run() + # (3)释放人脸检测ai2d资源 + fd_ai2d_release() + # (4)获取人俩检测kpu输出 + results = fd_kpu_get_output() + # (5)人脸检测kpu结果后处理 + with ScopedTiming("fd kpu_post",debug_mode > 0): + post_ret = aidemo.face_det_post_process(confidence_threshold,nms_threshold,fd_kmodel_input_shape[2],prior_data, + [OUT_RGB888P_WIDTH,OUT_RGB888P_HEIGH],results) + # (6)返回人脸检测框 + if len(post_ret)==0: + return post_ret + else: + return post_ret[0] #0:det,1:landm,2:score + +def fd_kpu_deinit(kpu_obj): + # kpu释放 + with ScopedTiming("fd_kpu_deinit",debug_mode > 0): + global fd_ai2d, fd_ai2d_output_tensor + del kpu_obj #删除人脸检测kpu_obj变量,释放对它所引用对象的内存引用 + del fd_ai2d #删除人脸检测ai2d变量,释放对它所引用对象的内存引用 + del fd_ai2d_output_tensor #删除人脸检测ai2d_output_tensor变量,释放对它所引用对象的内存引用 + +###############for face recognition############### +def get_affine_matrix(bbox): + # 获取仿射矩阵,用于将边界框映射到模型输入空间 + with ScopedTiming("get_affine_matrix", debug_mode > 1): + # 设置缩放因子 + factor = 2.7 + # 从边界框提取坐标和尺寸 + x1, y1, w, h = map(lambda x: int(round(x, 0)), bbox[:4]) + # 模型输入大小 + edge_size = fp_kmodel_input_shape[2] + # 平移距离,使得模型输入空间的中心对准原点 + trans_distance = edge_size / 2.0 + # 计算边界框中心点的坐标 + center_x = x1 + w / 2.0 + center_y = y1 + h / 2.0 + # 计算最大边长 + maximum_edge = factor * (h if h > w else w) + # 计算缩放比例 + scale = edge_size * 2.0 / maximum_edge + # 计算平移参数 + cx = trans_distance - scale * center_x + cy = trans_distance - scale * center_y + # 创建仿射矩阵 + affine_matrix = [scale, 0, cx, 0, scale, cy] + return affine_matrix + +def build_projection_matrix(det): + x1, y1, w, h = map(lambda x: int(round(x, 0)), det[:4]) + + # 计算边界框中心坐标 + center_x = x1 + w / 2.0 + center_y = y1 + h / 2.0 + + # 定义后部(rear)和前部(front)的尺寸和深度 + rear_width = 0.5 * w + rear_height = 0.5 * h + rear_depth = 0 + factor = np.sqrt(2.0) + front_width = factor * rear_width + front_height = factor * rear_height + front_depth = factor * rear_width # 使用宽度来计算深度,也可以使用高度,取决于需求 + + # 定义立方体的顶点坐标 + temp = [ + [-rear_width, -rear_height, rear_depth], + [-rear_width, rear_height, rear_depth], + [rear_width, rear_height, rear_depth], + [rear_width, -rear_height, rear_depth], + [-front_width, -front_height, front_depth], + [-front_width, front_height, front_depth], + [front_width, front_height, front_depth], + [front_width, -front_height, front_depth] + ] + + projections = np.array(temp) + # 返回投影矩阵和中心坐标 + return projections, (center_x, center_y) + +def rotation_matrix_to_euler_angles(R): + # 将旋转矩阵(3x3 矩阵)转换为欧拉角(pitch、yaw、roll) + # 计算 sin(yaw) + sy = np.sqrt(R[0, 0] ** 2 + R[1, 0] ** 2) + + if sy < 1e-6: + # 若 sin(yaw) 过小,说明 pitch 接近 ±90 度 + pitch = np.arctan2(-R[1, 2], R[1, 1]) * 180 / np.pi + yaw = np.arctan2(-R[2, 0], sy) * 180 / np.pi + roll = 0 + else: + # 计算 pitch、yaw、roll 的角度 + pitch = np.arctan2(R[2, 1], R[2, 2]) * 180 / np.pi + yaw = np.arctan2(-R[2, 0], sy) * 180 / np.pi + roll = np.arctan2(R[1, 0], R[0, 0]) * 180 / np.pi + return [pitch,yaw,roll] + +def get_euler(data): + # 获取旋转矩阵和欧拉角 + R = data[:3, :3].copy() + eular = rotation_matrix_to_euler_angles(R) + return R,eular + +def fp_ai2d_init(): + # 人脸姿态估计ai2d初始化 + with ScopedTiming("fp_ai2d_init",debug_mode > 0): + # (1)创建人脸姿态估计ai2d对象 + global fp_ai2d + fp_ai2d = nn.ai2d() + + # (2)创建人脸姿态估计ai2d_output_tensor对象 + global fp_ai2d_output_tensor + data = np.ones(fp_kmodel_input_shape, dtype=np.uint8) + fp_ai2d_output_tensor = nn.from_numpy(data) + +def fp_ai2d_run(rgb888p_img,det): + # 人脸姿态估计ai2d推理 + with ScopedTiming("fp_ai2d_run",debug_mode > 0): + global fp_ai2d,fp_ai2d_input_tensor,fp_ai2d_output_tensor + #(1)根据原图构建人脸姿态估计ai2d_input_tensor + ai2d_input = rgb888p_img.to_numpy_ref() + fp_ai2d_input_tensor = nn.from_numpy(ai2d_input) + #(2)设置人脸姿态估计ai2d参数 + fp_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + global matrix_dst + matrix_dst = get_affine_matrix(det) + fp_ai2d.set_affine_param(True,nn.interp_method.cv2_bilinear,0, 0, 127, 1,matrix_dst) + # (3)构建人脸姿态估计ai2d_builder + global fp_ai2d_builder + fp_ai2d_builder = fp_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], fp_kmodel_input_shape) + # (4)推理人脸姿态估计ai2d,将结果保存到ai2d_output_tensor + fp_ai2d_builder.run(fp_ai2d_input_tensor, fp_ai2d_output_tensor) + +def fp_ai2d_release(): + # 释放部分人脸姿态估计ai2d资源 + with ScopedTiming("fp_ai2d_release",debug_mode > 0): + global fp_ai2d_input_tensor,fp_ai2d_builder + del fp_ai2d_input_tensor + del fp_ai2d_builder + +def fp_kpu_init(kmodel_file): + # 初始化人脸姿态估计kpu及ai2d + with ScopedTiming("fp_kpu_init",debug_mode > 0): + kpu_obj = nn.kpu() + kpu_obj.load_kmodel(kmodel_file) + fp_ai2d_init() + return kpu_obj + +def fp_kpu_pre_process(rgb888p_img,det): + # 人脸姿态估计kpu预处理 + fp_ai2d_run(rgb888p_img,det) + with ScopedTiming("fp_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,fp_ai2d_output_tensor + current_kmodel_obj.set_input_tensor(0, fp_ai2d_output_tensor) + #ai2d_out_data = _ai2d_output_tensor.to_numpy() + #with open("/sdcard/app/ai2d_out.bin", "wb") as file: + #file.write(ai2d_out_data.tobytes()) + +def fp_kpu_get_output(): + # 获取人脸姿态估计kpu输出 + with ScopedTiming("fp_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + data = current_kmodel_obj.get_output_tensor(0) + result = data.to_numpy() + result = result[0] + del data + return result + +def fp_kpu_post_process(pred): + # 人脸姿态估计kpu推理结果后处理 + R,eular = get_euler(pred) + return R,eular + +def fp_kpu_run(kpu_obj,rgb888p_img,det): + # 人脸姿态估计kpu推理 + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)根据人脸检测框进行人脸姿态估计kpu预处理 + fp_kpu_pre_process(rgb888p_img,det) + # (2)人脸姿态估计kpu推理 + with ScopedTiming("fp_kpu_run",debug_mode > 0): + kpu_obj.run() + # (3)释放人脸姿态估计ai2d资源 + fp_ai2d_release() + # (4)释放人脸姿态估计kpu推理输出 + result = fp_kpu_get_output() + # (5)释放人脸姿态估计后处理 + R,eular = fp_kpu_post_process(result) + return R,eular + +def fp_kpu_deinit(kpu_obj): + # 释放人脸姿态估计kpu及ai2d资源 + with ScopedTiming("fp_kpu_deinit",debug_mode > 0): + global fp_ai2d,fp_ai2d_output_tensor + del kpu_obj + del fp_ai2d + del fp_ai2d_output_tensor + +#********************for media_utils.py******************** +global draw_img_ulab,draw_img,osd_img #for display +global buffer,media_source,media_sink #for media + +# for display,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.2 +def display_init(): + # 设置使用hdmi进行显示 + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +def display_deinit(): + # 释放显示资源 + display.deinit() + +def display_draw(dets,pose_results): + # 在显示器画人脸轮廓 + with ScopedTiming("display_draw",debug_mode >0): + global draw_img_ulab,draw_img,osd_img + if dets: + draw_img.clear() + line_color = np.array([255, 0, 0 ,255],dtype = np.uint8) #bgra + for i,det in enumerate(dets): + # (1)获取人脸姿态矩阵和欧拉角 + projections,center_point = build_projection_matrix(det) + R,euler = pose_results[i] + + # (2)遍历人脸投影矩阵的关键点,进行投影,并将结果画在图像上 + first_points = [] + second_points = [] + for pp in range(8): + sum_x, sum_y = 0.0, 0.0 + for cc in range(3): + sum_x += projections[pp][cc] * R[cc][0] + sum_y += projections[pp][cc] * (-R[cc][1]) + + center_x,center_y = center_point[0],center_point[1] + x = (sum_x + center_x) / OUT_RGB888P_WIDTH * DISPLAY_WIDTH + y = (sum_y + center_y) / OUT_RGB888P_HEIGH * DISPLAY_HEIGHT + x = max(0, min(x, DISPLAY_WIDTH)) + y = max(0, min(y, DISPLAY_HEIGHT)) + + if pp < 4: + first_points.append((x, y)) + else: + second_points.append((x, y)) + first_points = np.array(first_points,dtype=np.float) + aidemo.polylines(draw_img_ulab,first_points,True,line_color,2,8,0) + second_points = np.array(second_points,dtype=np.float) + aidemo.polylines(draw_img_ulab,second_points,True,line_color,2,8,0) + + for ll in range(4): + x0, y0 = int(first_points[ll][0]),int(first_points[ll][1]) + x1, y1 = int(second_points[ll][0]),int(second_points[ll][1]) + draw_img.draw_line(x0, y0, x1, y1, color = (255, 0, 0 ,255), thickness = 2) + + # (3)将绘制好的图像拷贝到显示缓冲区,并在显示器上展示 + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + # (1)清空用来画框的图像 + draw_img.clear() + # (2)清空osd + draw_img.copy_to(osd_img) + # (3)显示透明图层 + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +#for camera,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.1 +def camera_init(dev_id): + # camera初始化 + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +def camera_start(dev_id): + # camera启动 + camera.start_stream(dev_id) + +def camera_read(dev_id): + # 读取一帧图像 + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +def camera_release_image(dev_id,rgb888p_img): + # 释放一帧图像 + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +def camera_stop(dev_id): + # 停止camera + camera.stop_stream(dev_id) + +#for media,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.3 +def media_init(): + # meida初始化 + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img_ulab,draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 用于画框,draw_img->draw_img_ulab(两者指向同一块内存) + draw_img_ulab = np.zeros((DISPLAY_HEIGHT,DISPLAY_WIDTH,4),dtype=np.uint8) + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_REF,data = draw_img_ulab) + # 用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +def media_deinit(): + # meida资源释放 + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + +#********************for face_detect.py******************** +def face_pose_inference(): + print("face_pose_test start") + # 人脸检测kpu初始化 + kpu_face_detect = fd_kpu_init(fd_kmodel_file) + # 人脸姿态估计kpu初始化 + kpu_face_pose = fp_kpu_init(fp_kmodel_file) + # camera初始化 + camera_init(CAM_DEV_ID_0) + # 显示初始化 + display_init() + + rgb888p_img = None + # 注意:将一定要将一下过程包在try中,用于保证程序停止后,资源释放完毕;确保下次程序仍能正常运行 + try: + # 注意:媒体初始化(注:媒体初始化必须在camera_start之前,确保media缓冲区已配置完全) + ret = media_init() + if ret: + print("face_detect_test, buffer init failed") + return ret + + # 启动camera + camera_start(CAM_DEV_ID_0) + time.sleep(5) + + gc_count = 0 + while True: + with ScopedTiming("total",1): + # (1)读取一帧图像 + rgb888p_img = camera_read(CAM_DEV_ID_0) + # (2)若读取失败,释放当前帧 + if rgb888p_img == -1: + print("face_detect_test, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # (3)若读取成功,推理当前帧 + if rgb888p_img.format() == image.RGBP888: + # (3.1)推理当前图像,并获取人脸检测结果 + dets = fd_kpu_run(kpu_face_detect,rgb888p_img) + # (3.2)针对每个人脸框,推理得到对应人脸旋转矩阵、欧拉角 + pose_results = [] + for det in dets: + R,eular = fp_kpu_run(kpu_face_pose,rgb888p_img,det) + pose_results.append((R,eular)) + # (3.3)将人脸姿态估计结果画到显示器上 + display_draw(dets,pose_results) + + # (4)释放当前帧 + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + + except Exception as e: + # 捕捉运行运行中异常,并打印错误 + print(f"An error occurred during buffer used: {e}") + finally: + # 释放当前帧 + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + # 停止camera + camera_stop(CAM_DEV_ID_0) + # 释放显示资源 + display_deinit() + # 释放kpu资源 + fd_kpu_deinit(kpu_face_detect) + fp_kpu_deinit(kpu_face_pose) + # 垃圾回收 + gc.collect() + time.sleep(1) + # 释放媒体资源 + ret = media_deinit() + if ret: + print("face_pose_test, buffer_deinit failed") + return ret + + print("face_pose_test end") + return 0 + +if __name__ == '__main__': + face_pose_inference() +``` + +### 4. 人脸解析 + +```python +import ulab.numpy as np # 类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn # nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +from media.camera import * # 摄像头模块 +from media.display import * # 显示模块 +from media.media import * # 软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +import aidemo # aidemo模块,封装ai demo相关后处理、画图操作 +import image # 图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time # 时间统计 +import gc # 垃圾回收模块 +import os # 操作系统接口模块 +import math # 数学模块 + +#********************for config.py******************** +# display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) # 显示宽度要求16位对齐 +DISPLAY_HEIGHT = 1080 + +# ai原图分辨率,sensor默认出图为16:9,若需不形变原图,最好按照16:9比例设置宽高 +OUT_RGB888P_WIDTH = ALIGN_UP(1920, 16) # ai原图宽度要求16位对齐 +OUT_RGB888P_HEIGH = 1080 + +# kmodel参数设置 +# 人脸检测kmodel输入shape +fd_kmodel_input_shape = (1,3,320,320) +# 人脸解析kmodel输入shape +fp_kmodel_input_shape = (1,3,320,320) +# ai原图padding +rgb_mean = [104,117,123] + +#人脸检测kmodel其它参数设置 +confidence_threshold = 0.5 # 人脸检测阈值 +top_k = 5000 +nms_threshold = 0.2 +keep_top_k = 750 +vis_thres = 0.5 +variance = [0.1, 0.2] +anchor_len = 4200 +score_dim = 2 +det_dim = 4 +keypoint_dim = 10 + +# 文件配置 +# 人脸检测kmodel +root_dir = '/sdcard/app/tests/' +fd_kmodel_file = root_dir + 'kmodel/face_detection_320.kmodel' +# 人脸解析kmodel +fp_kmodel_file = root_dir + 'kmodel/face_parse.kmodel' +# anchor文件 +anchors_path = root_dir + 'utils/prior_data_320.bin' +# 调试模型,0:不调试,>0:打印对应级别调试信息 +debug_mode = 0 + +#********************for scoped_timing.py******************** +# 时间统计类 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +#********************for ai_utils.py******************** +global current_kmodel_obj #当前kpu对象 +# fd_ai2d: 人脸检测ai2d实例 +# fd_ai2d_input_tensor: 人脸检测ai2d输入 +# fd_ai2d_output_tensor: 人脸检测ai2d输入 +# fd_ai2d_builder: 根据人脸检测ai2d参数,构建的人脸检测ai2d_builder对象 +global fd_ai2d,fd_ai2d_input_tensor,fd_ai2d_output_tensor,fd_ai2d_builder +# fld_ai2d: 人脸解析ai2d实例 +# fld_ai2d_input_tensor: 人脸解析ai2d输入 +# fld_ai2d_output_tensor:人脸解析ai2d输入 +# fld_ai2d_builder: 根据人脸解析ai2d参数,构建的人脸解析ai2d_builder对象 +global fp_ai2d,fp_ai2d_input_tensor,fp_ai2d_output_tensor,fp_ai2d_builder +global matrix_dst #人脸仿射变换矩阵 + +#读取anchor文件,为人脸检测后处理做准备 +print('anchors_path:',anchors_path) +prior_data = np.fromfile(anchors_path, dtype=np.float) +prior_data = prior_data.reshape((anchor_len,det_dim)) + +def get_pad_one_side_param(): + # 右padding或下padding,获取padding参数 + dst_w = fd_kmodel_input_shape[3] # kmodel输入宽(w) + dst_h = fd_kmodel_input_shape[2] # kmodel输入高(h) + + # OUT_RGB888P_WIDTH:原图宽(w) + # OUT_RGB888P_HEIGH:原图高(h) + # 计算最小的缩放比例,等比例缩放 + ratio_w = dst_w / OUT_RGB888P_WIDTH + ratio_h = dst_h / OUT_RGB888P_HEIGH + if ratio_w < ratio_h: + ratio = ratio_w + else: + ratio = ratio_h + # 计算经过缩放后的新宽和新高 + new_w = (int)(ratio * OUT_RGB888P_WIDTH) + new_h = (int)(ratio * OUT_RGB888P_HEIGH) + + # 计算需要添加的padding,以使得kmodel输入的宽高和原图一致 + dw = (dst_w - new_w) / 2 + dh = (dst_h - new_h) / 2 + # 四舍五入,确保padding是整数 + top = (int)(round(0)) + bottom = (int)(round(dh * 2 + 0.1)) + left = (int)(round(0)) + right = (int)(round(dw * 2 - 0.1)) + return [0, 0, 0, 0, top, bottom, left, right] + +def fd_ai2d_init(): + # 人脸检测模型ai2d初始化 + with ScopedTiming("fd_ai2d_init",debug_mode > 0): + # (1)创建人脸检测ai2d对象 + global fd_ai2d + fd_ai2d = nn.ai2d() + # (2)设置人脸检测ai2d参数 + fd_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + fd_ai2d.set_pad_param(True, get_pad_one_side_param(), 0, rgb_mean) + fd_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + + #(3)人脸检测ai2d_builder,根据人脸检测ai2d参数、输入输出大小创建ai2d_builder对象 + global fd_ai2d_builder + fd_ai2d_builder = fd_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], fd_kmodel_input_shape) + + #(4)创建人脸检测ai2d_output_tensor,用于保存人脸检测ai2d输出 + global fd_ai2d_output_tensor + data = np.ones(fd_kmodel_input_shape, dtype=np.uint8) + fd_ai2d_output_tensor = nn.from_numpy(data) + +def fd_ai2d_run(rgb888p_img): + # 根据人脸检测ai2d参数,对原图rgb888p_img进行预处理 + with ScopedTiming("fd_ai2d_run",debug_mode > 0): + global fd_ai2d_input_tensor,fd_ai2d_output_tensor,fd_ai2d_builder + # (1)根据原图构建ai2d_input_tensor对象 + ai2d_input = rgb888p_img.to_numpy_ref() + fd_ai2d_input_tensor = nn.from_numpy(ai2d_input) + # (2)运行人脸检测ai2d_builder,将结果保存到人脸检测ai2d_output_tensor中 + fd_ai2d_builder.run(fd_ai2d_input_tensor, fd_ai2d_output_tensor) + +def fd_ai2d_release(): + # 释放人脸检测ai2d_input_tensor + with ScopedTiming("fd_ai2d_release",debug_mode > 0): + global fd_ai2d_input_tensor + del fd_ai2d_input_tensor + + +def fd_kpu_init(kmodel_file): + # 初始化人脸检测kpu对象,并加载kmodel + with ScopedTiming("fd_kpu_init",debug_mode > 0): + # 初始化人脸检测kpu对象 + kpu_obj = nn.kpu() + # 加载人脸检测kmodel + kpu_obj.load_kmodel(kmodel_file) + # 初始化人脸检测ai2d + fd_ai2d_init() + return kpu_obj + +def fd_kpu_pre_process(rgb888p_img): + # 设置人脸检测kpu输入 + # 使用人脸检测ai2d对原图进行预处理(padding,resize) + fd_ai2d_run(rgb888p_img) + with ScopedTiming("fd_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,fd_ai2d_output_tensor + # 设置人脸检测kpu输入 + current_kmodel_obj.set_input_tensor(0, fd_ai2d_output_tensor) + +def fd_kpu_get_output(): + # 获取人脸检测kpu输出 + with ScopedTiming("fd_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + # 获取模型输出,并将结果转换为numpy,以便进行人脸检测后处理 + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + del data + results.append(result) + return results + +def fd_kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)原图预处理,并设置模型输入 + fd_kpu_pre_process(rgb888p_img) + # (2)人脸检测kpu推理 + with ScopedTiming("fd kpu_run",debug_mode > 0): + kpu_obj.run() + # (3)释放人脸检测ai2d资源 + fd_ai2d_release() + # (4)获取人俩检测kpu输出 + results = fd_kpu_get_output() + # (5)人脸检测kpu结果后处理 + with ScopedTiming("fd kpu_post",debug_mode > 0): + post_ret = aidemo.face_det_post_process(confidence_threshold,nms_threshold,fd_kmodel_input_shape[2],prior_data, + [OUT_RGB888P_WIDTH,OUT_RGB888P_HEIGH],results) + # (6)返回人脸检测框 + if len(post_ret)==0: + return post_ret + else: + return post_ret[0] #0:det,1:landm,2:score + +def fd_kpu_deinit(kpu_obj): + # kpu释放 + with ScopedTiming("fd_kpu_deinit",debug_mode > 0): + global fd_ai2d, fd_ai2d_output_tensor + del kpu_obj #删除人脸检测kpu_obj变量,释放对它所引用对象的内存引用 + del fd_ai2d #删除人脸检测ai2d变量,释放对它所引用对象的内存引用 + del fd_ai2d_output_tensor #删除人脸检测ai2d_output_tensor变量,释放对它所引用对象的内存引用 + +###############for face recognition############### +def get_affine_matrix(bbox): + # 获取仿射矩阵,用于将边界框映射到模型输入空间 + with ScopedTiming("get_affine_matrix", debug_mode > 1): + # 设置缩放因子 + factor = 2.7 + # 从边界框提取坐标和尺寸 + x1, y1, w, h = map(lambda x: int(round(x, 0)), bbox[:4]) + # 模型输入大小 + edge_size = fp_kmodel_input_shape[2] + # 平移距离,使得模型输入空间的中心对准原点 + trans_distance = edge_size / 2.0 + # 计算边界框中心点的坐标 + center_x = x1 + w / 2.0 + center_y = y1 + h / 2.0 + # 计算最大边长 + maximum_edge = factor * (h if h > w else w) + # 计算缩放比例 + scale = edge_size * 2.0 / maximum_edge + # 计算平移参数 + cx = trans_distance - scale * center_x + cy = trans_distance - scale * center_y + # 创建仿射矩阵 + affine_matrix = [scale, 0, cx, 0, scale, cy] + return affine_matrix + +def fp_ai2d_init(): + # 人脸解析ai2d初始化 + with ScopedTiming("fp_ai2d_init",debug_mode > 0): + # (1)创建人脸解析ai2d对象 + global fp_ai2d + fp_ai2d = nn.ai2d() + + # (2)创建人脸解析ai2d_output_tensor对象 + global fp_ai2d_output_tensor + data = np.ones(fp_kmodel_input_shape, dtype=np.uint8) + fp_ai2d_output_tensor = nn.from_numpy(data) + +def fp_ai2d_run(rgb888p_img,det): + # 人脸解析ai2d推理 + with ScopedTiming("fp_ai2d_run",debug_mode > 0): + global fp_ai2d,fp_ai2d_input_tensor,fp_ai2d_output_tensor + #(1)根据原图构建人脸解析ai2d_input_tensor + ai2d_input = rgb888p_img.to_numpy_ref() + fp_ai2d_input_tensor = nn.from_numpy(ai2d_input) + #(2)设置人脸解析ai2d参数 + fp_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + global matrix_dst + matrix_dst = get_affine_matrix(det) + fp_ai2d.set_affine_param(True,nn.interp_method.cv2_bilinear,0, 0, 127, 1,matrix_dst) + + # (3)构建人脸解析ai2d_builder + global fp_ai2d_builder + fp_ai2d_builder = fp_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], fp_kmodel_input_shape) + # (4)推理人脸解析ai2d,将结果保存到ai2d_output_tensor + fp_ai2d_builder.run(fp_ai2d_input_tensor, fp_ai2d_output_tensor) + +def fp_ai2d_release(): + # 释放部分人脸解析ai2d资源 + with ScopedTiming("fp_ai2d_release",debug_mode > 0): + global fp_ai2d_input_tensor,fp_ai2d_builder + del fp_ai2d_input_tensor + del fp_ai2d_builder + +def fp_kpu_init(kmodel_file): + # 初始化人脸解析kpu及ai2d + with ScopedTiming("fp_kpu_init",debug_mode > 0): + kpu_obj = nn.kpu() + kpu_obj.load_kmodel(kmodel_file) + fp_ai2d_init() + return kpu_obj + +def fp_kpu_pre_process(rgb888p_img,det): + # 人脸解析kpu预处理 + fp_ai2d_run(rgb888p_img,det) + with ScopedTiming("fp_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,fp_ai2d_output_tensor + current_kmodel_obj.set_input_tensor(0, fp_ai2d_output_tensor) + #ai2d_out_data = fp_ai2d_output_tensor.to_numpy() + #with open("/sdcard/app/ai2d_out.bin", "wb") as file: + #file.write(ai2d_out_data.tobytes()) + +def fp_kpu_get_output(): + # 获取人脸解析kpu输出 + with ScopedTiming("fp_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + data = current_kmodel_obj.get_output_tensor(0) + result = data.to_numpy() + del data + return result + +def fp_kpu_run(kpu_obj,rgb888p_img,det): + # 人脸解析kpu推理 + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)根据人脸检测框进行人脸解析kpu预处理 + fp_kpu_pre_process(rgb888p_img,det) + # (2)人脸解析kpu推理 + with ScopedTiming("fp_kpu_run",debug_mode > 0): + kpu_obj.run() + # (3)释放人脸解析ai2d资源 + fp_ai2d_release() + # (4)释放人脸解析kpu输出 + result = fp_kpu_get_output() + return result + +def fp_kpu_deinit(kpu_obj): + # 释放人脸解析kpu和ai2d资源 + with ScopedTiming("fp_kpu_deinit",debug_mode > 0): + global fp_ai2d,fp_ai2d_output_tensor + del kpu_obj + del fp_ai2d + del fp_ai2d_output_tensor + +#********************for media_utils.py******************** +global draw_img_ulab,draw_img,osd_img #for display +global buffer,media_source,media_sink #for media + +#for display +def display_init(): + # 设置使用hdmi进行显示 + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +def display_deinit(): + # 释放显示资源 + display.deinit() + +def display_draw(dets,parse_results): + # 在显示器画出人脸解析结果 + with ScopedTiming("display_draw",debug_mode >0): + global draw_img_ulab,draw_img,osd_img + if dets: + draw_img.clear() + for i,det in enumerate(dets): + # (1)将人脸检测框画到draw_img + x, y, w, h = map(lambda x: int(round(x, 0)), det[:4]) + x = x * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + y = y * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + w = w * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + h = h * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH + draw_img.draw_rectangle(x,y, w, h, color=(255, 255, 0, 255)) + # (2)将人脸解析结果画到draw_img(draw_img_ulab和draw_img指同一内存) + aidemo.face_parse_post_process(draw_img_ulab,[OUT_RGB888P_WIDTH,OUT_RGB888P_HEIGH], + [DISPLAY_WIDTH,DISPLAY_HEIGHT],fp_kmodel_input_shape[2],det.tolist(),parse_results[i]) + # (3)将绘制好的图像拷贝到显示缓冲区,并在显示器上展示 + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + # (1)清空用来画框的图像 + draw_img.clear() + # (2)清空osd + draw_img.copy_to(osd_img) + # (3)显示透明图层 + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +#for camera,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.1 +def camera_init(dev_id): + # camera初始化 + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +def camera_start(dev_id): + # camera启动 + camera.start_stream(dev_id) + +def camera_read(dev_id): + # 读取一帧图像 + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +def camera_release_image(dev_id,rgb888p_img): + # 释放一帧图像 + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +def camera_stop(dev_id): + # 停止camera + camera.stop_stream(dev_id) + +#for media,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.3 +def media_init(): + # meida初始化 + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + + global buffer, draw_img_ulab,draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 用于画框,draw_img->draw_img_ulab(两者指向同一块内存) + draw_img_ulab = np.zeros((DISPLAY_HEIGHT,DISPLAY_WIDTH,4),dtype=np.uint8) + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_REF,data = draw_img_ulab) + # 用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +def media_deinit(): + # meida资源释放 + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + +#********************for face_detect.py******************** +def face_parse_inference(): + print("face_parse_test start") + # 人脸检测kpu初始化 + kpu_face_detect = fd_kpu_init(fd_kmodel_file) + # 人脸解析kpu初始化 + kpu_face_parse = fp_kpu_init(fp_kmodel_file) + # camera初始化 + camera_init(CAM_DEV_ID_0) + # 显示初始化 + display_init() + + rgb888p_img = None + # 注意:将一定要将一下过程包在try中,用于保证程序停止后,资源释放完毕;确保下次程序仍能正常运行 + try: + # 注意:媒体初始化(注:媒体初始化必须在camera_start之前,确保media缓冲区已配置完全) + ret = media_init() + if ret: + print("face_detect_test, buffer init failed") + return ret + + # 启动camera + camera_start(CAM_DEV_ID_0) + time.sleep(5) + + gc_count = 0 + while True: + with ScopedTiming("total",1): + # (1)读取一帧图像 + rgb888p_img = camera_read(CAM_DEV_ID_0) + # (2)若读取失败,释放当前帧 + if rgb888p_img == -1: + print("face_detect_test, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # (3)若读取成功,推理当前帧 + if rgb888p_img.format() == image.RGBP888: + # (3.1)推理当前图像,并获取人脸检测结果 + dets = fd_kpu_run(kpu_face_detect,rgb888p_img) + # (3.2)针对每个人脸框,推理得到对应人脸解析结果 + parse_results = [] + for det in dets: + parse_ret = fp_kpu_run(kpu_face_parse,rgb888p_img,det) + parse_results.append(parse_ret) + # (3.3)将人脸解析结果画到显示器上 + display_draw(dets,parse_results) + + # (4)释放当前帧 + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + except Exception as e: + # 捕捉运行运行中异常,并打印错误 + print(f"An error occurred during buffer used: {e}") + finally: + # 释放当前帧 + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + # 停止camera + camera_stop(CAM_DEV_ID_0) + # 释放显示资源 + display_deinit() + # 释放kpu资源 + fd_kpu_deinit(kpu_face_detect) + fp_kpu_deinit(kpu_face_parse) + # 垃圾回收 + gc.collect() + time.sleep(1) + # 释放媒体资源 + ret = media_deinit() + if ret: + print("face_parse_test, buffer_deinit failed") + return ret + + print("face_parse_test end") + return 0 + +if __name__ == '__main__': + face_parse_inference() +``` + +### 5. 车牌识别 + +```python +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn #nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +from media.camera import * #摄像头模块 +from media.display import * #显示模块 +from media.media import * #软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time #时间统计 +import gc #垃圾回收模块 +import aidemo #aidemo模块,封装ai demo相关后处理、画图操作 + +##config.py +#display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) +DISPLAY_HEIGHT = 1080 + +#ai原图分辨率输入 +OUT_RGB888P_WIDTH = ALIGN_UP(640, 16) +OUT_RGB888P_HEIGHT = 480 + +#车牌检测 和 车牌识别 kmodel输入shape +det_kmodel_input_shape = (1,3,640,640) +rec_kmodel_input_shape = (1,1,32,220) + +#车牌检测 相关参数设置 +obj_thresh = 0.2 #车牌检测分数阈值 +nms_thresh = 0.2 #检测框 非极大值抑制 阈值 + +#文件配置 +root_dir = '/sdcard/app/tests/' +det_kmodel_file = root_dir + 'kmodel/LPD_640.kmodel' # 车牌检测 kmodel 文件路径 +rec_kmodel_file = root_dir + 'kmodel/licence_reco.kmodel' # 车牌识别 kmodel 文件路径 +#dict_rec = ["挂", "使", "领", "澳", "港", "皖", "沪", "津", "渝", "冀", "晋", "蒙", "辽", "吉", "黑", "苏", "浙", "京", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤", "桂", "琼", "川", "贵", "云", "藏", "陕", "甘", "青", "宁", "新", "警", "学", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "_", "-"] +dict_rec = ["gua","shi","ling","ao","gang","wan","hu","jin","yu","ji","jin","meng","liao","ji","hei","su","zhe","jing","min","gan","lu","yu","e","xiang","yue","gui","qiong","chuan","gui","yun","zang","shan","gan","qing","ning","xin","jing","xue","0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "_", "-"] +dict_size = len(dict_rec) +debug_mode = 0 # debug模式 大于0(调试)、 反之 (不调试) + +#scoped_timing.py 用于debug模式输出程序块运行时间 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + + +#ai_utils.py +global det_current_kmodel_obj,rec_current_kmodel_obj # 定义全局的 kpu 对象 +global det_ai2d,det_ai2d_input_tensor,det_ai2d_output_tensor,det_ai2d_builder # 定义车牌检测 ai2d 对象 ,并且定义 ai2d 的输入、输出 以及 builder +global rec_ai2d,rec_ai2d_input_tensor,rec_ai2d_output_tensor,rec_ai2d_builder # 定义车牌识别 ai2d 对象 ,并且定义 ai2d 的输入、输出 以及 builder + +# 车牌检测 接收kmodel输出的后处理方法 +def det_kpu_post_process(output_data): + with ScopedTiming("det_kpu_post_process", debug_mode > 0): + results = aidemo.licence_det_postprocess(output_data,[OUT_RGB888P_HEIGHT,OUT_RGB888P_WIDTH],[det_kmodel_input_shape[2],det_kmodel_input_shape[3]],obj_thresh,nms_thresh) + return results + +# 车牌识别 接收kmodel输出的后处理方法 +def rec_kpu_post_process(output_data): + with ScopedTiming("rec_kpu_post_process", debug_mode > 0): + size = rec_kmodel_input_shape[3] / 4 + result = [] + for i in range(size): + maxs = float("-inf") + index = -1 + for j in range(dict_size): + if (maxs < float(output_data[i * dict_size +j])): + index = j + maxs = output_data[i * dict_size +j] + result.append(index) + + result_str = "" + for i in range(size): + if (result[i] >= 0 and result[i] != 0 and not(i > 0 and result[i-1] == result[i])): + result_str += dict_rec[result[i]-1] + return result_str + +# 车牌检测 ai2d 初始化 +def det_ai2d_init(): + with ScopedTiming("det_ai2d_init",debug_mode > 0): + global det_ai2d + det_ai2d = nn.ai2d() + det_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + det_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + + global det_ai2d_out_tensor + data = np.ones(det_kmodel_input_shape, dtype=np.uint8) + det_ai2d_out_tensor = nn.from_numpy(data) + + global det_ai2d_builder + det_ai2d_builder = det_ai2d.build([1,3,OUT_RGB888P_HEIGHT,OUT_RGB888P_WIDTH], det_kmodel_input_shape) + +# 车牌识别 ai2d 初始化 +def rec_ai2d_init(): + with ScopedTiming("rec_ai2d_init",debug_mode > 0): + global rec_ai2d + rec_ai2d = nn.ai2d() + rec_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + + global rec_ai2d_out_tensor + data = np.ones(rec_kmodel_input_shape, dtype=np.uint8) + rec_ai2d_out_tensor = nn.from_numpy(data) + + rec_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + +# 车牌检测 ai2d 运行 +def det_ai2d_run(rgb888p_img): + with ScopedTiming("det_ai2d_run",debug_mode > 0): + global det_ai2d_input_tensor,det_ai2d_out_tensor,det_ai2d_builder + det_ai2d_input = rgb888p_img.to_numpy_ref() + det_ai2d_input_tensor = nn.from_numpy(det_ai2d_input) + + det_ai2d_builder.run(det_ai2d_input_tensor, det_ai2d_out_tensor) + +# 车牌识别 ai2d 运行 +def rec_ai2d_run(img_array): + with ScopedTiming("rec_ai2d_run",debug_mode > 0): + global rec_ai2d_input_tensor,rec_ai2d_out_tensor,rec_ai2d_builder + rec_ai2d_builder = rec_ai2d.build([1,1,img_array.shape[2],img_array.shape[3]], rec_kmodel_input_shape) + rec_ai2d_input_tensor = nn.from_numpy(img_array) + + rec_ai2d_builder.run(rec_ai2d_input_tensor, rec_ai2d_out_tensor) + +# 车牌检测 ai2d 释放内存 +def det_ai2d_release(): + with ScopedTiming("det_ai2d_release",debug_mode > 0): + global det_ai2d_input_tensor + del det_ai2d_input_tensor + +# 车牌识别 ai2d 释放内存 +def rec_ai2d_release(): + with ScopedTiming("rec_ai2d_release",debug_mode > 0): + global rec_ai2d_input_tensor, rec_ai2d_builder + del rec_ai2d_input_tensor + del rec_ai2d_builder + +# 车牌检测 kpu 初始化 +def det_kpu_init(kmodel_file): + # init kpu and load kmodel + with ScopedTiming("det_kpu_init",debug_mode > 0): + kpu_obj = nn.kpu() + kpu_obj.load_kmodel(kmodel_file) + + det_ai2d_init() + return kpu_obj + +# 车牌识别 kpu 初始化 +def rec_kpu_init(kmodel_file): + # init kpu and load kmodel + with ScopedTiming("rec_kpu_init",debug_mode > 0): + kpu_obj = nn.kpu() + kpu_obj.load_kmodel(kmodel_file) + + rec_ai2d_init() + return kpu_obj + +# 车牌检测 kpu 输入预处理 +def det_kpu_pre_process(rgb888p_img): + det_ai2d_run(rgb888p_img) + with ScopedTiming("det_kpu_pre_process",debug_mode > 0): + global det_current_kmodel_obj,det_ai2d_out_tensor + # set kpu input + det_current_kmodel_obj.set_input_tensor(0, det_ai2d_out_tensor) + +# 车牌识别 kpu 输入预处理 +def rec_kpu_pre_process(img_array): + rec_ai2d_run(img_array) + with ScopedTiming("rec_kpu_pre_process",debug_mode > 0): + global rec_current_kmodel_obj,rec_ai2d_out_tensor + # set kpu input + rec_current_kmodel_obj.set_input_tensor(0, rec_ai2d_out_tensor) + +# 车牌识别 抠图 +def rec_array_pre_process(rgb888p_img,dets): + with ScopedTiming("rec_array_pre_process",debug_mode > 0): + isp_image = rgb888p_img.to_numpy_ref() + imgs_array_boxes = aidemo.ocr_rec_preprocess(isp_image,[OUT_RGB888P_HEIGHT,OUT_RGB888P_WIDTH],dets) + return imgs_array_boxes + +# 车牌检测 获取 kmodel 输出 +def det_kpu_get_output(): + with ScopedTiming("det_kpu_get_output",debug_mode > 0): + global det_current_kmodel_obj + results = [] + for i in range(det_current_kmodel_obj.outputs_size()): + data = det_current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + tmp2 = result.copy() + del data + results.append(tmp2) + return results + +# 车牌识别 获取 kmodel 输出 +def rec_kpu_get_output(): + with ScopedTiming("rec_kpu_get_output",debug_mode > 0): + global rec_current_kmodel_obj + data = rec_current_kmodel_obj.get_output_tensor(0) + result = data.to_numpy() + result = result.reshape((result.shape[0] * result.shape[1] * result.shape[2])) + tmp = result.copy() + del data + return tmp + +# 车牌检测 kpu 运行 +def det_kpu_run(kpu_obj,rgb888p_img): + global det_current_kmodel_obj + det_current_kmodel_obj = kpu_obj + # (1) 原图预处理,并设置模型输入 + det_kpu_pre_process(rgb888p_img) + # (2) kpu 运行 + with ScopedTiming("det_kpu_run",debug_mode > 0): + kpu_obj.run() + # (3) 释放ai2d资源 + det_ai2d_release() + # (4) 获取kpu输出 + results = det_kpu_get_output() + # (5) kpu结果后处理 + dets = det_kpu_post_process(results) + # 返回 车牌检测结果 + return dets + +# 车牌识别 kpu 运行 +def rec_kpu_run(kpu_obj,rgb888p_img,dets): + global rec_current_kmodel_obj + if (len(dets) == 0): + return [] + rec_current_kmodel_obj = kpu_obj + # (1) 原始图像抠图,车牌检测结果 points 排序 + imgs_array_boxes = rec_array_pre_process(rgb888p_img,dets) + imgs_array = imgs_array_boxes[0] + boxes = imgs_array_boxes[1] + recs = [] + for img_array in imgs_array: + # (2) 抠出后的图像 进行预处理,设置模型输入 + rec_kpu_pre_process(img_array) + # (3) kpu 运行 + with ScopedTiming("rec_kpu_run",debug_mode > 0): + kpu_obj.run() + # (4) 释放ai2d资源 + rec_ai2d_release() + # (5) 获取 kpu 输出 + result = rec_kpu_get_output() + # (6) kpu 结果后处理 + rec = rec_kpu_post_process(result) + recs.append(rec) + # (7) 返回 车牌检测 和 识别结果 + return [boxes,recs] + + +# 车牌检测 kpu 释放内存 +def det_kpu_deinit(kpu_obj): + with ScopedTiming("det_kpu_deinit",debug_mode > 0): + global det_ai2d, det_ai2d_builder, det_ai2d_out_tensor + del kpu_obj + del det_ai2d + del det_ai2d_builder + del det_ai2d_out_tensor + +# 车牌识别 kpu 释放内存 +def rec_kpu_deinit(kpu_obj): + with ScopedTiming("rec_kpu_deinit",debug_mode > 0): + global rec_ai2d, rec_ai2d_out_tensor + del kpu_obj + del rec_ai2d + del rec_ai2d_out_tensor + +#media_utils.py +global draw_img,osd_img #for display 定义全局 作图image对象 +global buffer,media_source,media_sink #for media 定义 media 程序中的中间存储对象 + +#for display 初始化 +def display_init(): + # use hdmi for display + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +# display 释放内存 +def display_deinit(): + display.deinit() + +# display 作图过程 将所有车牌检测框 和 识别结果绘制到屏幕 +def display_draw(dets_recs): + with ScopedTiming("display_draw",debug_mode >0): + global draw_img,osd_img + if dets_recs: + dets = dets_recs[0] + recs = dets_recs[1] + draw_img.clear() + point_8 = np.zeros((8),dtype=np.int16) + for det_index in range(len(dets)): + for i in range(4): + x = dets[det_index][i * 2 + 0]/OUT_RGB888P_WIDTH*DISPLAY_WIDTH + y = dets[det_index][i * 2 + 1]/OUT_RGB888P_HEIGHT*DISPLAY_HEIGHT + point_8[i * 2 + 0] = int(x) + point_8[i * 2 + 1] = int(y) + for i in range(4): + draw_img.draw_line(point_8[i * 2 + 0],point_8[i * 2 + 1],point_8[(i+1) % 4 * 2 + 0],point_8[(i+1) % 4 * 2 + 1],color=(255, 0, 255, 0),thickness=2) + draw_img.draw_string( point_8[6], point_8[7] + 20, recs[det_index] , color=(255,255,153,18) , scale=4) + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + draw_img.clear() + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +#for camera 初始化 +def camera_init(dev_id): + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_BGR_888_PLANAR) + +# camera 开启 +def camera_start(dev_id): + camera.start_stream(dev_id) + +# camera 读取图像 +def camera_read(dev_id): + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +# camera 图像释放 +def camera_release_image(dev_id,rgb888p_img): + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +# camera 结束 +def camera_stop(dev_id): + camera.stop_stream(dev_id) + +#for media 初始化 +def media_init(): + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 图层1,用于画框 + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_MPGC) + # 图层2,用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +# media 释放内存 +def media_deinit(): + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + + +#**********for licence_det_rec.py********** +def licence_det_inference(): + print("licence_det start") + kpu_licence_det = det_kpu_init(det_kmodel_file) # 创建车牌检测的 kpu 对象 + kpu_licence_rec = rec_kpu_init(rec_kmodel_file) # 创建车牌识别的 kpu 对象 + camera_init(CAM_DEV_ID_0) # 初始化 camera + display_init() # 初始化 display + + rgb888p_img = None + try: + ret = media_init() + if ret: + print("licence_det, buffer init failed") + return ret + + camera_start(CAM_DEV_ID_0) + time.sleep(5) + while True: + with ScopedTiming("total",1): + rgb888p_img = camera_read(CAM_DEV_ID_0) # 读取一帧图片 + if rgb888p_img == -1: + print("licence_det, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # for rgb888planar + if rgb888p_img.format() == image.RGBP888: + dets = det_kpu_run(kpu_licence_det,rgb888p_img) # 执行车牌检测 kpu 运行 以及 后处理过程 + dets_recs = rec_kpu_run(kpu_licence_rec,rgb888p_img,dets) # 执行车牌识别 kpu 运行 以及 后处理过程 + display_draw(dets_recs) # 将得到的检测结果和识别结果 绘制到display + + camera_release_image(CAM_DEV_ID_0,rgb888p_img) # camera 释放图像 + rgb888p_img = None + # gc.collect() + except Exception as e: + print(f"An error occurred during buffer used: {e}") + finally: + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + camera_stop(CAM_DEV_ID_0) # 停止 camera + display_deinit() # 释放 display + det_kpu_deinit(kpu_licence_det) # 释放 车牌检测 kpu + rec_kpu_deinit(kpu_licence_rec) # 释放 车牌识别 kpu + gc.collect() + time.sleep(1) + ret = media_deinit() # 释放 整个media + if ret: + print("licence_det, buffer_deinit failed") + return ret + + print("licence_det end") + return 0 + +if __name__ == '__main__': + licence_det_inference() +``` + +### 6. 石头剪刀布 + +```python +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn #nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +from media.camera import * #摄像头模块 +from media.display import * #显示模块 +from media.media import * #软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +from random import randint #随机整数生成 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time #时间统计 +import gc #垃圾回收模块 +import aicube #aicube模块,封装ai cube 相关后处理 + +##config.py +#display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) +DISPLAY_HEIGHT = 1080 + +#ai原图分辨率输入 +OUT_RGB888P_WIDTH = ALIGN_UP(1920, 16) +OUT_RGB888P_HEIGH = 1080 + +#手掌检测 和 手掌关键点检测 kmodel输入shape +hd_kmodel_input_shape = (1,3,512,512) +hk_kmodel_input_shape = (1,3,256,256) + +#手掌检测 相关参数设置 +confidence_threshold = 0.2 #手掌检测 分数阈值 +nms_threshold = 0.5 #非极大值抑制 阈值 +hd_kmodel_frame_size = [512,512] #手掌检测kmodel输入 w h +hd_frame_size = [OUT_RGB888P_WIDTH,OUT_RGB888P_HEIGH] #手掌检测原始输入图像 w h +strides = [8,16,32] #手掌检测模型 下采样输出倍数 +num_classes = 1 #检测类别数, 及手掌一种 +nms_option = False #控制最大值抑制的方式 False 类内 True 类间 +labels = ["hand"] #标签名称 +anchors = [26,27,53,52,75,71,80,99,106,82,99,134,140,113,161,172,245,276] #手掌检测模型 锚框 +#手掌关键点检测 相关参数 +hk_kmodel_frame_size = [256,256] #手掌关键点检测 kmodel 输入 w h + +# kmodel 路径 +root_dir = '/sdcard/app/tests/' +hd_kmodel_file = root_dir + 'kmodel/hand_det.kmodel' #手掌检测kmodel路径 +hk_kmodel_file = root_dir + 'kmodel/handkp_det.kmodel' #手掌关键点kmodel路径 +debug_mode = 0 # debug模式 大于0(调试)、 反之 (不调试) + +# 猜拳模式 0 玩家稳赢 , 1 玩家必输 , n > 2 多局多胜 +guess_mode = 3 + +# 读取石头剪刀布的bin文件方法 +def read_file(file_name): + image_arr = np.fromfile(file_name,dtype=np.uint8) + image_arr = image_arr.reshape((400,400,4)) + return image_arr +# 石头剪刀布的 array +five_image = read_file(root_dir + "utils/five.bin") +fist_image = read_file(root_dir + "utils/fist.bin") +shear_image = read_file(root_dir + "utils/shear.bin") + + +#scoped_timing.py 用于debug模式输出程序块运行时间 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +#ai_utils.py +global current_kmodel_obj # 定义全局的 kpu 对象 +global hd_ai2d,hd_ai2d_input_tensor,hd_ai2d_output_tensor,hd_ai2d_builder # 定义手掌检测 ai2d 对象,并且定义 ai2d 的输入、输出 以及 builder +global hk_ai2d,hk_ai2d_input_tensor,hk_ai2d_output_tensor,hk_ai2d_builder # 定义手掌关键点检测 ai2d 对象,并且定义 ai2d 的输入、输出 以及 builder +global counts_guess, player_win, k230_win, sleep_end, set_stop_id # 定义猜拳游戏的参数:猜拳次数、玩家赢次、k230赢次、是否停顿、是狗暂停 + +# 手掌检测 ai2d 初始化 +def hd_ai2d_init(): + with ScopedTiming("hd_ai2d_init",debug_mode > 0): + global hd_ai2d + global hd_ai2d_builder + # 计算padding值 + ori_w = OUT_RGB888P_WIDTH + ori_h = OUT_RGB888P_HEIGH + width = hd_kmodel_frame_size[0] + height = hd_kmodel_frame_size[1] + ratiow = float(width) / ori_w + ratioh = float(height) / ori_h + if ratiow < ratioh: + ratio = ratiow + else: + ratio = ratioh + new_w = int(ratio * ori_w) + new_h = int(ratio * ori_h) + dw = float(width - new_w) / 2 + dh = float(height - new_h) / 2 + top = int(round(dh - 0.1)) + bottom = int(round(dh + 0.1)) + left = int(round(dw - 0.1)) + right = int(round(dw - 0.1)) + + # init kpu and load kmodel + hd_ai2d = nn.ai2d() + hd_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + hd_ai2d.set_pad_param(True, [0,0,0,0,top,bottom,left,right], 0, [114,114,114]) + hd_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel ) + hd_ai2d_builder = hd_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], [1,3,height,width]) + + global hd_ai2d_output_tensor + data = np.ones(hd_kmodel_input_shape, dtype=np.uint8) + hd_ai2d_output_tensor = nn.from_numpy(data) + +# 手掌检测 ai2d 运行 +def hd_ai2d_run(rgb888p_img): + with ScopedTiming("hd_ai2d_run",debug_mode > 0): + global hd_ai2d_input_tensor,hd_ai2d_output_tensor + hd_ai2d_input = rgb888p_img.to_numpy_ref() + hd_ai2d_input_tensor = nn.from_numpy(hd_ai2d_input) + + hd_ai2d_builder.run(hd_ai2d_input_tensor, hd_ai2d_output_tensor) + +# 手掌检测 ai2d 释放内存 +def hd_ai2d_release(): + with ScopedTiming("hd_ai2d_release",debug_mode > 0): + global hd_ai2d_input_tensor + del hd_ai2d_input_tensor + +# 手掌检测 kpu 初始化 +def hd_kpu_init(hd_kmodel_file): + # init kpu and load kmodel + with ScopedTiming("hd_kpu_init",debug_mode > 0): + hd_kpu_obj = nn.kpu() + hd_kpu_obj.load_kmodel(hd_kmodel_file) + + hd_ai2d_init() + return hd_kpu_obj + +# 手掌检测 kpu 输入预处理 +def hd_kpu_pre_process(rgb888p_img): + hd_ai2d_run(rgb888p_img) + with ScopedTiming("hd_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,hd_ai2d_output_tensor + # set kpu input + current_kmodel_obj.set_input_tensor(0, hd_ai2d_output_tensor) + +# 手掌检测 kpu 获取 kmodel 输出 +def hd_kpu_get_output(): + with ScopedTiming("hd_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + result = result.reshape((result.shape[0]*result.shape[1]*result.shape[2]*result.shape[3])) + tmp2 = result.copy() + del result + results.append(tmp2) + return results + +# 手掌检测 kpu 运行 +def hd_kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1) 原始图像预处理,并设置模型输入 + hd_kpu_pre_process(rgb888p_img) + # (2) kpu 运行 + with ScopedTiming("hd_kpu_run",debug_mode > 0): + current_kmodel_obj.run() + # (3) 释放ai2d资源 + hd_ai2d_release() + # (4) 获取kpu输出 + results = hd_kpu_get_output() + # (5) kpu结果后处理 + dets = aicube.anchorbasedet_post_process( results[0], results[1], results[2], hd_kmodel_frame_size, hd_frame_size, strides, num_classes, confidence_threshold, nms_threshold, anchors, nms_option) + # (6) 返回 手掌检测 结果 + return dets + +# 手掌检测 kpu 释放内存 +def hd_kpu_deinit(kpu_obj): + with ScopedTiming("hd_kpu_deinit",debug_mode > 0): + global hd_ai2d,hd_ai2d_output_tensor + del kpu_obj + del hd_ai2d + del hd_ai2d_output_tensor + +# 手掌关键点检测 ai2d 初始化 +def hk_ai2d_init(): + with ScopedTiming("hk_ai2d_init",debug_mode > 0): + global hk_ai2d + hk_ai2d = nn.ai2d() + hk_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + + global hk_ai2d_output_tensor + data = np.ones(hk_kmodel_input_shape, dtype=np.uint8) + hk_ai2d_output_tensor = nn.from_numpy(data) + +# 手掌关键点检测 ai2d 运行 +def hk_ai2d_run(rgb888p_img, x, y, w, h): + with ScopedTiming("hk_ai2d_run",debug_mode > 0): + global hk_ai2d,hk_ai2d_input_tensor,hk_ai2d_output_tensor + hk_ai2d_input = rgb888p_img.to_numpy_ref() + hk_ai2d_input_tensor = nn.from_numpy(hk_ai2d_input) + + hk_ai2d.set_crop_param(True, x, y, w, h) + hk_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel ) + + global hk_ai2d_builder + hk_ai2d_builder = hk_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], [1,3,hk_kmodel_frame_size[1],hk_kmodel_frame_size[0]]) + hk_ai2d_builder.run(hk_ai2d_input_tensor, hk_ai2d_output_tensor) + +# 手掌关键点检测 ai2d 释放内存 +def hk_ai2d_release(): + with ScopedTiming("hk_ai2d_release",debug_mode > 0): + global hk_ai2d_input_tensor + del hk_ai2d_input_tensor + +# 手掌关键点检测 kpu 初始化 +def hk_kpu_init(hk_kmodel_file): + # init kpu and load kmodel + with ScopedTiming("hk_kpu_init",debug_mode > 0): + hk_kpu_obj = nn.kpu() + hk_kpu_obj.load_kmodel(hk_kmodel_file) + + hk_ai2d_init() + return hk_kpu_obj + +# 手掌关键点检测 kpu 输入预处理 +def hk_kpu_pre_process(rgb888p_img, x, y, w, h): + hk_ai2d_run(rgb888p_img, x, y, w, h) + with ScopedTiming("hk_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,hk_ai2d_output_tensor + # set kpu input + current_kmodel_obj.set_input_tensor(0, hk_ai2d_output_tensor) + +# 手掌关键点检测 kpu 获得 kmodel 输出 +def hk_kpu_get_output(): + with ScopedTiming("hk_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + + result = result.reshape((result.shape[0]*result.shape[1])) + tmp2 = result.copy() + del result + results.append(tmp2) + return results + +# 手掌关键点检测 接收kmodel结果的后处理 +def hk_kpu_post_process(results, x, y, w, h): + results_show = np.zeros(results.shape,dtype=np.int16) + # results_show = np.zeros(len(results),dtype=np.int16) + results_show[0::2] = results[0::2] * w + x + results_show[1::2] = results[1::2] * h + y + return results_show + +# 手掌关键点检测 kpu 运行 +def hk_kpu_run(kpu_obj,rgb888p_img, x, y, w, h): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1) 原图预处理,并设置模型输入 + hk_kpu_pre_process(rgb888p_img, x, y, w, h) + # (2) kpu 运行 + with ScopedTiming("hk_kpu_run",debug_mode > 0): + current_kmodel_obj.run() + # (3) 释放ai2d资源 + hk_ai2d_release() + # (4) 获取kpu输出 + results = hk_kpu_get_output() + # (5) kpu结果后处理 + result = hk_kpu_post_process(results[0],x,y,w,h) + # (6) 返回 关键点检测 结果 + return result + +# 手掌关键点检测 kpu 释放内存 +def hk_kpu_deinit(kpu_obj): + with ScopedTiming("hk_kpu_deinit",debug_mode > 0): + global hk_ai2d,hk_ai2d_output_tensor + del kpu_obj + del hk_ai2d + del hk_ai2d_output_tensor + +# 手掌关键点检测 计算角度 +def hk_vector_2d_angle(v1,v2): + v1_x = v1[0] + v1_y = v1[1] + v2_x = v2[0] + v2_y = v2[1] + v1_norm = np.sqrt(v1_x * v1_x+ v1_y * v1_y) + v2_norm = np.sqrt(v2_x * v2_x + v2_y * v2_y) + dot_product = v1_x * v2_x + v1_y * v2_y + cos_angle = dot_product/(v1_norm*v2_norm) + angle = np.acos(cos_angle)*180/np.pi + # if (angle>180): + # return 65536 + return angle + +# 利用手掌关键点检测的结果 判断手掌手势 +def hk_gesture(kpu_hand_keypoint_detect,rgb888p_img,det_box): + x1, y1, x2, y2 = det_box[2],det_box[3],det_box[4],det_box[5] + w = int(float(x2 - x1) * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + h = int(float(y2 - y1) * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH) + + x1 = int(x1 * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + y1 = int(y1 * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH) + x2 = int(x2 * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + y2 = int(y2 * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH) + + if (h<(0.1*DISPLAY_HEIGHT)): + return + if (w<(0.25*DISPLAY_WIDTH) and ((x1<(0.03*DISPLAY_WIDTH)) or (x2>(0.97*DISPLAY_WIDTH)))): + return + if (w<(0.15*DISPLAY_WIDTH) and ((x1<(0.01*DISPLAY_WIDTH)) or (x2>(0.99*DISPLAY_WIDTH)))): + return + + length = max(w,h)/2 + cx = (x1+x2)/2 + cy = (y1+y2)/2 + ratio_num = 1.26*length + + x1_kp = int(max(0,cx-ratio_num)) + y1_kp = int(max(0,cy-ratio_num)) + x2_kp = int(min(DISPLAY_WIDTH-1, cx+ratio_num)) + y2_kp = int(min(DISPLAY_HEIGHT-1, cy+ratio_num)) + w_kp = int(x2_kp - x1_kp + 1) + h_kp = int(y2_kp - y1_kp + 1) + + results = hk_kpu_run(kpu_hand_keypoint_detect,rgb888p_img, x1_kp, y1_kp, w_kp, h_kp) + + angle_list = [] + for i in range(5): + angle = hk_vector_2d_angle([(results[0]-results[i*8+4]), (results[1]-results[i*8+5])],[(results[i*8+6]-results[i*8+8]),(results[i*8+7]-results[i*8+9])]) + angle_list.append(angle) + + thr_angle = 65. + thr_angle_thumb = 53. + thr_angle_s = 49. + gesture_str = None + if 65535. not in angle_list: + if (angle_list[0]>thr_angle_thumb) and (angle_list[1]>thr_angle) and (angle_list[2]>thr_angle) and (angle_list[3]>thr_angle) and (angle_list[4]>thr_angle): + gesture_str = "fist" + elif (angle_list[0]thr_angle) and (angle_list[3]>thr_angle) and (angle_list[4]>thr_angle): + gesture_str = "gun" + elif (angle_list[0]thr_angle) and (angle_list[3]>thr_angle) and (angle_list[4]5) and (angle_list[1]thr_angle) and (angle_list[3]>thr_angle) and (angle_list[4]>thr_angle): + gesture_str = "one" + elif (angle_list[0]thr_angle) and (angle_list[2]>thr_angle) and (angle_list[3]>thr_angle) and (angle_list[4]thr_angle_thumb) and (angle_list[1]thr_angle): + gesture_str = "three" + elif (angle_list[0]thr_angle) and (angle_list[2]>thr_angle) and (angle_list[3]>thr_angle) and (angle_list[4]>thr_angle): + gesture_str = "thumbUp" + elif (angle_list[0]>thr_angle_thumb) and (angle_list[1]thr_angle) and (angle_list[4]>thr_angle): + gesture_str = "yeah" + + return gesture_str + + +#media_utils.py +global draw_img,osd_img,masks #for display 定义全局 作图image对象 +global buffer,media_source,media_sink #for media 定义 media 程序中的中间存储对象 + +#for display 初始化 +def display_init(): + # use hdmi for display + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +# display 释放内存 +def display_deinit(): + display.deinit() + +#for camera 初始化 +def camera_init(dev_id): + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +# camera 开启 +def camera_start(dev_id): + camera.start_stream(dev_id) + +# camera 读取图像 +def camera_read(dev_id): + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +# camera 图像释放 +def camera_release_image(dev_id,rgb888p_img): + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +# camera 结束 +def camera_stop(dev_id): + camera.stop_stream(dev_id) + +#for media 初始化 +def media_init(): + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img, osd_img, masks + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 图层1,用于画框 + masks = np.zeros((OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH,4),dtype=np.uint8) + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888,alloc=image.ALLOC_REF,data=masks) + # 图层2,用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +# media 释放内存 +def media_deinit(): + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + + +#**********for finger_guessing.py********** +def finger_guessing_inference(): + print("finger_guessing_test start") + kpu_hand_detect = hd_kpu_init(hd_kmodel_file) # 创建手掌检测的 kpu 对象 + kpu_hand_keypoint_detect = hk_kpu_init(hk_kmodel_file) # 创建手掌关键点检测的 kpu 对象 + camera_init(CAM_DEV_ID_0) # 初始化 camera + display_init() # 初始化 display + + rgb888p_img = None + try: + ret = media_init() + if ret: + print("finger_guessing, buffer init failed") + return ret + + camera_start(CAM_DEV_ID_0) # 开启 camera + counts_guess = -1 # 猜拳次数 计数 + player_win = 0 # 玩家 赢次计数 + k230_win = 0 # k230 赢次计数 + sleep_end = False # 是否 停顿 + set_stop_id = True # 是否 暂停猜拳 + LIBRARY = ["fist","yeah","five"] # 猜拳 石头剪刀布 三种方案的dict + + while True: + with ScopedTiming("total",1): + rgb888p_img = camera_read(CAM_DEV_ID_0) # 读取一帧图像 + if rgb888p_img == -1: + print("finger_guessing, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # for rgb888planar + if rgb888p_img.format() == image.RGBP888: + with ScopedTiming("trigger time", debug_mode > 0): + dets = hd_kpu_run(kpu_hand_detect,rgb888p_img) # 执行手掌检测 kpu 运行 以及 后处理过程 + gesture = "" + draw_img.clear() + for det_box in dets: + gesture = hk_gesture(kpu_hand_keypoint_detect,rgb888p_img,det_box) # 执行手掌关键点检测 kpu 运行 以及 后处理过程 得到手势类型 + if (len(dets) >= 2): + draw_img.draw_string( 300 , 500, "Must have one hand !", color=(255,255,0,0), scale=7) + draw_img.copy_to(osd_img) + elif (guess_mode == 0): + if (gesture == "fist"): + masks[:400,:400,:] = shear_image + elif (gesture == "five"): + masks[:400,:400,:] = fist_image + elif (gesture == "yeah"): + masks[:400,:400,:] = five_image + draw_img.copy_to(osd_img) + elif (guess_mode == 1): + if (gesture == "fist"): + masks[:400,:400,:] = five_image + elif (gesture == "five"): + masks[:400,:400,:] = shear_image + elif (gesture == "yeah"): + masks[:400,:400,:] = fist_image + draw_img.copy_to(osd_img) + else: + if (sleep_end): + time.sleep_ms(2000) + sleep_end = False + if (len(dets) == 0): + set_stop_id = True + if (counts_guess == -1 and gesture != "fist" and gesture != "yeah" and gesture != "five"): + draw_img.draw_string( 400 , 450, "G A M E S T A R T", color=(255,255,0,0), scale=7) + draw_img.draw_string( 400 , 550, " 1 S E T ", color=(255,255,0,0), scale=7) + draw_img.copy_to(osd_img) + elif (counts_guess == guess_mode): + draw_img.clear() + if (k230_win > player_win): + draw_img.draw_string( 400 , 450, "Y O U L O S E", color=(255,255,0,0), scale=7) + elif (k230_win < player_win): + draw_img.draw_string( 400 , 450, "Y O U W I N", color=(255,255,0,0), scale=7) + else: + draw_img.draw_string( 400 , 450, "T I E G A M E", color=(255,255,0,0), scale=7) + draw_img.copy_to(osd_img) + counts_guess = -1 + player_win = 0 + k230_win = 0 + + sleep_end = True + else: + if (set_stop_id): + if (counts_guess == -1 and (gesture == "fist" or gesture == "yeah" or gesture == "five")): + counts_guess = 0 + if (counts_guess != -1 and (gesture == "fist" or gesture == "yeah" or gesture == "five")): + k230_guess = randint(1,10000) % 3 + if (gesture == "fist" and LIBRARY[k230_guess] == "yeah"): + player_win += 1 + elif (gesture == "fist" and LIBRARY[k230_guess] == "five"): + k230_win += 1 + if (gesture == "yeah" and LIBRARY[k230_guess] == "fist"): + k230_win += 1 + elif (gesture == "yeah" and LIBRARY[k230_guess] == "five"): + player_win += 1 + if (gesture == "five" and LIBRARY[k230_guess] == "fist"): + player_win += 1 + elif (gesture == "five" and LIBRARY[k230_guess] == "yeah"): + k230_win += 1 + + if (LIBRARY[k230_guess] == "fist"): + masks[:400,:400,:] = fist_image + elif (LIBRARY[k230_guess] == "five"): + masks[:400,:400,:] = five_image + elif (LIBRARY[k230_guess] == "yeah"): + masks[:400,:400,:] = shear_image + + counts_guess += 1; + draw_img.draw_string( 400 , 450, " " + str(counts_guess) + " S E T ", color=(255,255,0,0), scale=7) + draw_img.copy_to(osd_img) + set_stop_id = False + sleep_end = True + + else: + draw_img.draw_string( 400 , 450, " " + str(counts_guess+1) + " S E T ", color=(255,255,0,0), scale=7) + draw_img.copy_to(osd_img) + else: + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) # 将得到的图像 绘制到 display + + camera_release_image(CAM_DEV_ID_0,rgb888p_img) # camera 释放图形 + rgb888p_img = None + gc.collect() + except Exception as e: + print(f"An error occurred during buffer used: {e}") + finally: + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + camera_stop(CAM_DEV_ID_0) # 停止 camera + display_deinit() # 停止 display + hd_kpu_deinit(kpu_hand_detect) # 释放手掌检测 kpu + hk_kpu_deinit(kpu_hand_keypoint_detect) # 释放手掌关键点检测 kpu + + gc.collect() + ret = media_deinit() # 释放 整个 media + if ret: + print("finger_guessing, buffer_deinit failed") + return ret + + print("finger_guessing_test end") + return 0 + +if __name__ == '__main__': + finger_guessing_inference() +``` + +### 7. OCR识别 + +```python +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn #nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +from media.camera import * #摄像头模块 +from media.display import * #显示模块 +from media.media import * #软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time #时间统计 +import gc #垃圾回收模块 +import aicube #aicube模块,封装检测分割等任务相关后处理 + +# display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) +DISPLAY_HEIGHT = 1080 + +# ai原图分辨率输入 +OUT_RGB888P_WIDTH = ALIGN_UP(640, 16) +OUT_RGB888P_HEIGH = 360 + +#kmodel输入参数设置 +kmodel_input_shape_det = (1,3,640,640) # OCR检测模型的kmodel输入分辨率 +kmodel_input_shape_rec = (1,3,32,512) # OCR识别模型的kmodel输入分辨率 +rgb_mean = [0,0,0] # ai2d padding的值 + +#检测步骤kmodel相关参数设置 +mask_threshold = 0.25 # 二值化mask阈值 +box_threshold = 0.3 # 检测框分数阈值 + +#文件配置 +root_dir = '/sdcard/app/tests/' +kmodel_file_det = root_dir + 'kmodel/ocr_det_int16.kmodel' # 检测模型路径 +kmodel_file_rec = root_dir + "kmodel/ocr_rec_int16.kmodel" # 识别模型路径 +dict_path = root_dir + 'utils/dict.txt' # 调试模式 大于0(调试)、 反之 (不调试) +debug_mode = 0 + +# OCR字典读取 +with open(dict_path, 'r') as file: + line_one = file.read(100000) + line_list = line_one.split("\r\n") +DICT = {num: char.replace("\r", "").replace("\n", "") for num, char in enumerate(line_list)} + +# scoped_timing.py 用于debug模式输出程序块运行时间 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +# utils 设定全局变量 +global current_kmodel_obj # 设置全局kpu对象 +global ai2d_det,ai2d_input_tensor_det,ai2d_output_tensor_det,ai2d_builder_det,ai2d_input_det # 设置检测模型的ai2d对象,并定义ai2d的输入、输出和builder +global ai2d_rec,ai2d_input_tensor_rec,ai2d_output_tensor_rec,ai2d_builder_rec # 设置识别模型的ai2d对象,并定义ai2d的输入、输出和builder + +# padding方法,一边padding,右padding或者下padding +def get_pad_one_side_param(out_img_size,input_img_size): + dst_w = out_img_size[0] + dst_h = out_img_size[1] + + input_width = input_img_size[0] + input_high = input_img_size[1] + + ratio_w = dst_w / input_width + ratio_h = dst_h / input_high + if ratio_w < ratio_h: + ratio = ratio_w + else: + ratio = ratio_h + + new_w = (int)(ratio * input_width) + new_h = (int)(ratio * input_high) + dw = (dst_w - new_w) / 2 + dh = (dst_h - new_h) / 2 + + top = (int)(round(0)) + bottom = (int)(round(dh * 2 + 0.1)) + left = (int)(round(0)) + right = (int)(round(dw * 2 - 0.1)) + return [0, 0, 0, 0, top, bottom, left, right] + +# 检测步骤ai2d初始化 +def ai2d_init_det(): + with ScopedTiming("ai2d_init_det",debug_mode > 0): + global ai2d_det + ai2d_det = nn.ai2d() + ai2d_det.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + ai2d_det.set_pad_param(True, get_pad_one_side_param([kmodel_input_shape_det[3],kmodel_input_shape_det[2]], [OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH]), 0, [0, 0, 0]) + ai2d_det.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + global ai2d_output_tensor_det + data = np.ones(kmodel_input_shape_det, dtype=np.uint8) + ai2d_output_tensor_det = nn.from_numpy(data) + global ai2d_builder_det + ai2d_builder_det = ai2d_det.build([1, 3, OUT_RGB888P_HEIGH, OUT_RGB888P_WIDTH], [1, 3, kmodel_input_shape_det[2], kmodel_input_shape_det[3]]) + + +# 检测步骤的ai2d 运行,完成ai2d_init_det预设的预处理 +def ai2d_run_det(rgb888p_img): + with ScopedTiming("ai2d_run_det",debug_mode > 0): + global ai2d_input_tensor_det,ai2d_builder_det,ai2d_input_det + ai2d_input_det = rgb888p_img.to_numpy_ref() + ai2d_input_tensor_det = nn.from_numpy(ai2d_input_det) + global ai2d_output_tensor_det + ai2d_builder_det.run(ai2d_input_tensor_det, ai2d_output_tensor_det) + +# 识别步骤ai2d初始化 +def ai2d_init_rec(): + with ScopedTiming("ai2d_init_res",debug_mode > 0): + global ai2d_rec,ai2d_output_tensor_rec + ai2d_rec = nn.ai2d() + ai2d_rec.set_dtype(nn.ai2d_format.RGB_packed, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + ai2d_out_data = np.ones((1, 3, kmodel_input_shape_rec[2], kmodel_input_shape_rec[3]), dtype=np.uint8) + ai2d_output_tensor_rec = nn.from_numpy(ai2d_out_data) + + +# 识别步骤ai2d运行 +def ai2d_run_rec(rgb888p_img): + with ScopedTiming("ai2d_run_rec",debug_mode > 0): + global ai2d_rec,ai2d_builder_rec,ai2d_input_tensor_rec,ai2d_output_tensor_rec + ai2d_rec.set_pad_param(True, get_pad_one_side_param([kmodel_input_shape_rec[3],kmodel_input_shape_rec[2]],[rgb888p_img.shape[2],rgb888p_img.shape[1]]), 0, [0, 0, 0]) + ai2d_rec.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + ai2d_builder_rec = ai2d_rec.build([rgb888p_img.shape[0], rgb888p_img.shape[1], rgb888p_img.shape[2],rgb888p_img.shape[3]], + [1, 3, kmodel_input_shape_rec[2], kmodel_input_shape_rec[3]]) + ai2d_input_tensor_rec = nn.from_numpy(rgb888p_img) + ai2d_builder_rec.run(ai2d_input_tensor_rec, ai2d_output_tensor_rec) + +# 检测步骤ai2d释放内存 +def ai2d_release_det(): + with ScopedTiming("ai2d_release_det",debug_mode > 0): + global ai2d_input_tensor_det + del ai2d_input_tensor_det + +# 识别步骤ai2d释放内存 +def ai2d_release_rec(): + with ScopedTiming("ai2d_release_rec",debug_mode > 0): + global ai2d_input_tensor_rec + del ai2d_input_tensor_rec + +# 检测步骤kpu初始化 +def kpu_init_det(kmodel_file): + # init kpu and load kmodel + with ScopedTiming("kpu_init_det",debug_mode > 0): + kpu_obj = nn.kpu() + kpu_obj.load_kmodel(kmodel_file) + ai2d_init_det() + return kpu_obj + +# 识别步骤kpu初始化 +def kpu_init_rec(kmodel_file): + # init kpu and load kmodel + with ScopedTiming("kpu_init_rec",debug_mode > 0): + kpu_obj = nn.kpu() + kpu_obj.load_kmodel(kmodel_file) + ai2d_init_rec() + return kpu_obj + +# 检测步骤预处理,调用ai2d_run_det实现,并将ai2d的输出设置为kmodel的输入 +def kpu_pre_process_det(rgb888p_img): + ai2d_run_det(rgb888p_img) + with ScopedTiming("kpu_pre_process_det",debug_mode > 0): + global current_kmodel_obj,ai2d_output_tensor_det + # set kpu input + current_kmodel_obj.set_input_tensor(0, ai2d_output_tensor_det) + +# 识别步骤预处理,调用ai2d_init_run_rec实现,并将ai2d的输出设置为kmodel的输入 +def kpu_pre_process_rec(rgb888p_img): + ai2d_run_rec(rgb888p_img) + with ScopedTiming("kpu_pre_process_rec",debug_mode > 0): + global current_kmodel_obj,ai2d_output_tensor_rec + # set kpu input + current_kmodel_obj.set_input_tensor(0, ai2d_output_tensor_rec) + + +# 获取kmodel的输出 +def kpu_get_output(): + with ScopedTiming("kpu_get_output",debug_mode > 0): + global current_kmodel_obj + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + del data + results.append(result) + return results + +# 检测步骤kpu运行 +def kpu_run_det(kpu_obj,rgb888p_img): + # kpu推理 + global current_kmodel_obj + current_kmodel_obj = kpu_obj + #(1)原图像预处理并设置模型输入 + kpu_pre_process_det(rgb888p_img) + #(2)kpu推理 + with ScopedTiming("kpu_run_det",debug_mode > 0): + # 检测运行 + kpu_obj.run() + #(3)检测释放ai2d资源 + ai2d_release_det() + #(4)获取检测kpu输出 + results = kpu_get_output() + #(5)CHW转HWC + global ai2d_input_det + tmp = (ai2d_input_det.shape[0], ai2d_input_det.shape[1], ai2d_input_det.shape[2]) + ai2d_input_det = ai2d_input_det.reshape((ai2d_input_det.shape[0], ai2d_input_det.shape[1] * ai2d_input_det.shape[2])) + ai2d_input_det = ai2d_input_det.transpose() + tmp2 = ai2d_input_det.copy() + tmp2 = tmp2.reshape((tmp[1], tmp[2], tmp[0])) + #(6)后处理,aicube.ocr_post_process接口说明: + # 接口:aicube.ocr_post_process(threshold_map,ai_isp,kmodel_input_shape,isp_shape,mask_threshold,box_threshold); + # 参数说明: + # threshold_map: DBNet模型的输出为(N,kmodel_input_shape_det[2],kmodel_input_shape_det[3],2),两个通道分别为threshold map和segmentation map + # 后处理过程只使用threshold map,因此将results[0][:,:,:,0] reshape成一维传给接口使用。 + # ai_isp:后处理还会返回基于原图的检测框裁剪数据,因此要将原图数据reshape为一维传给接口处理。 + # kmodel_input_shape:kmodel输入分辨率。 + # isp_shape:AI原图分辨率。要将kmodel输出分辨率的检测框坐标映射到原图分辨率上,需要使用这两个分辨率的值。 + # mask_threshold:用于二值化图像获得文本区域。 + # box_threshold:检测框分数阈值,低于该阈值的检测框不计入结果。 + with ScopedTiming("kpu_post",debug_mode > 0): + # 调用aicube模块的ocr_post_process完成ocr检测的后处理 + # det_results结构为[[crop_array_nhwc,[p1_x,p1_y,p2_x,p2_y,p3_x,p3_y,p4_x,p4_y]],...] + det_results = aicube.ocr_post_process(results[0][:, :, :, 0].reshape(-1), tmp2.reshape(-1), + [kmodel_input_shape_det[3], kmodel_input_shape_det[2]], + [OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH], mask_threshold, box_threshold) + return det_results + +# 识别步骤后处理 +def kpu_run_rec(kpu_obj,rgb888p_img): + # kpu推理 + global current_kmodel_obj + current_kmodel_obj = kpu_obj + #(1)识别预处理并设置模型输入 + kpu_pre_process_rec(rgb888p_img) + #(2)kpu推理 + with ScopedTiming("kpu_run_rec",debug_mode > 0): + # 识别运行 + kpu_obj.run() + #(3)识别释放ai2d资源 + ai2d_release_rec() + #(4)获取识别kpu输出 + results = kpu_get_output() + #(5)识别后处理,results结构为[(N,MAX_LENGTH,DICT_LENGTH),...],在axis=2维度上取argmax获取当前识别字符在字典中的索引 + preds = np.argmax(results[0], axis=2).reshape((-1)) + output_txt = "" + for i in range(len(preds)): + # 当前识别字符不是字典的最后一个字符并且和前一个字符不重复(去重),加入识别结果字符串 + if preds[i] != (len(DICT) - 1) and (not (i > 0 and preds[i - 1] == preds[i])): + output_txt = output_txt + DICT[preds[i]] + return output_txt + +# 释放检测步骤kpu、ai2d以及ai2d相关的tensor +def kpu_deinit_det(kpu_obj): + with ScopedTiming("kpu_deinit",debug_mode > 0): + global ai2d_det,ai2d_output_tensor_det + del kpu_obj + del ai2d_det + del ai2d_output_tensor_det + +# 释放识别步骤kpu +def kpu_deinit_rec(kpu_obj): + with ScopedTiming("kpu_deinit",debug_mode > 0): + global ai2d_rec,ai2d_output_tensor_rec + del kpu_obj + del ai2d_rec + del ai2d_output_tensor_rec + + +#********************for media_utils.py******************** + +global draw_img,osd_img #for display +global buffer,media_source,media_sink #for media + +# display初始化 +def display_init(): + # use hdmi for display + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +# 释放display +def display_deinit(): + display.deinit() + +# display显示检测识别框 +def display_draw(det_results): + with ScopedTiming("display_draw",debug_mode >0): + global draw_img,osd_img + if det_results: + draw_img.clear() + # 循环绘制所有检测到的框 + for j in det_results: + # 将原图的坐标点转换成显示的坐标点,循环绘制四条直线,得到一个矩形框 + for i in range(4): + x1 = j[1][(i * 2)] / OUT_RGB888P_WIDTH * DISPLAY_WIDTH + y1 = j[1][(i * 2 + 1)] / OUT_RGB888P_HEIGH * DISPLAY_HEIGHT + x2 = j[1][((i + 1) * 2) % 8] / OUT_RGB888P_WIDTH * DISPLAY_WIDTH + y2 = j[1][((i + 1) * 2 + 1) % 8] / OUT_RGB888P_HEIGH * DISPLAY_HEIGHT + draw_img.draw_line((int(x1), int(y1), int(x2), int(y2)), color=(255, 0, 0, 255), + thickness=5) + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + draw_img.clear() + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +# camera初始化 +def camera_init(dev_id): + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + # camera获取的通道0图像送display显示 + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + # camera获取的通道2图像送ai处理 + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +# camera 启动视频流 +def camera_start(dev_id): + camera.start_stream(dev_id) + +# camera 捕获一帧图像 +def camera_read(dev_id): + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +# camera 释放内存 +def camera_release_image(dev_id,rgb888p_img): + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +# camera 停止视频流 +def camera_stop(dev_id): + camera.stop_stream(dev_id) + +#for media 初始化 +def media_init(): + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 图层1,用于画框 + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_MPGC) + # 图层2,用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +# media 释放buffer,销毁link +def media_deinit(): + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + +def ocr_rec_inference(): + print("ocr_rec_test start") + kpu_ocr_det = kpu_init_det(kmodel_file_det) # 创建OCR检测kpu对象 + kpu_ocr_rec = kpu_init_rec(kmodel_file_rec) # 创建OCR识别kpu对象 + camera_init(CAM_DEV_ID_0) # camera初始化 + display_init() # display初始化 + rgb888p_img = None + try: + ret = media_init() + if ret: + print("ocr_rec_test, buffer init failed") + return ret + + camera_start(CAM_DEV_ID_0) + time.sleep(5) + while True: + with ScopedTiming("total",1): + rgb888p_img = camera_read(CAM_DEV_ID_0) # 读取一帧图像 + if rgb888p_img == -1: + print("ocr_rec_test, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + # for rgb888planar + if rgb888p_img.format() == image.RGBP888: + det_results = kpu_run_det(kpu_ocr_det,rgb888p_img) # kpu运行获取OCR检测kmodel的推理输出 + ocr_results="" + if det_results: + for j in det_results: + ocr_result = kpu_run_rec(kpu_ocr_rec,j[0]) # j[0]为检测框的裁剪部分,kpu运行获取OCR识别kmodel的推理输出 + ocr_results = ocr_results+" ["+ocr_result+"] " + print("\n"+ocr_results) + display_draw(det_results) + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + # gc.collect() + except Exception as e: + print(f"An error occurred during buffer used: {e}") + finally: + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + camera_stop(CAM_DEV_ID_0) # 停止camera + display_deinit() # 释放display + kpu_deinit_det(kpu_ocr_det) # 释放OCR检测步骤kpu + kpu_deinit_rec(kpu_ocr_rec) # 释放OCR识别步骤kpu + gc.collect() + time.sleep(1) + ret = media_deinit() # 释放整个media + if ret: + print("ocr_rec_test, buffer_deinit failed") + return ret + + print("ocr_rec_test end") + return 0 + +if __name__ == '__main__': + ocr_rec_inference() +``` + +### 8. 手掌关键点检测 + +```python +import aicube #aicube模块,封装检测分割等任务相关后处理 +from media.camera import * #摄像头模块 +from media.display import * #显示模块 +from media.media import * #软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 + +import nncase_runtime as nn #nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 + +import time #时间统计 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 + +import gc #垃圾回收模块 + +##config.py +#display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) +DISPLAY_HEIGHT = 1080 + +##ai原图分辨率输入 +OUT_RGB888P_WIDTH = ALIGN_UP(1920, 16) +OUT_RGB888P_HEIGH = 1080 + +#--------for hand detection---------- +#kmodel输入shape +hd_kmodel_input_shape = (1,3,512,512) # 手掌检测kmodel输入分辨率 + +#kmodel相关参数设置 +confidence_threshold = 0.2 # 手掌检测阈值,用于过滤roi +nms_threshold = 0.5 # 手掌检测框阈值,用于过滤重复roi +hd_kmodel_frame_size = [512,512] # 手掌检测输入图片尺寸 +hd_frame_size = [OUT_RGB888P_WIDTH,OUT_RGB888P_HEIGH] # 手掌检测直接输入图片尺寸 +strides = [8,16,32] # 输出特征图的尺寸与输入图片尺寸的比 +num_classes = 1 # 手掌检测模型输出类别数 +nms_option = False # 是否所有检测框一起做NMS,False则按照不同的类分别应用NMS + +root_dir = '/sdcard/app/tests/' +hd_kmodel_file = root_dir + "kmodel/hand_det.kmodel" # 手掌检测kmodel文件的路径 +anchors = [26,27, 53,52, 75,71, 80,99, 106,82, 99,134, 140,113, 161,172, 245,276] #anchor设置 + +#--------for hand keypoint detection---------- +#kmodel输入shape +hk_kmodel_input_shape = (1,3,256,256) # 手掌关键点检测kmodel输入分辨率 + +#kmodel相关参数设置 +hk_kmodel_frame_size = [256,256] # 手掌关键点检测输入图片尺寸 +hk_kmodel_file = root_dir + 'kmodel/handkp_det.kmodel' # 手掌关键点检测kmodel文件的路径 + +debug_mode = 0 # debug模式 大于0(调试)、 反之 (不调试) + +#scoped_timing.py 用于debug模式输出程序块运行时间 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +#ai_utils.py +global current_kmodel_obj # 定义全局的 kpu 对象 +global hd_ai2d,hd_ai2d_input_tensor,hd_ai2d_output_tensor,hd_ai2d_builder # 定义手掌检测全局 ai2d 对象,并且定义 ai2d 的输入、输出 以及 builder +global hk_ai2d,hk_ai2d_input_tensor,hk_ai2d_output_tensor,hk_ai2d_builder # 定义手掌关键点检测全局 ai2d 对象,并且定义 ai2d 的输入、输出 以及 builder + +#-------hand detect--------: +# 手掌检测ai2d 初始化 +def hd_ai2d_init(): + with ScopedTiming("hd_ai2d_init",debug_mode > 0): + global hd_ai2d + global hd_ai2d_builder + global hd_ai2d_output_tensor + # 计算padding值 + ori_w = OUT_RGB888P_WIDTH + ori_h = OUT_RGB888P_HEIGH + width = hd_kmodel_frame_size[0] + height = hd_kmodel_frame_size[1] + ratiow = float(width) / ori_w + ratioh = float(height) / ori_h + if ratiow < ratioh: + ratio = ratiow + else: + ratio = ratioh + new_w = int(ratio * ori_w) + new_h = int(ratio * ori_h) + dw = float(width - new_w) / 2 + dh = float(height - new_h) / 2 + top = int(round(dh - 0.1)) + bottom = int(round(dh + 0.1)) + left = int(round(dw - 0.1)) + right = int(round(dw - 0.1)) + + # init kpu and load kmodel + hd_ai2d = nn.ai2d() + hd_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + hd_ai2d.set_pad_param(True, [0,0,0,0,top,bottom,left,right], 0, [114,114,114]) + hd_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel ) + hd_ai2d_builder = hd_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], [1,3,height,width]) + data = np.ones(hd_kmodel_input_shape, dtype=np.uint8) + hd_ai2d_output_tensor = nn.from_numpy(data) + +# 手掌检测 ai2d 运行 +def hd_ai2d_run(rgb888p_img): + with ScopedTiming("hd_ai2d_run",debug_mode > 0): + global hd_ai2d_input_tensor,hd_ai2d_output_tensor + hd_ai2d_input = rgb888p_img.to_numpy_ref() + hd_ai2d_input_tensor = nn.from_numpy(hd_ai2d_input) + + hd_ai2d_builder.run(hd_ai2d_input_tensor, hd_ai2d_output_tensor) + +# 手掌检测 ai2d 释放内存 +def hd_ai2d_release(): + with ScopedTiming("hd_ai2d_release",debug_mode > 0): + global hd_ai2d_input_tensor + del hd_ai2d_input_tensor + +# 手掌检测 kpu 初始化 +def hd_kpu_init(hd_kmodel_file): + # init kpu and load kmodel + with ScopedTiming("hd_kpu_init",debug_mode > 0): + hd_kpu_obj = nn.kpu() + hd_kpu_obj.load_kmodel(hd_kmodel_file) + + hd_ai2d_init() + return hd_kpu_obj + +# 手掌检测 kpu 输入预处理 +def hd_kpu_pre_process(rgb888p_img): + hd_ai2d_run(rgb888p_img) + with ScopedTiming("hd_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,hd_ai2d_output_tensor + # set kpu input + current_kmodel_obj.set_input_tensor(0, hd_ai2d_output_tensor) + +# 手掌检测 kpu 获得 kmodel 输出 +def hd_kpu_get_output(): + with ScopedTiming("hd_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + result = result.reshape((result.shape[0]*result.shape[1]*result.shape[2]*result.shape[3])) + tmp2 = result.copy() + del result + results.append(tmp2) + return results + +# 手掌检测 kpu 运行 +def hd_kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)原图预处理,并设置模型输入 + hd_kpu_pre_process(rgb888p_img) + # (2)手掌检测 kpu 运行 + with ScopedTiming("hd_kpu_run",debug_mode > 0): + current_kmodel_obj.run() + # (3)释放手掌检测 ai2d 资源 + hd_ai2d_release() + # (4)获取手掌检测 kpu 输出 + results = hd_kpu_get_output() + # (5)手掌检测 kpu 结果后处理 + dets = aicube.anchorbasedet_post_process( results[0], results[1], results[2], hd_kmodel_frame_size, hd_frame_size, strides, num_classes, confidence_threshold, nms_threshold, anchors, nms_option) + # (6)返回手掌检测结果 + return dets + +# 手掌检测 kpu 释放内存 +def hd_kpu_deinit(kpu_obj): + with ScopedTiming("hd_kpu_deinit",debug_mode > 0): + global hd_ai2d, hd_ai2d_output_tensor + del kpu_obj + del hd_ai2d + del hd_ai2d_output_tensor + +#-------hand keypoint detection------: +# 手掌关键点检测 ai2d 初始化 +def hk_ai2d_init(): + with ScopedTiming("hk_ai2d_init",debug_mode > 0): + global hk_ai2d, hk_ai2d_output_tensor + hk_ai2d = nn.ai2d() + hk_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + data = np.ones(hk_kmodel_input_shape, dtype=np.uint8) + hk_ai2d_output_tensor = nn.from_numpy(data) + +# 手掌关键点检测 ai2d 运行 +def hk_ai2d_run(rgb888p_img, x, y, w, h): + with ScopedTiming("hk_ai2d_run",debug_mode > 0): + global hk_ai2d,hk_ai2d_input_tensor,hk_ai2d_output_tensor + hk_ai2d_input = rgb888p_img.to_numpy_ref() + hk_ai2d_input_tensor = nn.from_numpy(hk_ai2d_input) + + hk_ai2d.set_crop_param(True, x, y, w, h) + hk_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel ) + + global hk_ai2d_builder + hk_ai2d_builder = hk_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], [1,3,hk_kmodel_frame_size[1],hk_kmodel_frame_size[0]]) + hk_ai2d_builder.run(hk_ai2d_input_tensor, hk_ai2d_output_tensor) + +# 手掌关键点检测 ai2d 释放内存 +def hk_ai2d_release(): + with ScopedTiming("hk_ai2d_release",debug_mode > 0): + global hk_ai2d_input_tensor + del hk_ai2d_input_tensor + +# 手掌关键点检测 kpu 初始化 +def hk_kpu_init(hk_kmodel_file): + # init kpu and load kmodel + with ScopedTiming("hk_kpu_init",debug_mode > 0): + hk_kpu_obj = nn.kpu() + hk_kpu_obj.load_kmodel(hk_kmodel_file) + + hk_ai2d_init() + return hk_kpu_obj + +# 手掌关键点检测 kpu 输入预处理 +def hk_kpu_pre_process(rgb888p_img, x, y, w, h): + hk_ai2d_run(rgb888p_img, x, y, w, h) + with ScopedTiming("hk_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,hk_ai2d_output_tensor + # set kpu input + current_kmodel_obj.set_input_tensor(0, hk_ai2d_output_tensor) + +# 手掌关键点检测 kpu 获得 kmodel 输出 +def hk_kpu_get_output(): + with ScopedTiming("hk_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + + result = result.reshape((result.shape[0]*result.shape[1])) + tmp2 = result.copy() + del result + results.append(tmp2) + return results + +# 手掌关键点检测 kpu 运行 +def hk_kpu_run(kpu_obj,rgb888p_img, x, y, w, h): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)原图预处理,并设置模型输入 + hk_kpu_pre_process(rgb888p_img, x, y, w, h) + # (2)手掌关键点检测 kpu 运行 + with ScopedTiming("hk_kpu_run",debug_mode > 0): + current_kmodel_obj.run() + # (3)释放手掌关键点检测 ai2d 资源 + hk_ai2d_release() + # (4)获取手掌关键点检测 kpu 输出 + results = hk_kpu_get_output() + # (5)返回手掌关键点检测结果 + return results + +# 手掌关键点检测 kpu 释放内存 +def hk_kpu_deinit(kpu_obj): + with ScopedTiming("hk_kpu_deinit",debug_mode > 0): + global hk_ai2d, hk_ai2d_output_tensor + del kpu_obj + del hk_ai2d + del hk_ai2d_output_tensor + +#media_utils.py +global draw_img,osd_img,masks #for display 定义全局 作图image对象 +global buffer,media_source,media_sink #for media 定义 media 程序中的中间存储对象 + +#for display 初始化 +def display_init(): + # use hdmi for display + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +# display 释放内存 +def display_deinit(): + display.deinit() + +# display 作图过程 标出检测到的21个关键点并用不同颜色的线段连接 +def display_draw(results, x, y, w, h): + with ScopedTiming("display_draw",debug_mode >0): + global draw_img,osd_img + + if results: + results_show = np.zeros(results.shape,dtype=np.int16) + results_show[0::2] = results[0::2] * w + x + results_show[1::2] = results[1::2] * h + y + for i in range(len(results_show)/2): + draw_img.draw_circle(results_show[i*2], results_show[i*2+1], 1, color=(255, 0, 255, 0),fill=False) + for i in range(5): + j = i*8 + if i==0: + R = 255; G = 0; B = 0 + if i==1: + R = 255; G = 0; B = 255 + if i==2: + R = 255; G = 255; B = 0 + if i==3: + R = 0; G = 255; B = 0 + if i==4: + R = 0; G = 0; B = 255 + draw_img.draw_line(results_show[0], results_show[1],results_show[j+2], results_show[j+3],color=(255,R,G,B)) + draw_img.draw_line(results_show[j+2], results_show[j+3],results_show[j+4], results_show[j+5],color=(255,R,G,B)) + draw_img.draw_line(results_show[j+4], results_show[j+5],results_show[j+6], results_show[j+7],color=(255,R,G,B)) + draw_img.draw_line(results_show[j+6], results_show[j+7],results_show[j+8], results_show[j+9],color=(255,R,G,B)) + +#for camera 初始化 +def camera_init(dev_id): + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +# camera 开启 +def camera_start(dev_id): + camera.start_stream(dev_id) + +# camera 读取图像 +def camera_read(dev_id): + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +# camera 图像释放 +def camera_release_image(dev_id,rgb888p_img): + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +# camera 结束 +def camera_stop(dev_id): + camera.stop_stream(dev_id) + +#for media 初始化 +def media_init(): + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 图层1,用于画框 + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_MPGC) + # 图层2,用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +# media 释放内存 +def media_deinit(): + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + +#**********for hand_keypoint_detect.py********** +def hand_keypoint_detect_inference(): + print("hand_keypoint_detect_test start") + kpu_hand_detect = hd_kpu_init(hd_kmodel_file) # 创建手掌检测的 kpu 对象 + kpu_hand_keypoint_detect = hk_kpu_init(hk_kmodel_file) # 创建手掌关键点检测的 kpu 对象 + camera_init(CAM_DEV_ID_0) # 初始化 camera + display_init() # 初始化 display + + rgb888p_img = None + try: + ret = media_init() + if ret: + print("hand_detect_test, buffer init failed") + return ret + + camera_start(CAM_DEV_ID_0) + while True: + with ScopedTiming("total",1): + rgb888p_img = camera_read(CAM_DEV_ID_0) # 读取一帧图片 + if rgb888p_img == -1: + print("hand_detect_test, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # for rgb888planar + if rgb888p_img.format() == image.RGBP888: + dets = hd_kpu_run(kpu_hand_detect,rgb888p_img) # 执行手掌检测 kpu 运行 以及 后处理过程 + draw_img.clear() + + for det_box in dets: + x1, y1, x2, y2 = det_box[2],det_box[3],det_box[4],det_box[5] + w = int(float(x2 - x1) * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + h = int(float(y2 - y1) * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH) + + x1 = int(x1 * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + y1 = int(y1 * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH) + x2 = int(x2 * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + y2 = int(y2 * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH) + + if (h<(0.1*DISPLAY_HEIGHT)): + continue + if (w<(0.25*DISPLAY_WIDTH) and ((x1<(0.03*DISPLAY_WIDTH)) or (x2>(0.97*DISPLAY_WIDTH)))): + continue + if (w<(0.15*DISPLAY_WIDTH) and ((x1<(0.01*DISPLAY_WIDTH)) or (x2>(0.99*DISPLAY_WIDTH)))): + continue + + length = max(w,h)/2 + cx = (x1+x2)/2 + cy = (y1+y2)/2 + ratio_num = 1.26*length + + x1_kp = int(max(0,cx-ratio_num)) + y1_kp = int(max(0,cy-ratio_num)) + x2_kp = int(min(DISPLAY_WIDTH-1, cx+ratio_num)) + y2_kp = int(min(DISPLAY_HEIGHT-1, cy+ratio_num)) + w_kp = int(x2_kp - x1_kp + 1) + h_kp = int(y2_kp - y1_kp + 1) + + hk_results = hk_kpu_run(kpu_hand_keypoint_detect,rgb888p_img, x1_kp, y1_kp, w_kp, h_kp) # 执行手掌关键点检测 kpu 运行 以及 后处理过程 + + draw_img.draw_rectangle(x1, y1, w, h, color=(255, 0, 255, 0)) # 将得到的手掌检测结果 绘制到 display + display_draw(hk_results[0], x1_kp, y1_kp, w_kp, h_kp) # 将得到的手掌关键点检测结果 绘制到 display + + camera_release_image(CAM_DEV_ID_0,rgb888p_img) # camera 释放图像 + rgb888p_img = None + #gc.collect() + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + except Exception as e: + print(f"An error occurred during buffer used: {e}") + finally: + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + camera_stop(CAM_DEV_ID_0) # 停止 camera + display_deinit() # 释放 display + hd_kpu_deinit(kpu_hand_detect) # 释放手掌检测 kpu + hk_kpu_deinit(kpu_hand_keypoint_detect) # 释放手掌关键点检测 kpu + gc.collect() + ret = media_deinit() # 释放 整个media + if ret: + print("hand_detect_test, buffer_deinit failed") + return ret + + print("hand_detect_test end") + return 0 + +if __name__ == '__main__': + hand_keypoint_detect_inference() +``` + +### 9. 静态手势识别 + +```python +import aicube #aicube模块,封装检测分割等任务相关后处理 +from media.camera import * #摄像头模块 +from media.display import * #显示模块 +from media.media import * #软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 + +import nncase_runtime as nn #nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +import ulab.numpy as np #类似python numpy操作,但也会有一些接口不同 + +import time #时间统计 +import image #图像模块,主要用于读取、图像绘制元素(框、点等)等操作 + +import gc #垃圾回收模块 + +##config.py +#display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) +DISPLAY_HEIGHT = 1080 + +##ai原图分辨率输入 +OUT_RGB888P_WIDTH = ALIGN_UP(1920, 16) +OUT_RGB888P_HEIGH = 1080 + +#--------for hand detection---------- +#kmodel输入shape +hd_kmodel_input_shape = (1,3,512,512) # 手掌检测kmodel输入分辨率 + +#kmodel相关参数设置 +confidence_threshold = 0.2 # 手掌检测阈值,用于过滤roi +nms_threshold = 0.5 # 手掌检测框阈值,用于过滤重复roi +hd_kmodel_frame_size = [512,512] # 手掌检测输入图片尺寸 +hd_frame_size = [OUT_RGB888P_WIDTH,OUT_RGB888P_HEIGH] # 手掌检测直接输入图片尺寸 +strides = [8,16,32] # 输出特征图的尺寸与输入图片尺寸的比 +num_classes = 1 # 手掌检测模型输出类别数 +nms_option = False # 是否所有检测框一起做NMS,False则按照不同的类分别应用NMS + +root_dir = '/sdcard/app/tests/' +hd_kmodel_file = root_dir + 'kmodel/hand_det.kmodel' # 手掌检测kmodel文件的路径 +anchors = [26,27, 53,52, 75,71, 80,99, 106,82, 99,134, 140,113, 161,172, 245,276] #anchor设置 + +#--------for hand recognition---------- +#kmodel输入shape +hr_kmodel_input_shape = (1,3,224,224) # 手势识别kmodel输入分辨率 + +#kmodel相关参数设置 +hr_kmodel_frame_size = [224,224] # 手势识别输入图片尺寸 +labels = ["gun","other","yeah","five"] # 模型输出类别名称 + +hr_kmodel_file = root_dir + "kmodel/hand_reco.kmodel" # 手势识别kmodel文件的路径 + +debug_mode = 0 # debug模式 大于0(调试)、 反之 (不调试) + +#scoped_timing.py 用于debug模式输出程序块运行时间 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +#ai_utils.py +global current_kmodel_obj # 定义全局的 kpu 对象 +global hd_ai2d,hd_ai2d_input_tensor,hd_ai2d_output_tensor,hd_ai2d_builder # 定义手掌检测全局 ai2d 对象,并且定义 ai2d 的输入、输出 以及 builder +global hr_ai2d,hr_ai2d_input_tensor,hr_ai2d_output_tensor,hr_ai2d_builder # 定义手势识别全局 ai2d 对象,并且定义 ai2d 的输入、输出 以及 builder + +#-------hand detect--------: +# 手掌检测 ai2d 初始化 +def hd_ai2d_init(): + with ScopedTiming("hd_ai2d_init",debug_mode > 0): + global hd_ai2d + global hd_ai2d_builder + global hd_ai2d_output_tensor + # 计算padding值 + ori_w = OUT_RGB888P_WIDTH + ori_h = OUT_RGB888P_HEIGH + width = hd_kmodel_frame_size[0] + height = hd_kmodel_frame_size[1] + ratiow = float(width) / ori_w + ratioh = float(height) / ori_h + if ratiow < ratioh: + ratio = ratiow + else: + ratio = ratioh + new_w = int(ratio * ori_w) + new_h = int(ratio * ori_h) + dw = float(width - new_w) / 2 + dh = float(height - new_h) / 2 + top = int(round(dh - 0.1)) + bottom = int(round(dh + 0.1)) + left = int(round(dw - 0.1)) + right = int(round(dw - 0.1)) + + # init kpu and load kmodel + hd_ai2d = nn.ai2d() + hd_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + hd_ai2d.set_pad_param(True, [0,0,0,0,top,bottom,left,right], 0, [114,114,114]) + hd_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel ) + hd_ai2d_builder = hd_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], [1,3,height,width]) + data = np.ones(hd_kmodel_input_shape, dtype=np.uint8) + hd_ai2d_output_tensor = nn.from_numpy(data) + +# 手掌检测 ai2d 运行 +def hd_ai2d_run(rgb888p_img): + with ScopedTiming("hd_ai2d_run",debug_mode > 0): + global hd_ai2d_input_tensor,hd_ai2d_output_tensor + hd_ai2d_input = rgb888p_img.to_numpy_ref() + hd_ai2d_input_tensor = nn.from_numpy(hd_ai2d_input) + + hd_ai2d_builder.run(hd_ai2d_input_tensor, hd_ai2d_output_tensor) + +# 手掌检测 ai2d 释放内存 +def hd_ai2d_release(): + with ScopedTiming("hd_ai2d_release",debug_mode > 0): + global hd_ai2d_input_tensor + del hd_ai2d_input_tensor + +# 手掌检测 kpu 初始化 +def hd_kpu_init(hd_kmodel_file): + # init kpu and load kmodel + with ScopedTiming("hd_kpu_init",debug_mode > 0): + hd_kpu_obj = nn.kpu() + hd_kpu_obj.load_kmodel(hd_kmodel_file) + + hd_ai2d_init() + return hd_kpu_obj + +# 手掌检测 kpu 输入预处理 +def hd_kpu_pre_process(rgb888p_img): + hd_ai2d_run(rgb888p_img) + with ScopedTiming("hd_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,hd_ai2d_output_tensor + # set kpu input + current_kmodel_obj.set_input_tensor(0, hd_ai2d_output_tensor) + +# 手掌检测 kpu 获得 kmodel 输出 +def hd_kpu_get_output(): + with ScopedTiming("hd_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + result = result.reshape((result.shape[0]*result.shape[1]*result.shape[2]*result.shape[3])) + tmp2 = result.copy() + del result + results.append(tmp2) + return results + +# 手掌检测 kpu 运行 +def hd_kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)原图预处理,并设置模型输入 + hd_kpu_pre_process(rgb888p_img) + # (2)手掌检测 kpu 运行 + with ScopedTiming("hd_kpu_run",debug_mode > 0): + current_kmodel_obj.run() + # (3)释放手掌检测 ai2d 资源 + hd_ai2d_release() + # (4)获取手掌检测 kpu 输出 + results = hd_kpu_get_output() + # (5)手掌检测 kpu 结果后处理 + dets = aicube.anchorbasedet_post_process( results[0], results[1], results[2], hd_kmodel_frame_size, hd_frame_size, strides, num_classes, confidence_threshold, nms_threshold, anchors, nms_option) + # (6)返回手掌检测结果 + return dets + +# 手掌检测 kpu 释放内存 +def hd_kpu_deinit(kpu_obj): + with ScopedTiming("hd_kpu_deinit",debug_mode > 0): + global hd_ai2d, hd_ai2d_output_tensor + del kpu_obj + del hd_ai2d + del hd_ai2d_output_tensor + +#-------hand recognition--------: +# 手势识别 ai2d 初始化 +def hr_ai2d_init(): + with ScopedTiming("hr_ai2d_init",debug_mode > 0): + global hr_ai2d, hr_ai2d_output_tensor + hr_ai2d = nn.ai2d() + hr_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + data = np.ones(hr_kmodel_input_shape, dtype=np.uint8) + hr_ai2d_output_tensor = nn.from_numpy(data) + +# 手势识别 ai2d 运行 +def hr_ai2d_run(rgb888p_img, x, y, w, h): + with ScopedTiming("hr_ai2d_run",debug_mode > 0): + global hr_ai2d,hr_ai2d_input_tensor,hr_ai2d_output_tensor + hr_ai2d_input = rgb888p_img.to_numpy_ref() + hr_ai2d_input_tensor = nn.from_numpy(hr_ai2d_input) + + hr_ai2d.set_crop_param(True, x, y, w, h) + hr_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel ) + + global hr_ai2d_builder + hr_ai2d_builder = hr_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], [1,3,hr_kmodel_frame_size[1],hr_kmodel_frame_size[0]]) + hr_ai2d_builder.run(hr_ai2d_input_tensor, hr_ai2d_output_tensor) + +# 手势识别 ai2d 释放内存 +def hr_ai2d_release(): + with ScopedTiming("hr_ai2d_release",debug_mode > 0): + global hr_ai2d_input_tensor + del hr_ai2d_input_tensor + +# 手势识别 kpu 初始化 +def hr_kpu_init(hr_kmodel_file): + # init kpu and load kmodel + with ScopedTiming("hr_kpu_init",debug_mode > 0): + hr_kpu_obj = nn.kpu() + hr_kpu_obj.load_kmodel(hr_kmodel_file) + + hr_ai2d_init() + return hr_kpu_obj + +# 手势识别 kpu 输入预处理 +def hr_kpu_pre_process(rgb888p_img, x, y, w, h): + hr_ai2d_run(rgb888p_img, x, y, w, h) + with ScopedTiming("hr_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,hr_ai2d_output_tensor + # set kpu input + current_kmodel_obj.set_input_tensor(0, hr_ai2d_output_tensor) + +# 手势识别 kpu 获得 kmodel 输出 +def hr_kpu_get_output(): + with ScopedTiming("hr_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + + result = result.reshape((result.shape[0]*result.shape[1])) + tmp2 = result.copy() + del result + results.append(tmp2) + return results + +# softmax实现 +def softmax(x): + x -= np.max(x) + x = np.exp(x) / np.sum(np.exp(x)) + return x + +# 手势识别 kpu 输出后处理 +def hr_kpu_post_process(results): + x_softmax = softmax(results[0]) + result = np.argmax(x_softmax) + text = " " + labels[result] + ": " + str(round(x_softmax[result],2)) + return text + +# 手势识别 kpu 运行 +def hr_kpu_run(kpu_obj,rgb888p_img, x, y, w, h): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)原图预处理,并设置模型输入 + hr_kpu_pre_process(rgb888p_img, x, y, w, h) + # (2)手势识别 kpu 运行 + with ScopedTiming("hr_kpu_run",debug_mode > 0): + current_kmodel_obj.run() + # (3)释放手势识别 ai2d 资源 + hr_ai2d_release() + # (4)获取手势识别 kpu 输出 + results = hr_kpu_get_output() + # (5)手势识别 kpu 结果后处理 + result = hr_kpu_post_process(results) + # (6)返回手势识别结果 + return result + +# 手势识别 kpu 释放内存 +def hr_kpu_deinit(kpu_obj): + with ScopedTiming("hr_kpu_deinit",debug_mode > 0): + global hr_ai2d, hr_ai2d_output_tensor + del kpu_obj + del hr_ai2d + del hr_ai2d_output_tensor + +#media_utils.py +global draw_img,osd_img,masks #for display 定义全局 作图image对象 +global buffer,media_source,media_sink #for media 定义 media 程序中的中间存储对象 + +#for display 初始化 +def display_init(): + # use hdmi for display + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +# display 释放内存 +def display_deinit(): + display.deinit() + +#for camera 初始化 +def camera_init(dev_id): + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +# camera 开启 +def camera_start(dev_id): + camera.start_stream(dev_id) + +# camera 读取图像 +def camera_read(dev_id): + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +# camera 图像释放 +def camera_release_image(dev_id,rgb888p_img): + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +# camera 结束 +def camera_stop(dev_id): + camera.stop_stream(dev_id) + +#for media 初始化 +def media_init(): + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 图层1,用于画框 + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_MPGC) + # 图层2,用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +# media 释放内存 +def media_deinit(): + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + +#**********for hand_recognition.py********** +def hand_recognition_inference(): + print("hand_recognition start") + kpu_hand_detect = hd_kpu_init(hd_kmodel_file) # 创建手掌检测的 kpu 对象 + kpu_hand_recognition = hr_kpu_init(hr_kmodel_file) # 创建手势识别的 kpu 对象 + camera_init(CAM_DEV_ID_0) # 初始化 camera + display_init() # 初始化 display + + rgb888p_img = None + try: + ret = media_init() + if ret: + print("hand_recognition_test, buffer init failed") + return ret + + camera_start(CAM_DEV_ID_0) + while True: + with ScopedTiming("total",1): + rgb888p_img = camera_read(CAM_DEV_ID_0) # 读取一帧图片 + if rgb888p_img == -1: + print("hand_recognition_test, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + + # for rgb888planar + if rgb888p_img.format() == image.RGBP888: + dets = hd_kpu_run(kpu_hand_detect,rgb888p_img) # 执行手掌检测 kpu 运行 以及 后处理过程 + draw_img.clear() + + for det_box in dets: + x1, y1, x2, y2 = det_box[2],det_box[3],det_box[4],det_box[5] + w = int(float(x2 - x1) * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + h = int(float(y2 - y1) * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH) + + x1 = int(x1 * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + y1 = int(y1 * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH) + x2 = int(x2 * DISPLAY_WIDTH // OUT_RGB888P_WIDTH) + y2 = int(y2 * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH) + + if (h<(0.1*DISPLAY_HEIGHT)): + continue + if (w<(0.25*DISPLAY_WIDTH) and ((x1<(0.03*DISPLAY_WIDTH)) or (x2>(0.97*DISPLAY_WIDTH)))): + continue + if (w<(0.15*DISPLAY_WIDTH) and ((x1<(0.01*DISPLAY_WIDTH)) or (x2>(0.99*DISPLAY_WIDTH)))): + continue + + length = max(w,h)/2 + cx = (x1+x2)/2 + cy = (y1+y2)/2 + ratio_num = 1.1*length + + x1_kp = int(max(0,cx-ratio_num)) + y1_kp = int(max(0,cy-ratio_num)) + x2_kp = int(min(DISPLAY_WIDTH-1, cx+ratio_num)) + y2_kp = int(min(DISPLAY_HEIGHT-1, cy+ratio_num)) + w_kp = int(x2_kp - x1_kp + 1) + h_kp = int(y2_kp - y1_kp + 1) + + hr_results = hr_kpu_run(kpu_hand_recognition,rgb888p_img, x1_kp, y1_kp, w_kp, h_kp) # 执行手势识别 kpu 运行 以及 后处理过程 + + draw_img.draw_rectangle(x1, y1, w, h, color=(255, 0, 255, 0)) # 将得到的检测结果 绘制到 display + draw_img.draw_string( x1 , y1-50, hr_results, color=(255,0, 255, 0), scale=4) # 将得到的识别结果 绘制到 display + + camera_release_image(CAM_DEV_ID_0,rgb888p_img) # camera 释放图像 + rgb888p_img = None + #gc.collect() + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + except Exception as e: + print(f"An error occurred during buffer used: {e}") + finally: + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + camera_stop(CAM_DEV_ID_0) # 停止 camera + display_deinit() # 释放 display + hd_kpu_deinit(kpu_hand_detect) # 释放手掌检测 kpu + hr_kpu_deinit(kpu_hand_recognition) # 释放手势识别 kpu + gc.collect() + ret = media_deinit() # 释放 整个media + if ret: + print("hand_recognition_test, buffer_deinit failed") + return ret + + print("hand_recognition_test end") + return 0 + +if __name__ == '__main__': + hand_recognition_inference() +``` + +### 10.人脸mesh + +```python +import ulab.numpy as np # 类似python numpy操作,但也会有一些接口不同 +import nncase_runtime as nn # nncase运行模块,封装了kpu(kmodel推理)和ai2d(图片预处理加速)操作 +from media.camera import * # 摄像头模块 +from media.display import * # 显示模块 +from media.media import * # 软件抽象模块,主要封装媒体数据链路以及媒体缓冲区 +import aidemo # aidemo模块,封装ai demo相关后处理、画图操作 +import image # 图像模块,主要用于读取、图像绘制元素(框、点等)等操作 +import time # 时间统计 +import gc # 垃圾回收模块 +import os # 操作系统接口模块 +import math # 数学模块 + + +#********************for config.py******************** +# display分辨率 +DISPLAY_WIDTH = ALIGN_UP(1920, 16) # 显示宽度要求16位对齐 +DISPLAY_HEIGHT = 1080 + +# ai原图分辨率,sensor默认出图为16:9,若需不形变原图,最好按照16:9比例设置宽高 +OUT_RGB888P_WIDTH = ALIGN_UP(1920, 16) # ai原图宽度要求16位对齐 +OUT_RGB888P_HEIGH = 1080 + +# kmodel参数设置 +# 人脸检测kmodel输入shape +fd_kmodel_input_shape = (1,3,320,320) +# 人脸mesh kmodel输入shape +fm_kmodel_input_shape = (1,3,120,120) +fmpost_kmodel_input_shapes = [(3,3),(3,1),(40,1),(10,1)] +# ai原图padding +rgb_mean = [104,117,123] + +#人脸检测kmodel其它参数设置 +confidence_threshold = 0.5 # 人脸检测阈值 +top_k = 5000 +nms_threshold = 0.2 +keep_top_k = 750 +vis_thres = 0.5 +variance = [0.1, 0.2] +anchor_len = 4200 +score_dim = 2 +det_dim = 4 +keypoint_dim = 10 + +# 文件配置 +# 人脸检测kmodel +root_dir = '/sdcard/app/tests/' +fd_kmodel_file = root_dir + 'kmodel/face_detection_320.kmodel' +# 人脸mesh kmodel +fm_kmodel_file = root_dir + 'kmodel/face_alignment.kmodel' +# 人脸mesh后处理kmodel +fmpost_kmodel_file = root_dir + 'kmodel/face_alignment_post.kmodel' +# anchor文件 +anchors_path = root_dir + 'utils/prior_data_320.bin' +# 人脸mesh参数均值 +param_mean = np.array([0.0003492636315058917,2.52790130161884e-07,-6.875197868794203e-07,60.1679573059082,-6.295513230725192e-07,0.0005757200415246189,-5.085391239845194e-05,74.2781982421875,5.400917189035681e-07,6.574138387804851e-05,0.0003442012530285865,-66.67157745361328,-346603.6875,-67468.234375,46822.265625,-15262.046875,4350.5888671875,-54261.453125,-18328.033203125,-1584.328857421875,-84566.34375,3835.960693359375,-20811.361328125,38094.9296875,-19967.85546875,-9241.3701171875,-19600.71484375,13168.08984375,-5259.14404296875,1848.6478271484375,-13030.662109375,-2435.55615234375,-2254.20654296875,-14396.5615234375,-6176.3291015625,-25621.919921875,226.39447021484375,-6326.12353515625,-10867.2509765625,868.465087890625,-5831.14794921875,2705.123779296875,-3629.417724609375,2043.9901123046875,-2446.6162109375,3658.697021484375,-7645.98974609375,-6674.45263671875,116.38838958740234,7185.59716796875,-1429.48681640625,2617.366455078125,-1.2070955038070679,0.6690792441368103,-0.17760828137397766,0.056725528091192245,0.03967815637588501,-0.13586315512657166,-0.09223993122577667,-0.1726071834564209,-0.015804484486579895,-0.1416848599910736],dtype=np.float) +# 人脸mesh参数方差 +param_std = np.array([0.00017632152594160289,6.737943476764485e-05,0.00044708489440381527,26.55023193359375,0.0001231376954820007,4.493021697271615e-05,7.923670636955649e-05,6.982563018798828,0.0004350444069132209,0.00012314890045672655,0.00017400001524947584,20.80303955078125,575421.125,277649.0625,258336.84375,255163.125,150994.375,160086.109375,111277.3046875,97311.78125,117198.453125,89317.3671875,88493.5546875,72229.9296875,71080.2109375,50013.953125,55968.58203125,47525.50390625,49515.06640625,38161.48046875,44872.05859375,46273.23828125,38116.76953125,28191.162109375,32191.4375,36006.171875,32559.892578125,25551.1171875,24267.509765625,27521.3984375,23166.53125,21101.576171875,19412.32421875,19452.203125,17454.984375,22537.623046875,16174.28125,14671.640625,15115.6884765625,13870.0732421875,13746.3125,12663.1337890625,1.5870834589004517,1.5077009201049805,0.5881357789039612,0.5889744758605957,0.21327851712703705,0.2630201280117035,0.2796429395675659,0.38030216097831726,0.16162841022014618,0.2559692859649658],dtype=np.float) +# 调试模型,0:不调试,>0:打印对应级别调试信息 +debug_mode = 0 + +#********************for scoped_timing.py******************** +# 时间统计类 +class ScopedTiming: + def __init__(self, info="", enable_profile=True): + self.info = info + self.enable_profile = enable_profile + + def __enter__(self): + if self.enable_profile: + self.start_time = time.time_ns() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.enable_profile: + elapsed_time = time.time_ns() - self.start_time + print(f"{self.info} took {elapsed_time / 1000000:.2f} ms") + +#********************for ai_utils.py******************** +global current_kmodel_obj #当前kpu对象 +# fd_ai2d: 人脸检测ai2d实例 +# fd_ai2d_input_tensor: 人脸检测ai2d输入 +# fd_ai2d_output_tensor: 人脸检测ai2d输入 +# fd_ai2d_builder: 根据人脸检测ai2d参数,构建的人脸检测ai2d_builder对象 +global fd_ai2d,fd_ai2d_input_tensor,fd_ai2d_output_tensor,fd_ai2d_builder +# fm_ai2d: 人脸mesh ai2d实例 +# fm_ai2d_input_tensor: 人脸mesh ai2d输入 +# fm_ai2d_output_tensor:人脸mesh ai2d输入 +# fm_ai2d_builder: 根据人脸mesh ai2d参数,构建的人脸mesh ai2d_builder对象 +global fm_ai2d,fm_ai2d_input_tensor,fm_ai2d_output_tensor,fm_ai2d_builder +global roi #人脸区域 +global vertices #3D关键点 + +#读取anchor文件,为人脸检测后处理做准备 +print('anchors_path:',anchors_path) +prior_data = np.fromfile(anchors_path, dtype=np.float) +prior_data = prior_data.reshape((anchor_len,det_dim)) + +def get_pad_one_side_param(): + # 右padding或下padding,获取padding参数 + dst_w = fd_kmodel_input_shape[3] # kmodel输入宽(w) + dst_h = fd_kmodel_input_shape[2] # kmodel输入高(h) + + # OUT_RGB888P_WIDTH:原图宽(w) + # OUT_RGB888P_HEIGH:原图高(h) + # 计算最小的缩放比例,等比例缩放 + ratio_w = dst_w / OUT_RGB888P_WIDTH + ratio_h = dst_h / OUT_RGB888P_HEIGH + if ratio_w < ratio_h: + ratio = ratio_w + else: + ratio = ratio_h + # 计算经过缩放后的新宽和新高 + new_w = (int)(ratio * OUT_RGB888P_WIDTH) + new_h = (int)(ratio * OUT_RGB888P_HEIGH) + + # 计算需要添加的padding,以使得kmodel输入的宽高和原图一致 + dw = (dst_w - new_w) / 2 + dh = (dst_h - new_h) / 2 + # 四舍五入,确保padding是整数 + top = (int)(round(0)) + bottom = (int)(round(dh * 2 + 0.1)) + left = (int)(round(0)) + right = (int)(round(dw * 2 - 0.1)) + return [0, 0, 0, 0, top, bottom, left, right] + +def fd_ai2d_init(): + # 人脸检测模型ai2d初始化 + with ScopedTiming("fd_ai2d_init",debug_mode > 0): + # (1)创建人脸检测ai2d对象 + global fd_ai2d + fd_ai2d = nn.ai2d() + # (2)设置人脸检测ai2d参数 + fd_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + fd_ai2d.set_pad_param(True, get_pad_one_side_param(), 0, rgb_mean) + fd_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + + #(3)人脸检测ai2d_builder,根据人脸检测ai2d参数、输入输出大小创建ai2d_builder对象 + global fd_ai2d_builder + fd_ai2d_builder = fd_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], fd_kmodel_input_shape) + + #(4)创建人脸检测ai2d_output_tensor,用于保存人脸检测ai2d输出 + global fd_ai2d_output_tensor + data = np.ones(fd_kmodel_input_shape, dtype=np.uint8) + fd_ai2d_output_tensor = nn.from_numpy(data) + +def fd_ai2d_run(rgb888p_img): + # 根据人脸检测ai2d参数,对原图rgb888p_img进行预处理 + with ScopedTiming("fd_ai2d_run",debug_mode > 0): + global fd_ai2d_input_tensor,fd_ai2d_output_tensor,fd_ai2d_builder + # (1)根据原图构建ai2d_input_tensor对象 + ai2d_input = rgb888p_img.to_numpy_ref() + fd_ai2d_input_tensor = nn.from_numpy(ai2d_input) + # (2)运行人脸检测ai2d_builder,将结果保存到人脸检测ai2d_output_tensor中 + fd_ai2d_builder.run(fd_ai2d_input_tensor, fd_ai2d_output_tensor) + +def fd_ai2d_release(): + # 释放人脸检测ai2d_input_tensor + with ScopedTiming("fd_ai2d_release",debug_mode > 0): + global fd_ai2d_input_tensor + del fd_ai2d_input_tensor + +def fd_kpu_init(kmodel_file): + # 初始化人脸检测kpu对象,并加载kmodel + with ScopedTiming("fd_kpu_init",debug_mode > 0): + # 初始化人脸检测kpu对象 + kpu_obj = nn.kpu() + # 加载人脸检测kmodel + kpu_obj.load_kmodel(kmodel_file) + # 初始化人脸检测ai2d + fd_ai2d_init() + return kpu_obj + +def fd_kpu_pre_process(rgb888p_img): + # 设置人脸检测kpu输入 + # 使用人脸检测ai2d对原图进行预处理(padding,resize) + fd_ai2d_run(rgb888p_img) + with ScopedTiming("fd_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,fd_ai2d_output_tensor + # 设置人脸检测kpu输入 + current_kmodel_obj.set_input_tensor(0, fd_ai2d_output_tensor) + +def fd_kpu_get_output(): + # 获取人脸检测kpu输出 + with ScopedTiming("fd_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + # 获取模型输出,并将结果转换为numpy,以便进行人脸检测后处理 + results = [] + for i in range(current_kmodel_obj.outputs_size()): + data = current_kmodel_obj.get_output_tensor(i) + result = data.to_numpy() + del data + results.append(result) + return results + +def fd_kpu_run(kpu_obj,rgb888p_img): + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)原图预处理,并设置模型输入 + fd_kpu_pre_process(rgb888p_img) + # (2)人脸检测kpu推理 + with ScopedTiming("fd kpu_run",debug_mode > 0): + kpu_obj.run() + # (3)释放人脸检测ai2d资源 + fd_ai2d_release() + # (4)获取人俩检测kpu输出 + results = fd_kpu_get_output() + # (5)人脸检测kpu结果后处理 + with ScopedTiming("fd kpu_post",debug_mode > 0): + post_ret = aidemo.face_det_post_process(confidence_threshold,nms_threshold,fd_kmodel_input_shape[2],prior_data, + [OUT_RGB888P_WIDTH,OUT_RGB888P_HEIGH],results) + # (6)返回人脸检测框 + if len(post_ret)==0: + return post_ret + else: + return post_ret[0] #0:det,1:landm,2:score + +def fd_kpu_deinit(kpu_obj): + # kpu释放 + with ScopedTiming("fd_kpu_deinit",debug_mode > 0): + global fd_ai2d, fd_ai2d_output_tensor + del kpu_obj #删除人脸检测kpu_obj变量,释放对它所引用对象的内存引用 + del fd_ai2d #删除人脸检测ai2d变量,释放对它所引用对象的内存引用 + del fd_ai2d_output_tensor #删除人脸检测ai2d_output_tensor变量,释放对它所引用对象的内存引用 + +###############for face recognition############### +def parse_roi_box_from_bbox(bbox): + # 获取人脸roi + x1, y1, w, h = map(lambda x: int(round(x, 0)), bbox[:4]) + old_size = (w + h) / 2 + center_x = x1 + w / 2 + center_y = y1 + h / 2 + old_size * 0.14 + size = int(old_size * 1.58) + + x0 = center_x - float(size) / 2 + y0 = center_y - float(size) / 2 + x1 = x0 + size + y1 = y0 + size + + x0 = max(0, min(x0, OUT_RGB888P_WIDTH)) + y0 = max(0, min(y0, OUT_RGB888P_HEIGH)) + x1 = max(0, min(x1, OUT_RGB888P_WIDTH)) + y1 = max(0, min(y1, OUT_RGB888P_HEIGH)) + + roi = (x0, y0, x1 - x0, y1 - y0) + return roi + +def fm_ai2d_init(): + # 人脸mesh ai2d初始化 + with ScopedTiming("fm_ai2d_init",debug_mode > 0): + # (1)创建人脸mesh ai2d对象 + global fm_ai2d + fm_ai2d = nn.ai2d() + + # (2)创建人脸mesh ai2d_output_tensor对象,用于存放ai2d输出 + global fm_ai2d_output_tensor + data = np.ones(fm_kmodel_input_shape, dtype=np.uint8) + fm_ai2d_output_tensor = nn.from_numpy(data) + +def fm_ai2d_run(rgb888p_img,det): + # 人脸mesh ai2d推理 + with ScopedTiming("fm_ai2d_run",debug_mode > 0): + global fm_ai2d,fm_ai2d_input_tensor,fm_ai2d_output_tensor + #(1)根据原图ai2d_input_tensor对象 + ai2d_input = rgb888p_img.to_numpy_ref() + fm_ai2d_input_tensor = nn.from_numpy(ai2d_input) + + # (2)根据新的det设置新的人脸mesh ai2d参数 + fm_ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + global roi + roi = parse_roi_box_from_bbox(det) + fm_ai2d.set_crop_param(True,int(roi[0]),int(roi[1]),int(roi[2]),int(roi[3])) + fm_ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + # (3)根据新的人脸mesh ai2d参数,构建人脸mesh ai2d_builder + global fm_ai2d_builder + fm_ai2d_builder = fm_ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], fm_kmodel_input_shape) + # (4)推理人脸mesh ai2d,将预处理的结果保存到fm_ai2d_output_tensor + fm_ai2d_builder.run(fm_ai2d_input_tensor, fm_ai2d_output_tensor) + +def fm_ai2d_release(): + # 释放人脸mesh ai2d_input_tensor、ai2d_builder + with ScopedTiming("fm_ai2d_release",debug_mode > 0): + global fm_ai2d_input_tensor,fm_ai2d_builder + del fm_ai2d_input_tensor + del fm_ai2d_builder + +def fm_kpu_init(kmodel_file): + # 人脸mesh kpu初始化 + with ScopedTiming("fm_kpu_init",debug_mode > 0): + # 初始化人脸mesh kpu对象 + kpu_obj = nn.kpu() + # 加载人脸mesh kmodel + kpu_obj.load_kmodel(kmodel_file) + # 初始化人脸mesh ai2d + fm_ai2d_init() + return kpu_obj + +def fm_kpu_pre_process(rgb888p_img,det): + # 人脸mesh kpu预处理 + # 人脸mesh ai2d推理,根据det对原图进行预处理 + fm_ai2d_run(rgb888p_img,det) + with ScopedTiming("fm_kpu_pre_process",debug_mode > 0): + global current_kmodel_obj,fm_ai2d_output_tensor + # 将人脸mesh ai2d输出设置为人脸mesh kpu输入 + current_kmodel_obj.set_input_tensor(0, fm_ai2d_output_tensor) + +def fm_kpu_get_output(): + with ScopedTiming("fm_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + # 获取人脸mesh kpu输出 + data = current_kmodel_obj.get_output_tensor(0) + result = data.to_numpy() + del data + return result + +def fm_kpu_post_process(param): + # 人脸mesh kpu结果后处理,反标准化 + with ScopedTiming("fm_kpu_post_process",debug_mode > 0): + param = param * param_std + param_mean + return param + +def fm_kpu_run(kpu_obj,rgb888p_img,det): + # 人脸mesh kpu推理 + global current_kmodel_obj + current_kmodel_obj = kpu_obj + # (1)人脸mesh kpu预处理,设置kpu输入 + fm_kpu_pre_process(rgb888p_img,det) + # (2)人脸mesh kpu推理 + with ScopedTiming("fm_kpu_run",debug_mode > 0): + kpu_obj.run() + # (3)释放人脸mesh ai2d + fm_ai2d_release() + # (4)获取人脸mesh kpu输出 + param = fm_kpu_get_output() + # (5)人脸mesh 后处理 + param = fm_kpu_post_process(param) + return param + +def fm_kpu_deinit(kpu_obj): + # 人脸mesh kpu释放 + with ScopedTiming("fm_kpu_deinit",debug_mode > 0): + global fm_ai2d,fm_ai2d_output_tensor + del kpu_obj # 删除kpu_obj变量,释放对它所引用对象的内存引用 + del fm_ai2d # 删除fm_ai2d变量,释放对它所引用对象的内存引用 + del fm_ai2d_output_tensor # 删除fm_ai2d_output_tensor变量,释放对它所引用对象的内存引用 + +def fmpost_kpu_init(kmodel_file): + # face mesh post模型初始化 + with ScopedTiming("fmpost_kpu_init",debug_mode > 0): + # 初始化人脸mesh kpu post对象 + kpu_obj = nn.kpu() + # 加载人脸mesh后处理kmodel + kpu_obj.load_kmodel(kmodel_file) + return kpu_obj + +def fmpost_kpu_pre_process(param): + # face mesh post模型预处理,param解析 + with ScopedTiming("fmpost_kpu_pre_process",debug_mode > 0): + param = param[0] + trans_dim, shape_dim, exp_dim = 12, 40, 10 + + # reshape前务必进行copy,否则会导致模型输入错误 + R_ = param[:trans_dim].copy().reshape((3, -1)) + R = R_[:, :3].copy() + offset = R_[:, 3].copy() + offset = offset.reshape((3, 1)) + alpha_shp = param[trans_dim:trans_dim + shape_dim].copy().reshape((-1, 1)) + alpha_exp = param[trans_dim + shape_dim:].copy().reshape((-1, 1)) + + R_tensor = nn.from_numpy(R) + current_kmodel_obj.set_input_tensor(0, R_tensor) + del R_tensor + + offset_tensor = nn.from_numpy(offset) + current_kmodel_obj.set_input_tensor(1, offset_tensor) + del offset_tensor + + alpha_shp_tensor = nn.from_numpy(alpha_shp) + current_kmodel_obj.set_input_tensor(2, alpha_shp_tensor) + del alpha_shp_tensor + + alpha_exp_tensor = nn.from_numpy(alpha_exp) + current_kmodel_obj.set_input_tensor(3, alpha_exp_tensor) + del alpha_exp_tensor + + return + +def fmpost_kpu_get_output(): + # 获取face mesh post模型输出 + with ScopedTiming("fmpost_kpu_get_output",debug_mode > 0): + global current_kmodel_obj + # 获取人脸mesh kpu输出 + data = current_kmodel_obj.get_output_tensor(0) + result = data.to_numpy() + del data + return result + +def fmpost_kpu_post_process(roi): + # face mesh post模型推理结果后处理 + with ScopedTiming("fmpost_kpu_post_process",debug_mode > 0): + x, y, w, h = map(lambda x: int(round(x, 0)), roi[:4]) + x = x * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + y = y * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH + w = w * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + h = h * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH + roi_array = np.array([x,y,w,h],dtype=np.float) + global vertices + aidemo.face_mesh_post_process(roi_array,vertices) + return + +def fmpost_kpu_run(kpu_obj,param): + # face mesh post模型推理 + global current_kmodel_obj + current_kmodel_obj = kpu_obj + fmpost_kpu_pre_process(param) + with ScopedTiming("fmpost_kpu_run",debug_mode > 0): + kpu_obj.run() + global vertices + vertices = fmpost_kpu_get_output() + global roi + fmpost_kpu_post_process(roi) + return + +def fmpost_kpu_deinit(kpu_obj): + # face mesh post模型释放 + with ScopedTiming("fm_kpu_deinit",debug_mode > 0): + del kpu_obj + +#********************for media_utils.py******************** +global draw_img_ulab,draw_img,osd_img #for display +global buffer,media_source,media_sink #for media + +# for display,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.2 +def display_init(): + # 设置使用hdmi进行显示 + display.init(LT9611_1920X1080_30FPS) + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + +def display_deinit(): + # 释放显示资源 + display.deinit() + +def display_draw(dets,vertices_list): + # 在显示器画人脸轮廓 + with ScopedTiming("display_draw",debug_mode >0): + global draw_img_ulab,draw_img,osd_img + if dets: + draw_img.clear() + for vertices in vertices_list: + aidemo.face_draw_mesh(draw_img_ulab, vertices) + # (4)将轮廓结果拷贝到osd + draw_img.copy_to(osd_img) + # (5)将osd显示到屏幕 + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + # (1)清空用来画框的图像 + draw_img.clear() + # (2)清空osd + draw_img.copy_to(osd_img) + # (3)显示透明图层 + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + +#for camera,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.1 +def camera_init(dev_id): + # camera初始化 + camera.sensor_init(dev_id, CAM_DEFAULT_SENSOR) + + # set chn0 output yuv420sp + camera.set_outsize(dev_id, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + camera.set_outfmt(dev_id, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # set chn2 output rgb88planar + camera.set_outsize(dev_id, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + camera.set_outfmt(dev_id, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + +def camera_start(dev_id): + # camera启动 + camera.start_stream(dev_id) + +def camera_read(dev_id): + # 读取一帧图像 + with ScopedTiming("camera_read",debug_mode >0): + rgb888p_img = camera.capture_image(dev_id, CAM_CHN_ID_2) + return rgb888p_img + +def camera_release_image(dev_id,rgb888p_img): + # 释放一帧图像 + with ScopedTiming("camera_release_image",debug_mode >0): + camera.release_image(dev_id, CAM_CHN_ID_2, rgb888p_img) + +def camera_stop(dev_id): + # 停止camera + camera.stop_stream(dev_id) + +#for media,已经封装好,无需自己再实现,直接调用即可,详细解析请查看1.6.3 +def media_init(): + # meida初始化 + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4 * DISPLAY_WIDTH * DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + + ret = media.buffer_config(config) + + global media_source, media_sink + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + media.create_link(media_source, media_sink) + + # 初始化多媒体buffer + ret = media.buffer_init() + if ret: + return ret + global buffer, draw_img_ulab,draw_img, osd_img + buffer = media.request_buffer(4 * DISPLAY_WIDTH * DISPLAY_HEIGHT) + # 用于画框 + draw_img_ulab = np.zeros((DISPLAY_HEIGHT,DISPLAY_WIDTH,4),dtype=np.uint8) + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_REF,data = draw_img_ulab) + # 用于拷贝画框结果,防止画框过程中发生buffer搬运 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, + phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + return ret + +def media_deinit(): + # meida资源释放 + global buffer,media_source, media_sink + media.release_buffer(buffer) + media.destroy_link(media_source, media_sink) + + ret = media.buffer_deinit() + return ret + +#********************for face_detect.py******************** +def face_mesh_inference(): + # 人脸检测kpu初始化 + kpu_face_detect = fd_kpu_init(fd_kmodel_file) + # 人脸mesh kpu初始化 + kpu_face_mesh = fm_kpu_init(fm_kmodel_file) + # face_mesh_post kpu初始化 + kpu_face_mesh_post = fmpost_kpu_init(fmpost_kmodel_file) + # camera初始化 + camera_init(CAM_DEV_ID_0) + # 显示初始化 + display_init() + + rgb888p_img = None + # 注意:将一定要将一下过程包在try中,用于保证程序停止后,资源释放完毕;确保下次程序仍能正常运行 + try: + # 注意:媒体初始化(注:媒体初始化必须在camera_start之前,确保media缓冲区已配置完全) + ret = media_init() + if ret: + print("face_detect_test, buffer init failed") + return ret + + # 启动camera + camera_start(CAM_DEV_ID_0) + time.sleep(5) + while True: + with ScopedTiming("total",1): + # (1)读取一帧图像 + rgb888p_img = camera_read(CAM_DEV_ID_0) + # (2)若读取失败,释放当前帧 + if rgb888p_img == -1: + print("face_detect_test, capture_image failed") + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + continue + # (3)若读取成功,推理当前帧 + if rgb888p_img.format() == image.RGBP888: + # (3.1)推理当前图像,并获取人脸检测结果 + dets = fd_kpu_run(kpu_face_detect,rgb888p_img) + ## (3.2)针对每个人脸框,推理得到对应人脸mesh + mesh_result = [] + for det in dets: + param = fm_kpu_run(kpu_face_mesh,rgb888p_img,det) + fmpost_kpu_run(kpu_face_mesh_post,param) + global vertices + mesh_result.append(vertices) + ## (3.3)将人脸mesh 画到屏幕上 + display_draw(dets,mesh_result) + + # (4)释放当前帧 + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + rgb888p_img = None + #with ScopedTiming("gc collect", debug_mode > 0): + #gc.collect() + except Exception as e: + # 捕捉运行运行中异常,并打印错误 + print(f"An error occurred during buffer used: {e}") + finally: + # 释放当前帧 + if rgb888p_img is not None: + #先release掉申请的内存再stop + camera_release_image(CAM_DEV_ID_0,rgb888p_img) + + # 停止camera + camera_stop(CAM_DEV_ID_0) + # 释放显示资源 + display_deinit() + # 释放kpu资源 + fd_kpu_deinit(kpu_face_detect) + fm_kpu_deinit(kpu_face_mesh) + fmpost_kpu_deinit(kpu_face_mesh_post) + # 垃圾回收 + gc.collect() + time.sleep(1) + # 释放媒体资源 + ret = media_deinit() + if ret: + print("face_mesh_test, buffer_deinit failed") + return ret + + #print("face_mesh_test end") + return 0 + +if __name__ == '__main__': + face_mesh_inference() +``` diff --git "a/zh/01_software/example/K230_Canmv\347\244\272\344\276\213\350\256\262\350\247\243-\344\272\272\350\204\270\346\243\200\346\265\213.md" "b/zh/example/K230_Canmv\347\244\272\344\276\213\350\256\262\350\247\243-\344\272\272\350\204\270\346\243\200\346\265\213.md" similarity index 100% rename from "zh/01_software/example/K230_Canmv\347\244\272\344\276\213\350\256\262\350\247\243-\344\272\272\350\204\270\346\243\200\346\265\213.md" rename to "zh/example/K230_Canmv\347\244\272\344\276\213\350\256\262\350\247\243-\344\272\272\350\204\270\346\243\200\346\265\213.md" diff --git a/zh/example/cipher/cipher.md b/zh/example/cipher/cipher.md new file mode 100755 index 0000000..4c76aa5 --- /dev/null +++ b/zh/example/cipher/cipher.md @@ -0,0 +1,316 @@ +# Cipher - Cipher 例程 + +本示例程序用于对 CanMV 开发板进行一个 Cipher 输出的功能展示。 + +```python +import uhashlib + +print('###################### SHA256 Test ##############################') +print('********************** Test-1: Only Call update() Once ******************') +# 初始化sha256对象 +obj = uhashlib.sha256() +# 输入消息message +msg = b'\x45\x11\x01\x25\x0e\xc6\xf2\x66\x52\x24\x9d\x59\xdc\x97\x4b\x73\x61\xd5\x71\xa8\x10\x1c\xdf\xd3\x6a\xba\x3b\x58\x54\xd3\xae\x08\x6b\x5f\xdd\x45\x97\x72\x1b\x66\xe3\xc0\xdc\x5d\x8c\x60\x6d\x96\x57\xd0\xe3\x23\x28\x3a\x52\x17\xd1\xf5\x3f\x2f\x28\x4f\x57\xb8' +# 标准哈希值 +dgst0 = b'\x1a\xaa\xf9\x28\x5a\xf9\x45\xb8\xa9\x7c\xf1\x4f\x86\x9b\x18\x90\x14\xc3\x84\xf3\xc7\xc2\xb7\xd2\xdf\x8a\x97\x13\xbf\xfe\x0b\xf1' +# 将消息更新到硬件IP中 +obj.update(msg) +# 计算哈希值 +dgst = obj.digest() +print(dgst0 == dgst) +# print(binascii.hexlify(dgst)) +print('********************** Test-2: Call update() Twice ******************') +dgst0 = b'\x93\x6a\x18\x5c\xaa\xa2\x66\xbb\x9c\xbe\x98\x1e\x9e\x05\xcb\x78\xcd\x73\x2b\x0b\x32\x80\xeb\x94\x44\x12\xbb\x6f\x8f\x8f\x07\xaf' +obj = uhashlib.sha256() +# 向硬件多次更新消息 +obj.update(b'hello') +obj.update(b'world') +dgst = obj.digest() +print(dgst0 == dgst) +# print('********************** Test-3: Call digest() Twice ******************') +# dgst0 = b'\x93\x6a\x18\x5c\xaa\xa2\x66\xbb\x9c\xbe\x98\x1e\x9e\x05\xcb\x78\xcd\x73\x2b\x0b\x32\x80\xeb\x94\x44\x12\xbb\x6f\x8f\x8f\x07\xaf' +# obj = uhashlib.sha256() +# obj.update(b'hello') +# obj.update(b'world') +# dgst = obj.digest() +# dgst1 = obj.digest() +# print(dgst0 == dgst) +# print(dgst == dgst1) + + +print('\n###################### AES-GCM Test ##############################') +import ucryptolib +import collections +# 创建一个具名元组并返回具名元组子类 +Aes = collections.namedtuple('Aes', ['key', 'iv', 'aad', 'pt', 'ct', 'tag']) +aes = [ + Aes(b'\xb5\x2c\x50\x5a\x37\xd7\x8e\xda\x5d\xd3\x4f\x20\xc2\x25\x40\xea\x1b\x58\x96\x3c\xf8\xe5\xbf\x8f\xfa\x85\xf9\xf2\x49\x25\x05\xb4', + b'\x51\x6c\x33\x92\x9d\xf5\xa3\x28\x4f\xf4\x63\xd7', + b'', + b'', + b'', + b'\xbd\xc1\xac\x88\x4d\x33\x24\x57\xa1\xd2\x66\x4f\x16\x8c\x76\xf0' + ), + + Aes(b'\x24\x50\x1a\xd3\x84\xe4\x73\x96\x3d\x47\x6e\xdc\xfe\x08\x20\x52\x37\xac\xfd\x49\xb5\xb8\xf3\x38\x57\xf8\x11\x4e\x86\x3f\xec\x7f', + b'\x9f\xf1\x85\x63\xb9\x78\xec\x28\x1b\x3f\x27\x94', + b'\xad\xb5\xec\x72\x0c\xcf\x98\x98\x50\x00\x28\xbf\x34\xaf\xcc\xbc\xac\xa1\x26\xef', + b'\x27', + b'\xeb', + b'\x63\x35\xe1\xd4\x9e\x89\x88\xea\xc4\x8e\x42\x19\x4e\x5f\x56\xdb' + ), + + Aes(b'\x1f\xde\xd3\x2d\x59\x99\xde\x4a\x76\xe0\xf8\x08\x21\x08\x82\x3a\xef\x60\x41\x7e\x18\x96\xcf\x42\x18\xa2\xfa\x90\xf6\x32\xec\x8a', + b'\x1f\x3a\xfa\x47\x11\xe9\x47\x4f\x32\xe7\x04\x62', + b'', + b'\x06\xb2\xc7\x58\x53\xdf\x9a\xeb\x17\xbe\xfd\x33\xce\xa8\x1c\x63\x0b\x0f\xc5\x36\x67\xff\x45\x19\x9c\x62\x9c\x8e\x15\xdc\xe4\x1e\x53\x0a\xa7\x92\xf7\x96\xb8\x13\x8e\xea\xb2\xe8\x6c\x7b\x7b\xee\x1d\x40\xb0', + b'\x91\xfb\xd0\x61\xdd\xc5\xa7\xfc\xc9\x51\x3f\xcd\xfd\xc9\xc3\xa7\xc5\xd4\xd6\x4c\xed\xf6\xa9\xc2\x4a\xb8\xa7\x7c\x36\xee\xfb\xf1\xc5\xdc\x00\xbc\x50\x12\x1b\x96\x45\x6c\x8c\xd8\xb6\xff\x1f\x8b\x3e\x48\x0f', + b'\x30\x09\x6d\x34\x0f\x3d\x5c\x42\xd8\x2a\x6f\x47\x5d\xef\x23\xeb' + ), + + Aes(b'\x24\x50\x1a\xd3\x84\xe4\x73\x96\x3d\x47\x6e\xdc\xfe\x08\x20\x52\x37\xac\xfd\x49\xb5\xb8\xf3\x38\x57\xf8\x11\x4e\x86\x3f\xec\x7f', + b'\x9f\xf1\x85\x63\xb9\x78\xec\x28\x1b\x3f\x27\x94', + b'\xad\xb5\xec\x72\x0c\xcf\x98\x98\x50\x00\x28\xbf\x34\xaf\xcc\xbc\xac\xa1\x26\xef', + b'\x27\xf3\x48\xf9\xcd\xc0\xc5\xbd\x5e\x66\xb1\xcc\xb6\x3a\xd9\x20\xff\x22\x19\xd1\x4e\x8d\x63\x1b\x38\x72\x26\x5c\xf1\x17\xee\x86\x75\x7a\xcc\xb1\x58\xbd\x9a\xbb\x38\x68\xfd\xc0\xd0\xb0\x74\xb5\xf0\x1b\x2c', + b'\xeb\x7c\xb7\x54\xc8\x24\xe8\xd9\x6f\x7c\x6d\x9b\x76\xc7\xd2\x6f\xb8\x74\xff\xbf\x1d\x65\xc6\xf6\x4a\x69\x8d\x83\x9b\x0b\x06\x14\x5d\xae\x82\x05\x7a\xd5\x59\x94\xcf\x59\xad\x7f\x67\xc0\xfa\x5e\x85\xfa\xb8', + b'\xbc\x95\xc5\x32\xfe\xcc\x59\x4c\x36\xd1\x55\x02\x86\xa7\xa3\xf0' + ) +] + +print('********************** Test-1: ivlen=12, ptlen=0, aadlen=0 ******************') +print('GCM Encrypt......') +# 初始化aes-gcm密码对象,参数包含密钥key、初始化向量iv以及附加数据aad +crypto = ucryptolib.aes(aes[0].key, 0, aes[0].iv, aes[0].aad) +# 输入明文数据 +inbuf = aes[0].pt +outbuf = bytearray(16) +# 加密,输出格式为:密文 + tag +val = crypto.encrypt(inbuf, outbuf) +# 标准数据 +val0 = aes[0].ct + aes[0].tag +print(val0 == val) +print('GCM Decrypt......') +crypto = ucryptolib.aes(aes[0].key, 0, aes[0].iv, aes[0].aad) +# 输入数据格式:密文 + tag +inbuf = aes[0].ct + aes[0].tag +# 解密,输出数据格式:明文 +val = crypto.decrypt(inbuf) +print(val[:1] == b'\x00') +# val0 = aes[0].pt +# print(val0 == val) + +print('********************** Test-2: ivlen=12, ptlen=1, aadlen=20 ******************') +print('GCM Encrypt......') +# 初始化 +crypto = ucryptolib.aes(aes[1].key, 0, aes[1].iv, aes[1].aad) +# 输入明文 +inbuf = aes[1].pt +outbuf = bytearray(17) +# 输出密文+tag +val = crypto.encrypt(inbuf, outbuf) +val0 = aes[1].ct + aes[1].tag +print(val0 == val) +print('GCM Decrypt......') +crypto = ucryptolib.aes(aes[1].key, 0, aes[1].iv, aes[1].aad) +# 输入密文+tag +inbuf = aes[1].ct + aes[1].tag +outbuf = bytearray(1) +# 输出明文 +val = crypto.decrypt(inbuf, outbuf) +val0 = aes[1].pt +print(val0 == val) + +print('********************** Test-3: ivlen=12, ptlen=51, aadlen=0 ******************') +print('GCM Encrypt......') +# 初始化 +crypto = ucryptolib.aes(aes[2].key, 0, aes[2].iv, aes[2].aad) +# 输入明文 +inbuf = aes[2].pt +outbuf = bytearray(67) +# 输出密文+tag +val = crypto.encrypt(inbuf, outbuf) +val0 = aes[2].ct + aes[2].tag +print(val0 == val) +print('GCM Decrypt......') +crypto = ucryptolib.aes(aes[2].key, 0, aes[2].iv, aes[2].aad) +# 输入密文+tag +inbuf = aes[2].ct + aes[2].tag +outbuf = bytearray(51) +# 输入明文 +val = crypto.decrypt(inbuf, outbuf) +val0 = aes[2].pt +print(val0 == val) + +print('********************** Test-4: ivlen=12, ptlen=51, aadlen=20 ******************') +print('GCM Encrypt......') +# 初始化 +crypto = ucryptolib.aes(aes[3].key, 0, aes[3].iv, aes[3].aad) +# 输入明文 +inbuf = aes[3].pt +outbuf = bytearray(67) +# 输出密文+tag +val = crypto.encrypt(inbuf, outbuf) +val0 = aes[3].ct + aes[3].tag +print(val0 == val) +print('GCM Decrypt......') +crypto = ucryptolib.aes(aes[3].key, 0, aes[3].iv, aes[3].aad) +# 输入密文+tag +inbuf = aes[3].ct + aes[3].tag +val = crypto.decrypt(inbuf) +val0 = aes[3].pt +print(val[:51] == val0) +# outbuf = bytearray(51) +# val = crypto.decrypt(inbuf, outbuf) +# val0 = aes[3].pt +# print(val0 == val) + + +print('\n###################### SM4-ECB/CFB/OFB/CBC/CTR Test ##############################') +Sm4 = collections.namedtuple('Sm4', ['key', 'iv', 'pt', 'ct']) +sm4 = [ + # ecb + Sm4(b'\x01\x23\x45\x67\x89\xab\xcd\xef\xfe\xdc\xba\x98\x76\x54\x32\x10', + None, + b'\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb', + b'\x5e\xc8\x14\x3d\xe5\x09\xcf\xf7\xb5\x17\x9f\x8f\x47\x4b\x86\x19\x2f\x1d\x30\x5a\x7f\xb1\x7d\xf9\x85\xf8\x1c\x84\x82\x19\x23\x04' + ), + + # cbc + Sm4( + b'\x01\x23\x45\x67\x89\xab\xcd\xef\xfe\xdc\xba\x98\x76\x54\x32\x10', + b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f', + b'\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb', + b'\x78\xeb\xb1\x1c\xc4\x0b\x0a\x48\x31\x2a\xae\xb2\x04\x02\x44\xcb\x4c\xb7\x01\x69\x51\x90\x92\x26\x97\x9b\x0d\x15\xdc\x6a\x8f\x6d' + ), + + # cfb + Sm4( + b'\x01\x23\x45\x67\x89\xab\xcd\xef\xfe\xdc\xba\x98\x76\x54\x32\x10', + b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f', + b'\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb', + b'\xac\x32\x36\xcb\x86\x1d\xd3\x16\xe6\x41\x3b\x4e\x3c\x75\x24\xb7\x69\xd4\xc5\x4e\xd4\x33\xb9\xa0\x34\x60\x09\xbe\xb3\x7b\x2b\x3f' + ), + + # ofb + Sm4( + b'\x01\x23\x45\x67\x89\xab\xcd\xef\xfe\xdc\xba\x98\x76\x54\x32\x10', + b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f', + b'\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xff\xff\xff\xff\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb', + b'\xac\x32\x36\xcb\x86\x1d\xd3\x16\xe6\x41\x3b\x4e\x3c\x75\x24\xb7\x1d\x01\xac\xa2\x48\x7c\xa5\x82\xcb\xf5\x46\x3e\x66\x98\x53\x9b' + ), + + # ctr + Sm4( + b'\x01\x23\x45\x67\x89\xab\xcd\xef\xfe\xdc\xba\x98\x76\x54\x32\x10', + b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f', + b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xee\xee\xee\xee\xee\xee\xee\xee\xff\xff\xff\xff\xff\xff\xff\xff\xee\xee\xee\xee\xee\xee\xee\xee\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa', + b'\xac\x32\x36\xcb\x97\x0c\xc2\x07\x91\x36\x4c\x39\x5a\x13\x42\xd1\xa3\xcb\xc1\x87\x8c\x6f\x30\xcd\x07\x4c\xce\x38\x5c\xdd\x70\xc7\xf2\x34\xbc\x0e\x24\xc1\x19\x80\xfd\x12\x86\x31\x0c\xe3\x7b\x92\x2a\x46\xb8\x94\xbe\xe4\xfe\xb7\x9a\x38\x22\x94\x0c\x93\x54\x05' + ) +] + +print('********************** Test-1: keybits=128, ptlen=32 ******************') +print('SM4-ECB Encrypt......') +# 初始化sm4密码对象,参数包含密钥key、加解密模式 +crypto = ucryptolib.sm4(sm4[0].key, 1) +# 输入明文数据 +inbuf = sm4[0].pt +outbuf = bytearray(32) +# 加密 +val = crypto.encrypt(inbuf, outbuf) +# golden数据 +val0 = sm4[0].ct +print(val0 == val) +print('SM4-ECB Decrypt......') +# 解密 +crypto = ucryptolib.sm4(sm4[0].key, 1) +inbuf = sm4[0].ct +outbuf = bytearray(32) +val = crypto.decrypt(inbuf, outbuf) +val0 = sm4[0].pt +print(val0 == val) + +print('********************** Test-2: keybits=128, ivlen=16, ptlen=32 ******************') +print('SM4-CBC Encrypt......') +# 初始化sm4密码对象 +crypto = ucryptolib.sm4(sm4[1].key, 2, sm4[1].iv) +# 输入明文数据 +inbuf = sm4[1].pt +outbuf = bytearray(32) +# 加密 +val = crypto.encrypt(inbuf, outbuf) +val0 = sm4[1].ct +print(val0 == val) +print('SM4-CBC Decrypt......') +# 解密 +crypto = ucryptolib.sm4(sm4[1].key, 2, sm4[1].iv) +inbuf = sm4[1].ct +val = crypto.decrypt(inbuf) +val0 = sm4[1].pt +print(val0 == val) +# outbuf = bytearray(32) +# val = crypto.decrypt(inbuf, outbuf) +# val0 = sm4[1].pt +# print(val0 == val) + +print('********************** Test-3: keybits=128, ivlen=16, ptlen=32 ******************') +print('SM4-CFB Encrypt......') +# 初始化sm4密码对象 +crypto = ucryptolib.sm4(sm4[2].key, 3, sm4[2].iv) +# 输入明文数据 +inbuf = sm4[2].pt +outbuf = bytearray(32) +# 加密 +val = crypto.encrypt(inbuf, outbuf) +val0 = sm4[2].ct +print(val0 == val) +print('SM4-CFB Decrypt......') +# 解密 +crypto = ucryptolib.sm4(sm4[2].key, 3, sm4[2].iv) +inbuf = sm4[2].ct +outbuf = bytearray(32) +val = crypto.decrypt(inbuf, outbuf) +val0 = sm4[2].pt +print(val0 == val) + +print('********************** Test-4: keybits=128, ivlen=16, ptlen=32 ******************') +print('SM4-OFB Encrypt......') +# 初始化sm4密码对象 +crypto = ucryptolib.sm4(sm4[3].key, 5, sm4[3].iv) +# 输入明文数据 +inbuf = sm4[3].pt +outbuf = bytearray(32) +# 加密 +val = crypto.encrypt(inbuf, outbuf) +val0 = sm4[3].ct +print(val0 == val) +print('SM4-OFB Decrypt......') +# 解密 +crypto = ucryptolib.sm4(sm4[3].key, 5, sm4[3].iv) +inbuf = sm4[3].ct +outbuf = bytearray(32) +val = crypto.decrypt(inbuf, outbuf) +val0 = sm4[3].pt +print(val0 == val) + +print('********************** Test-5: keybits=128, ivlen=16, ptlen=64 ******************') +print('SM4-CTR Encrypt......') +# 初始化sm4密码对象 +crypto = ucryptolib.sm4(sm4[4].key, 6, sm4[4].iv) +# 输入明文数据 +inbuf = sm4[4].pt +outbuf = bytearray(64) +# 加密 +val = crypto.encrypt(inbuf, outbuf) +val0 = sm4[4].ct +print(val0 == val) +print('SM4-CTR Decrypt......') +# 解密 +crypto = ucryptolib.sm4(sm4[4].key, 6, sm4[4].iv) +inbuf = sm4[4].ct +outbuf = bytearray(64) +val = crypto.decrypt(inbuf, outbuf) +val0 = sm4[4].pt +print(val0 == val) +``` + +具体接口定义请参考 [Cipher](../../api/cipher/K230_CanMV_Ucryptolib模块API手册.md)、[Hash](../../api/cipher/K230_CanMV_Hashlib模块API手册.md) diff --git a/zh/example/demo/face_detection.md b/zh/example/demo/face_detection.md new file mode 100755 index 0000000..0a092c5 --- /dev/null +++ b/zh/example/demo/face_detection.md @@ -0,0 +1,384 @@ +# face detection - 人脸检测画框示例 + +```python +import os + +from media.camera import * #导入camera模块,使用camera相关接口 +from media.display import * #导入display模块,使用display相关接口 +from media.media import * #导入media模块,使用meida相关接口 +from time import * + +import nncase_runtime as nn #导入nn模块,使用nn相关接口 +import ulab.numpy as np #导入np模块,使用np相关接口 + +import time +import image + +import random +import gc + +DISPLAY_WIDTH = ALIGN_UP(1920, 16) +DISPLAY_HEIGHT = 1080 + +OUT_RGB888P_WIDTH = ALIGN_UP(1024, 16) +OUT_RGB888P_HEIGH = 624 + +confidence_threshold = 0.5 +top_k = 5000 +nms_threshold = 0.2 +keep_top_k = 750 +vis_thres = 0.5 +variance = [0.1, 0.2] + +anchors_path = '/sdcard/app/tests/nncase_runtime/face_detection/prior_data_320.bin' +prior_data = np.fromfile(anchors_path, dtype=np.float) +prior_data = prior_data.reshape((4200,4)) + +scale = np.ones(4, dtype=np.uint8)*1024 +scale1 = np.ones(10, dtype=np.uint8)*1024 + + +def decode(loc, priors, variances): + boxes = np.concatenate( + (priors[:, :2] + loc[:, :2] * variances[0] * priors[:, 2:], + priors[:, 2:] * np.exp(loc[:, 2:] * variances[1])), axis=1) + boxes[:, :2] -= boxes[:, 2:] / 2 + boxes[:, 2:] += boxes[:, :2] + return boxes + + +def decode_landm(pre, priors, variances): + landms = np.concatenate((priors[:, :2] + pre[:, :2] * variances[0] * priors[:, 2:], + priors[:, :2] + pre[:, 2:4] * variances[0] * priors[:, 2:], + priors[:, :2] + pre[:, 4:6] * variances[0] * priors[:, 2:], + priors[:, :2] + pre[:, 6:8] * variances[0] * priors[:, 2:], + priors[:, :2] + pre[:, 8:10] * variances[0] * priors[:, 2:]) + , axis=1) + return landms + + +def py_cpu_nms(dets, thresh): + """Pure Python NMS baseline.""" + x1 = dets[:, 0] + y1 = dets[:, 1] + x2 = dets[:, 2] + y2 = dets[:, 3] + scores = dets[:, 4] + areas = (x2 - x1 + 1) * (y2 - y1 + 1) + + order = np.argsort(scores,axis = 0)[::-1] + + keep = [] + while order.size > 0: + i = order[0] + keep.append(i) + new_x1 = [] + new_x2 = [] + new_y1 = [] + new_y2 = [] + new_areas = [] + for order_i in order: + new_x1.append(x1[order_i]) + new_x2.append(x2[order_i]) + new_y1.append(y1[order_i]) + new_y2.append(y2[order_i]) + new_areas.append(areas[order_i]) + new_x1 = np.array(new_x1) + new_x2 = np.array(new_x2) + new_y1 = np.array(new_y1) + new_y2 = np.array(new_y2) + xx1 = np.maximum(x1[i], new_x1) + yy1 = np.maximum(y1[i], new_y1) + xx2 = np.minimum(x2[i], new_x2) + yy2 = np.minimum(y2[i], new_y2) + + w = np.maximum(0.0, xx2 - xx1 + 1) + h = np.maximum(0.0, yy2 - yy1 + 1) + inter = w * h + + new_areas = np.array(new_areas) + ovr = inter / (areas[i] + new_areas - inter) + new_order = [] + for ovr_i,ind in enumerate(ovr): + if ind < thresh: + new_order.append(order[ovr_i]) + order = np.array(new_order,dtype=np.uint8) + return keep + + +def pad_img_to_square(image, rgb_mean): + height, width, _ = image.shape + long_side = max(width, height) + image_t = np.empty((long_side, long_side, 3), dtype=image.dtype) + image_t[:, :] = rgb_mean + image_t[0:0 + height, 0:0 + width] = image + return image_t + + +def softmax(x): + x = x[0] + x_row_max = np.max(x,axis=-1) + x_row_max = x_row_max.reshape(tuple(list(x.shape)[:-1]+[1])) + x = x - x_row_max + x_exp = np.exp(x) + x_exp_row_sum = np.sum(x_exp,axis=-1).reshape(tuple(list(x.shape)[:-1]+[1])) + softmax = x_exp / x_exp_row_sum + + return softmax + + +def draw_image(img_raw,dets): + pass + + +def get_result(output_data): + loc = [] + loc = np.zeros((1, 4200, 4), dtype=np.float) + start_i = 0 + for _i in range(0, 3): + sum_shape = 1 + for sh_i in output_data[_i].shape: + sum_shape *= sh_i + output_data[_i] = output_data[_i].reshape((1, -1, loc.shape[2])) + loc[:,start_i:start_i + int(sum_shape/loc.shape[2]),:] = output_data[_i] + start_i = start_i + int(sum_shape/loc.shape[2]) + + #conf = [] + start_i = 0 + conf = np.zeros((1, 4200, 2), dtype=np.float) + for _i in range(3, 6): + sum_shape = 1 + for sh_i in output_data[_i].shape: + sum_shape *= sh_i + output_data[_i] = output_data[_i].reshape((1, -1, conf.shape[2])) + conf[:,start_i:start_i + int(sum_shape/conf.shape[2]),:] = output_data[_i] + start_i = start_i + int(sum_shape/conf.shape[2]) + conf = softmax(conf) + #landms = [] + #for _i in range(6, 9): + ##landms.append(np.reshape(np.transpose(output_data[_i], [0, 2, 3, 1]), [1, -1, 10])) + #landms.append(np.reshape(output_data[_i],(1, -1, 10))) + #landms = np.hstack(landms) + + boxes = decode(loc[0], prior_data, variance) + boxes = boxes * scale + scores = conf[:, 1] + #landms = decode_landm(np.squeeze(landms, axis=0), prior_data, variance) + #landms = landms * scale1 + + # ignore low scores + inds = [] + boxes_ind = [] + scores_ind = [] + for i in range(len(scores)): + if scores[i] > confidence_threshold: + inds.append(i) + boxes_ind.append(boxes[i]) + scores_ind.append(scores[i]) + + boxes_ind = np.array(boxes_ind) + scores_ind = np.array(scores_ind) + #landms = landms[inds] + + # keep top-K before NMS + order = np.argsort(scores_ind, axis=0)[::-1][:top_k] + boxes_order = [] + scores_order = [] + for order_i in order: + boxes_order.append(boxes_ind[order_i]) + scores_order.append(scores_ind[order_i]) + if len(boxes_order)==0: + return [] + #print('***',boxes_order,len(boxes_order)) + #print('***',scores_order,len(scores_order)) + boxes_order = np.array(boxes_order) + scores_order = np.array(scores_order).reshape((-1,1)) + #landms = landms[order] + + # do NMS + dets = np.concatenate((boxes_order, scores_order), axis=1) + keep = py_cpu_nms(dets, nms_threshold) + + dets_out = [] + for keep_i in keep: + dets_out.append(dets[keep_i]) + dets_out = np.array(dets_out) + #landms = landms[keep] + + # keep top-K faster NMS + dets_out = dets_out[:keep_top_k, :] + #landms = landms[:args.keep_top_k, :] + # dets = np.concatenate((dets, landms), axis=1) + return dets_out + + +def face_detect_test(): + print("face_detect_test start") + + #初始化KPU + kpu = nn.kpu() + #初始化AI2D + ai2d = nn.ai2d() + #加载模型 + kpu.load_kmodel("/sdcard/app/tests/nncase_runtime/face_detection/face_detection_320.kmodel") + ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, + nn.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + ai2d.set_pad_param(True, [0,0,0,0,0,125,0,0], 0, [104,117,123]) + ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel ) + ai2d_builder = ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], [1,3,320,320]) + + + #初始化HDMI显示 + display.init(LT9611_1920X1080_30FPS) + + #创建osd图层使用的vb + config = k_vb_config() + config.max_pool_cnt = 1 + config.comm_pool[0].blk_size = 4*DISPLAY_WIDTH*DISPLAY_HEIGHT + config.comm_pool[0].blk_cnt = 1 + config.comm_pool[0].mode = VB_REMAP_MODE_NOCACHE + #配置媒体缓冲区 + ret = media.buffer_config(config) + #初始化默认sensor配置(OV5647) + camera.sensor_init(CAM_DEV_ID_0, CAM_DEFAULT_SENSOR) + + #设置通道0输出尺寸 + camera.set_outsize(CAM_DEV_ID_0, CAM_CHN_ID_0, DISPLAY_WIDTH, DISPLAY_HEIGHT) + #设置通道0输出格式 + camera.set_outfmt(CAM_DEV_ID_0, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + #创建媒体数据源设备 + meida_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + #创建媒体数据接收设备 + meida_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + #创建媒体链路,数据从源设备流到接收设备 + media.create_link(meida_source, meida_sink) + #设置视频层 + display.set_plane(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + + # set chn1 output rgb888 + #camera.set_outsize(CAM_DEV_ID_0, CAM_CHN_ID_1, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + #camera.set_outfmt(CAM_DEV_ID_0, CAM_CHN_ID_1, PIXEL_FORMAT_RGB_888) + + #设置通道2输出尺寸 + camera.set_outsize(CAM_DEV_ID_0, CAM_CHN_ID_2, OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH) + #设置通道2输出格式 + camera.set_outfmt(CAM_DEV_ID_0, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + + try: + #初始化媒体缓冲区 + ret = media.buffer_init() + if ret: + print("face_detect_test, buffer init failed") + return ret + #请求媒体缓冲区用于OSD + buffer = media.request_buffer(4*DISPLAY_WIDTH*DISPLAY_HEIGHT) + #创建用于绘制人脸框信息的image对象 + draw_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, alloc=image.ALLOC_MPGC) + #创建用于OSD显示的image对象 + osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888, poolid=buffer.pool_id, alloc=image.ALLOC_VB, phyaddr=buffer.phys_addr, virtaddr=buffer.virt_addr) + #启动摄像头 + camera.start_stream(CAM_DEV_ID_0) + time.sleep(5) + + rgb888p_img = None + while True: + #捕获摄像头数据 + rgb888p_img = camera.capture_image(CAM_DEV_ID_0, CAM_CHN_ID_2) + if rgb888p_img == -1: + print("face_detect_test, capture_image failed") + #释放捕获的数据 + camera.release_image(CAM_DEV_ID_0, CAM_CHN_ID_2, rgb888p_img) + continue + + # for rgb888planar + if rgb888p_img.format() == image.RGBP888: + ai2d_input = rgb888p_img.to_numpy_ref() + + ai2d_input_tensor = nn.from_numpy(ai2d_input) + + data = np.ones((1,3,320,320),dtype=np.uint8) + ai2d_out = nn.from_numpy(data) + + ai2d_builder.run(ai2d_input_tensor, ai2d_out) + + #设置kpu输入 + kpu.set_input_tensor(0, ai2d_out) + #运行kmodel + kpu.run() + + del ai2d_input_tensor + del ai2d_out + # get output + results = [] + for i in range(kpu.outputs_size()): + data = kpu.get_output_tensor(i) + result = data.to_numpy() + + tmp = (result.shape[0],result.shape[1],result.shape[2],result.shape[3]) + result = result.reshape((result.shape[0]*result.shape[1],result.shape[2]*result.shape[3])) + result = result.transpose() + tmp2 = result.copy() + tmp2 = tmp2.reshape((tmp[0],tmp[2],tmp[3],tmp[1])) + del result + results.append(tmp2) + gc.collect() + + #获取人脸检测结果 + dets = get_result(results) + if dets: + draw_img.clear() + for det in dets: + x1, y1, x2, y2 = map(lambda x: int(round(x, 0)), det[:4]) + w = (x2 - x1) * DISPLAY_WIDTH // OUT_RGB888P_WIDTH + h = (y2 - y1) * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH + #绘制人脸框 + draw_img.draw_rectangle(x1 * DISPLAY_WIDTH // OUT_RGB888P_WIDTH, y1 * DISPLAY_HEIGHT // OUT_RGB888P_HEIGH, w, h, color=(255,255,0,255)) + #拷贝人脸框信息到OSD对象 + draw_img.copy_to(osd_img) + #显示人脸框 + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + else: + draw_img.clear() + draw_img.draw_rectangle(0, 0, 128, 128, color=(0,0,0,0)) + draw_img.copy_to(osd_img) + display.show_image(osd_img, 0, 0, DISPLAY_CHN_OSD3) + #释放采集的图像 + camera.release_image(CAM_DEV_ID_0, CAM_CHN_ID_2, rgb888p_img) + rgb888p_img = None + + except Exception as e: + print(f"An error occurred during buffer used: {e}") + finally: + if rgb888p_img is not None: + camera.release_image(CAM_DEV_ID_0, CAM_CHN_ID_2, rgb888p_img) + #停止摄像头输出 + camera.stop_stream(CAM_DEV_ID_0) + #去初始化显示设备 + display.deinit() + #释放媒体缓冲区 + media.release_buffer(buffer) + #销毁媒体链路 + media.destroy_link(meida_source, meida_sink) + + del kpu #释放kpu资源 + del ai2d #释放ai2d资源 + gc.collect() + + time.sleep(1) + #去初始化媒体缓冲区资源 + ret = media.buffer_deinit() + if ret: + print("face_detect_test, buffer_deinit failed") + return ret + + print("face_detect_test end") + return 0 + + +face_detect_test() + +``` + +具体接口使用请参考相关文档说明 diff --git a/zh/example/example.rst b/zh/example/example.rst new file mode 100755 index 0000000..2d323c1 --- /dev/null +++ b/zh/example/example.rst @@ -0,0 +1,24 @@ +CanMV 例程讲解 +=========== +.. toctree:: + :maxdepth: 1 + + K230_CanMV_AI_Demo示例说明.md + K230_Canmv示例讲解-人脸检测.md + cipher/cipher.md + machine/adc/adc.md + machine/fft/fft.md + machine/fpioa/fpioa.md + machine/gpio/gpio.md + machine/pwm/pwm.md + machine/spi/spi.md + machine/timer/timer.md + machine/wdt/wdt.md + media/acodec.md + media/audio.md + media/camera.md + media/display.md + media/media.md + media/mp4muxer.md + media/player.md + media/venc.md \ No newline at end of file diff --git a/zh/template/images/canaan-cover.png b/zh/example/images/canaan-cover.png old mode 100644 new mode 100755 similarity index 100% rename from zh/template/images/canaan-cover.png rename to zh/example/images/canaan-cover.png diff --git a/zh/01_software/example/images/canmv-face-detect-result.jpg b/zh/example/images/canmv-face-detect-result.jpg similarity index 100% rename from zh/01_software/example/images/canmv-face-detect-result.jpg rename to zh/example/images/canmv-face-detect-result.jpg diff --git a/zh/01_software/example/images/canmv-face-detect-run.png b/zh/example/images/canmv-face-detect-run.png similarity index 100% rename from zh/01_software/example/images/canmv-face-detect-run.png rename to zh/example/images/canmv-face-detect-run.png diff --git a/zh/template/images/logo.png b/zh/example/images/logo.png similarity index 100% rename from zh/template/images/logo.png rename to zh/example/images/logo.png diff --git a/zh/example/machine/adc/adc.md b/zh/example/machine/adc/adc.md new file mode 100755 index 0000000..d1e4227 --- /dev/null +++ b/zh/example/machine/adc/adc.md @@ -0,0 +1,14 @@ +# adc - adc例程 + +本示例程序用于对 CanMV 开发板进行一个adc的功能展示。 + +```python +from machine import ADC + +adc = ADC(0,enable=True) #构造adc对象,通道0默认开启 +value = adc.value() #获取通道0的数值 +print("value = %d" % value) +adc.deinit() #注销adc对象 +``` + +具体接口定义请参考 [ADC](../../../api/machine/K230_CanMV_ADC模块API手册.md) diff --git a/zh/example/machine/fft/fft.md b/zh/example/machine/fft/fft.md new file mode 100755 index 0000000..003ac9f --- /dev/null +++ b/zh/example/machine/fft/fft.md @@ -0,0 +1,34 @@ +# fft - fft例程 + +本示例程序用于对 CanMV 开发板进行一个FFT的功能展示。 + +```python +from machine import FFT +import array +import math +from ulab import numpy as np +PI = 3.14159265358979323846264338327950288419716939937510 + +rx = [] +def input_data(): + for i in range(64): + data0 = 10 *math.cos(2* PI *i / 64) + data1 = 20 * math.cos(2 * 2* PI *i / 64) + data2 = 30* math.cos(3 *2* PI *i / 64) + data3 = 0.2* math.cos(4 *2 * PI * i / 64) + data4 = 1000* math.cos(5 *2* PI * i / 64) + rx.append((int(data0 + data1 + data2 + data3 + data4))) +input_data() #初始化需要进行FFT的数据,列表类型 +print(rx) +data = np.array(rx,dtype=np.uint16) #把列表数据转换成数组 +print(data) +fft1 = FFT(data, 64, 0x555) #创建一个FFT对象,运算点数为64,偏移是0x555 +res = fft1.run() #获取FFT转换后的数据 +print(res) +res = fft1.amplitude(res) #获取各个频率点的幅值 +print(res) +res = fft1.freq(64,38400) #获取所有频率点的频率值 +print(res) +``` + +具体接口定义请参考 [FFT](../../../api/machine/K230_CanMV_FFT模块API手册.md) diff --git a/zh/example/machine/fpioa/fpioa.md b/zh/example/machine/fpioa/fpioa.md new file mode 100755 index 0000000..d836e41 --- /dev/null +++ b/zh/example/machine/fpioa/fpioa.md @@ -0,0 +1,25 @@ +# fpioa - iomux fpioa例程 + +本示例程序用于对 CanMV 开发板进行iomux功能展示。 + +```python +from machine import FPIOA +a = FPIOA() + +help(a) #查看本模块所有帮助; + +for i in range(63): + a.help(i) #查看第i个管脚的帮助 + +for i in range(221): + a.get_Pin_num(i) #获取某个功能对应的管脚号 + +a.help(60) #查看第60个管脚的当前配置和可配置功能 +a.set_function(60,a.GPIO60) #把第60个管脚设置为gpio60功能。 +a.help(60) #查看第60个管脚的帮助 + +a.set_function(60,set_pd=1) #使能第60个管脚的下拉 其他可配选项为(set_sl=1,set_ie=0,set_oe=0,set_pd=1,set_pu=0,set_ds=6,set_st=0,set_di=1) +a.help(60) +``` + +具体接口定义请参考 [IOMUX_FPIOA](../../../api/machine/K230_CanMV_IOMUX_API手册.md) diff --git a/zh/example/machine/gpio/gpio.md b/zh/example/machine/gpio/gpio.md new file mode 100755 index 0000000..455af02 --- /dev/null +++ b/zh/example/machine/gpio/gpio.md @@ -0,0 +1,15 @@ +# gpio - gpio例程 + +本示例程序用于对 CanMV 开发板进行一个GPIO的功能展示。 + +```python +from machine import GPIO +gpio = GPIO(8, GPIO.OUT, GPIO.PULL_UP, value=0) #构造GPIO对象,gpio编号为8,设置为上拉输出低电平 +value = gpio.value() #获取gpio的值 +print("value = %d" % value) +gpio.value(1) #设置gpio输出为高电平 +value = gpio.value() +print("value = %d" % value) +``` + +具体接口定义请参考 [GPIO](../../../api/machine/K230_CanMV_GPIO模块API手册.md) diff --git a/zh/example/machine/i2c/i2c.md b/zh/example/machine/i2c/i2c.md new file mode 100755 index 0000000..ca7a0ff --- /dev/null +++ b/zh/example/machine/i2c/i2c.md @@ -0,0 +1,54 @@ +# i2c - i2c例程 + +本示例程序用于对 CanMV 开发板进行i2c读取hdmi id的功能展示。 + +```python +from machine import I2C +# 实例化I2C4,使用默认100KHz时钟,7 bit地址模式 +i2c4=I2C(4) + +# 扫描I2C4连接的hdmi地址 +a=i2c4.scan() +# 打印I2C4连接的hdmi地址,59 +print(a) + +# hdmi地址0x3b(即59),写hdmi页地址寄存器(0xff)为0x80,位宽为8bits +i2c4.writeto_mem(0x3b,0xff,bytes([0x80]),mem_size=8) +# hdmi地址0x3b(即59),读id地址0,位宽为8bits,值为0x17 +i2c4.readfrom_mem(0x3b,0x00,1,mem_size=8) +# hdmi地址0x3b(即59),读id地址1,位宽为8bits,值为0x2 +i2c4.readfrom_mem(0x3b,0x01,1,mem_size=8) + +# hdmi地址0x3b(即59),写hdmi页地址寄存器(0xff)为0x80 +i2c4.writeto(0x3b,bytes([0xff,0x80]),True) +# hdmi地址0x3b(即59),发送要被读取的id地址0 +i2c4.writeto(0x3b,bytes([0x00]),True) +# hdmi地址0x3b(即59),读返回的id,值为0x17 +i2c4.readfrom(0x3b,1) +# hdmi地址0x3b(即59),发送要被读取的id地址1 +i2c4.writeto(0x3b,bytes([0x01]),True) +# hdmi地址0x3b(即59),读返回的id,值为0x2 +i2c4.readfrom(0x3b,1) + +# hdmi地址0x3b(即59),写hdmi页地址寄存器(0xff)为0x80,位宽为8bits +i2c4.writeto_mem(0x3b,0xff,bytes([0x80]),mem_size=8) +# 创建长度为1的接收buff +a=bytearray(1) +# hdmi地址0x3b(即59),读id地址0,位宽为8bits +i2c4.readfrom_mem_into(0x3b,0x0,a,mem_size=8) +# 打印buff,值为0x17 +print(a) + +# hdmi地址0x3b(即59),写hdmi页地址寄存器(0xff)为0x80 +i2c4.writeto(0x3b,bytes([0xff,0x80]),True) +# hdmi地址0x3b(即59),发送要被读取的id地址0 +i2c4.writeto(0x3b,bytes([0x00]),True) +# 创建长度为1的接收buff +b=bytearray(1) +# hdmi地址0x3b(即59),读返回的id, +i2c4.readfrom_into(0x3b,b) +# 打印buff,值为0x17 +print(b) +``` + +具体接口定义请参考 [I2C](../../../api/machine/K230_CanMV_I2C模块API手册.md) diff --git a/zh/example/machine/pwm/pwm.md b/zh/example/machine/pwm/pwm.md new file mode 100755 index 0000000..43072fa --- /dev/null +++ b/zh/example/machine/pwm/pwm.md @@ -0,0 +1,19 @@ +# pwm - pwm例程 + +本示例程序用于对 CanMV 开发板进行一个PWM输出的功能展示。 + +```python +from machine import PWM +# 实例化PWM通道0,频率为1000Hz,占空比为50%,默认使能输出 +pwm0 = PWM(0, 1000, 50, enable = True) +# 关闭通道0输出 +pwm0.enable(0) +# 调整通道0频率为2000Hz +pwm0.freq(2000) +# 调整通道0占空比为40% +pwm0.duty(40) +# 打开通道0输出 +pwm0.enable(1) +``` + +具体接口定义请参考 [PWM](../../../api/machine/K230_CanMV_PWM模块API手册.md) diff --git a/zh/example/machine/spi/spi.md b/zh/example/machine/spi/spi.md new file mode 100755 index 0000000..8b7dad3 --- /dev/null +++ b/zh/example/machine/spi/spi.md @@ -0,0 +1,63 @@ +# spi - spi例程 + +本示例程序用于对 CanMV 开发板进行spi读取flash id的功能展示。 + +```python +from machine import SPI +from machine import FPIOA + +# 实例化SPI的gpio +a = FPIOA() + +# 打印gpio14的属性 +a.help(14) +# 设置gpio14为QSPI0_CS0功能 +a.set_function(14,a.QSPI0_CS0) +a.help(14) + +# 打印gpio15的属性 +a.help(15) +# 设置gpio15为QSPI0_CLK功能 +a.set_function(15,a.QSPI0_CLK) +a.help(15) + +# 打印gpio16的属性 +a.help(16) +# 设置gpio16为QSPI0_D0功能 +a.set_function(16,a.QSPI0_D0) +a.help(16) + +# 打印gpio17的属性 +a.help(17) +# 设置gpio17为QSPI0_D1功能 +a.set_function(17,a.QSPI0_D1) +a.help(17) + +# 实例化SPI,使用5MHz时钟,极性为0,数据位宽为8bit +spi=SPI(1,baudrate=5000000, polarity=0, phase=0, bits=8) + +# 使能 gd25lq128 复位 +spi.write(bytes([0x66])) +# gd25lq128 复位 +spi.write(bytes([0x99])) + +# 读id命令(0x9f) +a=bytes([0x9f]) +# 创建长度为3的接收buff +b=bytearray(3) +# 读id +spi.write_readinto(a,b) +# 打印为:bytearray(b'\xc8`\x18') +print(b) + +# 读id命令(0x90,0,0,0) +a=bytes([0x90,0,0,0]) +# 创建长度为2的接收buff +b=bytearray(2) +# 读id +spi.write_readinto(a,b) +# 打印为:bytearray(b'\xc8\x17') +print(b) +``` + +具体接口定义请参考 [I2C](../../../api/machine/K230_CanMV_SPI模块API手册.md) diff --git a/zh/example/machine/timer/timer.md b/zh/example/machine/timer/timer.md new file mode 100755 index 0000000..3d73101 --- /dev/null +++ b/zh/example/machine/timer/timer.md @@ -0,0 +1,14 @@ +# Timer - Timer例程 + +本示例程序用于对 CanMV 开发板进行一个定时器的功能展示。 + +```python +from machine import Timer +#定义定时器回调函数 +def on_timer(arg): + print("time up: %d" % arg) +#构造定时器对象,时间为3s,默认开启定时器 +tim = Timer(mode=Timer.MODE_ONE_SHOT,period=3, unit=Timer.UNIT_S, callback=on_timer, arg=1, start=True) +``` + +具体接口定义请参考 [Timer](../../../api/machine/K230_CanMV_Timer模块API手册.md) diff --git a/zh/example/machine/wdt/wdt.md b/zh/example/machine/wdt/wdt.md new file mode 100755 index 0000000..9ccc8c9 --- /dev/null +++ b/zh/example/machine/wdt/wdt.md @@ -0,0 +1,21 @@ +# wdt - wdt例程 + +本示例程序用于对 CanMV 开发板进行一个wdt的功能展示。 + +```python +import time +from machine import WDT + +wdt1 = WDT(1,3) #构造wdt对象,/dev/watchdog1,timeout为3s +print('into', wdt1) +time.sleep(2) #延时2s +print(time.ticks_ms()) +## 1.test wdt feed +wdt1.feed() #喂狗操作 +time.sleep(2) #延时2s +print(time.ticks_ms()) +## 2.test wdt stop +wdt1.stop() #停止喂狗 +``` + +具体接口定义请参考 [WDT](../../../api/machine/K230_CanMV_WDT模块API手册.md) diff --git a/zh/example/media/acodec.md b/zh/example/media/acodec.md new file mode 100755 index 0000000..25fc63f --- /dev/null +++ b/zh/example/media/acodec.md @@ -0,0 +1,145 @@ +# acodec - g711编解码例程 + +本示例程序用于对 CanMV 开发板进行一个g711编解码的功能展示。 + +```python +from media.pyaudio import * #导入pyaudio模块,用于采集和播放音频 +from media.media import * #导入media模块,用于初始化vb buffer +import media.g711 as g711 #导入g711模块,用于g711编解码 +from mpp.payload_struct import * #导入payload模块,用于获取音视频编解码类型 + +def encode_audio(filename, duration): + CHUNK = int(44100/25) #设置音频chunk值 + FORMAT = paInt16 #设置采样精度 + CHANNELS = 2 #设置声道数 + RATE = 44100 #设置采样率 + + p = PyAudio() + p.initialize(CHUNK) #初始化PyAudio对象 + enc = g711.Encoder(K_PT_G711A,CHUNK) #创建g711编码器对象 + ret = media.buffer_init() #vb buffer初始化 + if ret: + print("record_audio, buffer_init failed") + + enc.create() #创建编码器 + #创建音频输入流 + stream = p.open(format=FORMAT, + channels=CHANNELS, + rate=RATE, + input=True, + frames_per_buffer=CHUNK) + + frames = [] + #采集音频数据编码并存入列表 + for i in range(0, int(RATE / CHUNK * duration)): + frame_data = stream.read() #从音频输入流中读取音频数据 + data = enc.encode(frame_data) #编码音频数据为g711 + frames.append(data) #将g711编码数据保存到列表中 + + stream.stop_stream() #停止音频输入流 + stream.close() #关闭音频输入流 + p.terminate() #释放音频对象 + enc.destroy() #销毁g711音频编码器 + + #将g711编码数据存入文件中 + with open(filename,mode='w') as wf: + wf.write(b''.join(frames)) + + media.buffer_deinit() #释放vb buffer + +def decode_audio(filename): + wf = open(filename,mode='rb') #打开g711文件 + FORMAT = paInt16 #设置音频chunk值 + CHANNELS = 2 #设置声道数 + RATE = 44100 #设置采样率 + CHUNK = int(RATE/25) #设置音频chunk值 + + p = PyAudio() + p.initialize(CHUNK) #初始化PyAudio对象 + dec = g711.Decoder(K_PT_G711A,CHUNK) #创建g711解码器对象 + ret = media.buffer_init() #vb buffer初始化 + if ret: + print("play_audio, buffer_init failed") + + dec.create() #创建解码器 + + #创建音频输出流 + stream = p.open(format=FORMAT, + channels=CHANNELS, + rate=RATE, + output=True, + frames_per_buffer=CHUNK) + + stream_len = CHUNK*CHANNELS*2//2 #设置每次读取的g711数据流长度 + stream_data = wf.read(stream_len) #从g711文件中读取数据 + + #解码g711文件并播放 + while stream_data: + frame_data = dec.decode(stream_data) #解码g711文件 + stream.write(frame_data) #播放raw数据 + stream_data = wf.read(stream_len) #从g711文件中读取数据 + + stream.stop_stream() #停止音频输入流 + stream.close() #关闭音频输入流 + p.terminate() #释放音频对象 + dec.destroy() #销毁解码器 + wf.close() #关闭g711文件 + + media.buffer_deinit() #释放vb buffer + +def loop_codec(duration): + CHUNK = int(44100/25) #设置音频chunk值 + FORMAT = paInt16 #设置采样精度 + CHANNELS = 2 #设置声道数 + RATE = 44100 #设置采样率 + + p = PyAudio() + p.initialize(CHUNK) #初始化PyAudio对象 + dec = g711.Decoder(K_PT_G711A,CHUNK) #创建g711解码器对象 + enc = g711.Encoder(K_PT_G711A,CHUNK) #创建g711编码器对象 + ret = media.buffer_init() #vb buffer初始化 + if ret: + print("loop_audio, buffer_init failed") + + dec.create() #创建g711解码器 + enc.create() #创建g711编码器 + + #创建音频输入流 + input_stream = p.open(format=FORMAT, + channels=CHANNELS, + rate=RATE, + input=True, + frames_per_buffer=CHUNK) + + #创建音频输出流 + output_stream = p.open(format=FORMAT, + channels=CHANNELS, + rate=RATE, + output=True, + frames_per_buffer=CHUNK) + + #从音频输入流中获取数据->编码->解码->写入到音频输出流中 + for i in range(0, int(RATE / CHUNK * duration)): + frame_data = input_stream.read() #从音频输入流中获取raw音频数据 + stream_data = enc.encode(frame_data) #编码音频数据为g711 + frame_data = dec.decode(stream_data) #解码g711数据为raw数据 + output_stream.write(frame_data) #播放raw数据 + + + input_stream.stop_stream() #停止音频输入流 + output_stream.stop_stream() #停止音频输出流 + input_stream.close() #关闭音频输入流 + output_stream.close() #关闭音频输出流 + p.terminate() #释放音频对象 + dec.destroy() #销毁g711解码器 + enc.destroy() #销毁g711编码器 + + media.buffer_deinit() #释放vb buffer + +#encode_audio('/sdcard/app/test.g711a', 15) #采集并编码g711文件 +#decode_audio('/sdcard/app/test.g711a') #解码g711文件并输出 +loop_codec(15) #采集音频数据->编码g711->解码g711->播放音频 +print("audio codec sample done") +``` + +具体接口定义请参考 [acodec](../../api/mpp/K230_CanMV_播放器模块API手册.md) diff --git a/zh/example/media/audio.md b/zh/example/media/audio.md new file mode 100755 index 0000000..0039365 --- /dev/null +++ b/zh/example/media/audio.md @@ -0,0 +1,125 @@ +# audio - 音频采集输出例程 + +本示例程序用于对 CanMV 开发板进行一个音频采集和输出的功能展示。 + +```python +from media.pyaudio import * #导入pyaudio模块,用于采集和播放音频 +import media.wave as wave #导入wav模块,用于保存和加载wav音频文件 +from media.media import * #导入media模块,用于初始化vb buffer + +def record_audio(filename, duration): + CHUNK = int(44100/25) #设置音频chunk值 + FORMAT = paInt16 #设置采样精度 + CHANNELS = 2 #设置声道数 + RATE = 44100 #设置采样率 + + p = PyAudio() + p.initialize(CHUNK) #初始化PyAudio对象 + ret = media.buffer_init() #vb buffer初始化 + if ret: + print("record_audio, buffer_init failed") + + #创建音频输入流 + stream = p.open(format=FORMAT, + channels=CHANNELS, + rate=RATE, + input=True, + frames_per_buffer=CHUNK) + + frames = [] + #采集音频数据并存入列表 + for i in range(0, int(RATE / CHUNK * duration)): + data = stream.read() + frames.append(data) + + + stream.stop_stream() #停止采集音频数据 + stream.close()#关闭音频输入流 + p.terminate()#释放音频对象 + + #将列表中的数据保存到wav文件中 + wf = wave.open(filename, 'wb') #创建wav 文件 + wf.set_channels(CHANNELS) #设置wav 声道数 + wf.set_sampwidth(p.get_sample_size(FORMAT)) #设置wav 采样精度 + wf.set_framerate(RATE) #设置wav 采样率 + wf.write_frames(b''.join(frames)) #存储wav音频数据 + wf.close() #关闭wav文件 + + media.buffer_deinit() #释放vb buffer + +def play_audio(filename): + + wf = wave.open(filename, 'rb')#打开wav文件 + CHUNK = int(wf.get_framerate()/25)#设置音频chunk值 + + p = PyAudio() + p.initialize(CHUNK) #初始化PyAudio对象 + ret = media.buffer_init()#vb buffer初始化 + if ret: + print("play_audio, buffer_init failed") + + #创建音频输出流,设置的音频参数均为wave中获取到的参数 + stream = p.open(format=p.get_format_from_width(wf.get_sampwidth()), + channels=wf.get_channels(), + rate=wf.get_framerate(), + output=True,frames_per_buffer=CHUNK) + + data = wf.read_frames(CHUNK)#从wav文件中读取数一帧数据 + + while data: + stream.write(data) #将帧数据写入到音频输出流中 + data = wf.read_frames(CHUNK) #从wav文件中读取数一帧数据 + + stream.stop_stream() #停止音频输出流 + stream.close()#关闭音频输出流 + p.terminate()#释放音频对象 + wf.close()#关闭wav文件 + + media.buffer_deinit()#释放vb buffer + + +def loop_audio(duration): + CHUNK = int(44100/25)#设置音频chunck + FORMAT = paInt16 #设置音频采样精度 + CHANNELS = 2 #设置音频声道数 + RATE = 44100 #设置音频采样率 + + p = PyAudio() + p.initialize(CHUNK)#初始化PyAudio对象 + ret = media.buffer_init() #初始化vb buffer + if ret: + print("loop_audio, buffer_init failed") + + #创建音频输入流 + input_stream = p.open(format=FORMAT, + channels=CHANNELS, + rate=RATE, + input=True, + frames_per_buffer=CHUNK) + + #创建音频输出流 + output_stream = p.open(format=FORMAT, + channels=CHANNELS, + rate=RATE, + output=True,frames_per_buffer=CHUNK) + + #从音频输入流中获取数据写入到音频输出流中 + for i in range(0, int(RATE / CHUNK * duration)): + output_stream.write(input_stream.read()) + + + input_stream.stop_stream()#停止音频输入流 + output_stream.stop_stream()#停止音频输出流 + input_stream.close() #关闭音频输入流 + output_stream.close() #关闭音频输出流 + p.terminate() #释放音频对象 + + media.buffer_deinit() #释放vb buffer + +#play_audio('/sdcard/app/input.wav') #播放wav文件 +#record_audio('/sdcard/app/output.wav', 15) #录制wav文件 +loop_audio(15) #采集音频并输出 +print("audio sample done") +``` + +具体接口定义请参考 [audio](../../api/mpp/K230_CanMV_Audio模块API手册.md) diff --git a/zh/example/media/camera.md b/zh/example/media/camera.md new file mode 100755 index 0000000..7a601f6 --- /dev/null +++ b/zh/example/media/camera.md @@ -0,0 +1,132 @@ +# Camera - 摄像头预览及图像采集示例 + +```python +from media.camera import * #导入camera模块,使用camera相关接口 +from media.display import * #导入display模块,使用display相关接口 +from media.media import * #导入media模块,使用meida相关接口 +from time import * #导入time模块,使用time相关接口 +import time +import image #导入image模块,使用image相关接口 + + +def canmv_camera_test(): + print("canmv_camera_test") + + #初始化HDMI显示 + display.init(LT9611_1920X1080_30FPS) + + #初始化默认sensor配置(OV5647) + camera.sensor_init(CAM_DEV_ID_0, CAM_DEFAULT_SENSOR) + #camera.sensor_init(CAM_DEV_ID_0, CAM_IMX335_2LANE_1920X1080_30FPS_12BIT_LINEAR) + + out_width = 1920 + out_height = 1080 + # 设置输出宽度16字节对齐 + out_width = ALIGN_UP(out_width, 16) + + #设置通道0输出尺寸 + camera.set_outsize(CAM_DEV_ID_0, CAM_CHN_ID_0, out_width, out_height) + #设置通道0输出格式 + camera.set_outfmt(CAM_DEV_ID_0, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + #创建媒体数据源设备 + meida_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + #创建媒体数据接收设备 + meida_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + #创建媒体链路,数据从源设备流到接收设备 + media.create_link(meida_source, meida_sink) + #设置显示输出平面的属性 + display.set_plane(0, 0, out_width, out_height, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + + out_width = 640 + out_height = 480 + out_width = ALIGN_UP(out_width, 16) + + #设置通道1输出尺寸 + camera.set_outsize(CAM_DEV_ID_0, CAM_CHN_ID_1, out_width, out_height) + #设置通道1输出格式 + camera.set_outfmt(CAM_DEV_ID_0, CAM_CHN_ID_1, PIXEL_FORMAT_RGB_888) + + #设置通道2输出尺寸 + camera.set_outsize(CAM_DEV_ID_0, CAM_CHN_ID_2, out_width, out_height) + #设置通道2输出格式 + camera.set_outfmt(CAM_DEV_ID_0, CAM_CHN_ID_2, PIXEL_FORMAT_RGB_888_PLANAR) + + #初始化媒体缓冲区 + ret = media.buffer_init() + if ret: + print("canmv_camera_test, buffer init failed") + return ret + + #启动摄像头数据流 + camera.start_stream(CAM_DEV_ID_0) + time.sleep(15) + + capture_count = 0 + while capture_count < 100: + time.sleep(1) + for dev_num in range(CAM_DEV_ID_MAX): + if not camera.cam_dev[dev_num].dev_attr.dev_enable: + continue + + for chn_num in range(CAM_CHN_ID_MAX): + if not camera.cam_dev[dev_num].chn_attr[chn_num].chn_enable: + continue + + print(f"canmv_camera_test, dev({dev_num}) chn({chn_num}) capture frame.") + #从指定设备和通道捕获图像 + img = camera.capture_image(dev_num, chn_num) + if img == -1: + print("camera.capture_image failed") + continue + + if img.format() == image.YUV420: + suffix = "yuv420sp" + elif img.format() == image.RGB888: + suffix = "rgb888" + elif img.format() == image.RGBP888: + suffix = "rgb888p" + else: + suffix = "unkown" + + filename = f"/sdcard/dev_{dev_num:02d}_chn_{chn_num:02d}_{img.width()}x{img.height()}_{capture_count:04d}.{suffix}" + print("save capture image to file:", filename) + + with open(filename, "wb") as f: + if f: + img_data = uctypes.bytearray_at(img.virtaddr(), img.size()) + # save yuv data to sdcard. + #f.write(img_data) + else: + print(f"capture_image, open dump file failed({filename})") + + time.sleep(1) + #释放捕获的图像数据 + camera.release_image(dev_num, chn_num, img) + + capture_count += 1 + + #停止摄像头输出 + camera.stop_stream(CAM_DEV_ID_0) + + #去初始化显示设备 + display.deinit() + + #销毁媒体链路 + media.destroy_link(meida_source, meida_sink) + + time.sleep(1) + #去初始化媒体缓冲区资源 + ret = media.buffer_deinit() + if ret: + print("camera test, media_buffer_deinit failed") + return ret + + print("camera test exit") + return 0 + + +canmv_camera_test() +``` + +具体接口定义请参考 [camera](../../api/mpp/K230_CanMV_Camera模块API手册.md) diff --git a/zh/example/media/display.md b/zh/example/media/display.md new file mode 100755 index 0000000..3946619 --- /dev/null +++ b/zh/example/media/display.md @@ -0,0 +1,76 @@ +# Display - 图像采集显示实例 + +```python +from media.camera import * #导入camera模块,使用camera相关接口 +from media.display import * #导入display模块,使用display相关接口 +from media.media import * #导入media模块,使用meida相关接口 +from time import * #导入time模块,使用time相关接口 +import time #导入time模块,使用time相关接口 + + +def camera_display_test(): + CAM_OUTPUT_BUF_NUM = 6 + CAM_INPUT_BUF_NUM = 4 + + #定义输出窗口的宽度和高度,并进行对齐 + out_width = 1080 + out_height = 720 + out_width = ALIGN_UP(out_width, 16) + + #初始化HDMI显示 + display.init(LT9611_1920X1080_30FPS) + #初始化默认sensor配置(OV5647) + camera.sensor_init(CAM_DEV_ID_0, CAM_DEFAULT_SENSOR) + + #设置通道buffer数量 + camera.set_outbufs(CAM_DEV_ID_0, CAM_CHN_ID_0, CAM_OUTPUT_BUF_NUM) + #设置通道0输出尺寸 + camera.set_outsize(CAM_DEV_ID_0, CAM_CHN_ID_0, out_width, out_height) + #设置通道0输出格式 + camera.set_outfmt(CAM_DEV_ID_0, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + #创建媒体数据源设备 + meida_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + #创建媒体数据接收设备 + meida_sink = media_device(DISPLAY_MOD_ID, DISPLAY_DEV_ID, DISPLAY_CHN_VIDEO1) + #创建媒体链路,数据从源设备流到接收设备 + media.create_link(meida_source, meida_sink) + #设置显示输出平面的属性 + display.set_plane(400, 200, out_width, out_height, PIXEL_FORMAT_YVU_PLANAR_420, DISPLAY_MIRROR_NONE, DISPLAY_CHN_VIDEO1) + + #初始化媒体缓冲区 + ret = media.buffer_init() + if ret: + print("camera_display_test, buffer init failed") + return ret + + #启动摄像头数据流 + camera.start_stream(CAM_DEV_ID_0) + + #采集显示600s后,停止采集输出 + count = 0 + while count < 600: + time.sleep(1) + count += 1 + + #停止摄像头输出 + camera.stop_stream(CAM_DEV_ID_0) + #销毁媒体链路 + media.destroy_link(meida_source, meida_sink) + time.sleep(1) + #去初始化显示设备 + display.deinit() + #去初始化媒体缓冲区资源 + ret = media.buffer_deinit() + if ret: + print("camera_display_test, media_buffer_deinit failed") + return ret + + print("camera_display_test exit") + return 0 + +camera_display_test() + +``` + +具体接口定义请参考 [display](../../api/mpp/K230_CanMV_Display模块API手册.md) diff --git a/zh/example/media/media.md b/zh/example/media/media.md new file mode 100755 index 0000000..6cbe01e --- /dev/null +++ b/zh/example/media/media.md @@ -0,0 +1,131 @@ +# Meida - meida模块接口应用示例 + +```python +from media.media import * #导入media模块,用于初始化vb buffer + +def media_buf_test(): + print("media_buf_test start") + config = k_vb_config() #初始化vb config对象 + config.max_pool_cnt = 10 + + #配置vb pool + config.comm_pool[0].blk_size = 1024*1024 + config.comm_pool[0].blk_cnt = 10 + config.comm_pool[0].mode = VB_REMAP_MODE_NONE + + config.comm_pool[1].blk_size = 2*1024*1024 + config.comm_pool[1].blk_cnt = 10 + config.comm_pool[1].mode = VB_REMAP_MODE_NOCACHE + + config.comm_pool[2].blk_size = 3*1024*1024 + config.comm_pool[2].blk_cnt = 10 + config.comm_pool[3].mode = VB_REMAP_MODE_CACHED + + print("media_buf_test buffer_config 111") + #配置媒体缓冲区参数 + ret = media.buffer_config(config) + if ret: + print("media_buf_test, buffer_config failed") + return ret + + config.max_pool_cnt = 10 + + config.comm_pool[0].blk_size = 1024*1024 + config.comm_pool[0].blk_cnt = 10 + config.comm_pool[0].mode = VB_REMAP_MODE_NONE + + config.comm_pool[1].blk_size = 2*1024*1024 + config.comm_pool[1].blk_cnt = 10 + config.comm_pool[1].mode = VB_REMAP_MODE_NOCACHE + + config.comm_pool[2].blk_size = 3*1024*1024 + config.comm_pool[2].blk_cnt = 10 + config.comm_pool[3].mode = VB_REMAP_MODE_CACHED + + print("media_buf_test buffer_config 222") + #配置媒体缓冲区参数 + ret = media.buffer_config(config) + if ret: + print("media_buf_test, buffer_config failed") + return ret + + config.max_pool_cnt = 20 + + config.comm_pool[0].blk_size = 4*1024*1024 + config.comm_pool[0].blk_cnt = 3 + config.comm_pool[0].mode = VB_REMAP_MODE_NONE + + config.comm_pool[1].blk_size = 5*1024*1024 + config.comm_pool[1].blk_cnt = 3 + config.comm_pool[1].mode = VB_REMAP_MODE_NOCACHE + + config.comm_pool[2].blk_size = 6*1024*1024 + config.comm_pool[2].blk_cnt = 3 + config.comm_pool[3].mode = VB_REMAP_MODE_CACHED + + print("media_buf_test buffer_config 333") + #配置媒体缓冲区参数 + ret = media.buffer_config(config) + if ret: + print("media_buf_test, buffer_config failed") + return ret + + config.max_pool_cnt = 30 + + config.comm_pool[0].blk_size = 4*1024*1024 + config.comm_pool[0].blk_cnt = 5 + config.comm_pool[0].mode = VB_REMAP_MODE_NONE + + config.comm_pool[1].blk_size = 4*1024*1024 + config.comm_pool[1].blk_cnt = 5 + config.comm_pool[1].mode = VB_REMAP_MODE_NOCACHE + + config.comm_pool[2].blk_size = 4*1024*1024 + config.comm_pool[2].blk_cnt = 5 + config.comm_pool[3].mode = VB_REMAP_MODE_CACHED + + print("media_buf_test buffer_config 444") + #配置媒体缓冲区参数 + ret = media.buffer_config(config) + if ret: + print("media_buf_test, buffer_config failed") + return ret + + print("media_buf_test buffer_init") + #初始化媒体缓冲区 + ret = media.buffer_init() + if ret: + print("media_buf_test, buffer_init failed") + + + print("media_buf_test request_buffer") + #请求指定大小的媒体缓冲区 + buffer = media.request_buffer(4*1024*1024) + if buffer == -1: + print("media_buf_test, request_buffer failed") + else: + print(f"buffer handle({buffer.handle})") + print(f"buffer pool_id({buffer.pool_id})") + print(f"buffer phys_addr({buffer.phys_addr})") + print(f"buffer virt_addr({buffer.virt_addr})") + print(f"buffer size({buffer.size})") + #释放媒体缓冲区 + ret = media.release_buffer(buffer) + if ret: + print("media_buf_test, release_buffer failed") + + print("media_buf_test buffer_deinit") + #去初始化媒体缓冲区 + ret = media.buffer_deinit() + if ret: + print("media_buf_test, buffer_deinit failed") + return ret + + print("media_buf_test end") + return 0 + + +media_buf_test() +``` + +具体接口定义请参考 [meida](../../api/mpp/K230_CanMV_Media模块API手册.md) diff --git a/zh/example/media/mp4muxer.md b/zh/example/media/mp4muxer.md new file mode 100755 index 0000000..fe3e86c --- /dev/null +++ b/zh/example/media/mp4muxer.md @@ -0,0 +1,63 @@ +# venc - venc例程 + +本示例程序用于在 CanMV 开发板进行mp4 muxer的功能展示。 + +```python +from media.mp4format import * + +def canmv_mp4_muxer_test(): + width = 1280 + height = 720 + + # 实例化mp4 container + mp4_muxer = Mp4Container() + + mp4_cfg = Mp4CfgStr(mp4_muxer.MP4_CONFIG_TYPE_MUXER) + if mp4_cfg.type == mp4_muxer.MP4_CONFIG_TYPE_MUXER: + file_name = "/sdcard/app/tests/test.mp4" + mp4_cfg.SetMuxerCfg(file_name, mp4_muxer.MP4_CODEC_ID_H265, width, height, mp4_muxer.MP4_CODEC_ID_G711U) + + # 创建mp4 muxer + ret = mp4_muxer.Create(mp4_cfg) + if ret: + print("canmv_mp4_muxer_test, mp4 muxer Create failed.") + return -1 + + # 启动mp4 muxer + ret = mp4_muxer.Start() + if ret: + print("canmv_mp4_muxer_test, mp4 muxer Start failed.") + return -1 + + frame_count = 0 + + while True: + # 处理音视频数据,按MP4格式写入文件 + ret = mp4_muxer.Process() + if ret: + print("canmv_mp4_muxer_test, mp4 muxer Process failed.") + return -1 + + frame_count += 1 + print("frame_coutn = ", frame_count) + if frame_count >= 100: + break + + # 停止mp4 muxer + ret = mp4_muxer.Stop() + if ret: + print("canmv_mp4_muxer_test, mp4 muxer Stop failed.") + return -1 + + # 销毁mp4 muxer + ret = mp4_muxer.Destroy() + if ret: + print("canmv_mp4_muxer_test, mp4 muxer Destroy failed.") + return -1 + + return 0 + +canmv_mp4_muxer_test() +``` + +具体接口定义请参考 [VENC](../../api/mpp/K230_CanMV_MP4模块API手册.md) diff --git a/zh/example/media/player.md b/zh/example/media/player.md new file mode 100755 index 0000000..7df08d5 --- /dev/null +++ b/zh/example/media/player.md @@ -0,0 +1,32 @@ +# player - mp4文件播放器例程 + +本示例程序用于对 CanMV 开发板进行一个mp4文件播放器的功能展示。 + +```python +from media.player import * #导入播放器模块,用于播放mp4文件 + +start_play = False #播放结束flag +def player_event(event,data): + global start_play + if(event == K_PLAYER_EVENT_EOF): #播放结束标识 + start_play = False #设置播放结束标识 + +def play_mp4_test(filename): + global start_play + player=Player() #创建播放器对象 + player.load(filename) #加载mp4文件 + player.set_event_callback(player_event) #设置播放器事件回调 + player.start() #开始播放 + start_play = True + + #等待播放结束 + while(start_play): + time.sleep(0.1) + + player.stop() #停止播放 + print("play over") + +play_mp4_test("/sdcard/app/tests/test.mp4")#播放mp4文件 +``` + +具体接口定义请参考 [player](../../api/mpp/K230_CanMV_播放器模块API手册.md) diff --git a/zh/example/media/venc.md b/zh/example/media/venc.md new file mode 100755 index 0000000..4fc1b06 --- /dev/null +++ b/zh/example/media/venc.md @@ -0,0 +1,136 @@ +# venc - venc例程 + +本示例程序用于在 CanMV 开发板进行venc视频编码的功能展示。 + +```python +from media.vencoder import * +from media.camera import * +from media.media import * +from time import * +import time + +def canmv_venc_test(): + width = 1280 + height = 720 + venc_chn = VENC_CHN_ID_0 + + width = ALIGN_UP(width, 16) + # 初始化sensor + camera.sensor_init(CAM_DEV_ID_0, CAM_DEFAULT_SENSOR) + + # 设置camera 输出buffer + camera.set_outbufs(CAM_DEV_ID_0, CAM_CHN_ID_0, 6) + # 设置camera 输出buffer size + camera.set_outsize(CAM_DEV_ID_0, CAM_CHN_ID_0, width, height) + # 设置camera 输出格式 + camera.set_outfmt(CAM_DEV_ID_0, CAM_CHN_ID_0, PIXEL_FORMAT_YUV_SEMIPLANAR_420) + + # 实例化video encoder + encoder = Encoder() + # 设置video encoder 输出buffer + ret = encoder.SetOutBufs(venc_chn, 15, width, height) + if ret: + print("canmv_venc_test, encoder SetOutBufs failed.") + return -1 + + # 初始化设置的buffer + ret = media.buffer_init() + if ret: + print("canmv_venc_test, buffer_init failed.") + return ret + + chnAttr = ChnAttrStr(encoder.PAYLOAD_TYPE_H265, encoder.H265_PROFILE_MAIN, width, height) + streamData = StreamData() + + # 创建编码器 + ret = encoder.Create(venc_chn, chnAttr) + if ret < 0: + print("canmv_venc_test, vencoder create filed.") + return ret + + # 绑定camera和venc + media_source = media_device(CAMERA_MOD_ID, CAM_DEV_ID_0, CAM_CHN_ID_0) + media_sink = media_device(VIDEO_ENCODE_MOD_ID, VENC_DEV_ID, venc_chn) + ret = media.create_link(media_source, media_sink) + if ret: + print("cam_venc_test, create link with camera failed.") + return ret + + # 开始编码 + ret = encoder.Start(venc_chn) + if ret: + print("cam_venc_test, encoder start failed") + return ret + + # 启动camera + ret = camera.start_stream(CAM_DEV_ID_0) + if ret: + print("cam_venc_test, camera start failed") + return ret + + frame_count = 0 + if chnAttr.payload_type == encoder.PAYLOAD_TYPE_H265: + suffix = "265" + elif chnAttr.payload_type == encoder.PAYLOAD_TYPE_H264: + suffix = "264" + else: + suffix = "unkown" + print("cam_venc_test, venc payload_type unsupport") + return -1 + + out_file = f"/sdcard/app/tests/venc_chn_{venc_chn:02d}.{suffix}" + print("save stream to file: ", out_file) + + with open(out_file, "wb") as fo: + while True: + ret = encoder.GetStream(venc_chn, streamData) # 获取一帧码流 + if ret < 0: + print("cam_venc_test, venc get stream failed") + return ret + + for pack_idx in range(0, streamData.pack_cnt): + stream_data = uctypes.bytearray_at(streamData.data[pack_idx], streamData.data_size[pack_idx]) + fo.write(stream_data) # 码流写文件 + print("stream size: ", streamData.data_size[pack_idx], "stream type: ", streamData.stream_type[pack_idx]) + + ret = encoder.ReleaseStream(venc_chn, streamData) # 释放一帧码流 + if ret < 0: + print("cam_venc_test, venc release stream failed") + return ret + + frame_count += 1 + if frame_count >= 100: + break + + # 停止camera + camera.stop_stream(CAM_DEV_ID_0) + + # 销毁camera和venc的绑定 + ret = media.destroy_link(media_source, media_sink) + if ret: + print("cam_venc_test, venc destroy link with camera failed.") + return ret + + # 停止编码 + ret = encoder.Stop(venc_chn) + if ret < 0: + print("cam_venc_test, venc stop failed.") + return ret + + # 销毁编码器 + ret = encoder.Destroy(venc_chn) + if ret < 0: + print("cam_venc_test, venc destroy failed.") + return ret + + # 清理buffer + ret = media.buffer_deinit() + if ret: + print("cam_venc_test, media buffer deinit failed.") + return ret + + +canmv_venc_test() +``` + +具体接口定义请参考 [VENC](../../api/mpp/K230_CanMV_VENC模块API手册.md) diff --git "a/zh/template/K230_CanMV_XXX\346\250\241\345\235\227API\346\211\213\345\206\214_\346\250\241\346\235\277.md" "b/zh/template/K230_CanMV_XXX\346\250\241\345\235\227API\346\211\213\345\206\214_\346\250\241\346\235\277.md" deleted file mode 100644 index aded074..0000000 --- "a/zh/template/K230_CanMV_XXX\346\250\241\345\235\227API\346\211\213\345\206\214_\346\250\241\346\235\277.md" +++ /dev/null @@ -1,118 +0,0 @@ -# K230 CanMV xx 模块API手册 - -![cover](images/canaan-cover.png) - -版权所有©2023北京嘉楠捷思信息技术有限公司 - -
- -## 免责声明 - -您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)及其关联公司的商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的正确性、可靠性、完整性、适销性、符合特定目的和不侵权提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导参考。 - -由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。 - -## 商标声明 - -![logo](images/logo.png)、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。 - -**版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。** -非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。 - -
- -## 目录 - -[TOC] - -## 前言 - -### 概述 - -本文档主要介绍xxx。 - -### 读者对象 - -本文档(本指南)主要适用于以下人员: - -- 技术支持工程师 -- 软件开发工程师 - -### 缩略词定义 - -| 简称 | 说明 | -| ---- | ---- | -| XXX | xx | -| XXX | xx | - -### 修订记录 - -| 文档版本号 | 修改说明 | 修改者 | 日期 | -| ---------- | -------- | ---------- | ---------- | -| V1.0 | 初版 | 软件部 | 2023-03-10 | -| V1.1 | | | | -| V1.2 | | | | - -## 1. 概述 - -此文档介绍xxx等。 - -## 2. API描述 - -### kd_xxx_func - -【描述】 - -示例API - -【语法】 - -```python -kd_xxx_func(a) -``` - -【参数】 - -| 参数名称 | 描述 | 输入/输出 | -|-----------------|-------------------------------|-----------| -| a | 示例参数 | 输入 | - -【返回值】 - -| 返回值 | 描述 | -|---------|---------------------------------| -| 0 | 成功。 | -| 非 0 | 失败,其值为\[错误码\] | - -【注意】 -无 - -【举例】 - -无 - -【相关主题】 - -无 - -## 3. 数据结构描述 - -### k_xxx_type - -【说明】 - -示例数据结结构 - -【定义】 - -【注意事项】 - -无 - -【相关数据类型及接口】 - -## 4. 示例程序 - -### 例程1 - -### 例程2 diff --git "a/zh/01_software/K230_CanMV ramdisk\344\275\277\347\224\250\350\257\264\346\230\216.md" "b/zh/userguide/K230_CanMV ramdisk\344\275\277\347\224\250\350\257\264\346\230\216.md" similarity index 100% rename from "zh/01_software/K230_CanMV ramdisk\344\275\277\347\224\250\350\257\264\346\230\216.md" rename to "zh/userguide/K230_CanMV ramdisk\344\275\277\347\224\250\350\257\264\346\230\216.md" diff --git "a/zh/01_software/K230_CanMV_IDE\344\275\277\347\224\250\350\257\264\346\230\216.md" "b/zh/userguide/K230_CanMV_IDE\344\275\277\347\224\250\350\257\264\346\230\216.md" old mode 100644 new mode 100755 similarity index 87% rename from "zh/01_software/K230_CanMV_IDE\344\275\277\347\224\250\350\257\264\346\230\216.md" rename to "zh/userguide/K230_CanMV_IDE\344\275\277\347\224\250\350\257\264\346\230\216.md" index f26d997..9a7d749 --- "a/zh/01_software/K230_CanMV_IDE\344\275\277\347\224\250\350\257\264\346\230\216.md" +++ "b/zh/userguide/K230_CanMV_IDE\344\275\277\347\224\250\350\257\264\346\230\216.md" @@ -91,3 +91,11 @@ K230 使用的 CanMV IDE 与 K210 的一致,可以在[这里](https://github.c 第三个选项`保存文件到CanMV Cam`可以保存一个指定的文件到开发板。 ![Save](images/ide-5.png) + +### 2.4 在 IDE 中显示图像 + +openmv 提供了 image 类,对 image 对象调用 `compress_for_ide()` 方法可以将图像发送到 IDE 进行显示,如果图像来源是 camera 并且像素格式为 YUV420SP,会自动使用硬件编码器进行图像编码,此时会占用 VENC 模块的第4通道。 + +![IDE 显示图像](images/ide_image.png) + +由于 CanMV IDE 是基于2.9.2版本的OpenMV IDE,使用Qt5,性能较低,图像帧率只能达到20FPS左右,使用4.0以上版本的 OpenMV IDE 可以获得较高的帧率。 diff --git "a/zh/userguide/K230_CanMV_nncase_runtime_\344\275\277\347\224\250\350\257\264\346\230\216.md" "b/zh/userguide/K230_CanMV_nncase_runtime_\344\275\277\347\224\250\350\257\264\346\230\216.md" new file mode 100755 index 0000000..10d3c05 --- /dev/null +++ "b/zh/userguide/K230_CanMV_nncase_runtime_\344\275\277\347\224\250\350\257\264\346\230\216.md" @@ -0,0 +1,177 @@ +# K230 CanMV nncase_runtime 使用说明 + +![cover](images/canaan-cover.png) + +版权所有©2023北京嘉楠捷思信息技术有限公司 + +
+ +## 免责声明 + +您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)及其关联公司的商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的正确性、可靠性、完整性、适销性、符合特定目的和不侵权提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导参考。 + +由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。 + +## 商标声明 + +![logo](images/logo.png)、“嘉楠”和其他嘉楠商标均为北京嘉楠捷思信息技术有限公司及其关联公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。 + +**版权所有 © 2023北京嘉楠捷思信息技术有限公司。保留一切权利。** +非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。 + +
+ +## 目录 + +[toc] + +## 前言 + +### 概述 + +此文档介绍CanMV nncase_runtime模块,用于指导开发人员使用MicroPython调用KPU和AI2D模块。 + +### 读者对象 + +本文档(本指南)主要适用于以下人员: + +- 技术支持工程师 +- 软件开发工程师 + +### 缩略词定义 + +| 简称 | 说明 | +| ---- | ---- | +| | | + +### 修订记录 + +| 文档版本号 | 修改说明 | 修改者 | 日期 | +| ---------- | -------- | ------ | ---------- | +| V1.0 | 初版 | 杨浩琪 | 2023-11-21 | + +## 1. 概述 + +此文档介绍CanMV nncase_runtime模块如何使用。 + +## 2. 功能介绍 + +### 2.1. 导入库 + +```Python +import nncase_runtime as nn +import ulab.numpy as np +``` + +### 2.2. KPU初始化 + +初始化模型推理模块 + +```Python +kpu = nn.kpu() +``` + +### 2.3. AI2D初始化 + +初始化图像处理模块 + +```Python +ai2d = nn.ai2d() +``` + +### 2.4. 读取模型 + +读取模型有两种方式,一种是通过文件路径,一种是通过二进制数据。 + +```Python +# 文件路径 +model = nn.load_model('test.kmodel') + +# 二进制数据 +with open("test.kmodel", "rb") as f: + data = f.read() + kpu.load_kmodel(data) +``` + +### 2.5. 单独使用KPU进行推理 + +#### 2.5.1. 设置模型输入 + +开始模型推理前,需要设置对应的模型输入数据 + +```Python +data = np.zeros((1,3,320,320),dtype=np.uint8) +kpu_input = nn.from_numpy(data) +kpu.set_input_tensor(0, kpu_input) + +# 模型存在多个输入 +kpu.set_input_tensor(1, kpu_input_1) +kpu.set_input_tensor(2, kpu_input_2) +``` + +#### 2.5.2. 执行推理并获取推理结果 + +```Python +kpu.run() + +result = kpu.get_output_tensor(i) # 返回第i个输出tensor +data = result.to_numpy() # 将输出tensor转换为numpy对象 +``` + +### 2.6. 使用AI2D+KPU进行推理 + +这里使用AI2D对图像进行预处理,然后使用KPU进行推理。如果使用摄像头等输入设备,请参考[AI Demo示例说明](../example/K230_CanMV_AI_Demo示例说明.md#14-nncase使用ai2d) + +#### 2.6.1. 配置AI2D参数 + +AI2D功能有:`crop`,`shift`,`pad`,`resize`,`affine`。可以根据实际需求配置对应的参数,不使用的功能不需要配置。 +各个场景的不同用法请参考[AI demo](../example/K230_CanMV_AI_Demo示例说明.md)中第三章<<三、AI Demo多模型示例解析>>。 + +```Python +# 基础配置: 输入、输出layout,输入、输出dtype +ai2d.set_dtype(nncase_runtime.ai2d_format.NCHW_FMT, + nncase_runtime.ai2d_format.NCHW_FMT, + np.uint8, np.uint8) + +# 功能配置,以pad和resize为例 +ai2d.set_pad_param(True, [0,0,0,0,1,1,2,2], 0, [127,127,127]) +ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) + +# 执行配置,需要配置输入、输出shape +ai2d_builder = ai2d.build([1,3,224,224], [1,3,256,256]) +``` + +#### 2.6.2. 串联使用AI2D和KPU + +```Python +data = np.zeros((1,3,224,224),dtype=np.uint8) +ai2d_input = nn.from_numpy(data) + +# 获取KPU的输入tensor +kpu_input = kpu.get_input_tensor(0) + +# 将KPU的输入tensor设置为ai2d的输出 +ai2d_builder.run(ai2d_input, kpu_input) +kpu.run() + +# 获取KPU的输出tensor +result = kpu.get_output_tensor(i) # 返回第i个输出tensor +data = result.to_numpy() # 将输出tensor转换为numpy对象 +``` + +### 2.7. 释放内存 + +```Python +del kpu +del ai2d +del ai2d_builder + +# tensor = nn.from_numpy() +del tensor + +# input_tensor = kpu.get_input_tensor(i) +del input_tensor + +# output_tensor = kpu.get_output_tensor(i) +del output_tensor +``` diff --git "a/zh/01_software/K230_CanMV\344\275\277\347\224\250\350\257\264\346\230\216.md" "b/zh/userguide/K230_CanMV\344\275\277\347\224\250\350\257\264\346\230\216.md" old mode 100644 new mode 100755 similarity index 100% rename from "zh/01_software/K230_CanMV\344\275\277\347\224\250\350\257\264\346\230\216.md" rename to "zh/userguide/K230_CanMV\344\275\277\347\224\250\350\257\264\346\230\216.md" diff --git a/zh/userguide/images/balena-Etcher-finish.jpg b/zh/userguide/images/balena-Etcher-finish.jpg new file mode 100755 index 0000000000000000000000000000000000000000..8fbb39e329c7ca6ca20fc26e526a15a798a5a809 GIT binary patch literal 73170 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 literal 0 HcmV?d00001 diff --git a/zh/userguide/images/balena-Etcher-flash-from-file.jpg b/zh/userguide/images/balena-Etcher-flash-from-file.jpg new file mode 100755 index 0000000000000000000000000000000000000000..eab917e2da1409311d154193c4e08e1dc2976e34 GIT binary patch literal 156630 zcmeFYXH-*Nv@RS)MNx_(y-8671O(|-iXb&el@g-Tq((~UML|H6-a7(@P=rYDM0%56 zB81*T=z)Y5%FX+pbH=#e_v<^~8RP!CJNdK5UVCP)m9^HM^Ld_m`S)@GK%=Rqp$52e z1pv50`T#D`02NZ}e|G(2W7lbsxQ<{tv-hpcHwxXtlzuCYic_%6p!4zyn{nR^I?x)e#xt7TUwD;vkCuEX=_Iy z`NB?e^UAgVhqG6&{NoMDUkcKFx4QsRo7CebISnQGjXPwwu3RMpT)Tev#ywh2a*_YWqpWB8Q|WIhY;S85Q!8D6YRHE%*1~kQH9E~jBe1>^FU`t3 zAyXqkEAbBt6ib-~!TC`56m>rI9$IRNP@i{nn&o3c*V^>D%~Gl6q`ZY=rwV)Ie5!zb zwq|APPA~h+(UwEj)z#;7j=-bg%DI_cE9W)Ux~PXAf^TavIhP;m_p*)G5>;H7=jPaJ z4{dk)nLgImCJ9bFt*cK1P5hlAF3Glx_-2$~ea0QNnIzDc9{wG}4=rWu zmjHX0nno)Lusy`7vvkt^x^rCihS4gx(Q${z5UcW%G(A4soVH#Le} zTRC}{G%ByyDX1AQLfT!&PQ?!vig`6E`)qy||NZ56C*ZDbg(&N-YS6uEx3)ah1d>8j9CnR0Av z(Ev;Q->>adYK}|X0|rcHIcb3tuU%sIhiGIM)ULfUo8c)i9<~>Aue#gyJOP3a5^i1x&|ct#Q6#4@J%xSRIsAsv>0DG_)S6 zWX$;7Hu~G}II1+WCXFjRT}tJ><>I?1eI{j%{L>=*IHuLll*d2+TEzFV{SJ%P zRNJRv@to<)r8@SZ9~>p*&4G+m1ecWVbnIwAS$=!5<=$J(mjH#nwC?9}nn*#oLA<@* zSTy}~jDHdV^L|_W4HTOrEAz)Nw)!mhzS~_(q&`IKN!5HX?(Kg+2Bm)Yesb zYqGAGHKMoN47yHFYc@H}n)J?qQullDtn+woC{sXEsen$S{j2c5^;|#3SidpGDq?Ko zSJIw6vB-Xq!K_%h+(`);)V0kEe36`9{?5cWVS)#lr!!b6N(}f>hjV;2o-g$9;o8VzdwrFS;0iX9DZ2#R6My#7i`yue<=dA(<#{1lk+k%^wD@VcFQKb~pPD7g z<(Lb996r=99Tgkk)3tJ5DV7^ccs+Le&+nzEO?8j?FpaK#G6*wFFsRIi*gB@ zT0zmqhkdW5Rdt$K@V|cOI=$!?5zwx~cqR%YR#|hspD}3Ej%#~iYG%8c&Pu6TezlP; znLm`m@sF0fXlRA~&)NC`p3~Qkk^W7tDcZrM-9H#NES#A&d}p#;t`yTbF?8?fmdRhO z<)JyMKzXdy)AG8Cevf)Ut~cP!8lQD#B((Z-g_O~gPOn`ym@3uq!{)B_3|Gme?w8rG z8h+nwE6&oAF z58R<@vzz!WpqZJNed^qOvoLwp!T~-J0>tro^U|n6S!|J)2W;>L_|+qpA5l>5=N=n# zV{K$rWQF9(-yOfBlq~0+qI|0X*h1X8Z`XH;&k+8s=KuigG2n_O0HFU7aQ{2t`u~B( z)u|q{O0Ja9@J`;;-lX6Q;SLrasbqsk-a5^iFTU0-FS|HIaDmzdt2IBL-SI(wdnoqV z*0s_gwO%vH9q=mdzBDC+ss)>np)qMF-NfOel_sWhg z@Nm;>mBr?c(DpXIhUhg3(%f~aK^N89jKe&KU)-xvoHGt8cfJG!-+T1wpNTHQ-YE*^ zv(gx4xNSDp+`<|C;I%K*i*vml2FHu=6INm!Br;eH@2ag(%*LojSoPI(iEU_mdpRoq zI_G~AY1yNN4lTN`!9ml__$oQeY+?{W#Q^#ZQ~h*>BAM--$7-RghlxF_Mp7DW$Z}ia zlkNT#UbtHb{%tZ(DGw|e`_4z_NEQ8Ng-ds>!DC}54%GP~w)RO=l>@{qLUdJY$kNR= zIoVnl660t-Wj4c5(7ol*%H0t^3G+!a8hvrE;;t$VztBy$`^7cF#i6(Q#(lG;l~;~b z%>&M*ShM|%PdqZKl8FObZl~XUmB^ptVYUwd*98WFW)v<3_0^HObB^LKvL)OJkiL74 z$g{Z^t(;Q31e9~lsTcxgb`Y@WS)FxpF>8GZz^Z2jZOUj0GJ!d<=u5y-ArU)#V!M81 zrNM)(WKqZm(=e9EU-!R@bv5!;L9>k%9FE)lJ<;d`#rvP;c-GrOecU0}9pBojAL^~b>oflySc%*hMaCilf=nvUPfNH|ahU1-#qO6dW( z1RNucT*((h@%85vXA0~nNlXrPE^83$F+>^hq+|0t_a&h7wB*a%KuOE(AcoxS(9TQ1 zR)7rjoE@%Jg573Cl6tB>Eh*xZA!b=;&pW_~LkpLHqo6k-t!MXxYLHYIsjC(5oV}`t zp+2&HIv>0hSx$lAA(-OSQO#td`p^|jAtC6^O3<+adrHrl1eKK0w$jD})MDuItU|)k zDag_Vq4o1YCOC>15Rhe=V^BK5T5=kgBIyz6UwHkl}rVA$Kz$G z!POR58ye>@@X;ykHknKd_u?c5-w+tsM`d@Re!JcId}wcKXq1YYNSR4B2nX5`14=Wl zR(NNI3yq=B@Pu9qvKEtr27_R{6o>lALG$+$kYdMa(%}gf>vYi2)Ixn`;^F!S*h=s{ zy9Z^(ZyxwdH{_bcgVZvb&8UzQ7S!30GpFU6OMqiBh8MnvC>dMhxWRB99?c3oLzqCe z4$gHNrOo9o0T&!wG$;K<<2YpEHU_hX#$30KkftWrRp~x0rk3oTTAq`|TnHf*x3GK1 zGUptMLxF6*lR33^z*IZ19ohKt@)#E1tcx*}7z}5GXn~^~H5H{LGI*gW>ed=^Rv<_{! z1k|)7vKPs=7m?z9c_bg!dDCDT`(^K}}Xw~0dS`tY-9 zpUmd)Eg-8;p&0b|u}62;C7_!x;K{Or%siS}HY3MQQSyTtBI-CMnrdlYaQS+WhXR`- z`c>D$*d^etk0GuMf*Xg!HlWRV57>WE*P5L6JRmskZ0ZHRwi}DqbCxpmIP^tQ9H}$5 zOSh<2=$@eH&)aJkj~hZ#?F_~aKhxG;$RAt+3XBxNE_29veAD4aD1d*dCY@5w*AZcV zSb}fcLTCUZ&)%YzjyW}{=5mC*a(|AhW>6o z4Z^3A4f8?B3%o|qJug?H-KksN=Uv9 zXM71*&;8UU9!d<9lI%)=Bd)X?z(%Lmo$$T^F47*w?h3$9xM`?jm4MkcTp7t>UM!@( ze55F7^Q0lVtPB(oNC;%wukg37u=wmBT#6t36;G1P1d*K8Q0OB<#qQ_RhblVFaTqg927vuowG zeA2+)QK{W4zi~PQU$&OzbDH@*7AZ@zP+Zw(T=d61cJ5r+U3$3|>v=IZ>Pi=6c;P*z zlXf)ax2aiJ-yhEq>WBe9w$!G^Uxx-P&H-~?H&!F!XJ!QU`dxTwgud}oN_|CtgQK<{ z2m90C1VUJ69Q)BdJUH!&u3-*IArJW-0=JK$)+zrpol zdC@dG8Pz%hqVW>DQR_))VZz(?hySNMD&c|V+EM}eUiVe*k(Z-MP!OW6Nw z=>N{q|6ND_AGXMwhQUifkV{1nK7SBN$a+LyF4;p0bW4sl1m(x@6h!%+?`C zZ2li&^&wd-XWBUaJa@VwWL&AN?Al#ibYIw2&MY8snx?J9!j)za4&S~R5>4l($Wedd zKzAwISJ*2>) z%monLwI9;qKNDxzk& zrSGPxQ8$f(&yp~DYz;4Q(YHNicCwt%y1n3w^n-7k)Q@jahXm~(LdWp+o8YOML=53t zv41L+Ut+ilTkR}9j2m>~8xPC>#=tct?Tr<)JIaQcU+?3%D({Q9Qa0|e?PHw_k1 zA+5)YvKJyiSWq+qK5=k<_YWc(Dr2$g?lVs)yFUhgNcH{AmEP& zgrIJEU@jP~)Vpv}zbkMC0UjZTkDc-A-TiVe63gbui$>S5goYr$@%yg|UCj1ZcPI5V zsX}zbh8+>earx=Rw5E%;(^FRABbCKkG?|=Jh0iftvqCG@XFk$h&eW4O=+^IqO8_|< zb`j;qYRay(5AuhA>J(+tTHkOh|v;;o1&L!(c?Rxr!gWcy5UxRQy zEwA>bMmK%hsJ|h|mZV%naEQK=+7Ya;d|*zdv?Rfas1K#X$l599te>*E?%DOX__UuL zbq78@_RVrBec}Dj!k?JS6I0*$EGMUDvwIQj2AaD#mDXqL>EM+}z$-hBj{-uKzUAoL6t+8(}ogamVd9j>P)RJ&&fQLxBaHY3QJ z`B~1*M&GMKH=O`?3<|%O1vFb?Jf!~h_3z;4>^ABQvjt|*g*q+p)E&C7&v1yY_D@_pbEjZgkM_^n-AA285l48@K5UU z6ZU4-zfsQj%!sUWFHksSf%eR?^W->4Hw%;%WEj9`6XbFBV}~wC@eo(W21Ztb z0E)Y6|238EKUVg+1h`-9tesaA=VCv<&E)+uf3beBNu1x?^f+|FQfY)v8Qhvb?wwT- zInM_+qjr2%7TQQp{ahSGFBcv2dmn@YbH;XV7XNc7IX*PkHG^i)1Eaqa3{ipKm%LFs z(F_@R9F*CG!EdwWbXNE5T!S0tIoQ@cTG(6}kx9p&XI-wV->&_*b8vv#rIPGBwr(6c zvE0=f+rZbKDlZs2dtAe!VAh;upqFf*z-@_ywtE?Y;I4DswIRsh+S+F8iS7KcdSAkx zh2P>3(2zoCpm8X(@WjaAOke`*bCDW#o;Jt*vm`P=8aXtzP4NBrD%>nb++v(Pk5Wmv z>kw>{NzEvbQBRzh#QSeIzq;1`_$|5vmGb+;JhegTz^gwC#|na7-kNN!-lKulegZ>y z$Fa48&$N;ow{yLUa_5^b0W7hQ{=oZ(r|)uap+M?2{9FGV-4iO0PV!>|GN5Pj&*N{+ zWUNIi9Xg}-2v=V!%KL!J(u7x!aw0Xr;9nfCe<25?b~_fo1MX0u^#E5BNzfqx!1o+L z@!xJJiK})Tu0{0r)~8Lh)~8ksdVNrxDK&ePr&Buq81+!~-rJj65;b7uUBkD=^X5XZ z>Qd*jKT{)WnG2@Q{u!LM##>)7Uqm+6)KK`k34Wt8HF@Oyh0^c!4?k!77u}J;Z{Oba z^$hF&LG^|9p8ZDITQ$(obx)lx-QmI&rmTE&Nu_1Rs*Y-rxV#&2S^mzwoQIZ5{j3%{ ze9-+`@@o^hRJ&B+g?cMK7EYVD%ngLuEwSwl;kKvDjp6iv<)TMyWS8ayTFElBonx5A z>Lm`WuQ8}h(b{oYlxC<#3c}1o?W-0PQXZy!PxpOc6n$C9n-Rq}$TlO(O3Z?)20gb;Zo8kVr z`|8B&maB_exJSm_+jm57?TGg1g)zM{e8u3G(zX&;5Wz{uKeq0EJE7l!2Xfu;Td7Q# zBx_z@60|^nd(|H5!?)M+&XnCY`A5fzprO9nj~}nFqTW0|jt})82>Ux9qV?YR ze!gT`{lrp1P1o+>PE9Cw=UF;J<0sc2GANH!JhVxkhHw`f}Xp>N8{|FW0k^;+ht z#<&E`$K6SDCfA2N*G#FW*T6S8TCK38zXrdCw)Q-Gmdcj@(l*LF|Dm)>7Q?;2Q%@kl zee`OX7Kuem8tCDc0!NWjv*k(u_nN93k#Z9XB5%D|mdIXB%i)I)jjFFCOMx}wS&_6^ z+Qvf*Ql&Yp$RE*~hO2a&`Ft4+rFDte{?}D2Ua;rR7P{qS_?<`GGSQD{;`_DbHW-|m zhcpka{k;S{wyyE&@=-Ns)^L7P-lvc@(s^z6u7kGb;*-zyFik)Aj#tHaT}++aD-D}R zYU70m+x#$oK3=knALk*pf4~cN)3UGKQvZ}aBM*WIHt(xLQvNi@TZs&KPUiKN?KH<# zK*MCit;3*oiRxFIzI}x_tH#_-Q_26~a`Vl#c)FVz=*Gr@7Wi`wz=j8NdglV2ejU&3 zHP0A=>p%UpAm=xE-U zA~qE7Dvd=*m$tp`u$GV&cTG}b1SfSf>h)^r``!nZ)z(f&Rsa5h-4=flo?|bTJNbc^ z&6dOp0IM^^9Rp&zhBCXl{gUD@Sp6Suhzi+tHfMSr_VXuDSfDjxE2FkyalH0I+|g3A zy;rf>bRH`FH{4p)_SWXW=g(#t>A(6O+8wJd0ndjC}o2`XKxkC<6vdleGH-NYi~FVxU-S;-#pVj z=ZAF{caom9d=q)3)4yBc<&=>~<zG`G?HB$p=>BOlEWif695g zT}o4$sx{M=Hj--Ut4vjPng<#}QITaTHurK`43ngPpj#)CT9Qhu%DAc3U+?4{$$Lx| z3*_4VoQQfbc(JE~ohgZ+B>uc-ZBhgvzd zZxQ;QuXl{%e5;~u9^3ON{q6M>KYb?}#{D5wZahm|h7@{*6pn$!Wyn6X_qfEqJk2d! z@n8d4%KPGRK8`;~lRjOk)Xd4L8KMLm+zoq}PJ3XN5_4w88 zp*Gp#{2U2|#nt}U!%uY)O}E*Uqb;&WRIg+>H(r)Z1LWx6%-KQeNu zHq7!jb*LjkoeQQtK#RrS&{OL+5_^&|kJVqWv_F2KUF5avD(9vAoB0&w$u`*~H*#Zr z#)PF8F@8VbUR}nF;5FZ3ril3BWYO{oXk6n~OmjDTHn(nhwObKxaj)>phzKvzaWC~wLkYiITe zQOq9!Jta_YF5(VNcJd(46ben8OMzqxU-bo7^o{vd+VD+ax8d9LzQRDZM~yP?Gx*H5 zH$3Ep4eGJCTa2W?;rV8#ULC3DJ)HY17>j{lP`+tG;%#zLlKk&s!%4Xp3%H=cf6T6W zwcjAAZmfH#@RWJ=rsP>vpy@af&zdijom0gbJz+G9%5FfJb@biHn9d#$Q&0fefxS)c z{F~=n#VQD&*vNCZg^e<+YtI$ee=}?onongvsLGI@bqmsD z(GN{V#vO-1eq#IoFL>Z;*^|bGW0}p>bEEeE!UgW~9mJ53g)NDR6d1n z@NQlVg^OSBISa(B{)|!=1PU`Keyu}ot(^j^_prVJO4kPCW;GuZ6gk@MwB1^K_D=5- zgEX^as$V?kpdxW?pDJJ9CBWDDuxvdCj&wSKlzr;ji(88_eiFlTF#A2k4=Fo_Gr~7XM}E+qTU_Rp-X_tCRC=;(>+k;;HI2aio!fY_3F>&bBc8+ z3hWMKhyev`EHi>gh?4h_;$intJqgAEA}YsdypjDSb}^)sQ~-xlKq=-70H3?BgVq?; z`!<&wDY0kL%@i>qLB}kLHHuzPd7%`oHx>PjaCzv@&k3``_Hf%4kTk)taESGyEsI1f zO3b-@KA8>NeR*g8ct8DvpWIUY$=R;9n>G+nw^*2O*R>&y#kdoSz;gbKAnj*oUbjiJ z>@u%DGWCbs^!C#Slw#aUB(ltJLU7?Ch6v7x^!2~^PFz-Gb%L$=*S^)1f`pgMd?!9_ zI3Bzh;#kWCS#pdVV236Ns_! z6>D0IDsueL#NYo8yNG@-MWx@;m%|Y;Uv?$*cy50v#h;)Y;)6T_dS(f`e77a>e{-gm z%sJ!u=D=D>Nkz|=?@^swMS)zW-re2cJr2c;A(+5X&A5WMj(3GS(qC?eIfn|VXZ|n6 zYW!NJ_;@JhkD^dDxs4$cJ{!THYdpx31H%v$?z6hfx!ZPhv2`iLLR^b8B)rJEa;9tJ z)<3WfBpv$#{`qBTNg(|9A+zmBVn{5subP*uUNa1dUOlPVS zW#6#~cS4pY{t_^?E(h-6TR4VfPAJUD#f;%S4F-v4L)nl`yBLNM4hJL^;>Uv=4EXnf z$#N)1W8vZ`_Efp}XT$omT(o6H-}H#U#n+eIZT-A{FcTms5uGS7tq18ZjUsL7XkM+d1tJ)PhFdTmtDkE`BmdoQ-6ZMLbCF~FAhhK9aQ^ZRIT~x??0->cG(gf1jPK|is6QY|Y##f5 z;-RgV9AFLELL(M8uEhrWR3Jg3;Qn1j#`u=j1%>jrLFumZ5$(?bjC3{sGigw5Zym8* zO?2Fz2V}p&Vk-q(bWj#(7u20_S5tDX@59?b#z(I3C#Jm6k`j6n`|Uozp}mHFk<`!5 zUdBT)7mY6KYFwAGMF~$_UT@?`Cr0d2ROm+NOF|(c(pT%W#14-N<%-3!R5qCn zzZsM_zuv!4Sw@#owSkM?eV(k5U~q85E<|VfW%xdywv68o;BnH`Wy#HKvwXKx&b1_a zJ43dx#$~Oa+P&Fb%oruVnW6P0sdPBauDnG{t1!1Fg}t7vbKl#sXxDOo`nh+UsF?Lm z(%ailbc#65J@v}qacUI5uVxVHoT}2|ISVLtn3dJmS9B`1eZn4m9gi@msdxa5?YiX@ ztv(W)S`q(9Z=qb@@QYq7C~>|>$N5RcSa0d6?u>oU-V-3g$z7_~;5hkdM0LC9l;)bd zS3$vJqJH(?$(Kd}9dOkL@Ur!?^B|OGAM*Dk2 z_0fxk_YDv4SkZ7DAIiO%n+P6C4_jYXUA0=U8%NE|1=MUAn*iJ2Oaj-z@ zd4e_Abp_(eJ~i}=AMk>p3K)6G7^_Gp3h&F@O)pGf{1 zy(tOxhbD5m5huN{m&~ zV-BWm!(N8nFi5}kl{cosG-j-_(yBH<=I2A&JCtkB9_2AW-POmpFi$1oLwl_focr`E z4B(HcpR;^`?lrWM{|1S1k_R`uhyP~nj_Cogd|dHv_#$ryQnyE?uK93)?K7_wXFXb; zQdny&Q15v?)vFDpa@6ICo9=bwAO8y$06x1XUWdB`JP@?gdFmCw; zJ^7d>OfM3}MX<5B(^?$)v4g@ZBu8t~G=9fAg|iNK1I-?88DUQy9ktzp0wf_v}doGVbN(OW0C`(L2arsPMTpvBndR|+Ki3HQZ0GLqnnIIl{q~US?%}a61 zzU$|9gA;T>RcX9+O26Hl%hA;-MmK!kii;t=X9G5RQc}+s*FGKnBdj~Ds}2ov9NPk* zi&m&Yl*MNC#rVIzy!M_&m09we{$m~m1%JY({F`|BLAxY~7URkvfA^i{G0vXT4}$*7 zhWglR>@(;$!~c$V1LB=3s5Kb{5^O*xk&cPy7mZXrD11>|@yR`)=T+En~*40Stm z^Z)o&x;@slrTKVFf?qP*XIf3pej&4LX`}Sk=XC_Z>}fdgE=$MP+2p`pai13nqAKiV zu34#ER?+6EON{c|+}0ava|kaXZ(Pe#{~B?)-)DlKE@uL*-O+Iw?F6rEmWdADIl5@@ydxb(cTSxTV} zleo^WzZyN%$Rc^&S_U$C7_~C-3Eftaz3<9XM4Vdst#$;t>&x5zzP83>utZna^*Ymi ze*JpYpK#uBlw$I%_esFoS1v~~a_XC^qr2DCRk?1`6xu}4^{VP0JorK@5dY`T%h`?6 z!#7U55$R8NC_L;kRJhhfX4qt(Y$%*(fkpbNM3ae0jO%%4+9T9)upWA??E3=Hd>CrP z=q1QNi+{COyC&5><-po=mZKw=u|}<{XX;7+l*dt%cT{JRe?%Uj!WvJ!>);J(Kxd&@ z1clb}zbF*3^jrAe=bbX!d#Im2ccr$~OWdi9+CIlVAf;~w=3HHa7O{z!CpsL_+d1-9 z2CvB$!Ncsgb`NVdcE-5x(~th1^!yX&HG@LcnsBu%-JfyciS}EuxE^#1YALO!a_^RL zR+`0iZm5rgX)1thl&sT)1E$5cwe+yzu6L!4ZSblvN!}^z zdyJcY^d5b!x}E2bIsMC550$>&&rLyqAMyRff7^c8%HzG6m8C~hugT2ni{BcwWpE&? z4*w__;4w1=`w}6&C1)qX(du#6euso#;h#{RFKZLnl$F3N*_wMTJlCiLTz;&tDRXIop)z6ds~d8c&`zjJE*8Bqt#G^36SWNu= z8EEi5Ke4wX9YyX-G6m)@oN$%2X8UXDg%f-0aqK4aib1X5)u!={^^W!F!=9DqG;Er$ zq;a?>>?_MGa~8`ueJNRj13v6tDFvRtmrq|jLWfV;<~qIWqt`acv$_-0;8_w$o{*`E zxVaO&j6zlBa0v}-1gd?mc;Fdj?Tzj?{S#d?_y%iKDfsq-pPgZmz+(Ar*7QuHLU|Q; zR(qz-T=ftrne5N6w*defX2tbjNxP&$V91?K_t3Pp8O$~&8~KfO~^ zTrPKPR7nBNq%@OF&|YeV_4~p{X}?y(Y5ZF~YD^RE!z*q2((`q+Cp+U<^IiJCa-NT@ z27EcHY6wqb2DQu?$!A=+t8KZg*@k^UCyNZbux4pEeem&0;)!N7ERer1`g-dV#Y5rv zsRA9}plm^jm2K^HXHFJ_T7vYiFnpgmEw2_-2I&CQm$oyO4m8N9R1J<9la}seu;;r~ zOn-BXncu=dO!x6vTaJ~gbCmc5=RLDbm_y~R@!sLWHm8TDm*rPJ_CNu0LvSJWcb8JY zENdcF<#)2m?%Xt0zYt~J&q*lVUr?R{9^#x1pyVEaOy;N2N@Rh-+lZ*91i{B0f+qAf zlg>3nhnW-`=QRwBPuF344YQ#K>L4I(nkMn3n*`}lzN?16nxySN?&MLPTAgqW_8PES#fqtq|#)$wV;JJ&yCeG+?bB<7o0n09Jo?!c98-a6w#ljdS-q`9McN}3V!Vuic+ena2uHW5%`nqmJ+MMZjO{`@nB6zcxnz=r-il4=cP zLpcz=v+Q#fR#)2Xki&~4c@Br%_I=`fS(%y=N}1Zkq|w4%BFL^5j`8zH%YX)gDK7zn z@Z4=fH*H~9MROqB4M~N3N}M;r8WA4zlr$pbp(PvtAzk#ZxC9*HkqnB3oG0iZ4m1XO z!HV{DVx7+-P{H8?we_0Yct_yN525S-;9w>`#R zW3@YeVzLv2M&Xe({s${k?4@!$wI%D{lEfZ37Lk=8W)aa;1-^DrS!B>5Nq%rfUDlWd zL=J7=ti_X%E2F!&g*#35qM9M$9{l@t%-Gxw91;3^VQb;g&oX5T>m?oDO+K_FlV#a5 zuNsh=(|AP84l*wp;|OC|s?AZ@iZPiW$&~+7F|+bP_lG^a5rwF>czYX@F@SV8SUfsy z)@eGM&+=FJ9H7^r*ACg(t2#$gL4ZZhDPFoHVb9e!6j8G3qU5HmX91QnBuOXt7`jX1 zD8SMsbvdmvgrqGVBk|-ZT89MH@runh?{8;*t1#%4QJb=wY za?)sjhPyUoHmUF1W6H?;jv);VVCv=}T}*4Te#U{tL6`u_&c;E}P>w zLgN6AHdt*5Vpt>if+-@_Wyw>G@Ue~vPIw9e6r7;1a;W({|kH|KdzyFpKu!LJ02msdcK&pu>sR?hxr#jrBO`q#!Fur*=cQ zO4dG?u}3_GZf>(#G|Lpf&d1COm?AjK@~0lvXJNE_zKwsiXv5R1W{8*Jc7qSmJ||E|~`^#}F@^J!|w9LpvG zIoPePz#p+fQXJJG^D(|`pzKmr<`m^WQ#MHphCz-5KFtHC^_n5b_+8|Gh?}01q}$|8 zrI!Ht^TC|uU6m2M50b5(djo@BI&7-;eU|$m3p%Fz+#Y3Nb-S`V0dgUY^&ti@kG%;d zVKCjb7Y}xBkCBu;;L1X2IR^4}@8Ag8Y@{H1{LIg{Q4WV&QZPlH?C!*DZ)eC;Vcg%> z{=1DTuFS4UZ%)cojSZo(ON)E{OyT}jyKE36TsM3I3vCFHabmsQzjOp4NvC?x6%Z!F zmw-2z)Dt8ZvG`NVP;$okWbcqB-yG)SbDxuD=1V~3?!mE4^4ocVA`F&!d5=-cLE-t8MbB}pkM>&b zBp{19>Ms<|0)!mgq4f=oT*txvQ(lY5a(MTPj%>_ z5SY^}h+6*EQvb8g(VBZYLDlP!+;!jVVTNCABz?{Y)WN}rrdjG8=;pdR;j_h+f{#?l zUQ>Z_`COa{W8d8OHh=Y<7#v6e>6K0*@V%9UU1rzz%9zBxi!_dfzV z7xMd^JSd{w5v4C$fen<|M%~YM38=s;7PH9nJC(`{HU|XHf?~RN0?j^nGT~~w#$_*P zNVN>(XZ|zG%b%OtC5ZL`kZ{x4 zJ53_x$J5Tx3;XUsUP=Jqjq&vVv2wcqA7y(LH|TUSjklX64jY^<0kcIxG|dr_Yqc4p z=uu4V;Knxrij(^}uf;C`YA}X+&Oolrb4`LgwOqi)x|=ddeY(>*m3i|>{%gg>7#g*L z7(!`xWXDPLWHD00r`ca9T>@ZbP|Okv+;4#!)Lkf-m$>)6%@dD3KH04NXWu66SwdUj zTT~1~wG-$0bw~Mc=$6TK^9xtYvi$4MRFry9uTtM7WC(@&Y`}qv+!Jufq2Vb;na(?O zyLSSGJ!1gW)(>Hwrp7SnUmu2SV}8OOr>;_x0PQw8@AMO*PYnvOy?qavy|oc^suKI8 z`6tf?)lS19)NKqA$G+Aa$o;!gtW0fY6ur{ z+UU7eFnxmdbl*nn#{RO3h31k~5q!FZrOA8E8Qq?Wu`p-rnYi^ zS(9cjUoCv2AdEE_IV@J_y!9aJMgwue6{PgW_vF2-?`iRW3XN&C5agJHGuL&fUw)jO zW=l-9(#^J0a{<(bm%!fU!R?-#fls>r$_@BUSdnzE2;8Sy&v;CJ&_(CtcR%>X}4;&egb_qzffnZVJlGdHi0zVu- zBdxJY+zwokR7Z2{gI4WOC2)|GpugKYW&^_NpgSauD2WpU;@nSuI|qVn55i=N#tv#u zK@b(&!P=*7yExLTRUUhe43{i1BdAk{;M#n?ojCiN`=7U@7-W?Ex}yrsA=w-BEgH`P zW|X9uZlZFk!8Z=JE1Fe&&N-y~&yL0}{^Aul&KDW7k(yE)q@uVBp_I0kFQ7lKW}h`V zmL4@2t-^ao8B&Cp*nx3hEG(NQaBWSFU3D$f+ayxf-!#So%+PuXh*%6j8raohZi)+^*+rfmodL~l{C9jkE-qSorI5_BIYq}O=Ll{8 zAgUHQFKgc{U((5Xn&tbS93bc(#Qk<7{O#r;o~+_~#&YPvx#YwLyiC9#Qrk81#Kt#> z7^G6PeL^JX#WI}1FYaQU@d~UH*e{9#C)6n)8htKUtp|`gN30IkD`03ye8k7b;;` z!YQ)ykZ_G78{AYG3fD&9W?5^Q9d15CLx~%T4h+Dg;f{#1%>#*~ zQ@|mhuTSGS4thcg-$3dl1$Ei2(D}BDwFOV+d9x#5ORp+c4)P_*48;ZF|6=bgquT7c zc2WA&jTR_gpm_1(4h34A;BGAtXwV|TrKJUmYj7zNf>WFXYjL;WAy70V!QFfEeBU1D zJ?}o_eCK?7|2aRNG4kt9a<8@KJ>_0&Uh|rP<~5}aIb+ysiGxAj_QA?w&@b<4%|Aqb zx=5I^n)>en-X=n9@SawKT879nD8KHu?1O!fIy%z-{X2dH(4y2elG36D;OpT!G3dJO zxRfb#k~8^Kov(+uMf14rjTk44GpCgyC?mZ!$ir=OaXPFm>R?w7n{qXB>4DXIBh>bs zZTK#TQ?~Bxia0`u@J3$Kq?{UoEhP?A9f$;zGuYo(vV)E!NqXo_+0OK zM$&%g1&Plk^T@r7z<0hkq1!Byo83fz{tW=PdvOCl=PsgSpR#aDwWye0^&l*W!_r-ywS?0pya| zt74Nf5m_T{&x#BG8S)>&{-ZwsrIC~+hoDtWQgSZjDxt^Xd@GcFJQL7bm<&26=v~i@ zNxxP>hTo0S^6IvU!zS^|Yv+anJ~#b|Sr=&z3+MX&1LV?{6N8roebbwn$8i&12=EP~ z7e3fQYo0q7|9}`_T-%&9S)R>+39s7EKfeIr%iI zHFJIvchtNirFyz0aqKV6Cz1XAe5LlB(>LkTy1wgNR7OFQ&jR721gmu@We!%T{G?=n zNE}J2m0skndo>HFlU99_btN&m9mxOdfBemglCGirq-)GKx;K766Xl7;Zf!`~%a4t0 z`AON;5|3zTCKURegG=Wx-?za`T1L8AGd&j?7N4FDwLLK03y1D=Ops#=o3ARjqCRN?Ii6IuG~mO#2P(wGP9I zH;&FPFOQz*>(^AmdbT*c?Wa%Voxa6ZpmW-1Eu3ABA25~TCl}7aO?$Bm;z47&XRk-> z`01bOwD^K?9(%#WnebpqrEimUJ$=+uOk?;$g!dt`GVX3SSZcU=M51UyaW>g-gnQ#^W3hIcrR9hM^C&1B``q=P~*H~^Y(|j3x;*w&? zpG!Yh9_6J}VnnUU_r!dAI7mn8Djigqxq-fF30w<$8rIhEg>W3w_MMZQqz;ANXC+7g z0MX6($zYxZ$dWd1@F+FU@N_EFtW%{uDfuS#rFfPcCTo}uDO_wDnTG`^O~~B><6h&D zUCa2r1A3W~5yhByO$j?BQz5Sj^&pQ`cqWubAK%GlaySWcv4mT8$~z}E zmUCe4ksD~IkRfwT{|;J6+o2{7tWK5%RJ?~Q=5(=7_skI7ncozfBQrb#Sd>kuVNxOr z7RDhJDq{hGffkzf@TUKi)G2UkH$aAVi~z<%O|4@MM@SDSJStK0{$8b~@YWNE-}Yki&kHl~ zKG^nvVS|3K#2=#AVnCbJk~Mx@^3qxFsBx_@{gcE= zKt-#66CnK<*yHf>`9$JCjzN|}Px0P{X59Xsq1YU<8;->xPZ{eo*?W;^dU)R~8B8YY zrTv26X2T9RfYV>(=!4j${cv3%ecbmfSx>2j=_CRKPAzXvVX6S^{R>Y(C2EKdMwicD z9-bLmWKZjk9vsI;A8}nl?(bE!jwp;@2EvHClBpY|l z4)Ye7fTp)^`}wT#sPD`g(k)=jc1(X`^0t&xc243PL;cpikNrER`rRBRLqdW_mY^Zn zZ<75^>|I)fQ$JdNm(pDV*@J|_R}+-4=Tt48eNo@*wnl3JM~z+GMENb6GT5<~_sPSH zycF}3rnU#+JaeA6ar<8;x4`aOtA1~79(q|+KD1;@2m5Glx2%|z%v&N~YUY~wOJotw z5D6_>06aMtB2gF1S>k^jB0)2#DrW_mf-9dZt$)oGSeiptED& zCI>*8ly7IqV7H4BZ-!g8L>iI7h%38C!cFEZNT~5 zrK~V$7YpuE@AcSCy09)SMd9~-{2@t9iN7RaahO5x_E`5G)DE3E<*erBAm`WJR(CJ zs_5NQa7aTsf74P)jzcBR_q@s9yt&zAL3#e@6XLP>4@^Z^-{eTw+7(b5e%{z`E;e{57FM;jJf@@fCE@Wrv46RXIGeQlZzcZU_aS zglQUNcoXW9{}45cb)#JFYLd%498~xQOrD$-&ljzHycPpz#qL9&wb^wbE7eAx#^~GK z?e^T1+HaihKB|;8EUtl$5DZK2EmQ&a^$EN%%fd2pV0pZng2Ts6!f*a?HK3!{ecw=Q z`Gau|GvH1RO-2`9^*rgIg`uTB^D!>?)Y&ck5IfhV74Wg)Bc!G)YZ_BYfANQC3x$ml z4@Cwo7t5=h?MTmGg%fJJYu~7T>4ue7YO*ICpS!WMGP@(haXuheYzj{x^Xl4+qPfB& zwyTCqSWb8GilodlSjUGi^`Rf<*GM(*cSr9bg09$M8`HxTzwR7VKxN$t<+PrsM`A}D z*dy`tqe``$cc-;@wO8pb%@&I^du9oBJ6Aa#d#o}$jyv$pX;^U* z<4rT8q`@O&E~VR~T%!!zsWdKdAJO`BmI|=(?_avhDuuZ~O1l{v>m_t;SKF}sjc=~` zYfG_&+#up=Wp>z1ocJrBq0t_l$Kl<%txAMmE7@mV6SA5U&VbshU96YqCiV~yDEukV z@4Y2jE7=1Y%&t{HUSSEP#)oit=S^~ofN=OR`)^-WV$_uufwKn%Xn;-N+BpZ>1zNP;~PLy{sk#EY3zr2Xe>_mA+i{e}BM>BdiH zdt5pu?o(x}T!U<6?daMFyG`qZ2FN)!;o8#Yv=eeHd*dkb;U!_o02(5qpXGJ`tx6=l zo4io24R_xl;+*d+fMHKjW}P4X=B}V`Vi#MyN#!R-DqghUdL4XueS-nYK@9{x9=C{OKKzoywQhq8DzZ8E87Qr{j?5t((D}-T#j*dODO!KM#Z*6K zyUdH{L3tr$TrqfzIgj7j^zdO1!}5#mI-fYo3rUd6Vy7=(q<(_?GeN4nW=!2`b{nW` zW-3j`gySXtsYPQtAGCWn{Gm4RelBaWJd9j~K_O10f*T^t^=<3U^sb)rc6bWet{K{jOpVpn^fE=u6r(@UPbcL(y{WrQ zGo4e}DTlT{c)@qE4~u?!P2-Z1S(P)&XE)umEiJCGx}5Ku)EOrCEbr>aw;4zerM zN!{NP3b{YRiSHNt64Bc6K&YvLyM4RK|hi;HS1(lv?05b88{-)SZMnvDVkqg+tm{q*jcp z&^N>Wj31s(-D&UrK{s>z$?D7FSU#)dObD{LYQ<~c(`!slh1jua>G%y2up$jiokQsM z5blzj75k)7H;ZiL`&Gu0B&u=3wEY89_ee-OyMpWY6d(M4#cEX2XmB&VO3`3+!^=!m zTi3$l-{!*jZ_|{f{HfGtyQ%q0HcS6E4DCZGz9@wC!LsiDS8Dfmm-s59O7_+@Sd8Pu zB4`p@Ovua2{o8&2ZAj)Z|C|3~5Ws_g>6{~9d;fHw(SKLwuzwrz(2{6pwux+46QdiP z1IAogr01|@|Gz9m^4PialI(2apLP86JpSb*|Iw@e@J9qg|HnT5fA6nyGJ{-u!1~qg zJlX}65g$R?D5Gwl>Wy)S5*kb-|{Rx3a>U+Rr<0Cla3RqsrI~*IyP#>kNG#CH0s> zytq`kn&1;4JE;LAUtPW7I$;;p!do~o${sc&4&j7-!SylS?oa3GCe1=H&Iz&yUaDv| z38L|l76;{@-$RgI4NnD`n_NfiKN0qjYI1W26W6VelU)yGoBNub95cw0x`3Yy1{3I4 zr=cT3u8YrZwMJW{OM2=OAc^wxr?uBY7x6pD4W#dsd={Og-_(e8?g5N7pRfIN7xO2eXxGt=AplsmRV zyiR|JD&H>(-Q1YLmYOSU7VYhKn7iZfe~45G!qN{6jtL2Jud|#sSkPQ@_629^Q*u&xs zA$U#k$WT@w{kNUGzZ9Ax3->OZ;&C_ebUl%Mn}z9T9#t7-=p$-du-7LQI^OEkdZiG}XO}rCHxf zv8ZU__di6Y06k;)ObB)Xs6N`Nf*T zY6~ZPHG%{n*qKrRtlI#gT$+slV9Aon5zQR|IA6Zzzm9fJmzxmjkM{jTG}<8bhiFG5 z;M#(-jndUi;UlQSsoY$Mu-L6wLqiL`6gbr5ZpF$vE`S&19GBfNe=X_kGQQ@F8kuMl zH#Kj~$w4v%k^CV7D-C`<*jyw$Gr7fyTVVvp7; z*;R!@R$fsFv$iu*Wn%+VfQgT4bW*;@;Jsi}E|s)bwXUd^9p0qnuYT72^! zXq`o;8fCs`hwg#N$A`yoL1d)5rV}>+ChuiuxqERK2XLO8`sHxuvp()&`jjdtG z@m21|i@!?I4M-Dwz9URpcEhxi^7`=PgJirf3q23?x}o8UZuL+YGh@4AfP?8O^I|TS zn=Tij?J`2^d*r_l%8$wyJkgmGn5XzgB%;*wy7d{Q+o?v=R$7l51bY-z3E{G6)69Tk zp2&S9r9+`bV(I^u6YCg3<_oQI>vRwgFP1}fS%+FX4T=5w>lb%tc3zwW^b-IJu9aY0 zoJ;ddVi9!n!p?)CbMyM)N(1y$z`w_BF#) z3|C&j9oMnMvYmQpt0mEeXOwiwmthx;AO`}XHHWWl9OoXZ@bj58%3PRESdz_StKFP_ zc)oZOId{Uje8TNvlK)!d>nVKgg|x|&1$sFP?*?bi?H>j>o%Gjkzw!J1hT>Q^NM&w~ z__Rx@M(|@)glQQ$;woL%jnK=WTvP(&hTE(JWX=xQ6-hrOdUN7%IPUMqvHhOcpWsR~ z{m+D&4tWnP2s*|v6?Z0k@Z?3MWYY=Ri4mwRFMy#j!8k({3(Bf(>2f)A+;uHSn;c19 zwaD#hbfTxY)S$^5SL65+Cnu2=_wE#j_5#cvVmxhN6^^fgs_JHZI8=Jpk1Z3fHl_O{ zu4c`10Qck0Rw4`G4YXI`Nm9yvV6D9FGB&du0&JG9?le$e!m?~f7bWGs)8&eOit|;l zG}+W=$Tuxayl{eSo(~XoRcK$!i_hboIH;DM?_B2zMb24RoMHA@MtD=%$>t*Harf1p zKkLQj3N&3OQX+#xeQh`ey6owK2xQI-@PC7zk`(!9^4h(j(*@KZfpxCqZTp4FtT!yJ zZUUKT`I58@y|025c{nTaMD?tSlVID$V`nTD)6=tIIuzdqHYX=TpHHuQbu~o+%@FR zq}ROc>6I3$+ige+F0) zK*2&QZDgUJh+c6y{kN#%AiUb+mAR)~%_;7+jaOEcyMA3A+T({Ur6J8JfrnxNe_!de z#A(9!A`-5&4)+Wz-XXVh=}<8Pu^X%$>Sj}*ov+$s)GTOb;H&Aimq>9&ZJ%D;sjjN6 zjf$?KrNR7&yKzhr^++T_0>$bw|Fn*p;c?0X}2k z6f$Zwl8-m}xpBBz|H};Bd^bh&>G2(2FQr4{+AK~-aIz$@(sj(Hikd%>s<~O-%-NZr zBx=@-nhMp8uOz*jO`(^f!kj+!VI}KhO(S++q$qhiSh-;N;~GuRE2KvE#CEjAuXjEN zx0UbI!C(!Z%loSV&)(B*ZG~iaYnV|`yxnKFRt*3|>qd0dPvFz~!K%k_n$#821Y_K| zsSai2YD~0O?>z4|zEs+xLFz~*J@rIlH3HTNCkdb-ynLkbwhM&%=6_O+E~qeOX%PR- zRbbREd4UKZs@LQ~*bJ!6VWaHon!Zo3hl+K4Y_^Tdo2Bg&?;db0-;TJ)7B=Ta#zTFQ zUypLotCbm0&kduphcQP;EK|UFc-v2!&Gv#_rwaDI#uBdu7nbZ@HbyWdipUAn8+162 zIC+`+I8aRwzM7x9DJUVfn~IE6wg$&(M<`GEhQf|9Y?F6c+sFuj{5)ys#^QScBd4NX zYg6{DzCw+vnN$+~#(N`=XdSe2s@5Q0>f^M^Tam-L<9~=+ZAAAlj{cKNgK)&tbZKaE^qro^q|6ZdHTu|g zG&706R;NaMAN2>ufrLVSp&;vn7Vf3ZM9FUP2PTSYT9~kj?rFKa!CAaiXB7#t7RJvq zFJ?cAgrra1NR3fiaY0piwf7*d>JmCurRy#iP7X2fM6gukraI7CpJl7}R(WH{vu!DD zz5FBj+`R)6lr8bkol4a~aSbY5`G|UD8*|3eoyeco-L=0~)D~HW2VGZ*tJ7$vH8rHL zLMbtL7FTn-1Gu%zv)IN_3#%WgmwMdBrw&4tsTXC?fefFoT--BwrhE?fAdsmMOMOGt zw_RxZ^y6>cdzp`|{d{)T+J3_oGg0^K>T7Bhgq+-d$bkd$jk;W1Kl`PPwdmEhS2N8c z(>$(ZKc^MZ*)cgqFJB3+I?C~?$S@nhefyrJdCVD?O8p*OdgAd>lSOafE;B>D^ebjh zYxyQdl_#-$u8CXsw0FH9snOQ(##=*|t8A-_9 zdY_vX-$7{lczyg{#lmtzszUW5fxOc(^L0UJO2B}mpz=?mrzNBRTZEVYEzkGAL9F@r zI1U((pr58cO~ikH8Q8fKXesIq@c#?(WGQ=h#DfkW-%6PsO`uNnQ5&_;_GWZjyy|Mc z-ApRQZ@GQ@cZ|p*4#;ScLuS3CtXsIE8N2HpV<|UwVYBv$3RB8hjfw7L^%?7G;roxg zZGb7vfhr?Lg324`HwSkY&P=dL=NK}j?rBP2r^@un@d09K{Rv2B2 znDXAm0qUV{=>&!R4s}3?L>qw+u|V46J$9J(WkP2r9rY7=xTEcx^Y(%RldO5tm&L)5 zH6`{lXxvri-x$XD@YS64WQAi_6oJ!JQ9STpct+~~?eO&P!RY@vJOyZ-1TtH|KM@HD z6B;i4&vdC;eJ0<$y_2cn);rxU#UxOU=gDtoQoqh8N0$`?3miQZlhOOo2+h`WvUZF2 z(*_q6>oZWp7aZ9t!k%Us(`5q(yKX9_)vF6Fww5`;5M81|AC}2kHy4WZkSe}?%-X#Z&1{};Pq0j>1zBs7W6w`%BtjPgtGu_x=`T%J`}zGT$SWToG5 zn&;5y-CD2==$iex6InkHCDKrAc<;90zf6?)Uly%X^6uHlzf4q(T=?nm9vT0Gp2b)O z{d_&0KJM@#ek`1a#aMn&d3~db2Q{gTWB?wqfBn(!RGwlwQm0z+`t~D8QCL{``^aRO zOWX5!8lCt)8;$U98hsz;`jbr*d)|PY7CDUyE_QOISl8*mE{JWX2z|GIyu|;C&x^BF zbMS!dHHQG~n5!ZLepH)T(3zjIa;Eh6YQ1NZW|SpP-DCh+ai#0F_ZQEU$#|lm;c&G@&89@;fL-s*{c`^%80-BQZE1ZIPzZ*a{s-T z`fmoSFHv>&2CJ|NGapa_8}Evy6sn<~64+vLh&L@Y8Aox~r&s__ObNUZ0aGXogiD@3pO&hhZ=_p3Ss-sO7crrX>R3&44b{d2U5rIT}3r1Gz*{OSDW zl+&@dVk|O;lX_|Bsnubiu~Q1gvWjQp4s!I|+=MD~z_HlQ$o3eehCp#6K%{XYoHiL{0?}V2Tnp}otjqo5Eu1M2z*7kgFaUr5rN+ic&8IzpO12!?s9$>uE|aw|g^_w>+Cs zW>#$6AH{T0?0{H_Hh}qnAbTp>@RTI8#y;_7;|>UnLsh`G}QbZRO^ z2LhujFTTmiWQx+AN#hWzI392?t!TX{tv}EZIG=wHqxOnuM)D#qN|6=)I!QY46LY6} zGI4-Z-IEqp~Y3J|MbcV=s{@k72bmY2wg%W4Jv0iM>Of3e6RqQx)Q-|1!Cd z(Ter!bBM{?H_5r21tkv~A@`GD5~zNuFa53iF)S!v?(uEJz!m~ks!BK-WPU%MH&-}+ zt`xOb9olRfooFA=Jh^AokLXykQE_!QQS`H%W>mIz5Z+hvEn%e|#@!b`npzV{wyJB$ zs#6^*V%cU+wBi!f6Fo87!Y#1Rh(e5v!JSOwmAmZ@(q2YXPz6 znaDl(CYHfL4fOg!U{Dxs=;gv$-=T>>klzeh@szZF^|FaYUe^9ZRLwYl3yY#Hx7e-4 zP?8%IY5+s#tRQx20U$Nd`?sS7opUBu_gD}DK=VyzDfA(ao5Xo4JR(2FDfV(~F6YW@ zIOuSoWVq|fttW`L_R>nCXN{z>L1qSZ+c#+5cB}57c(0)pH=P6Z{Xxxv6dWQLgZ!If zjMt334U|IO%}Id#fz*HsOQ|C_!osyXBY?X;sTui5pvk!vH%M7jn@la4s+#tYQPimi`_I1b8b>~QnK2S8pcq*nvh%_I zR{8okgm<~J4Kw}PCrU3sV6zUAMB%RvsULgIQbW<#@${X`jwa<-(JVTrZx4t+pO_xk zp-rvr+&m4Lh00%=dR4hq?-8Gn?%z|~K6#<^l+;i7d7rR<^{{d1lCpjH<&{D@RUV~? z?X;5Ox}j((^`@`8`iv=o*B+FV`Z@kagp=0#dLHVY`rD=fPPdK(7HvyWv4*CGTu+c$ z{80H2lii(Zwj-9Z*S|l%7kQ~%M_PN5nx*qrWsv(2cTZp+z;^M7_o55|DX$uuDVd** zv8c)`_D`o8VH5sKg>xhAn=;rta_qgKvQ-0@NxXjVXrD0$&lOG z)Kp=ar0AA$C^@m6;xCFQVW_Q@t%B23;p>HOh-Y#ldIM2nD7>m($3)SqN!8fqNzNE? zxx$Q~@rVuIo&Y2J+dY5vRAIR{1IWAv+&K(H9K1Ku?!hUR(O;^sjTAUHdYv+uP5{wNS2Lc$;e}MH=5(q@TQT132`J&Zs}3z}@8LhJaF3NqcV1KGaNOS9{g? zJXwixpr~dTmexx5u*^N{=5we2vG2Pr1v^rq z{lptJOJNVJFPpD~vv~&2L|kKWXa?U7afPQ8j&JL!L#yl9_+DZm27N9-ACI05$UcyZ zyjmzTPZ%c|S?rO55GQKx?X+aZ8ZxtIyi>mk;}8MI!ZA)ShWWXfA8PEAHWj?$mYRz- z)bG;`6O(!4$~LWV#QsG`M>RxPy8!sc$$%8OJ(w@($mznpD67n34fsYOkLc2vpGj|&MXAms&_^FE0s$-ah+X-H`7bQ+%0m7H#*<9 zhd<@ApdGjGY2p?sD47z4oSfV%Pt*THG=hqCx`+CBn5aQ2wIh_iVy@I_h9hcj&K%hGR}Ad$dI={_>>pAS15VV)f%C3d){{7K~1l=Gq)l zH~Hi|antPa3LiRg^;El3TYJmxWn_bOaFllK69cO-jCCAX|6S+YQ*Yyt*Jt}!15iF-s-uz?BM#!?jX-d-6bP_7PQ2C4P7u!gKEaaJ zR{p4joe-yf{Lqx}i|iNdxZ{=5)S_zkZfyIjwX!?3_lz|bJ)P?Ha;t<=|=w>+AndT|sAVgS>c&RvXKNT=|0q*slwhf3jK__1pL z!Wng|IlK86=s7jGbMH7*5ks3^u+3+@=J$}ta-|rRlgUo19HqVBkW*J#ks1@`PM@y} zs(i-$DwR`7-JEsYvnZqPHfyYScI`fW&c2kW0m5la-Bx7ekucq0<>t_~G4l)7#A4xa z3qgQ`Zgu@dNLkAe$n!gmKy4x!u1(xp3ZC>3_}j!j84EgC3SDgx01 zdQuIH`^Pg^ADTnc_~;4rBJ7$*Fj5@PQrRK@_`ZTV$pMY5(L{o7+ABq1wwXuC5!bx} zRE6(Pi2yOn`(w|xq!^y69s%BD-T9EbJb3$=F6A#ONwQVU>FO+&K(wrL)<0hvYre3y zxiRmW{n$7}pgQIB!3ID+eg#sx?*LXPz6!+C-%SFG-{?eqn%|2PvntcLms1ZKmS2?W zkf@C^h0HNLagj*8`#iGP`!Gv{DeuypEn$eRHk_e5Q3RWq!G)|~C;*PDYM95L$bh;0 zE9@scNycRwf5%Xh>O=Aco$PQFKMYTNCU(e|zL}OKvi*J@08dH&co7xD$kVZ58-MrP zqvU(2o~hB*c<(ywcwEA8zbLJHK6kiHZr&C>ke;eoBCA1@8h9-%VF0A4Dk>baE%Sp9S?1@K%USCyqMU8WDK2`d9 znQW*v>1mTpD(dKc7VT3>i%=ll`{cB*{iB_<0zc&T-&{XTq+=US%$(Xkie&uQ+gJU_ zE7mGP-om>bZxE$JOkz|&vXMc zlIWjw`{>Yznyg4UM*FxbqGTC9!sRlQC&HgvlXPw`qgSBOlaUEn&Cd4H;}9%4yd{Sc6y zMs256G{=!|-C_2*gM~L6Q3neEszdA{Gm+ZVr}HW>$XPI3r~6=pLZEQu^67k6h1?T( z2czv-rY5b``fNV!I7PTWki3Rt(6@#HT>cWexmD1_m@i#@>sVx(n&yDMuBKJ9e^**o zS*R~&8DXBFv?rq9C;sKh>Sa>CH0CD%CK=<9v8$(KD2|Mx_@~%1H(Kz6vx;c?kl?@t z9={Ut?1#?mZLE8qp$ceRLx=c*4OVLg$jB;lw{_A5wM{ZB#EWP zRE~W>X+75r*z-3S`@&W;bRiIG3 zUfG2uQ@4+)hHFw(ybC%e95+39M1vVj516ny((|H}Sz~Xmids7_{FRpGSl7=H@w@Jq zQJ6-zRc4eepGUovpL@4O0_J&7G{9V`Q!9DB_dxyFEIPo5nsMxoicI%k5PML1)mEDS zJVp7;@nE!vG54?H;z_uJy^0`z4-YGF%<%2kq|i6z>EBA+#}#XmXuc*k9OXjZY&n3Z zDDGo4U40b2-wp4dconNf(MXR*frvfe3@lX_hy&ua=XF`69-Zmc^5^MOtMlNAuFwW; zau;>rWL4gj>G`vAWoO8CqIJ2@5}m4IRT+knq-YR)+okH(7kX@mfbD!hc=hxCse#{) z@SvAnRd?i(*K7$=P#+s_6{?}?#{OYV6{h{Sg&R!;+q!!5qqh6QiMyjoeSst%#v5X z)5sLb7f@q+;p4=Es&Vpknr*P1+r&B*>6ANG3R};}y!~u_-?VDeO+8(qZnTd0@qliR z#q)G^CE#AWO(>azbTzP^dnv=1voxlZJ7QLiTdS%l>|q%-t+$espO`eC3$Qt8J^QZ7VDUU6o4Fv~zZrn7gUn%08N<3l{QP4{D$Q3q=;ns#>S zWAtks>oB88q**LWqogo-1TFY>pr9mo(#CuZt&UE#oBo}?gW*s9v~J1feSr_9(suQB z2~az2pSxofpH7v8xi}|ecT%|Ld^vvS_B$&F{&rq9Bwf3EEwYy#%x?3TXdmA}01HV! z-0ikMQ1vZ2`?4}0vs-m)9JKdjeTdN&i8in(@YDZV}S={?+p|=45^p zd0NuyaO$a9S)nf<-F7tSE~kx=1#gIru}L2<;A2v5=WwN%s7xn+H&FAzJO8A9mQ-DS zbyvST%!5BfyblActIlYtG}hvnNh_k~)0G2|_p)M*j5^?tu;zveV6KD%+gE+vKiw+) zGVA-Ed(0e}o2t8By9V2SV5Aac#;qF{71!j4@^_WP-*fuEf81l#^Xwd-(M+7v44)VIWyQqD+*gtS_ZJhNmyiNjLTf>TM6qxL9GTPi{ zdo{UjCDJEoN~?~1tFC?d%1@F)u9q*ACRia-Jr7dvy}hvzQ&5+hox{=0&#&;p{W;8k z-S1nCg>GV?m7Zw z;Jp;)-o!0!z42RPDaL8q&GbFK{zI_&6WDzYT<@FD?Q0slX>o=j|SL6OP?&K-JP{$Az zM_hvUge09jrm^P6d#Y;XTF+OLQLpYW^uhC21HqN9GvweqyrMMspx0b1n zm$|Hc>OxK9CibYxI!1OnpvmU=)aBH2@9}&%Itxu&IBfu9DJXYwb1~7tCNr8vYlO1v z#p}2~VwHD~Y|f8pCG^9_JC}0>8^PT1&#k43^w2hW+M-|EDazb_Hm2)UsTHU_6q6~+ zj|z8ZR5ReL8ZtL4|1pCLxt~bWYhGWZ@7{sEmp#s5e9n=SBci$3m6~!`Hlf#^rgC6& zb!i+Pq&g%I(S2<>{ez$#6EjxI-T z;a*UN&8W??c~fxnIRu0lH7oANPQG39qo1&jSTnF zEUz9XM|#23WfX6=8|{!JU=3>+qrl273sAk_`D`=8GT#7`Ea^$aYVU*;ypsQc!*+A$ z#`cRuzSaxg)&`P`lPU5`Tf;v@3cy^|;t+w33%u~PAOU}qTg9mR02p>M<#1`MLipNB zj_~!5K21%m`q!>}=f3Oy1CU1A3#acWJfAO*?$3$fFIls#UE*E#COpl+eYeR~=jqVVFeK823TC zY7_DGY$#@H)5l&BA`;&X{W-5;{Hl2C-Ek-&< ze#oq<8Z%94$kfZ|zFMNok|vWL&*K8;as`a1C;^Mob*Vu8_dmD@GXqPXaeZ8dSkzf1 z;$3yXdUxe<&m})Slc`Z1qa(Vh_c`xd)(v-R&&jmZIU*cJ;|AyJ1)jqAylf>L_+5_& zDI#mB@EErOC=f_~*R?r_SuWz`OB3(UqRoxEHN0<=$Fy#=G#%>88w zQ-am%lc!e3l)u)!BVTs0gc%6O6~y)WLx!$qaZEpdz`6Dl5~@uK3Ok23rd5XAs!pFg z?fFg}>dM3A4z-n8<5jou>PG7E4^cs7pLJDsYbl#fx=65Rn6Xq%G^o%N@(pBsciOQn ze{-G-0_jUOi8Y|q0B#6%@NHX&nm1Po+PKTE(Z$J4Xp zO(Bz^4O}T7f1fCE>13j9)G)D@*`>;K^-;rF96`Zt+%u9ty$ zftZG&9GxuvBn~wxZPR$Z3eZrg?>U7V%iWX!tuknXVI*DiZ=Rt>V7+ainCn1l*Bu2_ zYZcD#4t8UDH9|eI*)wV1@|Q796sIb&sur_}waHer&aTqv9|ay_U05g4d(~{o?yLA0 z^_39Nd0$M+ zIE(b2R;28?M+&S8a$60?w7!{)6|j)amUu%>5n+USl%@oHxQr(jx3|(!j<16AYV{XQ zKCWP)$m*@_UU0h&H3hn;20)i=Wyg@K*6i7>iXqjSPn`zf5BYm+0TSU8zLPXrjkq!g$eQxV^_aju8<4Gy>IQ5D`^1(^m!r42Z9MZK+Rlm(Z#k$X7B*L$h zsQ3eUt$V985!nLn#=}Y8UT+0^sjeBM-viy0{Nz37Jr7v>%Htz-X<|f~?Sbmic|X2% z#4wAFulnhyeZo*BbyqUg(6NT+Wta*#yy|1w-do^~pDpiDaC5n_ZqzKKGA=f=4B<;{BhA<{>RtxB?&IwPGef!Qk? z6DHcqgDpKb$`}=%!TpP?Zbhu|OUuDUvPb7z={KThZ&z-t)~6TOu1|SA3+2*^#Y=*C z#l@Zb-3&w@HCMRAEn2xmP#e`O=zV(g!H-E<>fIdsw>Pkl8*vC(20pE+@9+9m=A0xt_<^*`9i|Bpb z7_Ypn7FRZOvz1%oWL6ZCpqsT?u@9Neif+v8E@cwb=y)0BQI{~(D}0rlULdd*{;I@8 zX?fux2=GaU-?qXK<;m(3B_xJOOX43E?AM}%+E28K#~sl2#KSiYZjajF*Tq9x9u}We zPl|V#`_MdF-eKsP2}y9ozb%VDMPur5U0CbRK1c0V`#mz{(AxzZ^fG?Fpm!~^{Y6v< z+PISLDZl0R(abCd8h?{s1XHT=eqy~`6sXwGO#Bh_foE#&X`8!VLoEq#JzqdRRQ8rW zNl+9}(XTfqVWxwp-*|*##I>J;(|UG=44Gl0lCuLSe?_4%Q4q{>9jPhKSahnuAGNEu z@8?0z5~EbG{c;um7cTdo-!Q(s%@K z+wRTAHdm|3AavFzA`G+O9e`euQ!y^WOMWQ31`_*qJtJu|(KW<~d4W)f16 z=+54jHH1 zcQFEd2Y2VdFhKI|(CwFcqMxZ5(diuK`fmS~B178Ft2XO*X=|?pSX|?Bzx9OvwCn%L z@()epwf{=fI8%VXYuKFHst#^sPZGQXR;8jy&xA{MNL0(*C9cneP!H)ey46>ov#_em z-Q5=p!_CYsT08t(u-b5>2Ij}->NiLITCM`_gvPBo+LLYN%?)f++ zS6m2^)fVRq0Vi04p{$EGaHVWw&1-{&3cZp>ol2B!u0uoC{Zrf3M+l)Uv1jq_uOwkx z2tS;fDu^|^GjjyVJgTEGnYfIcZi>N9?blnbvw`r;;~oFnKaKN0 z$>h}Sl@vDk`3>Z>(u=KnKCvme^)>$_b|^EVd418jXy=drw$k^Y^qB6>uv+!8D6Ptp zeb<^%`(ud&IO1jJ8v`+fpZ~ePB{yjGSJyZU& zboTtaH~!rl|K1(`&+L`azCvwmPIU*G(>|Ze#uAh<*}rv)OeR0p+TrED0E(1*r)4Nb z>zUu(bwNhz#K-+g0=5As%)T02xMFYsL$sey=|ALET)7$B*rjXnjQ$ z8H<-ai#ep)PdJZ803#a3jmYM-z=rCTJMl2{Kj0J1ACOB(I$~yC>T1?2LEHFpHU?h1 z&Qh1NF6_PNHc!3XB)GC$eM`Ld@3;Ql8~;y^jXCz={l#PML=Fd6`Q4nsE1j4L7sG6O z5n9KT!I7wz*?vl!k`;@vbyv@}wCNu1wuYs^#wxr2?i^9W`B(P&--CKbknc<{e$NZt zGCuLcqB}^)Dv0PGF}?qihfdA2y0bbuLY)t|X{(dUA83iju4rnZZxdfGhtLdTV^L=Ja z#+!pn8F9$zYU6CnOkRUmkWTAZZ|ao(j~5)Dc)}e48($gl{Zi^0hiyy^XZQ?;TE6Y{ zO3Ju8VvAgUBTF)RV6SXydkr@;f#4pMqr~mgl2ayp!^vY})2`I(QZ6E>lPmn{GNZ2a zx7lZ4#kysarkf#s>JFM^!vZF5)qE=rZ-do_JSe+#zd35L^_j^bnq6hkk{WN>6iu=mIBPD^xQ2BS*c!Te zaPEn%YyxMb`%z^!95&TX&X{Cp9%V+fuA=52mKeLO*#mTW$d{opz zWmM$t6VH1%-lBln!=|w*$Cs*^=HJ_C(#Q~1KTu5c(T!I^skAcEZ2Q#lZ+O zHZw}cRW5!1T28{@-l2@{9cd9z_-0l+^3B!^yy%sgo*_^-%LKE)<6cEJFgQYvjpxtKb zA70|DMD`+6)pW-Wu)WMVy1!~=!F|N-#$cHO!E~LTa7Y94G&nL-Qf{d25@rU+#jpvT ze_)J=RudI4x>v}HRA5kQQMHmX>Cf1)=x9a?j4`c_psSztPBXf8M$heN=~cRln6FB5 z^HQh?D)gBXrn!Fhdp2AJAnnm_ALdy>QqouTJ zJ=JTge}bDCC!7|xmLK8Y0;l^TO3*3*BpM+(AdN9iAqO$*R)qVzx^7T}zaFq>F#EuP zX!bu5-mFwc4cDs(_D^=S%0EzVN%Lq2`%;@YFY~`zozZ*f7h2}xJ+!1|TbwGf6s=i8O%8X zq+^YDNvDM4Mj)DiQqQv#0no4lntq5I&q;opk)1}ERZ_t#X2EX7NDt5ZK3hC(z5+V3 z&-JtANYL&@fJyEpe5*)r-})iG%MpW~KTq(b=aHA;l%NeHEOVhZtEQ=UuxQqxw2WI4 z+axYZZl_IxII-wcWqBr1rMk%q&Eq@WVd&LyrA8$TkRu)A_OookYS|{LeYBe`axXJ} zDVec{u&^I|%fCxpz^D1JII6jC8xa?8z?hKAJK$=Y768Vzd-jHwMm;5y)M07s+->{$ zpeD)nB(8^!ra)U#eoUB99A)Bg8S7zBn|0cIOGd-zlp%#1Yvw$e#!N~=$BAwJsvwjY z3@b&RF~MEO1c-2Eie4htW2($cwTZJiPJB?~ocERw7r-8iAks8?u4=;%3fHf0u;x=pO`h^Ka7*8(&Z2Z^C2pcQ@<|#hj5_pp6Xb))uRUrOhV1N404q5 z_AiS^Ie9vg-cR?ryC;OO8gW`{go-VpPlhLW*)%)7VcvM6cq&<744@czF-Zk^Cb=Nz zodmC%dz?j$%nUeRSGPT=?Bup>-<!4b z(FFjvCU$occWeT)4P9Kv_)7sGbp7yggvQ_OUfC*FhNt;pjPV3zzIleLHRxXI4*TPgB^(fOWh!~^1#=7J zF{h<1lANW-&poc)aw~^6xwDOq6^i(gSSAV;G8cR0X2$uX5)D^G zr9^sczmu@K?)9h4Nx$Z2_WpGkA8&2pfQ8hOPH^@pWRS~Y)ihuTf-2rIS#7mwtSl6i#Nfrm7`;LOx+|7IP?XUn-+VhCd@j(K8-ujwqZ`3 z9Nz>sYR~4bTCCvSmY&4^Vo8nD_R6_*UW6vLGJ>~UcrdkCU`MTJ9q61sKS3-fG%1sL zHo~l(=Se-)syt<_|58|QXo|)YP&SJ@XanAe_CV*JQsE3ot>G|6+-nA>>0mB+B0LW* zg@n-VIaL3zmm<)wIyi@kEEXRsp3T1>jS1e0pU}dhS|M^xeaNicZ&WQ7TJ-WTfk8lu zqv>V&WA;qZJ51WRIbfsf>&IkT;HFHe;EG)%?;q;9(RobBrOq6N!6dBb5XMYaiXc~hg=l$6vaHi`EMevH2}?pH9Kdc8XZOg?h%>$l0@`o1szLfg{*g|>VDCqj=MoXR@FCjx&4s^lMu=Dp;AI@*L&+rKb1OEW{J zA?#UEHjP!Yyx*qbbLzMEicNuSW|bXrRiaRer_T0eA)WI2&F$Ntit0hb*{;1t6nCo2 z+3hSyNgp$+!SuY;#IV3b3}%PS?Cl!WEJ~WH*i1SEXUs{dt-0~)qL95?9hWANHbwOA z@-{^gRsT*^2|{1ui#kP_4Z~|rIkD>-9TZmst9;$y)KenL4Ms%?iC`&LI7%wLl%Ahc zD=!)i_xWtKNSMvea=?HuVOk3R!DHu_`#nz;%`$xU(8&*5%>LDI3$Af5YLI5Geu`}4g*Gr-mluAPotntl<+bj2dK-q`B! zQ6v#^hRIOr4ZMr(a7VybcMlKiTmW^8u}vzL^^(5m z^IYK{wx9Q*dbsPWki+r8 z;N!>hEY;LhUXE6RB8yJ1J77P#*9_GFjp*g(3nHO42cg)@u^duty1>9#b}z%qrpsaG!udu!leY(6L0akZb?V0jOM0jc$~xq6-|w`zj@tGq88%l1tnAyxx`<9mKH-2}6H=*3=Bz|9Y23 z^l(!ZfY!s!IWi`4i^JZ|%in|B1~)c?gPNZO-k?k%Q25GSfUeqY3Cuweyk8 zCoQbVjqhb8W>V@f8;#~9E0@JxJ)UR|4r_esT2&%W%QQn+2w$sEh^4!FSQQj=3xi9w zzfre(Ji*QsoQ!N!6028zr@u`&dgv`HaVf*FaGcAdpBksO{pk65PPMstP3!{jJsNd+ z_uW-DXGN^$4#ArAP_s<<6)?tiJvI~ma#cIlH3)S;`ZC}N)zckQx?gCa=VRB`W5-4x zQ7KZ%ztAp>Z+4R$WOd4u%M92WUTbn5`H0%!-|`*d3@p8rR|zidsXV^Q!!6~F8#GL9ucpl>ubPZmI$dE*K6|QCbfz53lwyR0jP4ryb#`~z$V&Y8wGUp$g3Z1de-v<60^(4W z+PK7=Dx9V&jAwan2i{QWqL20cXZkf`bU%3`)xw=gQ1&QX<@CEUJ{kEbJs8}A+c zMq6iLnSl{bov~;xL#97iVi$C3FvEyiV`Y0$o?4&P`64Vv*jon{~p2U zz@aYeZh(tdmqtk>Z&+3+anm0T-0!o7Rif}&H9CWFa07Q`^^!+OKy;HIO6!3fU2WYb zVn;E^#;PV$`_#MHcVqa@lJ1Z0{j;BOsN&aymS?u;KAZhME@ov3Zg#J6n(edO2SxuV z2-6n+c3tqh#oWWxx+5*40l;^!FNi8f>#D5lnW?9&ey(vN>tl#3#L1F3;P&5Gx&T{wRcP zw`PbH2eU9zzNxIsrlh^o&zo1`eE*t`3(k%4dW^Ps;(JN|urc*JjiyZP5))0@zV?H0 zj;);eUGYbe$Pvd!a~K#*Lg*B{)mE91)@E5`Wqx9&TLVx>%Xr*|w$C+IVlWjhDsC6o z(QA@2H-@tQIzehX`V?UZtn%r&e2$C-BhHo=lOM!}ko`3M#>SH-EHfn$Flk=gu)lqH zOg>jBqFm?t^3+5<(K6b0l^%u@G3*(BN>ze+-d=s*eYJeyYQwUbbR%Ay|rVU zT+K8$H%FxIooKCDyT67;5r7BPUA;bVf>Pb<%T#h?f8N|^*`dj7_p!M-v>|xecq57hz{yTQzJX;?tx{c3 zGuG-fW;!i8Sl~&k-_qO6=(_M^e<7GHSUtc`nMyCt;l_1XY!pX(IGk6&o+ozCBt)*1je`GoR#c{yt*%hrw4PZ!Sz z5jaC8?A}bGX#i_c$sg^zH8`rWDd<5?~^ z-6REbXgIR(+5_&A-DtcXLK&TQenfsRB1kCSj2KN zO^ekCMY5H|#|ynufk(k_tf8eN+QM3jKn}GWIOk}|4*ZYFhxw?AL*ynlrBmh?T42Y< z3QhF-sh3N02P4pX1@*c8IMd6e>@Gm=!8&S?k;qhyA$)$kU(^eqzP>JAEUyW`4-n#x z3_ldHh1}3UHr%<$nd_SsI8+J6ZbZFdp=NXbnM*mo#q4do72ILRviF>{alt%o0~BC% z7Mdk=a5k$-VxNt>C8o&2S9DgI(}c}&2WS1jZK?_Uz-;SgTL6xdoAvHnhlw?bg83eL{tinx!ExM}3&qB9dRt{Y6>FMKFSPPP#@t_W$$YJhwN6%f#z`+A391P|1{KpZh;kT1h zYU%BI<{~eu#Osv)ciP6x@60h>G=)F^@MqzFiG{4tHyAjACUvwx9eJrKG#?>9!j3$y zT1dCKVJdC{+cZ=ytb5u+o9@!n*{d5Cp8mP={9nG{fRfXfzv?}Vi*t^m%$ioshuQ9t zV-)60l5~*^Sfm%SID%f-vfvPL>-3tiuq2+mK2p=Y+cBGNd76$?m)@3q)*N8X)Yz-8 z@Z&@{C{1d-&8hQkRE@^Ee}^s=w>R*C#1WGE z&sP0W2=xGcXaKz@#T(HnDx-fwz|2AKnfSJs^CL``TE2Rd%_C_G_XC}3Po?v)6q(OF zn3N(!UwuRM@$%#=jHGe1FH9aldbc-+K_TP%+ia(zvhS)~xI1v)x!$G59E~`g_$d%D z8KmF${$I=;qq~k3`eFWA;clb|{f6;hO(OSg_H^3Wq1R+)yVE0fHan@VX(VPh)0sz= zyj$@t?OY}+HvI^Qz52SR<2A$od}OIEY+k=^_%hI`{~yN%IVXTAE0E{u6Um{0qLIw>U5D9VQ6T_QhPx5s4;igu(|o> z)cc0kwzw)2@tp)s6D3C=sH$`(B*W+PjCTE)^KM}t6?=Yuo{C75c+t^8gv*38 zo8aRk5^{1bpWs2Rtwa6*Vt*ns$!1~{*0edbEwssUgu{;KldHFnsk0VDi`9xYy3xqK8E@hTK7_u@mAvW2YsGu1lusJ zn=kQ7kXO)`C@#7BUuecJbH^ywd-L_W8QuYQ3T*IQ5k|EJTG`wMzNh3CmEc?%4MHiqCEK_55v{4_YHL zp{l3n-m*CHHnZn#r#WXvJ0HET7oBBOMK$e0r~Z-ZfN|Zax5an%%ARN@;`cO$tSn0p zZ3cLP zs`1~vcprw`NXBRi)F&rB%p@?B_6d@vSlNt7!_U)?n1)KS^0|vkbJHZ!b!`@5V+TrL zNKMxv%G0N=GF1r77gN_kNd{W`-r08#g=gsnHBkcfuhR{S6=N6k_8O)N7j)xtUU^pa zWqZ!2o6YM5Dg*J?wB1PCefNJ(p@MrHn>t_R3QIIzJ*0_Na+gu*Ptz49Spm~Jc+GsF zuH@Mbm33+xeyOZ8GGrj3(RRcII&j6*;!FcwLfh7J5sy=v-cnD;Hl;}#AtLah)4hu; z?NMBA-98Hk=9r7@9Od!mZI_YJ_+su0p~nkz2`xmZi@yDbETswfYz-x0i)r zlk>A~o8)K@MunFOr-Ju7e6t_FVMU&3oiRlf!hPs=aI*(kTQ10lDwT+Lit6}6NOqq- z+Oh0+jubf~D1EB()gp1-XKXd&4PcO&#=u3vCx1cK!nUJ>TnghO-Tf}i?-gfD`-O$C z9D-=b;-O`K9l;ytrXm(@J4p3Iz_y(=_gSf@xlTmjKUdK zpXv?m;yK2rTHL+|KC%9W=M?ucwxR_|Q#A)u6HK4IM>Zhm*g?q5xVQ%8nh+jThDids z>x;Yv!4UB3)u$=UDymC=A0>Rkj|rY79^pL>fCa5!)V*}@r4KD>7}!&GNt!`cwOT-1^@s&@^M$z zw}3D=3@X32mQ$g)^0u>I#jya8jFSP+exF{#elZ&!PTci@MqoS7_fIyLiZ-AMFsrclOnm zoh;HUVb<_%UivkpwWpW^gD%ICR?0c}5PJBmJc=9Y`}LJV8Y>lG?mCNNxg^3si{8^7 zQgZ>oKs+NX^Kq+l6tI55MR!dzohH-m4cxc}8aZTwynv}n;MokISF6X?+fEV1rG`^| zw~jY~^wS8hU9Hk|B$<-@^(Rw|0R0ELUkYplIV7#B&9rGkO2UtA>qWj&XL(F>s=1_$ zSk7zC+nw0-t)sRggA3PxPD$W!`H;OyG9q+H$ENjc0gFV*67i2Ifs9Xa$^^7z7hQ1{Bw}& zgWTA=*4&+U*RsVHxX-|TUI+(PaB<7EJk%_W5wAhN4!OMIC|S`hnN^e0!&H+BD9zcO z6jD`nMGWZ9?`WzSa&kzIWHC|_;))6vJmYfxwvl^QuiUYfnM-9JwKd9?kp6sC;XOXH z5^|f$S+|U5@Wr;+?Y8gnt{e+&dEG@NfWQ|pKP74}P3Yu6F$JKH7wK=MyeGm@JD4`S z`l{u{ckanz(>vi~{rqX!?!o+2rkNE5`7)+P3ahegnk3QEpn%rS56kn0AcHL3`06
n<(|DEhFb+J%#ULwKWPKZEuw?2_+4XS!T1q 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

fUes$)mA^8x9cX-vu}KfU;N5$tozmO;NNt= zs0W@tb|c`m*^vBs8w{}Z4(WjYWW_%JgCaKbD3l2O9^S9G^V8xF3U<3_hsV*I=j^o& z3w=?SclEdG!r3mTGf7~_#W%#jRrbymT`}!J2pD1X0pytEEs5= z-kbKG`}{#EEo)}JkNIfg>88i@uQvNRJ^zLN9h%+|wWfR8FC5|~@zz=$siw!dB46*D z#UbCi$f{H>utw8TKjY?hxVybmQX!PRP{L(ZcGLX($FGXP{c%v|t?Lb~(p%078>P8N z5eS~*<(mYhmKw*nF9&qR?)TE!dht125|YDZ2BhvQkH>7&TI~!pJA%FXMJ?TA=1}%J4#ZC$*0c$9XN{7m)#P-xPZe7aXa7kunV_bf%C zX=%-S_OQ-dIE-`VX!Xm*=mv7W+6+74rz2>?WFg5T3ORC#dAk$4_u}WZ46vPDm++!7*ilg zL|wSD%}MwV-aF{JMaLqnh%FM&1l^IJStfb4(K=`ir8vq=D6qw6`rx)O+*YiP!( z?p~!hH}wZ^{-E%r+Wr27e2#hY_G5b?^bbn5h|sSm{nAy=Ki<1cVUNkWVCuc*#NnbH z;J0HpQ>B;or3+DCbY7h{uJjG|KFmAHQpQ+LnkM}HhQ=qnBR&84Q$75K+)W~S8J;`$ z_((T`;{>BGaFf@Gmsi<6yfV!WCa3ZC&%FYmaNgzLU8y_JEMEd|^ufLwInKS00WSOw z@3wzw#+nZl2Kz#C_Psk{^L0NcUu^8(QI~v;SE{GT88-Q@)Ri@QXLQp{Jg)!t^vCk# zAC%*yM_?H=E){i(7~cA__MT^Qvr`s?Q7?2aU7JdAqQ;Vu49RPSpGb5pL9#=H*B5@( ze%&-hgpz+6=ntp-lvDt;fZI^1z3A5UF`fE719_`pohf=*QHLOxXz)BD;vx=29`(ZG z3>2%y@aypv>6hNurXD5E^MUK;&&3A)&Ge&qWHA+qgUeObx2t|Id>FU<#d*IR%IrLU zi&t$`=b!9%A~)7weq~oGA-(QrXfsV%i{wv^NrjG%F^=4bXv47df%%pRf~Y+JyMQ^*)oRtx?OPy@mZ3 z6O4X`#R5iqI%O+Mn$pu1zU{feC$4Z35QMccIJFL>Y|X!OP*@M&NnO1EKpu+eO$uJ` zo9sXy^K$$~}o0`$uLI#wnseKB*Py#oZJ*cy9?GCLGavfNFp>yz-%Pg1?HXv0{4F zK$co&BfsGYFnX+%p*pwNZUEkZ9$v;)c%C%s{Or^^YASeXqo${t^yby=hZVKZ$AZ5*zcGrrn=h zpdeJX$+e{CRi%@cRgUyXw){6A!~WZ#G4mXDT4a66VnxuwW_+ssdnG(91uGF_=bkFh zbd7{dy%yD+rf&X75|OUUqcxbNmW>==wwRc>A`iP6my0yMs4jXlR(xIIYh!Q_zn$Y# z-ghpRxpsvMg7nGbJictSW&rso$jOnIPvN63VOy_6sOf};F8C1)+3C>oT;1+z$&Fhf zR1^B>wEH-^6*N)tWJ*PcN*6OS{f(akuKIzXl%q{J&|52j?7%l^m3EbK@JaXc9FMnOWY#}&Yp_%?jXl66o0`?Y#JG?SK;*A##Ymx9=35Kf< zDbOgAZTtorERka!&k*DGb^i~pVS&hYZcC;GCYx!^9MNwXk|$@?Xm@GrkX<8(k3;2X zML1tGSXjGzess6wxF7@Tn-%GX5{HT{j9Hq@1%Yy+Swr$=WJw*l zm5_})e~-b!9XAZKiQ%OxnP6ikqcZnB?uoTkqC*lw5s zHX)7B6Z$chuGk5abxLGh{oHw#RLhu?Mos6$*QFM!AkA5e!{yJvNkGL82a+oS8-zRVZ703D z*Hu!{%YGMD38i=SI2k;Vn00*Ht!EOoB$qhvE;3$coShx>(wXNs^fzF|)*OZNz7Se6 zt~o3{#Al7}esLNVjo=h8cX3C;?@q$kO?>u2?T0Pr0J>nzGchC$C>*lQ`orGA z8T%_}(E)miIaNiZkQ+sBTToy_Cfx($_-WXWEVl5ZOK-6H4;p^~k{I>W^AX*(#5zH+ zNz?)z#Jjk|6#nBRNoU0MiY3r2_48G&fP^BJsCinQG27s_e9eW-BCCC%sX$NNx6g3d z7uIHQ3lWF6z!(dCJ3}A_?T*4DVfp)D1j%-)Gk;tvxJ=q$o`8f zq_ZPU5sLWTSKC$zJE@j(J#X_2HCh-5O(ob@3g6?l;^Gfd@U+y|kwYoGg_ELZFZ89_ z@B%g1T1fL6nK`XK7b8OKLi91|=NOti$mAiEn}dSq=otE6lkw?Y;J8C*nsgrBV!+;V z`ljX(u0q`n@z>5wvBD;`TD$EZ{*sD!4Ll*MaQ?e;s{xz}tW{_wKavz*jtA^D=Qlo2 zElU_mjL?)@%Xc^N@kX+}l#8_iFfp_o8rpN`5fE8m2rfC)D}OHhgOVPl_2BC9xc+>I zASj1DVp?3sQQou;Kb&g)L7Dmo4&#b~1Dsx->qPlmjr^~bx)kw^%zgHvtn`1c(q+FN zUNYUFk$#;nKHR?UL=A9H#d#Ld?VM{NB+O+ijn4mfFWF zb+{xW)x>YkdFybR%Vu(f1#Pye96(7_IxPY-s$5_ zKg@NBM>X&5zeLE>fL}#>!GEiO-I#!|tHjLq!`DlDK1y?rXhInZ_mGND&$l_vfv? ziJkxNr}6#tOo4K(gv@S!cD$~a8Fjbs56X)cDz00JiPFCxjMg#rBJ^!Dbov&@ zDE`eaF@1?f@ae3>(~d(3BGX_lkp!#hdS}@(>l{@eQgitzfwx_x#G(F>wK`-MUFHcZ zLm|^rw?UF7eBkLzQN$^i0O_@6>&D^xug>(?ae^+I&#zx_mX%CxIZ1X zomO-ieLv34snQQT{7UwiL*X$lxcP24n&?gQJ$IBmrum~57*9_3bB0DvlD8UcLfq*W z$>z&Ds*<*Z=z1#rU!EU7xBkL%THEKo+}_R_fyj-xdd5sq4cQ<69=9))f0o#{3tjSK zSk`lfTrWY;c;yAhk5qlg1?s;oUwsZcTT9i|;@9lK?_2l1sB2sFOJ4MkT@e*uY|pJ; zq%0e-f_edn1$yzGY^oiO?)!A--0+-bVg4pKf#xwfwL4S`aXtaQk^Pe z!)}ip*E>v5z$QCS8}ZwL@dZfcsLEoW9ARm4yvNbgLC6fC>`oNx`#&){C$=M0azE7@o= zmM?f(q!%n#Uan_!d&8)(4Ff(4JLsY))AWjve=9pLyGs;Y^Iq)T5E-i3? z>=Uvs`7(4seb}PUHkYS_qHSYlMXGK}}3LB5A=Y{ntdT2>cRMyLpYnoQy_tJ(Bc@i43%{Ggp zC+Cj;IvyhB&FA#NwMppWbcM;;YO4j|iZKP@avrL+^$1A3bN@4;LUTj{B@yTIM$u<6 zN6qt4vTvy}95P;#erJc*>q@nU%`96kS}r&zXDP(bu_5&&*sUw8R!8~q)vvI-&&Y>d zl2*+vgWCNU+0dDy8@Z{KBTA3VMvmyH)KR>uHi*A`p5EkhAdlQjviqC}%~>-Dh>+e| zW^1oQwoXnE`))56&69Q{$7g-xSb)hx@lRFxv9EiX#9rEtpn>eAsc?t1Wc(&KH49TM zG5abDQ{UK{<8To&3$}B;DtO{G1wt71rdBEHL&TMHd0>K^%lxvT}+D?abbn- zqPLk(LcouRd@JfMn~752~Nmn0o#|?wTRnJEMPF)^#%Rs8uImWv;#}!DWQ`8 zphWu_8bx$?%#>zom3!1_w%)Zrj5w90Mho&8>=H=9)8L6;GlN^lZ1okrwIKxu4&B7u z70YoSq8`x8_kU17l2S07j1PoqX;K^=ZlAyZj)M!eU%sw^nD-S{KBQeh=nw-?{Y-1sT?P)22HI5`nlq{(bY+f(m|G?+vee?MeH63~i zY9XCUbhqt6C@pJs7FvKK$u)&ruBK@^1ldq%sQ1;4IT451fzPybL$b9D{rX`WjJh(v z8K=of34y7C;kPR7orfb`;hxHtTy|gkCKJm`FPSbiX9#A?@R);9f%uyNWCaIA(94Vb za?`t4pzXPCU{FK(15Q4Hekzb!P>kziIL)DpG^(OJMvHv&v4xBX zzB=iQP8S?@rY+~Ett$IJJT2lSD-vx1lJl`Lu4XG%p*Z6gv&*g3HVY=g=Vsi6BhF)a z?nprcxnGKwT+Z%G&y$O9Xshdd{p#hQ-4br?UFd48nAdAlO>sc*bAF>w8)$TBz;I;LpOHHbUCU|O)1>=TVD(*3onc(<3G)l(440i3T<+I2f4Os?H zRTs`hUj%DJQfGIMvVWAgBVyaiU|??AZp;73IW=7iGUD=0Y=t%nA~Xg6a*ci3wkr#S z#%7N}Lu>rKSyQ4^osC;&nEq;eE&R3Qe$V-t!S#0 zxNAFYsq<5jxTk+iDf2K9r~h7ma5d4myJW^~WZ2dGI_1`LTTmp*-eZYd+M@mF6$4$- zig}n{3+cMKeUK8?@5Sdb=YV~r*(9XCmQY6;(>8%=R9tWe^(aU;esUC^;J?u$G^Gn- zRP#qo?D!&Iho+VVeVq{8Jq9m1aH77_3wwpMZ|h)9hd-~8_aI^TK>OnMN2Mv`B)q8h z$`m0uX^HRLL!^0OJmJQ3j8E{FkLBgsaJl?jo{O8Z*8LmdF^^mmBXb=PTVbQS7S_+e z{LNcIOzjs*{*&uSNr=9|ZgndpJhZhIi6>tFfl=5T9~)e8PYYeD~*$nFf`taJMSNVyocj zcR8I|<6xI~t7wv^|2$HCPu2vzcR-H$F z@1}c0*7Se~>6(vh(vi&Hn2Ns)H2=?otD5OI)9(dyX0n^Bk|kF76i6m)fYo!)^t*;u z^E~Ie6<(0I+eRwey0NhSDme$<%g~e#DpDdt^RjzOEgd!FbnIkxCn;Gkp~Qw#6zt!0 z)@mEd2=>s(K=}Gt*;>9b(Wf6)_Wn+Yt)2qBRUI!r96mRZr0RO=+ep0{7p71|T;Zsu zNmW^#hwZ2tQ_%0C!Ff!@+zH2J-Z8HR(ebU(cov z&+~OBHa+pG=JHD?`$zTa-_=r*)QXv23}NCFn~tGMTz`660KTWG#^q;8yN*psTwd1#00R3{u++hR= z{ecC%X1|L`GTGlr!@;GxKZQ{GDKv-*Yz{7HeA3*^iP?&L~u0OqV67DOh>AA z@`V|^R{D${dr*Rl#a-AB={@DTI6o%vap`(hU)48moE5a+IYpk5DD~YyMyfj_x8a7! zakS`yN7fq+n+@YP%f@wY`e;x;OUOYFciy+twM{la6r+}t<7r95McRVc>@MaFRLR~i zLtz}0*^o!sx^${=h)0`>CmifG6ND;l>$;{91j$s?z+ga=p{(OoHWfM0XVvV#kBC)B zJSv8%xRt#!*K3q{o{d-ux*SqG8uDx0_n`m_rlgDnAN INY>E50PUVX_5c6? literal 0 HcmV?d00001 diff --git a/zh/userguide/images/balena-Etcher-flash.jpg b/zh/userguide/images/balena-Etcher-flash.jpg new file mode 100755 index 0000000000000000000000000000000000000000..d7df87e7c10a0f2a6978593e1d5739ca3a7f0d2c GIT binary patch literal 44966 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 ItvSYD0mMYang9R* literal 0 HcmV?d00001 diff --git a/zh/userguide/images/balena-Etcher-select-target.jpg b/zh/userguide/images/balena-Etcher-select-target.jpg new file mode 100755 index 0000000000000000000000000000000000000000..f8a3cf2973c14219301802e0836862cab4211e28 GIT binary patch literal 60778 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%0D3^=*J{(i~EFQmE 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 DRmrlB literal 0 HcmV?d00001 diff --git a/zh/userguide/images/ide_image.png b/zh/userguide/images/ide_image.png new file mode 100755 index 0000000000000000000000000000000000000000..889b19734a0f66effe4547be3ad8c68b084d2ac4 GIT binary patch literal 260638 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

    &%N! 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

    N-ox~%E^RMlL08uf%QIi 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%0AWK1ZfSE7dHf9a%U;zuKpMM+h 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

;|oV*P*&?wmR7~aJ+mUMH-(tAO{ZEEf& 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 bF4BO>N2$U%4QRunh~>dOryVTpzD)cdGk6S1 literal 0 HcmV?d00001 diff --git a/zh/userguide/images/canaan-cover.png b/zh/userguide/images/canaan-cover.png new file mode 100755 index 0000000000000000000000000000000000000000..031976562d7003b700195222bee17e7a04d0feb0 GIT binary patch literal 73229 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 ND63!1zjEiv{{n>M$`$|s literal 0 HcmV?d00001 diff --git a/zh/template/images/canaan-lable.png b/zh/userguide/images/canaan-lable.png old mode 100644 new mode 100755 similarity index 100% rename from zh/template/images/canaan-lable.png rename to zh/userguide/images/canaan-lable.png diff --git a/zh/userguide/images/ide-2.png b/zh/userguide/images/ide-2.png new file mode 100755 index 0000000000000000000000000000000000000000..9410b89909eb3fca64438c3ea464fb45a4c02857 GIT binary patch literal 73143 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 literal 0 HcmV?d00001 diff --git a/zh/userguide/images/ide-4.png b/zh/userguide/images/ide-4.png new file mode 100755 index 0000000000000000000000000000000000000000..1622d4fd2d029b5724b14fb5637566431c99ba16 GIT binary patch literal 70573 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 literal 0 HcmV?d00001 diff --git a/zh/userguide/images/ide-5.png b/zh/userguide/images/ide-5.png new file mode 100755 index 0000000000000000000000000000000000000000..c482ce05884df5323edd2fc98aeaaa46bbe1278f GIT binary patch literal 79890 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