添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
温暖的八宝粥  ·  手掌大小的 ...·  4 月前    · 
追风的便当  ·  🍟萌妻食神【國語】 ...·  1 年前    · 
听话的板栗  ·  2023年 智能门锁推荐 ...·  1 年前    · 

设置android SDK和NDK路径

export SDK_PATH=/root/codes/my_sdk/sdk/
export NDK_PATH=/root/codes/my_sdk/sdk/ndk/24.0.8215888/
sdk和ndk下载方法参考:

tflite本地构建和调用_Luchang-Li的博客-CSDN博客_tensflow tflite model如何调用

设置好环境变量,把下面的build.sh放在代码目录直接执行即可,在build目录内部相应位置会生成so文件。

编译openblas

git clone --recursive -b v0.3.21 https://github.com/xianyi/OpenBLAS.git

可以在-b设置需要的版本。

build.sh

#!/bin/bash
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
mkdir ${SCRIPT_DIR}/build
cd ${SCRIPT_DIR}/build
# please set SDK_PATH, NDK_PATH, etc. by env
# require download cmake, etc. by sdkmanager "cmake;3.18.1" "ndk;24.0.8215888" --channel=0 --sdk_root=./sdk_path
# require ndk >= 24.0.8215888
# for example:
# export SDK_PATH=/root/codes/my_sdk/sdk/
# export NDK_PATH=/root/codes/my_sdk/sdk/ndk/24.0.8215888/
if [ ! -d ${SDK_PATH} ] ; then
    echo "ERROR: please set valid sdk path by env SDK_PATH"
    exit 1
if [ ! -d ${SDK_PATH}/cmake/3.18.1/ ] ; then
    echo "ERROR: please download cmake 3.18.1 for sdk"
    exit 1
if [ ! -d ${NDK_PATH} ] ; then
    echo "ERROR: please set valid ndk path by env NDK_PATH"
    exit 1
if [ -z ${ANDROID_ABI} ] ; then
    ANDROID_ABI=arm64-v8a
if [ -z ${MINSDKVERSION} ] ; then
    MINSDKVERSION=29
echo "SDK_PATH:" $SDK_PATH
echo "NDK_PATH:" $NDK_PATH
echo "ANDROID_ABI:" $ANDROID_ABI
echo "MINSDKVERSION:" $MINSDKVERSION
    # -DBUILD_SHARED_LIBS=ON \
${SDK_PATH}/cmake/3.18.1/bin/cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
    -DANDROID_ABI=${ANDROID_ABI} \
    -DANDROID_NDK=${NDK_PATH} \
    -DANDROID_PLATFORM=android-${MINSDKVERSION} \
    -DCMAKE_ANDROID_ARCH_ABI=${ANDROID_ABI} \
    -DCMAKE_ANDROID_NDK=${NDK_PATH} \
    -DCMAKE_MAKE_PROGRAM=${SDK_PATH}/cmake/3.18.1/bin/ninja \
    -DCMAKE_SYSTEM_NAME=Android \
    -DCMAKE_SYSTEM_VERSION=${MINSDKVERSION} \
    -DANDROID_STL=c++_static \
    -DCMAKE_CXX_FLAGS_RELEASE="-s"  \
    -DBUILD_STATIC_LIBS=ON \
    -GNinja \
if [ $? -ne 0 ]; then
    echo "ERROR: cmake failed"
    exit 1
${SDK_PATH}/cmake/3.18.1/bin/ninja
if [ $? -ne 0 ]; then
    echo "ERROR: build failed"
    exit 1

编译faiss

​git clone --recursive -b v1.7.2 https://github.com/facebookresearch/faiss.git
#!/bin/bash
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
mkdir ${SCRIPT_DIR}/build
cd ${SCRIPT_DIR}/build
# please set SDK_PATH, NDK_PATH, etc. by env
# require download cmake, etc. by sdkmanager "cmake;3.18.1" "ndk;24.0.8215888" --channel=0 --sdk_root=./sdk_path
# require ndk >= 24.0.8215888
# for example:
# export SDK_PATH=/root/codes/my_sdk/sdk/
# export NDK_PATH=/root/codes/my_sdk/sdk/ndk/24.0.8215888/
if [ ! -d ${SDK_PATH} ] ; then
    echo "ERROR: please set valid sdk path by env SDK_PATH"
    exit 1
if [ ! -d ${SDK_PATH}/cmake/3.18.1/ ] ; then
    echo "ERROR: please download cmake 3.18.1 for sdk"
    exit 1
if [ ! -d ${NDK_PATH} ] ; then
    echo "ERROR: please set valid ndk path by env NDK_PATH"
    exit 1
if [ -z ${ANDROID_ABI} ] ; then
    ANDROID_ABI=arm64-v8a
if [ -z ${MINSDKVERSION} ] ; then
    MINSDKVERSION=29
