TFLite: TfLiteCameraDemo bazel file

news/2025/3/15 5:03:43/

编译源码使用的命令

bazel build --cxxopt='--std=c++11' //tensorflow/lite/java:TfLiteCameraDemo \
--crosstool_top=//external:android/crosstool \
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
--cpu=arm64-v8a

bazel file组成元素

workspace: 路径下包含文件WORKSPACE(可以是空文件,但必须有)
package:路径下包含文件BUILD
target:BUILD文件中的某个ruler

BUILD file

load("@build_bazel_rules_android//android:rules.bzl", "android_binary")

package(default_visibility = ["//visibility:private"])

licenses(["notice"])  # Apache 2.0

android_binary(
    name = "TfLiteCameraDemo",
    srcs = glob(["java/**/*.java"]),
    aapt_version = "aapt",
    assets = [
        "//tensorflow/contrib/lite/java/demo/app/src/main/assets:labels_mobilenet_quant_v1_224.txt",
        "@tflite_mobilenet//:mobilenet_quant_v1_224.tflite",
    ],
    assets_dir = "",
    custom_package = "com.example.android.tflitecamerademo",
    manifest = "AndroidManifest.xml",
    nocompress_extensions = [
        ".tflite",
    ],
    resource_files = glob(["res/**"]),
    # In some platforms we don't have an Android SDK/NDK and this target
    # can't be built. We need to prevent the build system from trying to
    # use the target in that case.
    tags = ["manual"],
    deps = [
        "//tensorflow/contrib/lite/java:tensorflowlite",
        "//tensorflow/contrib/lite/java/src/testhelper/java/org/tensorflow/lite:testhelper",
        "@androidsdk//com.android.support:support-v13-25.2.0",
        "@androidsdk//com.android.support:support-v4-25.2.0",
    ],
)

 

分析第一句 load("@build_bazel_rules_android//android:rules.bzl", "android_binary")

load是一个扩展bazel功能的函数
build_bazel_rules_android是一个ruler的name,表示从某个 URL 下载到的文件,android是包含文件rules.bzl的文件夹
android_binary和该BULD文件的android_binary对应

build_bazel_rules_android定义在文件中tensorflow/tensorflow/workspace.bzl文件中
    tf_http_archive(     
        name   = "build_bazel_rules_android", 
                                                                                                                                                                       
        sha256 = "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806",     
        strip_prefix = "rules_android-0.1.1",     
        urls = [     
            "https://mirror.bazel.build/github.com/bazelbuild/rules_android/archive/v0.1.1.zip",     
            "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip",     
        ],     
    )

    tf_http_archive(
        name = "tflite_mobilenet",
                                                                                                                                                                                 
        build_file = clean_dep("//third_party:tflite_mobilenet.BUILD"),
        sha256 = "23f814d1c076bdf03715dfb6cab3713aa4fbdf040fd5448c43196bd2e97a4c1b",
        urls = [
            "https://mirror.bazel.build/storage.googleapis.com/..models/tflite/mobilenet_v1_224_android_quant_2017_11_08.zip",
            "https://storage.googleapis.com/../models/tflite/mobilenet_v1_224_android_quant_2017_11_08.zip",
        ],
    )

另外androidsdk定义在文件:tensorflow/WORKSPACE
android_sdk_repository (     
    name = "androidsdk",     
    api_level = 23,     
    build_tools_version = "26.0.1",     
    path = "/home/mi/Android/Sdk/",     
)

glob函数


