在银河麒麟V10 编译RapidocrNcnn

RapidocrNcnn是一个开源的文字识别软件。还有一个是rapidocronnx,经测试,比这个识别较慢一点。

下载地址:https://github.com/RapidAI/RapidOcrNcnn

编译前要先编译opencv、ncnn ,vulkan

前期准备:

下载cmake 3.28.0 ,https://cmake.org/files/v3.28/cmake-3.28.0-linux-aarch64.sh

执行 ./cmake-3.28.0-linux-aarch64.sh,

编译后把目录加入 到环境目录中即可

gedit /etc/profile 

文件中添加一行:export PATH=$PATH:/。。。这里自己改所在目录。。cmake/cmake-3.28.0-linux-aarch64/bin

sudo apt-get install libwayland-dev libwayland-egl1-mesa wayland-protocols

1.编译opencv

先下载opencv4.6源码。(https://opencv.org/releases/)并解压新目录opencv,

再下载https://github.com/RapidAI/OpenCVBuilder下载后解压覆盖到opencv

build-opencv4-linux.sh

2.如要用GPU,我测试比CPU版本还慢!!这步才要处理

预先执行:sudo apt-get install ninja-build

pip install jsonschema

下载https://sdk.lunarg.com/sdk/download/1.3.239.0/linux/vulkansdk-linux-x86_64-1.3.239.0.tar.gz

解压后执行 ./vulkansdk 

我没有执行成功,但是后续还是可以编译的。

3.编译 ncnn

https://codeload.github.com/Tencent/ncnn/zip/refs/heads/master

https://codeload.github.com/benjaminwan/NcnnBuilder/zip/refs/heads/main

 3.编译Rapidocrncnn

最后脚本合集分了三个。

1.预处理,安装先决条件。要用sudo权限(preinstall)

#!/bin/bash

# 设置错误时退出
set -e
set -x
# 颜色输出函数
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo_info() {
    echo -e "${BLUE}[信息] $1${NC}"
}

echo_success() {
    echo -e "${GREEN}[成功] $1${NC}"
}

echo_error() {
    echo -e "${RED}[错误] $1${NC}"
}
REAL_USER="ymf"


# 检查是否为root用户
if [ "$EUID" -ne 0 ]; then
    echo_error "请使用root权限运行此脚本(使用sudo)"
    exit 1
fi

# 创建工作目录
WORK_DIR=$PWD
mkdir -p "$WORK_DIR"
cd "$WORK_DIR"
drop_privileges() {
    echo_info "正在切换到普通用户权限..."
    # 切换到普通用户
    exec su - $REAL_USER   << EOF
   
    cd "$WORK_DIR"
    echo_info "已切换到用户 $REAL_USER"
    echo_info "当前工作目录: $WORK_DIR"
    #exec bash
EOF

}
installSoft()
{
echo "正在安装软件..."
}

# 安装系统依赖
echo_info "正在安装系统依赖..."
apt-get update
apt-get install -y build-essential git aria2 \
    libwayland-dev libwayland-egl1-mesa wayland-protocols \
    ninja-build python3-pip unzip

# 安装Python依赖
echo_info "正在安装Python依赖..."
pip3 install jsonschema

# 处理CMake安装
echo_info "正在处理CMake安装..."

# 备份原有的cmake
if [ -f /usr/bin/cmake ]; then
    echo_info "备份原有的cmake..."
    mv /usr/bin/cmake /usr/bin/cmake.bak
fi

# 下载CMake
echo_info "正在下载CMake..."
if [ ! -f cmake-3.28.0-linux-aarch64.sh ]; then
    aria2c -c -x 16 -s 16 https://cmake.org/files/v3.28/cmake-3.28.0-linux-aarch64.sh
fi

# 安装CMake到/usr/bin
echo_info "正在安装CMake到/usr/bin目录..."
chmod +x cmake-3.28.0-linux-aarch64.sh
mkdir -p cmake_temp
./cmake-3.28.0-linux-aarch64.sh --skip-license --prefix=cmake_temp
cp cmake_temp/bin/cmake /usr/bin/
cp cmake_temp/bin/cmake-gui /usr/bin/
cp cmake_temp/bin/ccmake /usr/bin/
cp cmake_temp/bin/cpack /usr/bin/
cp cmake_temp/bin/ctest /usr/bin/
cp -rf cmake_temp/share/cmake-3.28/ /usr/share/
#rm -rf cmake_temp


# 验证CMake安装
echo_info "验证CMake安装..."
cmake_version=$(cmake --version | head -n1)
echo_info "当前CMake版本: $cmake_version"
# 显示CMake版本信息./
echo_info "CMake安装信息:"
echo_info "安装位置:/usr/bin/cmake"
echo_info "当前版本:$(cmake --version | head -n1)"
if [ -f /usr/bin/cmake.bak ]; then
    echo_info "原版本已备份为:/usr/bin/cmake.bak"
fi

2.下载相关代码并初始化

downloadsoft.sh

#!/bin/bash

# 设置错误时退出

# 颜色输出函数
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo_info() {
    echo -e "${BLUE}[信息] $1${NC}"
}

echo_success() {
    echo -e "${GREEN}[成功] $1${NC}"
}

echo_error() {
    echo -e "${RED}[错误] $1${NC}"
}


# 创建工作目录
WORK_DIR=$PWD
mkdir -p "$WORK_DIR"
cd "$WORK_DIR"



cd "$WORK_DIR"
# 下载并编译OpenCV
echo_info "正在下载OpenCV相关文件..."
if [ ! -f opencv.zip ]; then
    echo_info "下载OpenCV源码..."
    #https://gitee.com/opencv/opencv/repository/archive/4.6.0.zip
    wget -O opencv.zip https://github.com/opencv/opencv/archive/4.6.0.zip
fi
if [ ! -f opencvbuilder.zip ]; then
    echo_info "下载OpenCVBuilder..."
    #git clone https://gitee.com/RapidAI/OpenCVBuilder.git
    wget -O  opencvbuilder.zip https://github.com/RapidAI/OpenCVBuilder/archive/refs/heads/main.zip
fi

echo_info "解压OpenCV源码..."
if [ ! -d opencv-4.6.0 ]; then
    unzip opencv.zip
fi
if [ ! -d OpenCVBuilder-main ]; then
    echo_info "解压OpenCVBuilder..."
    unzip opencvbuilder.zip
fi

echo_info "解压OpenCVBuilder并强制覆盖到OpenCV目录..."
unzip -o opencvbuilder.zip
cp -rf OpenCVBuilder-main/* opencv-4.6.0/

echo_info "配置并编译OpenCV..."
cd opencv-4.6.0
chmod +x build-opencv4-linux.sh 

cd ..

# 下载并编译NCNN
echo_info "正在下载NCNN相关文件..."
if [ ! -f ncnn.zip ]; then
    echo_info "下载NCNN源码..."
    aria2c -c -x 16 -s 16 -o ncnn.zip https://codeload.github.com/Tencent/ncnn/zip/refs/heads/master
fi
if [ ! -f ncnnbuilder.zip ]; then
    echo_info "下载NCNNBuilder..."
    aria2c -c -x 16 -s 16 -o ncnnbuilder.zip https://codeload.github.com/benjaminwan/NcnnBuilder/zip/refs/heads/main
fi

if [ ! -d ncnn-master ]; then
    echo_info "解压NCNN源码..."
    unzip ncnn.zip
fi
if [ ! -d NcnnBuilder-main ]; then
    echo_info "解压NCNNBuilder..."
    unzip ncnnbuilder.zip
fi


cp -r NcnnBuilder-main/* ncnn-master/
..

# 下载并编译RapidOcrNcnn
echo_info "正在下载并编译RapidOcrNcnn..."
if [ ! -d RapidOcrNcnn ]; then
    echo_info "克隆RapidOcrNcnn代码库..."
    git clone https://gitee.com/loadymf/RapidOcrNcnn.git
fi



echo_success "所有1组件下载完成!"

3.重新编译软件,并把ncnn 和opencv同步到rapidocrncnn中,

rebuild.sh

#!/usr/bin/env bash
# ./build-opencv4-linux.sh -n 386
# ./build-opencv4-linux.sh -n amd64
# ./build-opencv4-linux.sh -n arm
# ./build-opencv4-linux.sh -n arm64
# ./build-opencv4-linux.sh -n ppc64le
set -e
# 颜色输出函数
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo_info() {
    echo -e "${BLUE}[信息] $1${NC}"
}

echo_success() {
    echo -e "${GREEN}[成功] $1${NC}"
}

echo_error() {
    echo -e "${RED}[错误] $1${NC}"
}

WORK_DIR="/home/ymf/RapidOcr"
HOST_OS=$(uname -s)
NUM_THREADS=1
BUILD_TYPE=Release
# 提示用户输入编译模式
echo "请选择编译模式:"
echo "1. Debug"
echo "other. Release"
default_build_mode="2"
read  -p "请输入数字 (1 或 other): " build_mode
# 根据用户输入设置编译模式
build_mode=${build_mode:-$default_build_mode}
if [ "$build_mode" == "1" ]; then
  BUILD_TYPE=Debug
fi
echo  "BUILD_TYPE=$BUILD_TYPE"
if [ "$HOST_OS" == "Linux" ]; then
    NUM_THREADS=$(nproc)
else
    echo "Unsupported OS: $HOST_OS"
    exit 0
fi

JAVA_FLAG=""
TARGET_ARCH="aarch64"

while getopts "n:j" arg; do
    case $arg in
    n)
        echo "n(TARGET_ARCH):$OPTARG"
        TARGET_ARCH="$OPTARG"
        ;;
    j)
        echo "j's arg:$OPTARG"
        JAVA_FLAG="-DBUILD_FAT_JAVA_LIB=ON -DBUILD_JAVA=ON -DBUILD_opencv_java=ON -DBUILD_opencv_flann=ON"
        ;;
    ?)
        echo -e "unkonw argument."
        exit 1
        ;;
    esac
done

if [ -z "$TARGET_ARCH" ]; then
    echo -e "empty TARGET_ARCH."
    echo -e "usage: ./build-opencv3-linux.sh -n amd64"
    exit 1
fi

# get gcc version
export _compiler=$(which gcc)
MAJOR=$(echo __GNUC__ | $_compiler -E -xc - | tail -n 1)
MINOR=$(echo __GNUC_MINOR__ | $_compiler -E -xc - | tail -n 1)
PATCH_LEVEL=$(echo __GNUC_PATCHLEVEL__ | $_compiler -E -xc - | tail -n 1)

if [ "$HOST_OS" == "Linux" ] && [ "$TARGET_ARCH" == "arm64" ] && [ "$MAJOR.$MINOR.$PATCH_LEVEL" == "4.8.4" ]; then
    echo "Linux arm64 gcc version is 4.8.4, turn off libwebp"
    DISABLE_OPTION="-DBUILD_WEBP=OFF -DWITH_WEBP=OFF"
elif [ "$HOST_OS" == "Linux" ] && [ "$TARGET_ARCH" == "386" ] && [ "$MAJOR.$MINOR.$PATCH_LEVEL" == "4.8.4" ]; then
    echo "Linux 386 gcc version is 4.8.4, turn off openexr"
    DISABLE_OPTION="-DBUILD_OPENEXR=OFF -DWITH_OPENEXR=OFF"
else
    echo "Other gcc version"
    DISABLE_OPTION=""
fi

BUILD_OUTPUT_PATH="build-$BUILD_TYPE-$TARGET_ARCH-$BUILD_TYPE"
BUILD_INSTALL_PATH="$BUILD_OUTPUT_PATH/install"
cd opencv-4.6.0
mkdir -p "$BUILD_OUTPUT_PATH"

cmake --compile-no-warning-as-error \
    -B"$BUILD_OUTPUT_PATH" \
    -DCMAKE_INSTALL_PREFIX="$BUILD_INSTALL_PATH" \
    -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_CONFIGURATION_TYPES=$BUILD_TYPE \
    $(cat opencv4_cmake_options.txt) \
    $DISABLE_OPTION \
    $JAVA_FLAG

cmake --build $BUILD_OUTPUT_PATH --config $BUILD_TYPE --parallel $NUM_THREADS --target install
Dest_Path="$WORK_DIR/RapidOcrNcnn/opencv-static/linux"
 rsync -avh --delete "$BUILD_INSTALL_PATH/" "$Dest_Path/"
cd ..
cd ncnn-master



# 请选择要使用的ncnn库选项并回车: 1)ncnn(CPU),2)ncnn(vulkan)

echo "请选择要使用的ncnn库选项并回车: 1.ncnn [CPU],2.ncnn[vulkan]"
read -p "请输入数字 1 或 2: "  build_ncnn
# 根据用户输入设置编译模式

if [ "$build_ncnn" == "2" ]; then
  BUILD_NCNN_VULKAN="GPU"
  NCNN_VULKAN="ON"
  Dest_Path="$WORK_DIR/RapidOcrNcnn/ncnn-vulkan-static/linux"
  
else
  BUILD_NCNN_VULKAN="CPU"  
  NCNN_VULKAN="OFF"
  Dest_Path="$WORK_DIR/RapidOcrNcnn/ncnn-static/linux"
fi
echo "请注意:如果选择2)JNI动态库时,必须安装配置Oracle JDK"
echo_info "请选择编译输出类型并回车: 1)BIN可执行文件,2)JNI动态库,3)C动态库"
read -p "" BUILD_OUTPUT
if [ $BUILD_OUTPUT == 1 ]; then
  BUILD_OUTPUT="BIN"
elif [ $BUILD_OUTPUT == 2 ]; then
  BUILD_OUTPUT="JNI"
elif [ $BUILD_OUTPUT == 3 ]; then
  BUILD_OUTPUT="CLIB"
else
  BUILD_OUTPUT="BIN"
  echo -e "输入错误!Input Error!,设置为默认BIN"
fi
sysOS=$(uname -s)
NUM_THREADS=1
TARGET_ARCH="aarch64"
if [ $sysOS == "Darwin" ]; then
  #echo "I'm MacOS"
  NUM_THREADS=$(sysctl -n hw.ncpu)
  #cmakeParams "Release"
elif [ $sysOS == "Linux" ]; then
  #echo "I'm Linux"
  NUM_THREADS=$(grep ^processor /proc/cpuinfo | wc -l)
  #cmakeParams "$BUILD_TYPE"
else
  echo "Other OS: $sysOS"
fi
BUILD_OUTPUT_PATH="build-$BUILD_TYPE-$TARGET_ARCH-$BUILD_NCNN_VULKAN"
 BUILD_INSTALL_PATH="$BUILD_OUTPUT_PATH/install"
  mkdir -p "$BUILD_OUTPUT_PATH"
  cd "$BUILD_OUTPUT_PATH"
  cmake --compile-no-warning-as-error  \
    -DCMAKE_BUILD_TYPE=$1 \
    $(cat ../ncnn_cmake_options.txt) \
    -DNCNN_VULKAN=OFF \
    -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake \
    ..
#read -p "暂停" build_mode1
  cmake  --build . --config "$BUILD_TYPE" -j $NUM_THREADS 
#read -p "暂停" build_mode1
  cmake    --build . --config "$BUILD_TYPE" --target install
  cd ..
 echo "$BUILD_INSTALL_PATH/" 
 echo "$Dest_Path/"
 echo "同步ncnn静态库" 

rsync -avh --delete "$BUILD_INSTALL_PATH/" "$Dest_Path/"
 #rsync -avh --delete "$BUILD_INSTALL_PATH/" "$Dest_Path/"
 cd ..
cd RapidOcrNcnn
mkdir -p $sysOS-$BUILD_OUTPUT-$BUILD_NCNN_VULKAN
cd $sysOS-$BUILD_OUTPUT-$BUILD_NCNN_VULKAN

echo  " cmake -DCMAKE_INSTALL_PREFIX=install -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DOCR_OUTPUT=$BUILD_OUTPUT -DOCR_VULKAN=$BUILD_VULKAN .."
cmake -DCMAKE_INSTALL_PREFIX=install -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DOCR_OUTPUT=$BUILD_OUTPUT -DOCR_VULKAN=$BUILD_VULKAN ..
cmake --build . --config $BUILD_TYPE -j $NUM_THREADS
cmake --build . --config $BUILD_TYPE --target install
cd ..

 

posted @ 2025-03-27 14:55  心痕如丝  阅读(41)  评论(0)    收藏  举报