[
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: PINTO0309\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/issue_template.yml",
    "content": "name: Issue\ndescription: Miscellaneous issues are closed immediately. If you have no intention of returning useful information to the community, you have no right to post an issue here. Please withdraw.\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Anything that does not follow the issue template will be closed immediately.\n  - type: dropdown\n    id: issue-type\n    attributes:\n      label: Issue Type\n      description: What type of issue would you like to report?\n      multiple: true\n      options:\n        - Bug\n        - Performance\n        - Support\n        - Feature Request\n        - Documentation Feature Request\n        - Documentation Bug\n        - Others\n    validations:\n      required: true\n  - type: dropdown\n    id: Operating-System\n    attributes:\n      label: OS\n      description: What OS are you seeing the issue in? If you don't see your OS listed, please provide more details in the \"Description\" section above.\n      multiple: true\n      options:\n        - RaspberryPi OS Buster\n        - RaspberryPi OS Stretch\n        - Debian Buster\n        - Debian Stretch\n        - Ubuntu 21.04\n        - Ubuntu 20.04\n        - Ubuntu 18.04\n        - Other\n    validations:\n      required: true\n  - type: dropdown\n    id: Operating-System-Architecture\n    attributes:\n      label: OS architecture\n      description: If you don't see your architecture listed, please provide more details in the \"Description\" section above.\n      multiple: true\n      options:\n        - aarch64\n        - armv7\n        - Other\n    validations:\n      required: true\n  - type: dropdown\n    id: Hardware\n    attributes:\n      label: Hardware\n      description: If you don't see your device listed, please provide more details in the \"Description\" section above.\n      multiple: true\n      options:\n        - RaspberryPi4\n        - RaspberryPi3\n        - RaspberryPi Zero\n        - Other\n    validations:\n      required: true\n  - type: textarea\n    id: what-happened\n    attributes:\n      label: Description\n      description: Please describe the current and expected behaviour, and attach all files/info needed to reproduce the issue if applicable.\n    validations:\n      required: true\n  - type: textarea\n    id: logs\n    attributes:\n      label: Relevant Log Output\n      description: Please copy and paste any relevant log output. This will be automatically formatted into code.\n      render: shell\n    validations:\n      required: true\n"
  },
  {
    "path": "2.0.0/cpp-android-arm64-v8a/build_script.txt",
    "content": "### https://github.com/tensorflow/tensorflow/issues/33959#issuecomment-549333589\n\nbazel build \\\n-s //tensorflow/lite:libtensorflowlite.so \\\n--config=android_arm64 \\\n--cxxopt='--std=c++11' \\\n-c opt \\\n--config=v2"
  },
  {
    "path": "2.0.0/cpp-armv7l_glibc2.28/build-script.txt",
    "content": "$ ~\n$ git clone https://github.com/buchgr/bazel-remote.git\n$ cd bazel-remote\n$ sudo docker pull buchgr/bazel-remote-cache\n$ sudo docker run -v ${HOME}/bazel-remote/cache:/data -p 9090:8080 buchgr/bazel-remote-cache\n\n$ sudo bazel clean\n$ cd tensorflow/lite\n\n$ sudo bazel build \\\n--config=opt \\\n--config=noaws \\\n--config=nohdfs \\\n--config=noignite \\\n--config=nokafka \\\n--config=nonccl \\\n--config=v2 \\\n--remote_http_cache=http://localhost:9090 \\\n//tensorflow/lite:libtensorflowlite.so\n\n"
  },
  {
    "path": "2.0.0/cpp-armv7l_glibc2.28/download_tensorflowlite_2.0.0_armv7l.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1WJt_TSy2YA45d5VwbPLwUN6WN1LagePM\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1WJt_TSy2YA45d5VwbPLwUN6WN1LagePM\" -o libtensorflowlite.so\necho Download finished.\n\n"
  },
  {
    "path": "2.0.0/cpp-flexdelegate-armv7l_glibc2.28/download_tensorflowlite_2.0.0_flexdelegate_armv7l.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1zKc06oMkCdV1fK2o5B3HKWSNua3E_wAg\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1zKc06oMkCdV1fK2o5B3HKWSNua3E_wAg\" -o libtensorflowlite.so\necho Download finished.\n"
  },
  {
    "path": "2.0.0/cpp-flexdelegate-x86_64_glibc2.27/download_tensorflowlite_2.0.0_flexdelegate_x86_64.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1_gYv7CA-AQaDxzuRC6oymExYB52p-rDd\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1_gYv7CA-AQaDxzuRC6oymExYB52p-rDd\" -o libtensorflowlite.so\necho Download finished.\n"
  },
  {
    "path": "2.0.0/cpp-x86_64_glibc2.27/build-script.txt",
    "content": "$ ~\n$ git clone https://github.com/buchgr/bazel-remote.git\n$ cd bazel-remote\n$ sudo docker pull buchgr/bazel-remote-cache\n$ sudo docker run -v ${HOME}/bazel-remote/cache:/data -p 9090:8080 buchgr/bazel-remote-cache\n\n$ sudo bazel clean\n$ cd tensorflow/lite\n\n$ sudo bazel build \\\n--config=opt \\\n--config=noaws \\\n--config=nohdfs \\\n--config=noignite \\\n--config=nokafka \\\n--config=nonccl \\\n--config=v2 \\\n--remote_http_cache=http://localhost:9090 \\\n//tensorflow/lite:libtensorflowlite.so\n\n"
  },
  {
    "path": "2.0.0/cpp-x86_64_glibc2.27/download_tensorflowlite_2.0.0_x86_64.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1cmAXrqedkB3alINWhc8n_YVNo4UZ1mBP\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1cmAXrqedkB3alINWhc8n_YVNo4UZ1mBP\" -o libtensorflowlite.so\necho Download finished.\n\n"
  },
  {
    "path": "2.0.0/java-android-x86_x86_64_arm64-v8a_armeabi-v7a/build_script.txt",
    "content": "### https://www.tensorflow.org/lite/guide/android\n### https://github.com/tensorflow/tensorflow/issues/33959#issuecomment-549333589\n\nbazel build --cxxopt='-std=c++11' -c opt \\\n --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \\\n //tensorflow/lite/java:tensorflow-lite"
  },
  {
    "path": "2.0.0/java-android-x86_x86_64_arm64-v8a_armeabi-v7a/tensorflow-lite_generated_AndroidManifest.xml",
    "content": "<manifest\n  xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  package=\"dummy.package.for.so\">\n  <uses-sdk android:minSdkVersion=\"999\"/>\n</manifest>\n"
  },
  {
    "path": "2.1.0/cpp-flexdelegate-aarch64_glibc2.28/download_debian_buster_aarch64_libtensorflowlite.so.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1NSeuTEtq9wuWUyZFfYVbWMDFWQ4ZNubp\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1NSeuTEtq9wuWUyZFfYVbWMDFWQ4ZNubp\" -o libtensorflowlite.so\n\necho Download finished.\n"
  },
  {
    "path": "2.1.0/cpp-flexdelegate-aarch64_glibc2.30/download_ubuntu_1910_aarch64_libtensorflowlite.so.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1D2o_BXU7PexYrglqFwhU_GUXDu8ZW7Fp\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1D2o_BXU7PexYrglqFwhU_GUXDu8ZW7Fp\" -o libtensorflowlite.so\n\necho Download finished.\n"
  },
  {
    "path": "2.1.0/cpp-flexdelegate-armhf_glibc2.28/download_debian_buster_armhf_libtensorflowlite.so.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1InUchwSZa3RTTfDwZU-6kMxgfkInUaZ1\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1InUchwSZa3RTTfDwZU-6kMxgfkInUaZ1\" -o libtensorflowlite.so\n\necho Download finished.\n"
  },
  {
    "path": "2.10.0/download_tflite_runtime-2.10.0-cp310-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.10.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp310-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.10.0/download_tflite_runtime-2.10.0-cp310-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.10.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp310-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.10.0/download_tflite_runtime-2.10.0-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.10.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.10.0/download_tflite_runtime-2.10.0-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.10.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.10.0/download_tflite_runtime-2.10.0-cp39-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.10.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp39-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.10.0/download_tflite_runtime-2.10.0-cp39-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.10.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp39-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.10.0-rc1/download_tflite_runtime-2.10.0rc1-cp310-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.10.0-rc1/tflite_runtime-2.10.0rc1-cp310-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.10.0-rc1/download_tflite_runtime-2.10.0rc1-cp310-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.10.0-rc1/tflite_runtime-2.10.0rc1-cp310-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.10.0-rc1/download_tflite_runtime-2.10.0rc1-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.10.0-rc1/tflite_runtime-2.10.0rc1-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.10.0-rc1/download_tflite_runtime-2.10.0rc1-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.10.0-rc1/tflite_runtime-2.10.0rc1-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.10.0-rc1/download_tflite_runtime-2.10.0rc1-cp39-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.10.0-rc1/tflite_runtime-2.10.0rc1-cp39-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.10.0-rc1/download_tflite_runtime-2.10.0rc1-cp39-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.10.0-rc1/tflite_runtime-2.10.0rc1-cp39-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.11.0/download_tflite_runtime-2.11.0-cp310-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.11.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp310-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.11.0/download_tflite_runtime-2.11.0-cp310-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.11.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp310-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.11.0/download_tflite_runtime-2.11.0-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.11.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.11.0/download_tflite_runtime-2.11.0-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.11.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.11.0/download_tflite_runtime-2.11.0-cp39-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.11.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp39-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.11.0/download_tflite_runtime-2.11.0-cp39-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.11.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp39-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0/download_tflite_runtime-2.12.0-cp310-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp310-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0/download_tflite_runtime-2.12.0-cp310-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp310-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0/download_tflite_runtime-2.12.0-cp311-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp311-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0/download_tflite_runtime-2.12.0-cp311-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp311-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0/download_tflite_runtime-2.12.0-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0/download_tflite_runtime-2.12.0-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0/download_tflite_runtime-2.12.0-cp39-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp39-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0/download_tflite_runtime-2.12.0-cp39-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp39-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0-rc0/download_tflite_runtime-2.12.0rc0-cp310-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0-rc0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp310-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0-rc0/download_tflite_runtime-2.12.0rc0-cp310-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0-rc0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp310-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0-rc0/download_tflite_runtime-2.12.0rc0-cp311-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0-rc0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp311-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0-rc0/download_tflite_runtime-2.12.0rc0-cp311-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0-rc0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp311-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0-rc0/download_tflite_runtime-2.12.0rc0-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0-rc0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0-rc0/download_tflite_runtime-2.12.0rc0-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0-rc0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0-rc0/download_tflite_runtime-2.12.0rc0-cp39-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0-rc0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp39-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.12.0-rc0/download_tflite_runtime-2.12.0rc0-cp39-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.12.0-rc0\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp39-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.15.0/download_tflite_runtime-2.15.0-cp310-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.15.0.post1\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp310-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.15.0/download_tflite_runtime-2.15.0-cp310-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.15.0.post1\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp310-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.15.0/download_tflite_runtime-2.15.0-cp311-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.15.0.post1\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp311-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.15.0/download_tflite_runtime-2.15.0-cp311-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.15.0.post1\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp311-none-linux_armv7l.whl\n\necho Download finished."
  },
  {
    "path": "2.15.0/download_tflite_runtime-2.15.0-cp39-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.15.0.post1\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp39-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.15.0/download_tflite_runtime-2.15.0-cp39-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.15.0.post1\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp39-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.16.1/download_tflite_runtime-2.16.1-cp310-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.16.1\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp310-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.16.1/download_tflite_runtime-2.16.1-cp310-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.16.1\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp310-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.16.1/download_tflite_runtime-2.16.1-cp311-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.16.1\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp311-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.16.1/download_tflite_runtime-2.16.1-cp311-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\nTFVER=2.16.1\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp311-none-linux_armv7l.whl\n\necho Download finished."
  },
  {
    "path": "2.3.0/download_tflite_runtime-2.3.0-py3-none-any.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1Pi5xKtfmTt-wm6R28RWNjnyH10Ce1qWr\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1Pi5xKtfmTt-wm6R28RWNjnyH10Ce1qWr\" -o tflite_runtime-2.3.0-py3-none-any.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.3.0/download_tflite_runtime-2.3.0-py3-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1sQq7UMElMw4UwXhYJ0WWMPYG05ef6GAp\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1sQq7UMElMw4UwXhYJ0WWMPYG05ef6GAp\" -o tflite_runtime-2.3.0-py3-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.3.0/download_tflite_runtime-2.3.0-py3-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1TO0l6zH080WSFU50GJpeMjWhpaofdljn\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1TO0l6zH080WSFU50GJpeMjWhpaofdljn\" -o tflite_runtime-2.3.0-py3-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.3.0-rc0/download_tflite_runtime-2.3.0rc0-py3-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=18WoX3HJUzAdV08yq7yeoCyDpOxmIzsk2\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=18WoX3HJUzAdV08yq7yeoCyDpOxmIzsk2\" -o tflite_runtime-2.3.0rc0-py3-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.3.0-rc0/download_tflite_runtime-2.3.0rc0-py3-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=17edK6aEzUKYSzhOMYmJpxBZpDs-dSaE6\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=17edK6aEzUKYSzhOMYmJpxBZpDs-dSaE6\" -o tflite_runtime-2.3.0rc0-py3-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.3.0-rc1/XNNPACK/FlexDelegate+XNNPACK",
    "content": ""
  },
  {
    "path": "2.3.0-rc1/XNNPACK/download_tflite_runtime-2.3.0rc1-py3-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1OG1RZrDmxCpRsvh66nAlkAgzvA_d3jEm\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1OG1RZrDmxCpRsvh66nAlkAgzvA_d3jEm\" -o tflite_runtime-2.3.0rc1-py3-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.3.0-rc1/XNNPACK/download_tflite_runtime-2.3.0rc1-py3-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1J-zrEvvXtH1LAotuU0iIuRnhxHKV-DlN\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1J-zrEvvXtH1LAotuU0iIuRnhxHKV-DlN\" -o tflite_runtime-2.3.0rc1-py3-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.3.0-rc1/download_tflite_runtime-2.3.0rc1-py3-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1dWNIvUdqD1Y2qQJx0xE0tvI_V-izIv3B\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1dWNIvUdqD1Y2qQJx0xE0tvI_V-izIv3B\" -o tflite_runtime-2.3.0rc1-py3-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.3.0-rc1/download_tflite_runtime-2.3.0rc1-py3-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1YbiygQ2XliCE18LfPgPeAqKIAXkephFJ\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1YbiygQ2XliCE18LfPgPeAqKIAXkephFJ\" -o tflite_runtime-2.3.0rc1-py3-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.3.0-rc2/XNNPACK/FlexDelegate+XNNPACK",
    "content": ""
  },
  {
    "path": "2.3.0-rc2/XNNPACK/download_tflite_runtime-2.3.0rc2-py3-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1j_iQtVfFOlsHSlyYcbIj3k9oe07H4wfE\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1j_iQtVfFOlsHSlyYcbIj3k9oe07H4wfE\" -o tflite_runtime-2.3.0rc2-py3-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.3.0-rc2/XNNPACK/download_tflite_runtime-2.3.0rc2-py3-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1boc96D7YifP1uZq8KXP3PoDKN7I5EiJs\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1boc96D7YifP1uZq8KXP3PoDKN7I5EiJs\" -o tflite_runtime-2.3.0rc2-py3-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.3.0-rc2/download_tflite_runtime-2.3.0rc2-py3-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1kxzStmGqSbPrxXbd6PDTzW9sqyzEVUAs\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1kxzStmGqSbPrxXbd6PDTzW9sqyzEVUAs\" -o tflite_runtime-2.3.0rc2-py3-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.3.0-rc2/download_tflite_runtime-2.3.0rc2-py3-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1PzK0_gJ9lOUPG7iNkztZUzqEMm837H5J\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1PzK0_gJ9lOUPG7iNkztZUzqEMm837H5J\" -o tflite_runtime-2.3.0rc2-py3-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.3.1/download_tflite_runtime-2.3.1-py3-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1VEFZbY9nG2D83C11OgK2KqnXw-FOVAj3\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1VEFZbY9nG2D83C11OgK2KqnXw-FOVAj3\" -o tflite_runtime-2.3.1-py3-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.3.1/download_tflite_runtime-2.3.1-py3-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1NVidFWHvnvFDXwyExbc2TqY49A-kR1xM\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1NVidFWHvnvFDXwyExbc2TqY49A-kR1xM\" -o tflite_runtime-2.3.1-py3-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.4.0/BUILD",
    "content": "cc_library(\n    name = \"builtin_op_kernels\",\n    srcs = BUILTIN_KERNEL_SRCS + [\n        \"max_pool_argmax.cc\",\n        \"max_unpooling.cc\",\n        \"transpose_conv_bias.cc\",\n    ],\n    hdrs = [\n        \"dequantize.h\",\n        \"max_pool_argmax.h\",\n        \"max_unpooling.h\",\n        \"transpose_conv_bias.h\",\n    ],\n    compatible_with = get_compatible_with_portable(),\n    copts = tflite_copts() + tf_opts_nortti_if_android() + EXTRA_EIGEN_COPTS,\n    visibility = [\"//visibility:private\"],\n    deps = BUILTIN_KERNEL_DEPS + [\n        \"@ruy//ruy/profiler:instrumentation\",\n        \"//tensorflow/lite/kernels/internal:cppmath\",\n        \"//tensorflow/lite:string\",\n        \"@farmhash_archive//:farmhash\",\n    ],\n)"
  },
  {
    "path": "2.4.0/download_tflite_runtime-2.4.0-py3-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=18GkcYrthUUhukWYuRO_S5ns5mJ9kaiG0\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=18GkcYrthUUhukWYuRO_S5ns5mJ9kaiG0\" -o tflite_runtime-2.4.0-py3-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.4.0/download_tflite_runtime-2.4.0-py3-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1-tckHmUvnoE8YXB3nraS5liK5m1KkPXz\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1-tckHmUvnoE8YXB3nraS5liK5m1KkPXz\" -o tflite_runtime-2.4.0-py3-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.4.0-rc1/download_tflite_runtime-2.4.0rc1-py3-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1TO5bWISQFtmjfEc3RzH_vsekiWYsTubV\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1TO5bWISQFtmjfEc3RzH_vsekiWYsTubV\" -o tflite_runtime-2.4.0rc1-py3-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.4.0-rc1/download_tflite_runtime-2.4.0rc1-py3-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1RKpx55pWZUg0d3l83-dnAoJGqb1GZx01\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1RKpx55pWZUg0d3l83-dnAoJGqb1GZx01\" -o tflite_runtime-2.4.0rc1-py3-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.4.0-rc2/download_tflite_runtime-2.4.0rc2-py3-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1yYoR6jz3FzHvpiUeTNLAsVloJzcE0FtR\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1yYoR6jz3FzHvpiUeTNLAsVloJzcE0FtR\" -o tflite_runtime-2.4.0rc2-py3-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.4.0-rc2/download_tflite_runtime-2.4.0rc2-py3-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1l-VqQvsS-yoqoArM8-0wDCgTxwDbwBYw\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1l-VqQvsS-yoqoArM8-0wDCgTxwDbwBYw\" -o tflite_runtime-2.4.0rc2-py3-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.4.0-rc3/download_tflite_runtime-2.4.0rc3-py3-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1H2CnjyJJSGFCSeEyg-aPAfquN-B-Q1c6\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1H2CnjyJJSGFCSeEyg-aPAfquN-B-Q1c6\" -o tflite_runtime-2.4.0rc3-py3-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.4.0-rc3/download_tflite_runtime-2.4.0rc3-py3-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=16v7eD7xeLodHtU__jkRoVI4R1DGS5XtP\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=16v7eD7xeLodHtU__jkRoVI4R1DGS5XtP\" -o tflite_runtime-2.4.0rc3-py3-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.4.0-rc4/download_tflite_runtime-2.4.0rc4-py3-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=11gLW6mFcMX8cQjNPJhxFrrZ-4Zyzqzbg\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=11gLW6mFcMX8cQjNPJhxFrrZ-4Zyzqzbg\" -o tflite_runtime-2.4.0rc4-py3-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.4.0-rc4/download_tflite_runtime-2.4.0rc4-py3-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1N4gOnuwNUKYM_0qoHZSKx4yVbKLtS-DV\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1N4gOnuwNUKYM_0qoHZSKx4yVbKLtS-DV\" -o tflite_runtime-2.4.0rc4-py3-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.4.1/download_tflite_runtime-2.4.1-py3-none-any.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1fZZYSgB8X9f-AAzfUJ60jdlgl6OXWQii\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1fZZYSgB8X9f-AAzfUJ60jdlgl6OXWQii\" -o tflite_runtime-2.4.0-py3-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0/download_tflite_runtime-2.5.0-cp37-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1FvtLZSZFQmV5Ars8BBYFnZIX4X7jg1lA\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1FvtLZSZFQmV5Ars8BBYFnZIX4X7jg1lA\" -o tflite_runtime-2.5.0-cp37-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0/download_tflite_runtime-2.5.0-cp37-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1VyUX4HTrPE9-xuEbl3gclaN_CHD9sfWA\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1VyUX4HTrPE9-xuEbl3gclaN_CHD9sfWA\" -o tflite_runtime-2.5.0-cp37-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0/download_tflite_runtime-2.5.0-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1gO5IAN3JpdMj0cB8-w_uJcr2_gaX5XW6\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1gO5IAN3JpdMj0cB8-w_uJcr2_gaX5XW6\" -o tflite_runtime-2.5.0-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0/download_tflite_runtime-2.5.0-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=16i_bBRhEldAPou1t1aJLsl351i-MsuGt\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=16i_bBRhEldAPou1t1aJLsl351i-MsuGt\" -o tflite_runtime-2.5.0-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc0/download_tflite_runtime-2.5.0rc0-cp37-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=15kbKiyCpY_PPkjCbRcChztujRbBlbazS\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=15kbKiyCpY_PPkjCbRcChztujRbBlbazS\" -o tflite_runtime-2.5.0rc0-cp37-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc0/download_tflite_runtime-2.5.0rc0-cp37-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1nhbLPtL-wzxUbEL_6-cpIgLrvw9ifLRh\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1nhbLPtL-wzxUbEL_6-cpIgLrvw9ifLRh\" -o tflite_runtime-2.5.0rc0-cp37-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc0/download_tflite_runtime-2.5.0rc0-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1SJkbMZZhJVd0Y9mMo4jfWgCeB1wIpkD9\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1SJkbMZZhJVd0Y9mMo4jfWgCeB1wIpkD9\" -o tflite_runtime-2.5.0rc0-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc0/download_tflite_runtime-2.5.0rc0-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1dbvHkCRHheJr2FiKb73yg0iaJwrX94Ff\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1dbvHkCRHheJr2FiKb73yg0iaJwrX94Ff\" -o tflite_runtime-2.5.0rc0-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc1/download_tflite_runtime-2.5.0rc1-cp37-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1nooXpZMoXNo45XqgY6YEsbKid5w1R8dm\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1nooXpZMoXNo45XqgY6YEsbKid5w1R8dm\" -o tflite_runtime-2.5.0rc1-cp37-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc1/download_tflite_runtime-2.5.0rc1-cp37-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1Qi841ocSNMIcsYF6-hSJYqT-jr3Jrz3u\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1Qi841ocSNMIcsYF6-hSJYqT-jr3Jrz3u\" -o tflite_runtime-2.5.0rc1-cp37-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc1/download_tflite_runtime-2.5.0rc1-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1O8fB1nLLXssVaRHg9mGFO97KAyBrtUf0\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1O8fB1nLLXssVaRHg9mGFO97KAyBrtUf0\" -o tflite_runtime-2.5.0rc1-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc1/download_tflite_runtime-2.5.0rc1-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1LcxeYlCw0UF8vxP6T2aW0g4MWVaAbxWj\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1LcxeYlCw0UF8vxP6T2aW0g4MWVaAbxWj\" -o tflite_runtime-2.5.0rc1-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc2/download_tflite_runtime-2.5.0rc2-cp37-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1MPhLf3FPgigCQoX3PK9LFDSks2Vh2wov\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1MPhLf3FPgigCQoX3PK9LFDSks2Vh2wov\" -o tflite_runtime-2.5.0rc2-cp37-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc2/download_tflite_runtime-2.5.0rc2-cp37-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1urtaraaPjnozaUKDSiCyBNUmw1T8rguM\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1urtaraaPjnozaUKDSiCyBNUmw1T8rguM\" -o tflite_runtime-2.5.0rc2-cp37-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc2/download_tflite_runtime-2.5.0rc2-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1R8cFp--EH8Yu7KfZyBn6mswGG6KWRqL3\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1R8cFp--EH8Yu7KfZyBn6mswGG6KWRqL3\" -o tflite_runtime-2.5.0rc2-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc2/download_tflite_runtime-2.5.0rc2-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=14nC9TEwxC5e9koz8_JweCImj8JzFj3v3\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=14nC9TEwxC5e9koz8_JweCImj8JzFj3v3\" -o tflite_runtime-2.5.0rc2-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc3/download_tflite_runtime-2.5.0rc2-cp37-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=19c7psJ9JSwivM2EQezM8UacBea-WY6_R\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=19c7psJ9JSwivM2EQezM8UacBea-WY6_R\" -o tflite_runtime-2.5.0rc3-cp37-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc3/download_tflite_runtime-2.5.0rc2-cp37-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1L_jAm1U3soa6B9SX0L01mAt2rXfMCmxU\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1L_jAm1U3soa6B9SX0L01mAt2rXfMCmxU\" -o tflite_runtime-2.5.0rc3-cp37-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc3/download_tflite_runtime-2.5.0rc2-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1dNuIPXcWX__c1UR70rvMwEXY3E19acQ3\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1dNuIPXcWX__c1UR70rvMwEXY3E19acQ3\" -o tflite_runtime-2.5.0rc3-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.5.0-rc3/download_tflite_runtime-2.5.0rc2-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=18qccamitnE4G3TkJHPM3AK6inl_bhPbY\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=18qccamitnE4G3TkJHPM3AK6inl_bhPbY\" -o tflite_runtime-2.5.0rc3-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.6.0/download_tflite_runtime-2.6.0-cp37-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1dlEbugFDJXs-YDBCUC6WjADVtIttWxZA\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1dlEbugFDJXs-YDBCUC6WjADVtIttWxZA\" -o tflite_runtime-2.6.0-cp37-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.6.0/download_tflite_runtime-2.6.0-cp37-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1spTTF8tquh90GHoZnfyUkZPBOD6oOrPd\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1spTTF8tquh90GHoZnfyUkZPBOD6oOrPd\" -o tflite_runtime-2.6.0-cp37-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.6.0/download_tflite_runtime-2.6.0-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1oHHjgVRzV2kKCfmxVD_L_qdAdAbHFuKZ\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1oHHjgVRzV2kKCfmxVD_L_qdAdAbHFuKZ\" -o tflite_runtime-2.6.0-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.6.0/download_tflite_runtime-2.6.0-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1Q5NWrZDDlsi7b8UJOdpFAAkkdE53TemP\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1Q5NWrZDDlsi7b8UJOdpFAAkkdE53TemP\" -o tflite_runtime-2.6.0-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.6.0/download_tflite_runtime-2.6.0-cp39-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=11kxTWwkGfjHAY7TW337xS6PmR4MLPKWx\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=11kxTWwkGfjHAY7TW337xS6PmR4MLPKWx\" -o tflite_runtime-2.6.0-cp39-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.6.0/download_tflite_runtime-2.6.0-cp39-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=125ipZr8M66YF0_gXSONpJZoB5XXnf9jz\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=125ipZr8M66YF0_gXSONpJZoB5XXnf9jz\" -o tflite_runtime-2.6.0-cp39-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.6.0-rc1/download_tflite_runtime-2.6.0rc1-cp37-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=14oh06MoWluyxGobayMkjEg-rpdLHdQUb\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=14oh06MoWluyxGobayMkjEg-rpdLHdQUb\" -o tflite_runtime-2.6.0rc1-cp37-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.6.0-rc1/download_tflite_runtime-2.6.0rc1-cp37-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1_1eC0NCXnoVeNhxoSVHtS_YsKxfwHm_T\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1_1eC0NCXnoVeNhxoSVHtS_YsKxfwHm_T\" -o tflite_runtime-2.6.0rc1-cp37-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.6.0-rc1/download_tflite_runtime-2.6.0rc1-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1OHqBgV5yCf3JDT3PCt3oiPpt1-NJU0vG\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1OHqBgV5yCf3JDT3PCt3oiPpt1-NJU0vG\" -o tflite_runtime-2.6.0rc1-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.6.0-rc1/download_tflite_runtime-2.6.0rc1-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1eoQ4pw3MRG7TbJ1jvL174sdgmacvUpvo\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1eoQ4pw3MRG7TbJ1jvL174sdgmacvUpvo\" -o tflite_runtime-2.6.0rc1-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.6.0-rc1/download_tflite_runtime-2.6.0rc1-cp39-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1lBo9Ou5UdGWqawjWM25gXhzoVuREJVpm\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1lBo9Ou5UdGWqawjWM25gXhzoVuREJVpm\" -o tflite_runtime-2.6.0rc1-cp39-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.7.0/download_tflite_runtime-2.7.0-cp37-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1BMuVqI0RTg_DvvQbIZwCxeY5d5-yFSTN\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1BMuVqI0RTg_DvvQbIZwCxeY5d5-yFSTN\" -o tflite_runtime-2.7.0-cp37-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.7.0/download_tflite_runtime-2.7.0-cp37-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1Z5PdWC28bh04F-NQwC8zx1JvUtPpE_nT\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1Z5PdWC28bh04F-NQwC8zx1JvUtPpE_nT\" -o tflite_runtime-2.7.0-cp37-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.7.0/download_tflite_runtime-2.7.0-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1mSv2tccMKAUEygk29V4Yrw_L1IU32NjP\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1mSv2tccMKAUEygk29V4Yrw_L1IU32NjP\" -o tflite_runtime-2.7.0-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.7.0/download_tflite_runtime-2.7.0-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1E79c2jJ5rmAd-ccSZOwJu6pvOObOQl6D\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1E79c2jJ5rmAd-ccSZOwJu6pvOObOQl6D\" -o tflite_runtime-2.7.0-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.7.0/download_tflite_runtime-2.7.0-cp39-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=12F2q4VaFhNlS2jArl-WpVwtUr3pkVXyH\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=12F2q4VaFhNlS2jArl-WpVwtUr3pkVXyH\" -o tflite_runtime-2.7.0-cp39-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.7.0/download_tflite_runtime-2.7.0-cp39-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -sc /tmp/cookie \"https://drive.google.com/uc?export=download&id=1KDzvJEeTM6u5onA9EgtW_YW1DRgnP-Wu\" > /dev/null\nCODE=\"$(awk '/_warning_/ {print $NF}' /tmp/cookie)\"\ncurl -Lb /tmp/cookie \"https://drive.google.com/uc?export=download&confirm=${CODE}&id=1KDzvJEeTM6u5onA9EgtW_YW1DRgnP-Wu\" -o tflite_runtime-2.7.0-cp39-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.8.0/download_tflite_runtime-2.8.0-cp37-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -L https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.8.0/tflite_runtime-2.8.0-cp37-none-linux_aarch64.whl -o tflite_runtime-2.8.0-cp37-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.8.0/download_tflite_runtime-2.8.0-cp37-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -L https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.8.0/tflite_runtime-2.8.0-cp37-none-linux_armv7l.whl -o tflite_runtime-2.8.0-cp37-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.8.0/download_tflite_runtime-2.8.0-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -L https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.8.0/tflite_runtime-2.8.0-cp38-none-linux_aarch64.whl -o tflite_runtime-2.8.0-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.8.0/download_tflite_runtime-2.8.0-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -L https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.8.0/tflite_runtime-2.8.0-cp38-none-linux_armv7l.whl -o tflite_runtime-2.8.0-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.8.0/download_tflite_runtime-2.8.0-cp39-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -L https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.8.0/tflite_runtime-2.8.0-cp39-none-linux_aarch64.whl -o tflite_runtime-2.8.0-cp39-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.8.0/download_tflite_runtime-2.8.0-cp39-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -L https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.8.0/tflite_runtime-2.8.0-cp39-none-linux_armv7l.whl -o tflite_runtime-2.8.0-cp39-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.9.0/download_tflite_runtime-2.9.0-cp310-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.9.0/tflite_runtime-2.9.0-cp310-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.9.0/download_tflite_runtime-2.9.0-cp310-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.9.0/tflite_runtime-2.9.0-cp310-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.9.0/download_tflite_runtime-2.9.0-cp37-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.9.0/tflite_runtime-2.9.0-cp37-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.9.0/download_tflite_runtime-2.9.0-cp37-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.9.0/tflite_runtime-2.9.0-cp37-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.9.0/download_tflite_runtime-2.9.0-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.9.0/tflite_runtime-2.9.0-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.9.0/download_tflite_runtime-2.9.0-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.9.0/tflite_runtime-2.9.0-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.9.0/download_tflite_runtime-2.9.0-cp39-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.9.0/tflite_runtime-2.9.0-cp39-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.9.0/download_tflite_runtime-2.9.0-cp39-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.9.0/tflite_runtime-2.9.0-cp39-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.9.0-rc0/download_tflite_runtime-2.9.0rc0-cp37-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.9.0-rc0/tflite_runtime-2.9.0rc0-cp37-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.9.0-rc0/download_tflite_runtime-2.9.0rc0-cp37-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.9.0-rc0/tflite_runtime-2.9.0rc0-cp37-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.9.0-rc0/download_tflite_runtime-2.9.0rc0-cp38-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.9.0-rc0/tflite_runtime-2.9.0rc0-cp38-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.9.0-rc0/download_tflite_runtime-2.9.0rc0-cp38-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.9.0-rc0/tflite_runtime-2.9.0rc0-cp38-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.9.0-rc0/download_tflite_runtime-2.9.0rc0-cp39-none-linux_aarch64.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.9.0-rc0/tflite_runtime-2.9.0rc0-cp39-none-linux_aarch64.whl\n\necho Download finished.\n"
  },
  {
    "path": "2.9.0-rc0/download_tflite_runtime-2.9.0rc0-cp39-none-linux_armv7l.whl.sh",
    "content": "#!/bin/bash\n\ncurl -OL https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.9.0-rc0/tflite_runtime-2.9.0rc0-cp39-none-linux_armv7l.whl\n\necho Download finished.\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright 2019 The TensorFlow Authors.  All rights reserved.\n\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "# TensorflowLite-bin\nPrebuilt binary for TensorflowLite's standalone installer. For RaspberryPi.\nI provide a **`FlexDelegate`**, **`XNNPACK`** enabled binary.\n\nHere is the Tensorflow's official **[README](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/tools/pip_package)**.\n\nIf you want the best performance with RaspberryPi4/3, install Ubuntu 18.04+ aarch64 (64bit) instead of Raspbian armv7l (32bit). The official Tensorflow Lite is performance tuned for aarch64. On aarch64 OS, performance is about 4 times higher than on armv7l OS.\n**[How to install Ubuntu 19.10 aarch64 (64bit) on RaspberryPi4 - Qiita - PINTO](https://qiita.com/PINTO/items/adc5db7af7a5996c0f72)**\n\nThe full build package for Tensorflow can be found **[here (Tensorflow-bin)](https://github.com/PINTO0309/Tensorflow-bin.git)**.\n\nTensorFlow Lite will continue to have TensorFlow Lite builtin ops optimized for mobile and embedded devices. However, TensorFlow Lite models can now use a subset of TensorFlow ops when TFLite builtin ops are not sufficient.\n**1. [TensorflowLite-flexdelegate (Tensorflow Select Ops) - Github - PINTO0309](https://github.com/PINTO0309/TensorflowLite-flexdelegate.git)**\n**2. [Select TensorFlow operators to use in TensorFlow Lite](https://www.tensorflow.org/lite/guide/ops_select)**\n\nA repository that shares tuning results of trained models generated by Tensorflow. Post-training quantization (Weight Quantization, Integer Quantization, Full Integer Quantization), Quantization-aware training.\n**[PINTO_model_zoo - Github - PINTO0309](https://github.com/PINTO0309/PINTO_model_zoo.git)**\n\n## Reference articles\n- My article. **[Tensorflow Lite v1.14.0 / v1.15.0-rc0 armhf (armv7l) is tuned for MultiThread acceleration and cross-compiled for RaspberryPi on Ubuntu](https://qiita.com/PINTO/items/961010e38aa77fb6269b)**\n\n- Please refer to the following URL for details of performance. **[Post-training quantization with TF2.0 Keras - nb.o’s Diary](https://nextremer-nbo.blogspot.com/2019/10/tf20keraspost-training-quantization.html?m=1)**. The performance evaluation article was created by **[@Nextremer_nb_o\n](https://mobile.twitter.com/Nextremer_nb_o)** / **[Github](https://github.com/NobuoTsukamoto)**. Thank you.\n\n- **[[Japanese ver.] [Tensorflow Lite] Various Neural Network Model quantization methods for Tensorflow Lite (Weight Quantization, Integer Quantization, Full Integer Quantization, Float16 Quantization, EdgeTPU). As of May 05, 2020.](https://qiita.com/PINTO/items/008c54536fca690e0572)**\n\n- **[[English ver.] [Tensorflow Lite] Various Neural Network Model quantization methods for Tensorflow Lite (Weight Quantization, Integer Quantization, Full Integer Quantization, Float16 Quantization, EdgeTPU). As of May 05, 2020.](https://qiita.com/PINTO/items/865250ee23a15339d556)**\n\n- **[A standalone 2MB installer for TensorflowLite v2.4.0-rc4 and a libedgetpu.so.1 build intended to run on a Yocto-generated environment](https://qiita.com/PINTO/items/effb80ee349d8db6af1b)**\n\n- **[Add a custom OP to the TFLite runtime to build the whl installer (for Python)](https://zenn.dev/pinto0309/articles/a0e40c2817f2ee)**, **`MaxPoolingWithArgmax2D`**, **`MaxUnpooling2D`**, **`Convolution2DTransposeBias`**\n\n## Python API packages\n\n|Device|OS|Distribution|Architecture|Python ver|Note|\n|:--|:--|:--|:--|:--|:--|\n|RaspberryPi3/4|Raspbian/Debian|Stretch|armhf / armv7l|3.5|32bit|\n|RaspberryPi3/4|Raspbian/Debian|Stretch|aarch64 / armv8|3.5|64bit|\n|RaspberryPi3/4|Raspbian/Debian|Buster|armhf / armv7l|3.7 / 2.7|32bit|\n|RaspberryPi3/4|Raspbian/Debian|Buster|aarch64 / armv8|3.7 / 2.7|64bit|\n|RaspberryPi3/4|Ubuntu 20.04|Focal|armhf / armv7l|3.8|32bit|\n|RaspberryPi3/4|Ubuntu 20.04|Focal|aarch64 / armv8|3.8|64bit|\n|RaspberryPi3/4|Ubuntu 21.04/Debian/RaspberryPiOS|Hirsute/Bullseye|armhf / armv7l|3.9|32bit|\n|RaspberryPi3/4|Ubuntu 21.04/Debian/RaspberryPiOS|Hirsute/Bullseye|aarch64 / armv8|3.9|64bit|\n|RaspberryPi3/4|Ubuntu 22.04|Jammy|armhf / armv7l|3.10|32bit|\n|RaspberryPi3/4|Ubuntu 22.04|Jammy|aarch64 / armv8|3.10|64bit|\n|RaspberryPi3/4/5|RaspberryPiOS/Debian|Bookworm|armhf / armv7l|3.11|32bit|\n|RaspberryPi3/4/5|RaspberryPiOS/Debian|Bookworm|aarch64 / armv8|3.11|64bit|\n\n## Usage\n```bash\nsudo apt-get update && \\\nsudo apt install -y \\\n  swig \\\n  libjpeg-dev \\\n  zlib1g-dev \\\n  python3-dev \\\n  python-is-python3 \\\n  unzip \\\n  wget \\\n  python3-pip \\\n  curl \\\n  git \\\n  cmake \\\n  make\n\npip install -U pip\npip install numpy\n\nTFVER=2.15.0.post1\n\nPYVER=39\nor\nPYVER=310\nor\nPYVER=311\n\nARCH=aarch64\nor\nARCH=armhf\n\npip install \\\n--no-cache-dir \\\nhttps://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp${PYVER}-none-linux_${ARCH}.whl\n```\n\n## Note\nUnlike tensorflow this will be installed to a tflite_runtime namespace.\nYou can then use the Tensorflow Lite interpreter as.\n```python\nfrom tflite_runtime.interpreter import Interpreter\n### Tensorflow v2.2.0\ninterpreter = Interpreter(model_path=\"foo.tflite\")\n### Tensorflow v2.3.0+\ninterpreter = Interpreter(model_path=\"foo.tflite\", num_threads=4)\n```\n\n## Build\n```bash\nBRANCH=r2.16-tflite-build\ngit clone -b ${BRANCH} --depth 1 https://github.com/PINTO0309/tensorflow.git\ncd tensorflow/lite/tools/pip_package\n\nmake BASE_IMAGE=ubuntu:22.04 PYTHON=python3 PYTHON_VERSION=3.10 TENSORFLOW_TARGET=aarch64 docker-build\nmake BASE_IMAGE=debian:bookworm PYTHON=python3 PYTHON_VERSION=3.11 TENSORFLOW_TARGET=aarch64 docker-build\n\nmake BASE_IMAGE=ubuntu:22.04 PYTHON=python3 PYTHON_VERSION=3.10 TENSORFLOW_TARGET=armhf docker-build\nmake BASE_IMAGE=debian:bookworm PYTHON=python3 PYTHON_VERSION=3.11 TENSORFLOW_TARGET=armhf docker-build\n\nmake BASE_IMAGE=ubuntu:22.04 PYTHON=python3 PYTHON_VERSION=3.10 TENSORFLOW_TARGET=native docker-build\n```\n\n## Operation check 【Classification】\n**Sample of MultiThread x4 by Tensorflow Lite [MobileNetV1 / 75ms]**\n![01](media/01.png)\n\n**Sample of MultiThread x4 by Tensorflow Lite [MobileNetV2 / 68ms]**\n![02](media/02.png)\n\n- **Environmental preparation**\n```bash\n$ cd ~;mkdir test\n$ curl https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/lite/examples/label_image/testdata/grace_hopper.bmp -o ~/test/grace_hopper.bmp\n$ curl https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_1.0_224_frozen.tgz | tar xzv -C ~/test mobilenet_v1_1.0_224/labels.txt\n$ mv ~/test/mobilenet_v1_1.0_224/labels.txt ~/test/\n$ curl http://download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_1.0_224_quant.tgz | tar xzv -C ~/test\n$ cd ~/test\n```\n- **label_image.py**\n```python\nimport argparse\nimport numpy as np\nimport time\n\nfrom PIL import Image\n\nfrom tflite_runtime.interpreter import Interpreter\n\ndef load_labels(filename):\n  my_labels = []\n  input_file = open(filename, 'r')\n  for l in input_file:\n    my_labels.append(l.strip())\n  return my_labels\nif __name__ == \"__main__\":\n  floating_model = False\n  parser = argparse.ArgumentParser()\n  parser.add_argument(\n    \"-i\",\n    \"--image\",\n    default=\"/tmp/grace_hopper.bmp\", \\\n    help=\"image to be classified\"\n  )\n  parser.add_argument(\n    \"-m\",\n    \"--model_file\", \\\n    default=\"/tmp/mobilenet_v1_1.0_224_quant.tflite\", \\\n    help=\".tflite model to be executed\"\n  )\n  parser.add_argument(\n    \"-l\",\n    \"--label_file\",\n    default=\"/tmp/labels.txt\", \\\n    help=\"name of file containing labels\"\n  )\n  parser.add_argument(\n    \"--input_mean\",\n    default=127.5,\n    help=\"input_mean\"\n  )\n  parser.add_argument(\n    \"--input_std\",\n    default=127.5, \\\n    help=\"input standard deviation\"\n  )\n  parser.add_argument(\n    \"--num_threads\",\n    default=1,\n    help=\"number of threads\"\n  )\n  args = parser.parse_args()\n\n  interpreter = Interpreter(\n    model_path=\"foo.tflite\",\n    num_threads=args.num_threads\n  )\n  try:\n    interpreter.allocate_tensors()\n  except:\n    pass\n  input_details = interpreter.get_input_details()\n  output_details = interpreter.get_output_details()\n  # check the type of the input tensor\n  if input_details[0]['dtype'] == np.float32:\n    floating_model = True\n  # NxHxWxC, H:1, W:2\n  height = input_details[0]['shape'][1]\n  width = input_details[0]['shape'][2]\n  img = Image.open(args.image)\n  img = img.resize((width, height))\n  # add N dim\n  input_data = np.expand_dims(img, axis=0)\n  if floating_model:\n    input_data = (np.float32(input_data) - args.input_mean) / args.input_std\n\n  interpreter.set_tensor(input_details[0]['index'], input_data)\n\n  start_time = time.time()\n  interpreter.invoke()\n  stop_time = time.time()\n\n  output_data = interpreter.get_tensor(output_details[0]['index'])\n  results = np.squeeze(output_data)\n  top_k = results.argsort()[-5:][::-1]\n  labels = load_labels(args.label_file)\n  for i in top_k:\n    if floating_model:\n      print('{0:08.6f}'.format(float(results[i]))+\":\", labels[i])\n    else:\n      print('{0:08.6f}'.format(float(results[i]/255.0))+\":\", labels[i])\n\n  print(\"time: \", stop_time - start_time)\n```\n- **Inference test**\n```bash\n$ python3 label_image.py \\\n--num_threads 4 \\\n--image grace_hopper.bmp \\\n--model_file mobilenet_v1_1.0_224_quant.tflite \\\n--label_file labels.txt\n```\n\n## Operation check 【ObjectDetection】\n### Sample of MultiThread x4 by Tensorflow Lite + Raspbian Buster (armhf) + RaspberryPi3 [MobileNetV2-SSD / 160ms]\n![03](media/03.png)\n![04](media/04.png)\n### Sample of MultiThread x4 by Tensorflow Lite + Ubuntu18.04 (aarch64) + RaspberryPi3 [MobileNetV2-SSD / 140ms]\n![06](media/06.png)\n\n## Inference test\n```bash\n$ python3 mobilenetv2ssd.py\n```\n### MobileNetV2-SSD (UINT8) + Corei7 CPU only + USB Camera + 10 Threads + Async\n![05](media/05.gif)\n\n### MobileNetV2-SSDLite (UINT8) + RaspberryPi4 CPU only + USB Camera 640x480 + 4 Threads + Sync + Disp 1080p\n![07](media/07.gif)\n\n## List of quantized models\n**https://www.tensorflow.org/lite/guide/hosted_models**\n\n## Other MobileNetV1 weight files\n**https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md**\n\n## Other MobileNetV2 weight files\n**https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/README.md**\n\n## Reference\n**tflite only python package https://github.com/PINTO0309/Tensorflow-bin/issues/15**\n**Incorrect predictions of Mobilenet_V2 https://github.com/tensorflow/tensorflow/issues/31229#issuecomment-527296093**\n\n"
  },
  {
    "path": "label_image.py",
    "content": "import argparse\nimport numpy as np\nimport time\n\nfrom PIL import Image\n\nfrom tflite_runtime.interpreter import Interpreter\n\ndef load_labels(filename):\n  my_labels = []\n  input_file = open(filename, 'r')\n  for l in input_file:\n    my_labels.append(l.strip())\n  return my_labels\nif __name__ == \"__main__\":\n  floating_model = False\n  parser = argparse.ArgumentParser()\n  parser.add_argument(\"-i\", \"--image\", type=str, default=\"grace_hopper.bmp\", help=\"image to be classified\")\n  parser.add_argument(\"-m\", \"--model_file\", type=str, default=\"mobilenet_v1_1.0_224_quant.tflite\", help=\".tflite model to be executed\")\n  parser.add_argument(\"-l\", \"--label_file\", type=str, default=\"labels.txt\", help=\"name of file containing labels\")\n  parser.add_argument(\"--input_mean\", type=float,default=127.5, help=\"input_mean\")\n  parser.add_argument(\"--input_std\", type=float, default=127.5,  help=\"input standard deviation\")\n  parser.add_argument(\"--num_threads\", type=int, default=4, help=\"number of threads\")\n  args = parser.parse_args()\n\n  interpreter = Interpreter(\n    model_path=args.model_file,\n    num_threads=args.num_threads,\n  )\n  try:\n    interpreter.allocate_tensors()\n  except:\n    pass\n  input_details = interpreter.get_input_details()\n  output_details = interpreter.get_output_details()\n  # check the type of the input tensor\n  if input_details[0]['dtype'] == np.float32:\n    floating_model = True\n  # NxHxWxC, H:1, W:2\n  height = input_details[0]['shape'][1]\n  width = input_details[0]['shape'][2]\n  img = Image.open(args.image)\n  img = img.resize((width, height))\n  # add N dim\n  input_data = np.expand_dims(img, axis=0)\n  if floating_model:\n    input_data = (np.float32(input_data) - args.input_mean) / args.input_std\n  interpreter.set_tensor(input_details[0]['index'], input_data)\n\n  start_time = time.time()\n  interpreter.invoke()\n  stop_time = time.time()\n\n  output_data = interpreter.get_tensor(output_details[0]['index'])\n  results = np.squeeze(output_data)\n  top_k = results.argsort()[-5:][::-1]\n  labels = load_labels(args.label_file)\n  for i in top_k:\n    if floating_model:\n      print('{0:08.6f}'.format(float(results[i]))+\":\", labels[i])\n    else:\n      print('{0:08.6f}'.format(float(results[i]/255.0))+\":\", labels[i])\n\n  print(\"time: \", stop_time - start_time)\n"
  },
  {
    "path": "labels.txt",
    "content": "0:background\n1:tench, Tinca tinca\n2:goldfish, Carassius auratus\n3:great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias\n4:tiger shark, Galeocerdo cuvieri\n5:hammerhead, hammerhead shark\n6:electric ray, crampfish, numbfish, torpedo\n7:stingray\n8:cock\n9:hen\n10:ostrich, Struthio camelus\n11:brambling, Fringilla montifringilla\n12:goldfinch, Carduelis carduelis\n13:house finch, linnet, Carpodacus mexicanus\n14:junco, snowbird\n15:indigo bunting, indigo finch, indigo bird, Passerina cyanea\n16:robin, American robin, Turdus migratorius\n17:bulbul\n18:jay\n19:magpie\n20:chickadee\n21:water ouzel, dipper\n22:kite\n23:bald eagle, American eagle, Haliaeetus leucocephalus\n24:vulture\n25:great grey owl, great gray owl, Strix nebulosa\n26:European fire salamander, Salamandra salamandra\n27:common newt, Triturus vulgaris\n28:eft\n29:spotted salamander, Ambystoma maculatum\n30:axolotl, mud puppy, Ambystoma mexicanum\n31:bullfrog, Rana catesbeiana\n32:tree frog, tree-frog\n33:tailed frog, bell toad, ribbed toad, tailed toad, Ascaphus trui\n34:loggerhead, loggerhead turtle, Caretta caretta\n35:leatherback turtle, leatherback, leathery turtle, Dermochelys coriacea\n36:mud turtle\n37:terrapin\n38:box turtle, box tortoise\n39:banded gecko\n40:common iguana, iguana, Iguana iguana\n41:American chameleon, anole, Anolis carolinensis\n42:whiptail, whiptail lizard\n43:agama\n44:frilled lizard, Chlamydosaurus kingi\n45:alligator lizard\n46:Gila monster, Heloderma suspectum\n47:green lizard, Lacerta viridis\n48:African chameleon, Chamaeleo chamaeleon\n49:Komodo dragon, Komodo lizard, dragon lizard, giant lizard, Varanus komodoensis\n50:African crocodile, Nile crocodile, Crocodylus niloticus\n51:American alligator, Alligator mississipiensis\n52:triceratops\n53:thunder snake, worm snake, Carphophis amoenus\n54:ringneck snake, ring-necked snake, ring snake\n55:hognose snake, puff adder, sand viper\n56:green snake, grass snake\n57:king snake, kingsnake\n58:garter snake, grass snake\n59:water snake\n60:vine snake\n61:night snake, Hypsiglena torquata\n62:boa constrictor, Constrictor constrictor\n63:rock python, rock snake, Python sebae\n64:Indian cobra, Naja naja\n65:green mamba\n66:sea snake\n67:horned viper, cerastes, sand viper, horned asp, Cerastes cornutus\n68:diamondback, diamondback rattlesnake, Crotalus adamanteus\n69:sidewinder, horned rattlesnake, Crotalus cerastes\n70:trilobite\n71:harvestman, daddy longlegs, Phalangium opilio\n72:scorpion\n73:black and gold garden spider, Argiope aurantia\n74:barn spider, Araneus cavaticus\n75:garden spider, Aranea diademata\n76:black widow, Latrodectus mactans\n77:tarantula\n78:wolf spider, hunting spider\n79:tick\n80:centipede\n81:black grouse\n82:ptarmigan\n83:ruffed grouse, partridge, Bonasa umbellus\n84:prairie chicken, prairie grouse, prairie fowl\n85:peacock\n86:quail\n87:partridge\n88:African grey, African gray, Psittacus erithacus\n89:macaw\n90:sulphur-crested cockatoo, Kakatoe galerita, Cacatua galerita\n91:lorikeet\n92:coucal\n93:bee eater\n94:hornbill\n95:hummingbird\n96:jacamar\n97:toucan\n98:drake\n99:red-breasted merganser, Mergus serrator\n100:goose\n101:black swan, Cygnus atratus\n102:tusker\n103:echidna, spiny anteater, anteater\n104:platypus, duckbill, duckbilled platypus, duck-billed platypus, Ornithorhynchus anatinus\n105:wallaby, brush kangaroo\n106:koala, koala bear, kangaroo bear, native bear, Phascolarctos cinereus\n107:wombat\n108:jellyfish\n109:sea anemone, anemone\n110:brain coral\n111:flatworm, platyhelminth\n112:nematode, nematode worm, roundworm\n113:conch\n114:snail\n115:slug\n116:sea slug, nudibranch\n117:chiton, coat-of-mail shell, sea cradle, polyplacophore\n118:chambered nautilus, pearly nautilus, nautilus\n119:Dungeness crab, Cancer magister\n120:rock crab, Cancer irroratus\n121:fiddler crab\n122:king crab, Alaska crab, Alaskan king crab, Alaska king crab, Paralithodes camtschatica\n123:American lobster, Northern lobster, Maine lobster, Homarus americanus\n124:spiny lobster, langouste, rock lobster, crawfish, crayfish, sea crawfish\n125:crayfish, crawfish, crawdad, crawdaddy\n126:hermit crab\n127:isopod\n128:white stork, Ciconia ciconia\n129:black stork, Ciconia nigra\n130:spoonbill\n131:flamingo\n132:little blue heron, Egretta caerulea\n133:American egret, great white heron, Egretta albus\n134:bittern\n135:crane\n136:limpkin, Aramus pictus\n137:European gallinule, Porphyrio porphyrio\n138:American coot, marsh hen, mud hen, water hen, Fulica americana\n139:bustard\n140:ruddy turnstone, Arenaria interpres\n141:red-backed sandpiper, dunlin, Erolia alpina\n142:redshank, Tringa totanus\n143:dowitcher\n144:oystercatcher, oyster catcher\n145:pelican\n146:king penguin, Aptenodytes patagonica\n147:albatross, mollymawk\n148:grey whale, gray whale, devilfish, Eschrichtius gibbosus, Eschrichtius robustus\n149:killer whale, killer, orca, grampus, sea wolf, Orcinus orca\n150:dugong, Dugong dugon\n151:sea lion\n152:Chihuahua\n153:Japanese spaniel\n154:Maltese dog, Maltese terrier, Maltese\n155:Pekinese, Pekingese, Peke\n156:Shih-Tzu\n157:Blenheim spaniel\n158:papillon\n159:toy terrier\n160:Rhodesian ridgeback\n161:Afghan hound, Afghan\n162:basset, basset hound\n163:beagle\n164:bloodhound, sleuthhound\n165:bluetick\n166:black-and-tan coonhound\n167:Walker hound, Walker foxhound\n168:English foxhound\n169:redbone\n170:borzoi, Russian wolfhound\n171:Irish wolfhound\n172:Italian greyhound\n173:whippet\n174:Ibizan hound, Ibizan Podenco\n175:Norwegian elkhound, elkhound\n176:otterhound, otter hound\n177:Saluki, gazelle hound\n178:Scottish deerhound, deerhound\n179:Weimaraner\n180:Staffordshire bullterrier, Staffordshire bull terrier\n181:American Staffordshire terrier, Staffordshire terrier, American pit bull terrier, pit bull terrier\n182:Bedlington terrier\n183:Border terrier\n184:Kerry blue terrier\n185:Irish terrier\n186:Norfolk terrier\n187:Norwich terrier\n188:Yorkshire terrier\n189:wire-haired fox terrier\n190:Lakeland terrier\n191:Sealyham terrier, Sealyham\n192:Airedale, Airedale terrier\n193:cairn, cairn terrier\n194:Australian terrier\n195:Dandie Dinmont, Dandie Dinmont terrier\n196:Boston bull, Boston terrier\n197:miniature schnauzer\n198:giant schnauzer\n199:standard schnauzer\n200:Scotch terrier, Scottish terrier, Scottie\n201:Tibetan terrier, chrysanthemum dog\n202:silky terrier, Sydney silky\n203:soft-coated wheaten terrier\n204:West Highland white terrier\n205:Lhasa, Lhasa apso\n206:flat-coated retriever\n207:curly-coated retriever\n208:golden retriever\n209:Labrador retriever\n210:Chesapeake Bay retriever\n211:German short-haired pointer\n212:vizsla, Hungarian pointer\n213:English setter\n214:Irish setter, red setter\n215:Gordon setter\n216:Brittany spaniel\n217:clumber, clumber spaniel\n218:English springer, English springer spaniel\n219:Welsh springer spaniel\n220:cocker spaniel, English cocker spaniel, cocker\n221:Sussex spaniel\n222:Irish water spaniel\n223:kuvasz\n224:schipperke\n225:groenendael\n226:malinois\n227:briard\n228:kelpie\n229:komondor\n230:Old English sheepdog, bobtail\n231:Shetland sheepdog, Shetland sheep dog, Shetland\n232:collie\n233:Border collie\n234:Bouvier des Flandres, Bouviers des Flandres\n235:Rottweiler\n236:German shepherd, German shepherd dog, German police dog, alsatian\n237:Doberman, Doberman pinscher\n238:miniature pinscher\n239:Greater Swiss Mountain dog\n240:Bernese mountain dog\n241:Appenzeller\n242:EntleBucher\n243:boxer\n244:bull mastiff\n245:Tibetan mastiff\n246:French bulldog\n247:Great Dane\n248:Saint Bernard, St Bernard\n249:Eskimo dog, husky\n250:malamute, malemute, Alaskan malamute\n251:Siberian husky\n252:dalmatian, coach dog, carriage dog\n253:affenpinscher, monkey pinscher, monkey dog\n254:basenji\n255:pug, pug-dog\n256:Leonberg\n257:Newfoundland, Newfoundland dog\n258:Great Pyrenees\n259:Samoyed, Samoyede\n260:Pomeranian\n261:chow, chow chow\n262:keeshond\n263:Brabancon griffon\n264:Pembroke, Pembroke Welsh corgi\n265:Cardigan, Cardigan Welsh corgi\n266:toy poodle\n267:miniature poodle\n268:standard poodle\n269:Mexican hairless\n270:timber wolf, grey wolf, gray wolf, Canis lupus\n271:white wolf, Arctic wolf, Canis lupus tundrarum\n272:red wolf, maned wolf, Canis rufus, Canis niger\n273:coyote, prairie wolf, brush wolf, Canis latrans\n274:dingo, warrigal, warragal, Canis dingo\n275:dhole, Cuon alpinus\n276:African hunting dog, hyena dog, Cape hunting dog, Lycaon pictus\n277:hyena, hyaena\n278:red fox, Vulpes vulpes\n279:kit fox, Vulpes macrotis\n280:Arctic fox, white fox, Alopex lagopus\n281:grey fox, gray fox, Urocyon cinereoargenteus\n282:tabby, tabby cat\n283:tiger cat\n284:Persian cat\n285:Siamese cat, Siamese\n286:Egyptian cat\n287:cougar, puma, catamount, mountain lion, painter, panther, Felis concolor\n288:lynx, catamount\n289:leopard, Panthera pardus\n290:snow leopard, ounce, Panthera uncia\n291:jaguar, panther, Panthera onca, Felis onca\n292:lion, king of beasts, Panthera leo\n293:tiger, Panthera tigris\n294:cheetah, chetah, Acinonyx jubatus\n295:brown bear, bruin, Ursus arctos\n296:American black bear, black bear, Ursus americanus, Euarctos americanus\n297:ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus\n298:sloth bear, Melursus ursinus, Ursus ursinus\n299:mongoose\n300:meerkat, mierkat\n301:tiger beetle\n302:ladybug, ladybeetle, lady beetle, ladybird, ladybird beetle\n303:ground beetle, carabid beetle\n304:long-horned beetle, longicorn, longicorn beetle\n305:leaf beetle, chrysomelid\n306:dung beetle\n307:rhinoceros beetle\n308:weevil\n309:fly\n310:bee\n311:ant, emmet, pismire\n312:grasshopper, hopper\n313:cricket\n314:walking stick, walkingstick, stick insect\n315:cockroach, roach\n316:mantis, mantid\n317:cicada, cicala\n318:leafhopper\n319:lacewing, lacewing fly\n320:dragonfly, darning needle, devil's darning needle, sewing needle, snake feeder, snake doctor, mosquito hawk, skeeter hawk\n321:damselfly\n322:admiral\n323:ringlet, ringlet butterfly\n324:monarch, monarch butterfly, milkweed butterfly, Danaus plexippus\n325:cabbage butterfly\n326:sulphur butterfly, sulfur butterfly\n327:lycaenid, lycaenid butterfly\n328:starfish, sea star\n329:sea urchin\n330:sea cucumber, holothurian\n331:wood rabbit, cottontail, cottontail rabbit\n332:hare\n333:Angora, Angora rabbit\n334:hamster\n335:porcupine, hedgehog\n336:fox squirrel, eastern fox squirrel, Sciurus niger\n337:marmot\n338:beaver\n339:guinea pig, Cavia cobaya\n340:sorrel\n341:zebra\n342:hog, pig, grunter, squealer, Sus scrofa\n343:wild boar, boar, Sus scrofa\n344:warthog\n345:hippopotamus, hippo, river horse, Hippopotamus amphibius\n346:ox\n347:water buffalo, water ox, Asiatic buffalo, Bubalus bubalis\n348:bison\n349:ram, tup\n350:bighorn, bighorn sheep, cimarron, Rocky Mountain bighorn, Rocky Mountain sheep, Ovis canadensis\n351:ibex, Capra ibex\n352:hartebeest\n353:impala, Aepyceros melampus\n354:gazelle\n355:Arabian camel, dromedary, Camelus dromedarius\n356:llama\n357:weasel\n358:mink\n359:polecat, fitch, foulmart, foumart, Mustela putorius\n360:black-footed ferret, ferret, Mustela nigripes\n361:otter\n362:skunk, polecat, wood pussy\n363:badger\n364:armadillo\n365:three-toed sloth, ai, Bradypus tridactylus\n366:orangutan, orang, orangutang, Pongo pygmaeus\n367:gorilla, Gorilla gorilla\n368:chimpanzee, chimp, Pan troglodytes\n369:gibbon, Hylobates lar\n370:siamang, Hylobates syndactylus, Symphalangus syndactylus\n371:guenon, guenon monkey\n372:patas, hussar monkey, Erythrocebus patas\n373:baboon\n374:macaque\n375:langur\n376:colobus, colobus monkey\n377:proboscis monkey, Nasalis larvatus\n378:marmoset\n379:capuchin, ringtail, Cebus capucinus\n380:howler monkey, howler\n381:titi, titi monkey\n382:spider monkey, Ateles geoffroyi\n383:squirrel monkey, Saimiri sciureus\n384:Madagascar cat, ring-tailed lemur, Lemur catta\n385:indri, indris, Indri indri, Indri brevicaudatus\n386:Indian elephant, Elephas maximus\n387:African elephant, Loxodonta africana\n388:lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens\n389:giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca\n390:barracouta, snoek\n391:eel\n392:coho, cohoe, coho salmon, blue jack, silver salmon, Oncorhynchus kisutch\n393:rock beauty, Holocanthus tricolor\n394:anemone fish\n395:sturgeon\n396:gar, garfish, garpike, billfish, Lepisosteus osseus\n397:lionfish\n398:puffer, pufferfish, blowfish, globefish\n399:abacus\n400:abaya\n401:academic gown, academic robe, judge's robe\n402:accordion, piano accordion, squeeze box\n403:acoustic guitar\n404:aircraft carrier, carrier, flattop, attack aircraft carrier\n405:airliner\n406:airship, dirigible\n407:altar\n408:ambulance\n409:amphibian, amphibious vehicle\n410:analog clock\n411:apiary, bee house\n412:apron\n413:ashcan, trash can, garbage can, wastebin, ash bin, ash-bin, ashbin, dustbin, trash barrel, trash bin\n414:assault rifle, assault gun\n415:backpack, back pack, knapsack, packsack, rucksack, haversack\n416:bakery, bakeshop, bakehouse\n417:balance beam, beam\n418:balloon\n419:ballpoint, ballpoint pen, ballpen, Biro\n420:Band Aid\n421:banjo\n422:bannister, banister, balustrade, balusters, handrail\n423:barbell\n424:barber chair\n425:barbershop\n426:barn\n427:barometer\n428:barrel, cask\n429:barrow, garden cart, lawn cart, wheelbarrow\n430:baseball\n431:basketball\n432:bassinet\n433:bassoon\n434:bathing cap, swimming cap\n435:bath towel\n436:bathtub, bathing tub, bath, tub\n437:beach wagon, station wagon, wagon, estate car, beach waggon, station waggon, waggon\n438:beacon, lighthouse, beacon light, pharos\n439:beaker\n440:bearskin, busby, shako\n441:beer bottle\n442:beer glass\n443:bell cote, bell cot\n444:bib\n445:bicycle-built-for-two, tandem bicycle, tandem\n446:bikini, two-piece\n447:binder, ring-binder\n448:binoculars, field glasses, opera glasses\n449:birdhouse\n450:boathouse\n451:bobsled, bobsleigh, bob\n452:bolo tie, bolo, bola tie, bola\n453:bonnet, poke bonnet\n454:bookcase\n455:bookshop, bookstore, bookstall\n456:bottlecap\n457:bow\n458:bow tie, bow-tie, bowtie\n459:brass, memorial tablet, plaque\n460:brassiere, bra, bandeau\n461:breakwater, groin, groyne, mole, bulwark, seawall, jetty\n462:breastplate, aegis, egis\n463:broom\n464:bucket, pail\n465:buckle\n466:bulletproof vest\n467:bullet train, bullet\n468:butcher shop, meat market\n469:cab, hack, taxi, taxicab\n470:caldron, cauldron\n471:candle, taper, wax light\n472:cannon\n473:canoe\n474:can opener, tin opener\n475:cardigan\n476:car mirror\n477:carousel, carrousel, merry-go-round, roundabout, whirligig\n478:carpenter's kit, tool kit\n479:carton\n480:car wheel\n481:cash machine, cash dispenser, automated teller machine, automatic teller machine, automated teller, automatic teller, ATM\n482:cassette\n483:cassette player\n484:castle\n485:catamaran\n486:CD player\n487:cello, violoncello\n488:cellular telephone, cellular phone, cellphone, cell, mobile phone\n489:chain\n490:chainlink fence\n491:chain mail, ring mail, mail, chain armor, chain armour, ring armor, ring armour\n492:chain saw, chainsaw\n493:chest\n494:chiffonier, commode\n495:chime, bell, gong\n496:china cabinet, china closet\n497:Christmas stocking\n498:church, church building\n499:cinema, movie theater, movie theatre, movie house, picture palace\n500:cleaver, meat cleaver, chopper\n501:cliff dwelling\n502:cloak\n503:clog, geta, patten, sabot\n504:cocktail shaker\n505:coffee mug\n506:coffeepot\n507:coil, spiral, volute, whorl, helix\n508:combination lock\n509:computer keyboard, keypad\n510:confectionery, confectionary, candy store\n511:container ship, containership, container vessel\n512:convertible\n513:corkscrew, bottle screw\n514:cornet, horn, trumpet, trump\n515:cowboy boot\n516:cowboy hat, ten-gallon hat\n517:cradle\n518:crane\n519:crash helmet\n520:crate\n521:crib, cot\n522:Crock Pot\n523:croquet ball\n524:crutch\n525:cuirass\n526:dam, dike, dyke\n527:desk\n528:desktop computer\n529:dial telephone, dial phone\n530:diaper, nappy, napkin\n531:digital clock\n532:digital watch\n533:dining table, board\n534:dishrag, dishcloth\n535:dishwasher, dish washer, dishwashing machine\n536:disk brake, disc brake\n537:dock, dockage, docking facility\n538:dogsled, dog sled, dog sleigh\n539:dome\n540:doormat, welcome mat\n541:drilling platform, offshore rig\n542:drum, membranophone, tympan\n543:drumstick\n544:dumbbell\n545:Dutch oven\n546:electric fan, blower\n547:electric guitar\n548:electric locomotive\n549:entertainment center\n550:envelope\n551:espresso maker\n552:face powder\n553:feather boa, boa\n554:file, file cabinet, filing cabinet\n555:fireboat\n556:fire engine, fire truck\n557:fire screen, fireguard\n558:flagpole, flagstaff\n559:flute, transverse flute\n560:folding chair\n561:football helmet\n562:forklift\n563:fountain\n564:fountain pen\n565:four-poster\n566:freight car\n567:French horn, horn\n568:frying pan, frypan, skillet\n569:fur coat\n570:garbage truck, dustcart\n571:gasmask, respirator, gas helmet\n572:gas pump, gasoline pump, petrol pump, island dispenser\n573:goblet\n574:go-kart\n575:golf ball\n576:golfcart, golf cart\n577:gondola\n578:gong, tam-tam\n579:gown\n580:grand piano, grand\n581:greenhouse, nursery, glasshouse\n582:grille, radiator grille\n583:grocery store, grocery, food market, market\n584:guillotine\n585:hair slide\n586:hair spray\n587:half track\n588:hammer\n589:hamper\n590:hand blower, blow dryer, blow drier, hair dryer, hair drier\n591:hand-held computer, hand-held microcomputer\n592:handkerchief, hankie, hanky, hankey\n593:hard disc, hard disk, fixed disk\n594:harmonica, mouth organ, harp, mouth harp\n595:harp\n596:harvester, reaper\n597:hatchet\n598:holster\n599:home theater, home theatre\n600:honeycomb\n601:hook, claw\n602:hoopskirt, crinoline\n603:horizontal bar, high bar\n604:horse cart, horse-cart\n605:hourglass\n606:iPod\n607:iron, smoothing iron\n608:jack-o'-lantern\n609:jean, blue jean, denim\n610:jeep, landrover\n611:jersey, T-shirt, tee shirt\n612:jigsaw puzzle\n613:jinrikisha, ricksha, rickshaw\n614:joystick\n615:kimono\n616:knee pad\n617:knot\n618:lab coat, laboratory coat\n619:ladle\n620:lampshade, lamp shade\n621:laptop, laptop computer\n622:lawn mower, mower\n623:lens cap, lens cover\n624:letter opener, paper knife, paperknife\n625:library\n626:lifeboat\n627:lighter, light, igniter, ignitor\n628:limousine, limo\n629:liner, ocean liner\n630:lipstick, lip rouge\n631:Loafer\n632:lotion\n633:loudspeaker, speaker, speaker unit, loudspeaker system, speaker system\n634:loupe, jeweler's loupe\n635:lumbermill, sawmill\n636:magnetic compass\n637:mailbag, postbag\n638:mailbox, letter box\n639:maillot\n640:maillot, tank suit\n641:manhole cover\n642:maraca\n643:marimba, xylophone\n644:mask\n645:matchstick\n646:maypole\n647:maze, labyrinth\n648:measuring cup\n649:medicine chest, medicine cabinet\n650:megalith, megalithic structure\n651:microphone, mike\n652:microwave, microwave oven\n653:military uniform\n654:milk can\n655:minibus\n656:miniskirt, mini\n657:minivan\n658:missile\n659:mitten\n660:mixing bowl\n661:mobile home, manufactured home\n662:Model T\n663:modem\n664:monastery\n665:monitor\n666:moped\n667:mortar\n668:mortarboard\n669:mosque\n670:mosquito net\n671:motor scooter, scooter\n672:mountain bike, all-terrain bike, off-roader\n673:mountain tent\n674:mouse, computer mouse\n675:mousetrap\n676:moving van\n677:muzzle\n678:nail\n679:neck brace\n680:necklace\n681:nipple\n682:notebook, notebook computer\n683:obelisk\n684:oboe, hautboy, hautbois\n685:ocarina, sweet potato\n686:odometer, hodometer, mileometer, milometer\n687:oil filter\n688:organ, pipe organ\n689:oscilloscope, scope, cathode-ray oscilloscope, CRO\n690:overskirt\n691:oxcart\n692:oxygen mask\n693:packet\n694:paddle, boat paddle\n695:paddlewheel, paddle wheel\n696:padlock\n697:paintbrush\n698:pajama, pyjama, pj's, jammies\n699:palace\n700:panpipe, pandean pipe, syrinx\n701:paper towel\n702:parachute, chute\n703:parallel bars, bars\n704:park bench\n705:parking meter\n706:passenger car, coach, carriage\n707:patio, terrace\n708:pay-phone, pay-station\n709:pedestal, plinth, footstall\n710:pencil box, pencil case\n711:pencil sharpener\n712:perfume, essence\n713:Petri dish\n714:photocopier\n715:pick, plectrum, plectron\n716:pickelhaube\n717:picket fence, paling\n718:pickup, pickup truck\n719:pier\n720:piggy bank, penny bank\n721:pill bottle\n722:pillow\n723:ping-pong ball\n724:pinwheel\n725:pirate, pirate ship\n726:pitcher, ewer\n727:plane, carpenter's plane, woodworking plane\n728:planetarium\n729:plastic bag\n730:plate rack\n731:plow, plough\n732:plunger, plumber's helper\n733:Polaroid camera, Polaroid Land camera\n734:pole\n735:police van, police wagon, paddy wagon, patrol wagon, wagon, black Maria\n736:poncho\n737:pool table, billiard table, snooker table\n738:pop bottle, soda bottle\n739:pot, flowerpot\n740:potter's wheel\n741:power drill\n742:prayer rug, prayer mat\n743:printer\n744:prison, prison house\n745:projectile, missile\n746:projector\n747:puck, hockey puck\n748:punching bag, punch bag, punching ball, punchball\n749:purse\n750:quill, quill pen\n751:quilt, comforter, comfort, puff\n752:racer, race car, racing car\n753:racket, racquet\n754:radiator\n755:radio, wireless\n756:radio telescope, radio reflector\n757:rain barrel\n758:recreational vehicle, RV, R.V.\n759:reel\n760:reflex camera\n761:refrigerator, icebox\n762:remote control, remote\n763:restaurant, eating house, eating place, eatery\n764:revolver, six-gun, six-shooter\n765:rifle\n766:rocking chair, rocker\n767:rotisserie\n768:rubber eraser, rubber, pencil eraser\n769:rugby ball\n770:rule, ruler\n771:running shoe\n772:safe\n773:safety pin\n774:saltshaker, salt shaker\n775:sandal\n776:sarong\n777:sax, saxophone\n778:scabbard\n779:scale, weighing machine\n780:school bus\n781:schooner\n782:scoreboard\n783:screen, CRT screen\n784:screw\n785:screwdriver\n786:seat belt, seatbelt\n787:sewing machine\n788:shield, buckler\n789:shoe shop, shoe-shop, shoe store\n790:shoji\n791:shopping basket\n792:shopping cart\n793:shovel\n794:shower cap\n795:shower curtain\n796:ski\n797:ski mask\n798:sleeping bag\n799:slide rule, slipstick\n800:sliding door\n801:slot, one-armed bandit\n802:snorkel\n803:snowmobile\n804:snowplow, snowplough\n805:soap dispenser\n806:soccer ball\n807:sock\n808:solar dish, solar collector, solar furnace\n809:sombrero\n810:soup bowl\n811:space bar\n812:space heater\n813:space shuttle\n814:spatula\n815:speedboat\n816:spider web, spider's web\n817:spindle\n818:sports car, sport car\n819:spotlight, spot\n820:stage\n821:steam locomotive\n822:steel arch bridge\n823:steel drum\n824:stethoscope\n825:stole\n826:stone wall\n827:stopwatch, stop watch\n828:stove\n829:strainer\n830:streetcar, tram, tramcar, trolley, trolley car\n831:stretcher\n832:studio couch, day bed\n833:stupa, tope\n834:submarine, pigboat, sub, U-boat\n835:suit, suit of clothes\n836:sundial\n837:sunglass\n838:sunglasses, dark glasses, shades\n839:sunscreen, sunblock, sun blocker\n840:suspension bridge\n841:swab, swob, mop\n842:sweatshirt\n843:swimming trunks, bathing trunks\n844:swing\n845:switch, electric switch, electrical switch\n846:syringe\n847:table lamp\n848:tank, army tank, armored combat vehicle, armoured combat vehicle\n849:tape player\n850:teapot\n851:teddy, teddy bear\n852:television, television system\n853:tennis ball\n854:thatch, thatched roof\n855:theater curtain, theatre curtain\n856:thimble\n857:thresher, thrasher, threshing machine\n858:throne\n859:tile roof\n860:toaster\n861:tobacco shop, tobacconist shop, tobacconist\n862:toilet seat\n863:torch\n864:totem pole\n865:tow truck, tow car, wrecker\n866:toyshop\n867:tractor\n868:trailer truck, tractor trailer, trucking rig, rig, articulated lorry, semi\n869:tray\n870:trench coat\n871:tricycle, trike, velocipede\n872:trimaran\n873:tripod\n874:triumphal arch\n875:trolleybus, trolley coach, trackless trolley\n876:trombone\n877:tub, vat\n878:turnstile\n879:typewriter keyboard\n880:umbrella\n881:unicycle, monocycle\n882:upright, upright piano\n883:vacuum, vacuum cleaner\n884:vase\n885:vault\n886:velvet\n887:vending machine\n888:vestment\n889:viaduct\n890:violin, fiddle\n891:volleyball\n892:waffle iron\n893:wall clock\n894:wallet, billfold, notecase, pocketbook\n895:wardrobe, closet, press\n896:warplane, military plane\n897:washbasin, handbasin, washbowl, lavabo, wash-hand basin\n898:washer, automatic washer, washing machine\n899:water bottle\n900:water jug\n901:water tower\n902:whiskey jug\n903:whistle\n904:wig\n905:window screen\n906:window shade\n907:Windsor tie\n908:wine bottle\n909:wing\n910:wok\n911:wooden spoon\n912:wool, woolen, woollen\n913:worm fence, snake fence, snake-rail fence, Virginia fence\n914:wreck\n915:yawl\n916:yurt\n917:web site, website, internet site, site\n918:comic book\n919:crossword puzzle, crossword\n920:street sign\n921:traffic light, traffic signal, stoplight\n922:book jacket, dust cover, dust jacket, dust wrapper\n923:menu\n924:plate\n925:guacamole\n926:consomme\n927:hot pot, hotpot\n928:trifle\n929:ice cream, icecream\n930:ice lolly, lolly, lollipop, popsicle\n931:French loaf\n932:bagel, beigel\n933:pretzel\n934:cheeseburger\n935:hotdog, hot dog, red hot\n936:mashed potato\n937:head cabbage\n938:broccoli\n939:cauliflower\n940:zucchini, courgette\n941:spaghetti squash\n942:acorn squash\n943:butternut squash\n944:cucumber, cuke\n945:artichoke, globe artichoke\n946:bell pepper\n947:cardoon\n948:mushroom\n949:Granny Smith\n950:strawberry\n951:orange\n952:lemon\n953:fig\n954:pineapple, ananas\n955:banana\n956:jackfruit, jak, jack\n957:custard apple\n958:pomegranate\n959:hay\n960:carbonara\n961:chocolate sauce, chocolate syrup\n962:dough\n963:meat loaf, meatloaf\n964:pizza, pizza pie\n965:potpie\n966:burrito\n967:red wine\n968:espresso\n969:cup\n970:eggnog\n971:alp\n972:bubble\n973:cliff, drop, drop-off\n974:coral reef\n975:geyser\n976:lakeside, lakeshore\n977:promontory, headland, head, foreland\n978:sandbar, sand bar\n979:seashore, coast, seacoast, sea-coast\n980:valley, vale\n981:volcano\n982:ballplayer, baseball player\n983:groom, bridegroom\n984:scuba diver\n985:rapeseed\n986:daisy\n987:yellow lady's slipper, yellow lady-slipper, Cypripedium calceolus, Cypripedium parviflorum\n988:corn\n989:acorn\n990:hip, rose hip, rosehip\n991:buckeye, horse chestnut, conker\n992:coral fungus\n993:agaric\n994:gyromitra\n995:stinkhorn, carrion fungus\n996:earthstar\n997:hen-of-the-woods, hen of the woods, Polyporus frondosus, Grifola frondosa\n998:bolete\n999:ear, spike, capitulum\n1000:toilet tissue, toilet paper, bathroom tissue\n"
  },
  {
    "path": "mobilenetv2ssd-async-usbcam.py",
    "content": "import argparse\n#import platform\nimport numpy as np\nimport cv2\nimport time\n#from PIL import Image\nfrom time import sleep\nimport multiprocessing as mp\ntry:\n    from tflite_runtime.interpreter import Interpreter\nexcept:\n    import tensorflow as tf\n\n\nlastresults = None\nprocesses = []\nframeBuffer = None\nresults = None\nfps = \"\"\ndetectfps = \"\"\nframecount = 0\ndetectframecount = 0\ntime1 = 0\ntime2 = 0\nbox_color = (255, 128, 0)\nbox_thickness = 1\nlabel_background_color = (125, 175, 75)\nlabel_text_color = (255, 255, 255)\npercentage = 0.0\n\nLABELS = [\n'???','person','bicycle','car','motorcycle','airplane','bus','train','truck','boat',\n'traffic light','fire hydrant','???','stop sign','parking meter','bench','bird','cat','dog','horse',\n'sheep','cow','elephant','bear','zebra','giraffe','???','backpack','umbrella','???',\n'???','handbag','tie','suitcase','frisbee','skis','snowboard','sports ball','kite','baseball bat',\n'baseball glove','skateboard','surfboard','tennis racket','bottle','???','wine glass','cup','fork','knife',\n'spoon','bowl','banana','apple','sandwich','orange','broccoli','carrot','hot dog','pizza',\n'donut','cake','chair','couch','potted plant','bed','???','dining table','???','???',\n'toilet','???','tv','laptop','mouse','remote','keyboard','cell phone','microwave','oven',\n'toaster','sink','refrigerator','???','book','clock','vase','scissors','teddy bear','hair drier',\n'toothbrush']\n\n\nclass ObjectDetectorLite():\n    def __init__(self, model_path='detect.tflite', threads_num=4):\n        try:\n            self.interpreter = Interpreter(model_path=model_path, num_threads=threads_num)\n        except:\n            self.interpreter = tf.lite.Interpreter(model_path=model_path, num_threads=threads_num)\n        try:\n            self.interpreter.allocate_tensors()\n        except:\n            pass\n        self.input_details = self.interpreter.get_input_details()\n        self.output_details = self.interpreter.get_output_details()\n\n    def _boxes_coordinates(\n        self,\n        image,\n        boxes,\n        classes,\n        scores,\n        max_boxes_to_draw=20,\n        min_score_thresh=.5\n    ):\n\n        if not max_boxes_to_draw:\n            max_boxes_to_draw = boxes.shape[0]\n        number_boxes = min(max_boxes_to_draw, boxes.shape[0])\n        person_boxes = []\n        for i in range(number_boxes):\n            if scores is None or scores[i] > min_score_thresh:\n                box = tuple(boxes[i].tolist())\n                ymin, xmin, ymax, xmax = box\n                im_height, im_width, _ = image.shape\n                left, right, top, bottom = [int(z) for z in (xmin * im_width, xmax * im_width, ymin * im_height, ymax * im_height)]\n                person_boxes.append([(left, top), (right, bottom), scores[i], LABELS[classes[i]]])\n        return person_boxes\n\n\n    def detect(self, image, threshold=0.1):\n        # Resize and normalize image for network input\n        frame = cv2.resize(image, (300, 300))\n        frame = np.expand_dims(frame, axis=0)\n        frame = frame.astype('uint8')\n\n        # run model\n        self.interpreter.set_tensor(self.input_details[0]['index'], frame)\n        start_time = time.time()\n        self.interpreter.invoke()\n        stop_time = time.time()\n        print(\"time: \", stop_time - start_time)\n\n        # get results\n        boxes = self.interpreter.get_tensor(self.output_details[0]['index'])\n        classes = self.interpreter.get_tensor(self.output_details[1]['index'])\n        scores = self.interpreter.get_tensor(self.output_details[2]['index'])\n        num = self.interpreter.get_tensor(self.output_details[3]['index'])\n\n        # Find detected boxes coordinates\n        return self._boxes_coordinates(\n            image,\n            np.squeeze(boxes[0]),\n            np.squeeze(classes[0]+1).astype(np.int32),\n            np.squeeze(scores[0]),\n            min_score_thresh=threshold,\n        )\n\n\ndef camThread(results, frameBuffer, camera_width, camera_height, vidfps, usbcamno):\n\n    global fps\n    global detectfps\n    global framecount\n    global detectframecount\n    global time1\n    global time2\n    global lastresults\n    global cam\n    global window_name\n\n    cam = cv2.VideoCapture(usbcamno)\n    cam.set(cv2.CAP_PROP_FPS, vidfps)\n    cam.set(cv2.CAP_PROP_FRAME_WIDTH, camera_width)\n    cam.set(cv2.CAP_PROP_FRAME_HEIGHT, camera_height)\n    window_name = \"USB Camera\"\n    cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE)\n\n    while True:\n        t1 = time.perf_counter()\n\n        ret, color_image = cam.read()\n        if not ret:\n            continue\n        if frameBuffer.full():\n            frameBuffer.get()\n        frames = color_image\n        frameBuffer.put(color_image.copy())\n        res = None\n\n        if not results.empty():\n            res = results.get(False)\n            detectframecount += 1\n            imdraw = overlay_on_image(frames, res, camera_width, camera_height)\n            lastresults = res\n        else:\n            imdraw = overlay_on_image(frames, lastresults, camera_width, camera_height)\n\n        cv2.imshow('USB Camera', imdraw)\n\n        if cv2.waitKey(1)&0xFF == ord('q'):\n            break\n\n        # FPS calculation\n        framecount += 1\n        if framecount >= 15:\n            fps       = \"(Playback) {:.1f} FPS\".format(time1/15)\n            detectfps = \"(Detection) {:.1f} FPS\".format(detectframecount/time2)\n            framecount = 0\n            detectframecount = 0\n            time1 = 0\n            time2 = 0\n        t2 = time.perf_counter()\n        elapsedTime = t2-t1\n        time1 += 1/elapsedTime\n        time2 += elapsedTime\n\n\n\ndef inferencer(results, frameBuffer, model, camera_width, camera_height, process_num, threads_num):\n\n    detector = ObjectDetectorLite(model, threads_num)\n    print(\"Loaded Graphs!!!\", process_num)\n\n    while True:\n\n        if frameBuffer.empty():\n            continue\n\n        # Run inference.\n        color_image = frameBuffer.get()\n        prepimg = color_image[:, :, ::-1].copy()\n        ans = detector.detect(prepimg, 0.4)\n        results.put(ans)\n\n\n\ndef overlay_on_image(frames, object_infos, camera_width, camera_height):\n\n    color_image = frames\n\n    if isinstance(object_infos, type(None)):\n        return color_image\n    img_cp = color_image.copy()\n\n    for obj in object_infos:\n        box_left = int(obj[0][0])\n        box_top = int(obj[0][1])\n        box_right = int(obj[1][0])\n        box_bottom = int(obj[1][1])\n        cv2.rectangle(img_cp, (box_left, box_top), (box_right, box_bottom), box_color, box_thickness)\n\n        percentage = int(obj[2] * 100)\n        label_text = obj[3] + \" (\" + str(percentage) + \"%)\"\n\n        label_size = cv2.getTextSize(label_text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)[0]\n        label_left = box_left\n        label_top = box_top - label_size[1]\n        if (label_top < 1):\n            label_top = 1\n        label_right = label_left + label_size[0]\n        label_bottom = label_top + label_size[1]\n        cv2.rectangle(img_cp, (label_left - 1, label_top - 1), (label_right + 1, label_bottom + 1), label_background_color, -1)\n        cv2.putText(img_cp, label_text, (label_left, label_bottom), cv2.FONT_HERSHEY_SIMPLEX, 0.5, label_text_color, 1)\n\n    cv2.putText(img_cp, fps,       (camera_width-170,15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (38,0,255), 1, cv2.LINE_AA)\n    cv2.putText(img_cp, detectfps, (camera_width-170,30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (38,0,255), 1, cv2.LINE_AA)\n\n    return img_cp\n\nif __name__ == '__main__':\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--model\", default=\"models/mobilenet_ssd_v2_coco_quant_postprocess.tflite\", help=\"Path of the detection model.\")\n    parser.add_argument(\"--label\", default=\"coco_labels.txt\", help=\"Path of the labels file.\")\n    parser.add_argument(\"--usbcamno\", type=int, default=0, help=\"USB Camera number.\")\n    args = parser.parse_args()\n\n    model    = args.model\n    usbcamno = args.usbcamno\n\n    camera_width = 640\n    camera_height = 480\n    vidfps = 60\n    #core_num = mp.cpu_count()\n    core_num    = 1\n    threads_num = 4\n\n    try:\n        mp.set_start_method('forkserver')\n        frameBuffer = mp.Queue(10)\n        results = mp.Queue()\n\n        # Start streaming\n        p = mp.Process(\n            target=camThread,\n            args=(results, frameBuffer, camera_width, camera_height, vidfps, usbcamno),\n            daemon=True,\n        )\n        p.start()\n        processes.append(p)\n\n        # Activation of inferencer\n        for process_num in range(core_num):\n            p = mp.Process(\n                target=inferencer,\n                args=(results, frameBuffer, model, camera_width, camera_height, process_num, threads_num),\n                daemon=True,\n            )\n            p.start()\n            processes.append(p)\n\n        while True:\n            sleep(1)\n\n    finally:\n        for p in range(len(processes)):\n            processes[p].terminate()\n"
  },
  {
    "path": "mobilenetv2ssd-sync-usbcam.py",
    "content": "import argparse\n#import platform\nimport sys\nimport numpy as np\nimport cv2\nimport time\n#from PIL import Image\nfrom time import sleep\nimport multiprocessing as mp\ntry:\n    from tflite_runtime.interpreter import Interpreter\nexcept:\n    import tensorflow as tf\n\nlastresults = None\nprocesses = []\nframeBuffer = None\nresults = None\nfps = \"\"\ndetectfps = \"\"\nframecount = 0\ndetectframecount = 0\ntime1 = 0\ntime2 = 0\nbox_color = (255, 128, 0)\nbox_thickness = 1\nlabel_background_color = (125, 175, 75)\nlabel_text_color = (255, 255, 255)\npercentage = 0.0\n\nLABELS = [\n'???','person','bicycle','car','motorcycle','airplane','bus','train','truck','boat',\n'traffic light','fire hydrant','???','stop sign','parking meter','bench','bird','cat','dog','horse',\n'sheep','cow','elephant','bear','zebra','giraffe','???','backpack','umbrella','???',\n'???','handbag','tie','suitcase','frisbee','skis','snowboard','sports ball','kite','baseball bat',\n'baseball glove','skateboard','surfboard','tennis racket','bottle','???','wine glass','cup','fork','knife',\n'spoon','bowl','banana','apple','sandwich','orange','broccoli','carrot','hot dog','pizza',\n'donut','cake','chair','couch','potted plant','bed','???','dining table','???','???',\n'toilet','???','tv','laptop','mouse','remote','keyboard','cell phone','microwave','oven',\n'toaster','sink','refrigerator','???','book','clock','vase','scissors','teddy bear','hair drier',\n'toothbrush']\n\n\nclass ObjectDetectorLite():\n    def __init__(self, model_path='detect.tflite', num_threads=12):\n        try:\n            self.interpreter = Interpreter(model_path=model_path, num_threads=num_threads)\n        except:\n            self.interpreter = tf.lite.Interpreter(model_path=model_path, num_threads=num_threads)\n        try:\n            self.interpreter.allocate_tensors()\n        except:\n            pass\n        self.input_details = self.interpreter.get_input_details()\n        self.output_details = self.interpreter.get_output_details()\n\n    def _boxes_coordinates(\n        self,\n        image,\n        boxes,\n        classes,\n        scores,\n        max_boxes_to_draw=20,\n        min_score_thresh=.5\n    ):\n\n        if not max_boxes_to_draw:\n            max_boxes_to_draw = boxes.shape[0]\n        number_boxes = min(max_boxes_to_draw, boxes.shape[0])\n        person_boxes = []\n        for i in range(number_boxes):\n            if scores is None or scores[i] > min_score_thresh:\n                box = tuple(boxes[i].tolist())\n                ymin, xmin, ymax, xmax = box\n                _, im_height, im_width, _ = image.shape\n                left, right, top, bottom = [int(z) for z in (xmin * im_width, xmax * im_width, ymin * im_height, ymax * im_height)]\n                person_boxes.append([(left, top), (right, bottom), scores[i], LABELS[classes[i]]])\n        return person_boxes\n\n\n    def detect(self, image, threshold=0.1):\n\n        # run model\n        self.interpreter.set_tensor(self.input_details[0]['index'], image)\n        start_time = time.time()\n        self.interpreter.invoke()\n        stop_time = time.time()\n        print(\"time: \", stop_time - start_time)\n\n        # get results\n        boxes = self.interpreter.get_tensor(self.output_details[0]['index'])\n        classes = self.interpreter.get_tensor(self.output_details[1]['index'])\n        scores = self.interpreter.get_tensor(self.output_details[2]['index'])\n        num = self.interpreter.get_tensor(self.output_details[3]['index'])\n\n        # Find detected boxes coordinates\n        return self._boxes_coordinates(\n            image,\n            np.squeeze(boxes[0]),\n            np.squeeze(classes[0]+1).astype(np.int32),\n            np.squeeze(scores[0]),\n            min_score_thresh=threshold,\n        )\n\n\ndef overlay_on_image(frames, object_infos, camera_width, camera_height):\n\n    color_image = frames\n\n    if isinstance(object_infos, type(None)):\n        return color_image\n    img_cp = color_image.copy()\n\n    for obj in object_infos:\n        box_left = int(obj[0][0])\n        box_top = int(obj[0][1])\n        box_right = int(obj[1][0])\n        box_bottom = int(obj[1][1])\n        cv2.rectangle(img_cp, (box_left, box_top), (box_right, box_bottom), box_color, box_thickness)\n\n        percentage = int(obj[2] * 100)\n        label_text = obj[3] + \" (\" + str(percentage) + \"%)\"\n\n        label_size = cv2.getTextSize(label_text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)[0]\n        label_left = box_left\n        label_top = box_top - label_size[1]\n        if (label_top < 1):\n            label_top = 1\n        label_right = label_left + label_size[0]\n        label_bottom = label_top + label_size[1]\n        cv2.rectangle(img_cp, (label_left - 1, label_top - 1), (label_right + 1, label_bottom + 1), label_background_color, -1)\n        cv2.putText(img_cp, label_text, (label_left, label_bottom), cv2.FONT_HERSHEY_SIMPLEX, 0.5, label_text_color, 1)\n\n    cv2.putText(img_cp, fps,       (camera_width-170,15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (38,0,255), 1, cv2.LINE_AA)\n    cv2.putText(img_cp, detectfps, (camera_width-170,30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (38,0,255), 1, cv2.LINE_AA)\n\n    return img_cp\n\nif __name__ == '__main__':\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--model\", default=\"models/mobilenet_ssd_v2_coco_quant_postprocess.tflite\", help=\"Path of the detection model.\")\n    parser.add_argument(\"--usbcamno\", type=int, default=0, help=\"USB Camera number.\")\n    parser.add_argument(\"--camera_type\", default=\"usb_cam\", help=\"set usb_cam or raspi_cam\")\n    parser.add_argument(\"--camera_width\", type=int, default=640, help=\"width.\")\n    parser.add_argument(\"--camera_height\", type=int, default=480, help=\"height.\")\n    parser.add_argument(\"--vidfps\", type=int, default=150, help=\"Frame rate.\")\n    parser.add_argument(\"--num_threads\", type=int, default=4, help=\"Threads.\")\n    args = parser.parse_args()\n\n    model         = args.model\n    usbcamno      = args.usbcamno\n    camera_type   = args.camera_type\n    camera_width  = args.camera_width\n    camera_height = args.camera_height\n    vidfps        = args.vidfps\n    num_threads   = args.num_threads\n\n    if camera_type == \"usb_cam\":\n        cam = cv2.VideoCapture(usbcamno)\n        cam.set(cv2.CAP_PROP_FPS, vidfps)\n        cam.set(cv2.CAP_PROP_FRAME_WIDTH, camera_width)\n        cam.set(cv2.CAP_PROP_FRAME_HEIGHT, camera_height)\n        window_name = \"USB Camera\"\n    elif camera_type == \"raspi_cam\":\n        from picamera.array import PiRGBArray\n        from picamera import PiCamera\n        cam = PiCamera()\n        cam.resolution = (camera_width, camera_height)\n        stream = PiRGBArray(cam)\n        window_name = \"Raspi Camera\"\n    else:\n        print('[Error] --camera_type: wrong device')\n        parser.print_help()\n        sys.exit()\n    print(window_name)\n    cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE)\n\n    detector = ObjectDetectorLite(model, num_threads)\n\n    while True:\n        t1 = time.perf_counter()\n\n        if camera_type == 'raspi_cam':\n            cam.capture(stream, 'bgr', use_video_port=True)\n            color_image = stream.array\n            stream.truncate(0)\n        else:\n            ret, color_image = cam.read()\n            if not ret:\n                continue\n\n        prepimg = cv2.resize(color_image, (300, 300))\n        frames = prepimg.copy()\n        prepimg = prepimg[:, :, ::-1].copy()\n        prepimg = np.expand_dims(prepimg, axis=0)\n        prepimg = prepimg.astype('uint8')\n        res = detector.detect(prepimg, 0.4)\n\n        imdraw = overlay_on_image(frames, res, camera_width, camera_height)\n        imdraw = cv2.resize(imdraw, (camera_width, camera_height))\n        cv2.imshow(window_name, imdraw)\n\n        if cv2.waitKey(1)&0xFF == ord('q'):\n            break\n\n        # FPS calculation\n        framecount += 1\n        if framecount >= 15:\n            fps       = \"(Playback) {:.1f} FPS\".format(time1/15)\n            framecount = 0\n            detectframecount = 0\n            time1 = 0\n            time2 = 0\n        t2 = time.perf_counter()\n        elapsedTime = t2-t1\n        time1 += 1/elapsedTime\n        time2 += elapsedTime\n\n"
  },
  {
    "path": "mobilenetv2ssd.py",
    "content": "import numpy as np\nimport time\nfrom tflite_runtime.interpreter import Interpreter\nimport cv2\n\nLABELS = [\n'???','person','bicycle','car','motorcycle','airplane','bus','train','truck','boat',\n'traffic light','fire hydrant','???','stop sign','parking meter','bench','bird','cat','dog','horse',\n'sheep','cow','elephant','bear','zebra','giraffe','???','backpack','umbrella','???',\n'???','handbag','tie','suitcase','frisbee','skis','snowboard','sports ball','kite','baseball bat',\n'baseball glove','skateboard','surfboard','tennis racket','bottle','???','wine glass','cup','fork','knife',\n'spoon','bowl','banana','apple','sandwich','orange','broccoli','carrot','hot dog','pizza',\n'donut','cake','chair','couch','potted plant','bed','???','dining table','???','???',\n'toilet','???','tv','laptop','mouse','remote','keyboard','cell phone','microwave','oven',\n'toaster','sink','refrigerator','???','book','clock','vase','scissors','teddy bear','hair drier',\n'toothbrush']\n\nclass ObjectDetectorLite():\n    def __init__(self, model_path='detect.tflite'):\n        self.interpreter = Interpreter(model_path=model_path, num_threads=4)\n        self.interpreter.allocate_tensors()\n        self.input_details = self.interpreter.get_input_details()\n        self.output_details = self.interpreter.get_output_details()\n\n    def _boxes_coordinates(\n        self,\n        image,\n        boxes,\n        classes,\n        scores,\n        max_boxes_to_draw=20,\n        min_score_thresh=.5\n    ):\n\n        if not max_boxes_to_draw:\n            max_boxes_to_draw = boxes.shape[0]\n        number_boxes = min(max_boxes_to_draw, boxes.shape[0])\n        person_boxes = []\n        for i in range(number_boxes):\n            if scores is None or scores[i] > min_score_thresh:\n                box = tuple(boxes[i].tolist())\n                ymin, xmin, ymax, xmax = box\n                im_height, im_width, _ = image.shape\n                left, right, top, bottom = [int(z) for z in (xmin * im_width, xmax * im_width, ymin * im_height, ymax * im_height)]\n                person_boxes.append([(left, top), (right, bottom), scores[i], LABELS[classes[i]]])\n        return person_boxes\n\n\n    def detect(self, image, threshold=0.1):\n        # Resize and normalize image for network input\n        frame = cv2.resize(image, (300, 300))\n        frame = np.expand_dims(frame, axis=0)\n        frame = frame.astype('uint8')\n\n        # run model\n        self.interpreter.set_tensor(self.input_details[0]['index'], frame)\n        start_time = time.time()\n        self.interpreter.invoke()\n        stop_time = time.time()\n        print(\"time: \", stop_time - start_time)\n\n        # get results\n        boxes = self.interpreter.get_tensor(self.output_details[0]['index'])\n        classes = self.interpreter.get_tensor(self.output_details[1]['index'])\n        scores = self.interpreter.get_tensor(self.output_details[2]['index'])\n        num = self.interpreter.get_tensor(self.output_details[3]['index'])\n\n        # Find detected boxes coordinates\n        return self._boxes_coordinates(\n            image,\n            np.squeeze(boxes[0]),\n            np.squeeze(classes[0]+1).astype(np.int32),\n            np.squeeze(scores[0]),\n            min_score_thresh=threshold,\n        )\n\n\nif __name__ == '__main__':\n    detector = ObjectDetectorLite('models/mobilenet_ssd_v2_coco_quant_postprocess.tflite')\n\n    image = cv2.cvtColor(cv2.imread('dog.jpg'), cv2.COLOR_BGR2RGB)\n\n    result = detector.detect(image, 0.4)\n    print(result)\n\n    for obj in result:\n        print('coordinates: {} {}. class: \"{}\". confidence: {:.2f}'.\n                    format(obj[0], obj[1], obj[3], obj[2]))\n\n        cv2.rectangle(image, obj[0], obj[1], (0, 255, 0), 2)\n        cv2.putText(image, '{}: {:.2f}'.format(obj[3], obj[2]), (obj[0][0], obj[0][1] - 5), cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 0), 2)\n\n    cv2.imwrite('result.jpg', cv2.cvtColor(image, cv2.COLOR_RGB2BGR))\n\n"
  },
  {
    "path": "models/coco_labels.txt",
    "content": "0  person\n1  bicycle\n2  car\n3  motorcycle\n4  airplane\n5  bus\n6  train\n7  truck\n8  boat\n9  traffic light\n10  fire hydrant\n12  stop sign\n13  parking meter\n14  bench\n15  bird\n16  cat\n17  dog\n18  horse\n19  sheep\n20  cow\n21  elephant\n22  bear\n23  zebra\n24  giraffe\n26  backpack\n27  umbrella\n30  handbag\n31  tie\n32  suitcase\n33  frisbee\n34  skis\n35  snowboard\n36  sports ball\n37  kite\n38  baseball bat\n39  baseball glove\n40  skateboard\n41  surfboard\n42  tennis racket\n43  bottle\n45  wine glass\n46  cup\n47  fork\n48  knife\n49  spoon\n50  bowl\n51  banana\n52  apple\n53  sandwich\n54  orange\n55  broccoli\n56  carrot\n57  hot dog\n58  pizza\n59  donut\n60  cake\n61  chair\n62  couch\n63  potted plant\n64  bed\n66  dining table\n69  toilet\n71  tv\n72  laptop\n73  mouse\n74  remote\n75  keyboard\n76  cell phone\n77  microwave\n78  oven\n79  toaster\n80  sink\n81  refrigerator\n83  book\n84  clock\n85  vase\n86  scissors\n87  teddy bear\n88  hair drier\n89  toothbrush"
  },
  {
    "path": "models/scripts.txt",
    "content": "https://coral.withgoogle.com/models/\n\nwget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_quantized_300x300_coco_2019_01_03.tar.gz\ntar -zxvf ssd_mobilenet_v2_quantized_300x300_coco_2019_01_03.tar.gz\n\ntflite_convert \\\n--graph_def tflite_graph.pb \\\n--output_file mobilenet_ssd_v2_coco_quant_postprocess.tflite \\\n--input_arrays=normalized_input_image_tensor \\\n--input_shapes=1,300,300,3 \\\n--output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3' \\\n--inference_type=QUANTIZED_UINT8 \\\n--std_dev_values=127 \\\n--mean_values=128 \\\n--allow_custom_ops\n\n\nhttps://github.com/QuantuMobileSoftware/mobile_detector.git\n\n"
  }
]