glob(include, exclude=[], exclude_directories=1)
Glob is a helper function that can be used anywhere a list of filenames is expected. 
    srcs = glob(["*.java"]) + [":gen_java_srcs"],

    data = glob(
        ["testdata/*.txt"],
        exclude = ["testdata/experimental.txt"],

    srcs = glob(
        ["**/*.java"],
        exclude = ["**/testing/**"],
    ),

android ruler


android_binary: Produces Android application package files (.apk).


    name:         required
    deps:         The list of other libraries to be linked in to the binary target.
    srcs:         The list of source files that are processed to create the target.
    aapt_version:     Select the version of aapt for this rule. aapt/aapt2/auto
    assets:     The list of assets to be packaged
    assets_dir:     The string giving the path to the files in assets.
    custom_package: Java package for which java sources will be generated.
    manifest:     The name of the Android manifest file, normally AndroidManifest.xml. 
    resource_files: The list of resources to be packaged.
    nocompress_extensions: A list of file extension to leave uncompressed in apk.

android_libray


This rule compiles and archives its sources into a .jar file. 
 

java接口的组成

 

native层的代码主要由framework和builtin_ops组成 ;

framework

其中的 *.d 文件表示改文件的依赖如 .c/ .h文件的改变将引起重新编译

│   ├── framework
│   │   ├── allocation.o
│   │   ├── graph_info.o
│   │   ├── interpreter.o
│   │   ├── mmap_allocation.o
│   │   ├── model.d
│   │   ├── model.o
│   │   ├── mutable_op_resolver.o
│   │   ├── nnapi_delegate.o
│   │   ├── optional_debug_tools.o
│   │   └── stderr_reporter.o

builtin_ops

只用一个regitster ops的register.cc文件

│       ├── builtin_ops
│       │   ├── register.d
│       │   └── register.o

注册的ops在builtin_op_kernels中

│       ├── builtin_op_kernels
│       │   ├── activations.d
│       │   ├── activations.o
│       │   ├── add.d
│       │   ├── add.o


http://www.ppmy.cn/news/229967.html

相关文章

TFLite: 代码组成结构

编译命令 bazel build --cxxopt--stdc11 //tensorflow/contrib/lite/java/demo/app/src/main:TfLiteCameraDemo 编译目标从WORKSPACE所在的路径开始到package路径(BUILD文件所在路径) : target(name) 编译输出结果 Target //tensorflow/contrib/lite/java/demo/app/src/main…

Paddle Lite在ARM上的应用,以Yolov5为例

目录 一、Paddle Lite简介 二、环境安装 2.1 本地环境安装(基于python3.6): 2.2 开发板Paddle Lite编译(基于python3.7): 2.2.1 已经编译好的whl包(arm,支持python、耗时分析功能&#xff…

android11有哪种手机,支持安卓11系统的机型有哪些

安卓11系统可以在什么手机上使用?支持Android 11升级的具体机型有哪些?美国当地时间周二,谷歌正式发布了最新版本的移动操作系统 Android 11,并将源代码推给了 Android 开放源代码项目 (AOSP)。那么安卓11支持哪些机型呢?下面就让小编给大家介绍一下。 与之前的旗舰版本不…

小米8线刷pixel experience全过程记录

文章目录 刷recovery刷入系统root遇到的问题 刷recovery 1.下载 recovery镜像 2.执行 adb fastboot reboot 3.执行 fastboot flash recovery twrp.img 4.fastboot reboot 5.在执行4的同时,要按住音量上键电源键,来进入一次fastboot,否则会导…

spring_2

Spring Bean的作用域 singleton: Spring的默认作用域,容器里拥有唯一的Bean实例,适合无状态的Bean.prototype: 针对每个getBean请求, 容器都会创建一个Bean对象,适合有状态的Bean.request: 会为每个Http请求创建一个Bean实例,该作用域只针对web容器有效.session: 会为每个sess…

小米手机10 青春版(Mi 10 Lite Zoom)TWRP刷入12.5版教程

本刷机教程是本人在无内测资格的情况下,刷入TWRP后输入12.5开发版系统,本文提供了对应的TWRP的下载,已经目前最新12.5卡刷包下载。 注意针对机型:Mi 10 Lite Zoom 注意针对机型:Mi 10 Lite Zoom 注意针对机型&#xf…

学习HTTP2

这是有关HTTP最后一部分内容的学习啦~今天一起来学习HTTP/2! HTTP2 HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),简称为h2(基于TLS/1.2或以上版本的加密连接)或h2c(非加密连接…

【Linux】TCP网络套接字编程+协议定制+序列化和反序列化

悟已往之不谏,知来者之可追。抓不住的就放手,属于你的都在路上…… 文章目录 一、TCP网络套接字编程1.日志等级分类的日志输出API2.单进程版本的服务器客户端通信3.多进程版本和多线程版本4.线程池版本5.守护进程化的线程池服务器6.三次握手和四次挥手的…