无法加载动态库"libtensorflowlite_c.so":dlopen 失败:找不到库"libtensorflowlite_c.so"



当我试图打电话给

/// runs and transforms the data 🤖
this._interpreter.run(input, output);

。_interpreter = await Interpreter.fromAsset('mobilefacenet.tflite',选择:interpreterOptions);

得到这个错误

加载动态库libtensorflowlite_c失败。libtensorflowlite_c.so"没有找到

Windows用户:

  1. 在记事本上复制所有这些行:

    @echo off
    setlocal enableextensions
    cd %~dp0
    set TF_VERSION=2.5
    set URL=https://github.com/am15h/tflite_flutter_plugin/releases/download/
    set TAG=tf_%TF_VERSION%
    set ANDROID_DIR=androidappsrcmainjniLibs
    set ANDROID_LIB=libtensorflowlite_c.so
    set ARM_DELEGATE=libtensorflowlite_c_arm_delegate.so
    set ARM_64_DELEGATE=libtensorflowlite_c_arm64_delegate.so
    set ARM=libtensorflowlite_c_arm.so
    set ARM_64=libtensorflowlite_c_arm64.so
    set X86=libtensorflowlite_c_x86_delegate.so
    set X86_64=libtensorflowlite_c_x86_64_delegate.so
    SET /A d = 0
    :GETOPT
    if /I "%1"=="-d" SET /A d = 1
    SETLOCAL
    if %d%==1 CALL :Download %ARM_DELEGATE% armeabi-v7a
    if %d%==1 CALL :Download %ARM_64_DELEGATE% arm64-v8a
    if %d%==0 CALL :Download %ARM% armeabi-v7a
    if %d%==0 CALL :Download %ARM_64% arm64-v8a
    CALL :Download %X86% x86
    CALL :Download %X86_64% x86_64
    EXIT /B %ERRORLEVEL%
    :Download
    curl -L -o %~1 %URL%%TAG%/%~1
    mkdir %ANDROID_DIR%%~2
    move /-Y %~1 %ANDROID_DIR%%~2%ANDROID_LIB%
    EXIT /B 0
    
  2. 另存为install.bat,放到项目根目录下。

  3. 在资源管理器中打开命令窗口。

  4. 输入install.bat,按输入。如果您希望使用GpuDelegateV2NnApiDelegate,请使用install.bat -d(Windows)。


对于Linux/Mac用户:

  1. 在记事本上复制所有这些行

    #!/usr/bin/env bash
    cd "$(dirname "$(readlink -f "$0")")"
    # Available versions
    # 2.5, 2.4.1
    TF_VERSION=2.5
    URL="https://github.com/am15h/tflite_flutter_plugin/releases/download/"
    TAG="tf_$TF_VERSION"
    ANDROID_DIR="android/app/src/main/jniLibs/"
    ANDROID_LIB="libtensorflowlite_c.so"
    ARM_DELEGATE="libtensorflowlite_c_arm_delegate.so"
    ARM_64_DELEGATE="libtensorflowlite_c_arm64_delegate.so"
    ARM="libtensorflowlite_c_arm.so"
    ARM_64="libtensorflowlite_c_arm64.so"
    X86="libtensorflowlite_c_x86_delegate.so"
    X86_64="libtensorflowlite_c_x86_64_delegate.so"
    delegate=0
    while getopts "d" OPTION
    do
    case $OPTION in
    d)  delegate=1;;
    esac
    done
    
    download () {
    wget "${URL}${TAG}/$1" -O "$1"
    mkdir -p "${ANDROID_DIR}$2/"
    mv $1 "${ANDROID_DIR}$2/${ANDROID_LIB}"
    }
    if [ ${delegate} -eq 1 ]
    then
    download ${ARM_DELEGATE} "armeabi-v7a"
    download ${ARM_64_DELEGATE} "arm64-v8a"
    else
    download ${ARM} "armeabi-v7a"
    download ${ARM_64} "arm64-v8a"
    fi
    download ${X86} "x86"
    download ${X86_64} "x86_64"
    
  2. 另存为install.sh文件名,并将文件放在项目根目录下。

  3. 打开命令窗口。

  4. 输入sh install.sh,按输入。如果您希望使用GpuDelegateV2NnApiDelegate,请使用sh install.sh -d

我也有同样的错误。希望这是有用的人。

使用install.sh文件后,该错误显示(仅在Android上,iOS工作良好)。但是我在安装文件中将wget更改为curl,它已经下载了一个重定向html页面。

对我来说有效的替换是:

# wget "${URL}${TAG}/$1" -O "$1" # Replaced with the below line          
curl -L "${URL}${TAG}/$1" -o "$1"

尝试确认您下载的文件是否正确。您可以在<projectdirectory>/android/app/src/main/jniLibs中检查这些文件。它们应该是以^?ELF开头的二进制文件,而不是像我这样的html文件。

你需要在应用的根目录下添加一个文件tflite_flutter包中。tflite_flutter。你也可以在这里找到它。只需下载该文件并将其放入应用程序的根目录中,然后双击即可安装所需信息。(Windows)

Android平台:

将脚本install.sh(Linux/Mac)或install.bat(Windows)放在项目的根目录

执行。sh:

install.sh <= (Linux/Mac)

install.bat <= (Windows)

文件,以自动下载二进制文件并将其放置在适当的文件夹中。

注意:安装的二进制文件将不包括对GpuDelegateV2和NnApiDelegate的支持,但InterpreterOptions().useNnApiForAndroid仍然可以使用。

如何使用.sh

Linux/Mac

install.sh -d 

Windows

install.bat -d 

如果你想使用这些GpuDelegateV2和NnApiDelegate。

阅读更多:https://pub.dev/packages/tflite_flutter

相关内容

最新更新