echo "SDK_PATH:" $SDK_PATH
echo "NDK_PATH:" $NDK_PATH
echo "ANDROID_ABI:" $ANDROID_ABI
echo "MINSDKVERSION:" $MINSDKVERSION
${SDK_PATH}/cmake/3.18.1/bin/cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
    -DANDROID_ABI=${ANDROID_ABI} \
    -DANDROID_NDK=${NDK_PATH} \
    -DANDROID_PLATFORM=android-${MINSDKVERSION} \
    -DCMAKE_ANDROID_ARCH_ABI=${ANDROID_ABI} \
    -DCMAKE_ANDROID_NDK=${NDK_PATH} \
    -DCMAKE_MAKE_PROGRAM=${SDK_PATH}/cmake/3.18.1/bin/ninja \
    -DCMAKE_SYSTEM_NAME=Android \
    -DCMAKE_SYSTEM_VERSION=${MINSDKVERSION} \
    -DANDROID_STL=c++_static \
    -DCMAKE_BUILD_TYPE=Release \
    -DFAISS_ENABLE_GPU=OFF \
    -DFAISS_ENABLE_PYTHON=OFF \
    -DBUILD_TESTING=OFF \
    -DBUILD_SHARED_LIBS=ON \
    -DBLA_VENDOR=OpenBLAS \
    -DMKL_LIBRARIES=/root/codes/faiss/OpenBLAS/build/lib/libopenblas.so \
    -DCMAKE_CXX_FLAGS_RELEASE="-s"  \
    -GNinja \
if [ $? -ne 0 ]; then
    echo "ERROR: cmake failed"
    exit 1
${SDK_PATH}/cmake/3.18.1/bin/ninja
if [ $? -ne 0 ]; then
    echo "ERROR: build failed"
    exit 1

注意这里面DMKL_LIBRARIES设置了openblas的so路径,以及其他cmake选项。

上面采用了静态链接的方式,使得最终编译的libfaiss.so不依赖额外的libopenblas.so而且so体积比较小。动态链接的方式libopenblas.so需要额外30M的空间。

原始文章: : (日语) $ git clone https://github.com/yubessy/faiss-recommender-api-example.git $ cd faiss-recommender-api-example $ docker build -t faiss-recommender-api-example . # takes quite a long time... $ docker run -p 5000:5000 faiss-recommender-api-example 关于数据集 movielens-small下的文件是从下载的 运行pip install haystack 安装最新版本的pyinstaller 运行pyinstaller --onedir app.spec --clean --distpath distAPP 运行./distAPP/app/app 您现在应该得到错误: 03/26/2021 22:23:58 - INFO - faiss - Loading faiss with AVX2 support. 03/26/2021 22:23:58 - INFO - faiss - Loading faiss. 然后在环境变量中指定编译链的位置就可以开始使用了 NDK编译链和linux gcc编译链有不同之处,就是NDK使用的是clang和clang++不是gcc和g++可以使用符号链接进行等价代换 文件查找命令fing、grep
1.Faiss的概念 faiss是一个Facebook AI团队开源的,全称为Facebook AI Similarity Search,该开源针对高维空间中的海量数据(稠密向量),提供了高效且可靠的相似性聚类和检索方法,可支持十亿级别向量的搜索,是目前最为成熟的近似近邻搜索。 官方资源地址https://github.com/facebookresearch/faiss 2.Faiss基础依赖 1)矩阵计算框架:Faiss与计算资源之间需要一个外部依赖框架,这个框架是一个矩阵计算框架,官方默
openssl可以编译成ARM下面的二进制代码(动态或者静态),方便APP使用,APP在使用的时候,需要使用JNI来进行调用。 本文章参考官方文档https://wiki.openssl.org/index.php/Android进行总结。 编译步骤: 1.下载NDK 2.下载openssl和setenv-android.sh 3.设置环境变量,配置openssl 4....
Faiss 是由 Facebook AI Research(FAIR)开发的一个用于有效的相似性搜索(similarity search)和稠密矢量聚类(clustering of dense vectors)的。它包含了在任何大小的向量集合里进行搜索的算法,向量集合的大小甚至可以达到装不进 RAM。它还包含了用于评估和参数调优的支持代码。Faiss 是用 C ++编写的,带有 Python
MediaStore里有个file表,里面有个列提供文件所在目录的索引号(见官网http://developer.android.com/reference/android/provider/MediaStore.Files.FileColumns.html#PARENT ), 虽然不知道这个索引号是来干什么的,但它却是目录的唯一标示,可以用它来统计信息。 以检索音频为例,使用这条select...
Ubuntu16.04 编译 OpenBLAS for Android(更新版) 本文是https://blog.csdn.net/lj402159806/article/details/85691400这篇OpenBLAS编译部分的更新版 编译版本 openblas-0.3.6 ndk-r20 编译环境 首先需要安装sdk tools,然后通过sdkmanager安装cmake和nd...