0、前言  

  • 在要移植opecv和SeetaFaceEngine-master到ARM板子上运行的所有步骤之前,有几点需要注意的:
  • 查看板子运行的Kernel版本
  • 交叉编译工具链的gcc版本,关键就是工具链里库所能支持的最低内核版本
    • 可以用file xxx.so,查看
    • 工具链的版本会影响到opecv、seetaface的编译工程,以及编译出来的opecv库、seetaface最终的可执行文件能否在板子的内核里跑起来
  • 文件系统系统里的lib库最好用与上面提到的同一个工具链里的库
  • 在进行seetaface的交叉编译之前,要先确定opencv已经交叉编译好了,opencv、seetaface、制作根文件系统的busybox这三者用到的交叉编译工具链应一致
  • 说明:该博客接续上篇opencv交叉编译:https://www.cnblogs.com/xz-954042850-qq/p/12598388.html

下面操作尽量不要在共享文件夹目录中进行,在Ubuntu其他原生目录中进行

1、前提准备

  • Linux操作系统:Ubuntu 16.04
  • OpenCv版本:3.4.6
  • 交叉工具链:arm-2014.05-29-arm-none-linux-gnueabi-,gcc version 4.8.3
  • 目标平台:ARM
  • 板       子:study210,kernel:2.6.35
  • SoC       :S5PV210
  • busybox :1.31.1
  • 文件系统:nfs方式挂载
  • 编译时间:2020/3/30

2、下载安装

  • 下载SeetaFaceEngine-master.zip,并解压

  • 搭建根文件系统
    • 利用上面工具链,busybox,搭建文件夹形式的文件系统,此步骤可百度,不细说。
    • 注意:文件系统中的lib库也用工具链里的,编译opev、seetafaceengine时,最好都是用同一个工具链以及工具链里面的库

3、编译seetaface-master

  • cd 进入 SeetaFaceEngine_dir/SeetaFaceEngine-master
  • 编译FaceDetection

    • cd FaceDetection/
    • mkdir build
    • 进行cmake,注意这里的工具链路径是我的,不一定和你的一样,要灵活变动
      • sudo cmake -D CMAKE_C_COMPILER=/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc -D CMAKE_CXX_COMPILER=/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-g++ ..
      • 要注意类似下面这样的信息,看看编译的工具链是否真的对应自己指定的工具链,当然下面图中的cmake方式和工具链不对应我指定的,因为之前编译时没留图,此处以这图来对应说明
    • 报错信息1:例如上面的-msse4.1问题
    • 解决方法:vim 打开 FaceDetection顶层的CMakeList.txt,做以下修改,修改后,切记:要重新cmake,否则不生效。
    • 报错信息2:
    • 解决方法:在FaceDetection/CMakeList.txt中添加下面一行信息,后续两部分同样会碰到这问题,也是这样解决即可,修改后,切记:要重新cmake,否则不生效。
    • 此后,忘记还有没有其他报错信息了,方法百度,如果没能直接找到答案,冷静地,耐心地结合多篇博客,找出问题根源,去解决
    • 如果cmake成功,则进行make
      • make -j4 
    • 编译FaceAlignment

      • cd 进入 FaceAlignment
      • mkdir build
      • cp 将 FaceDetection/include/face_detection.h和FaceDetection/build/libseeta_facedet_lib.so
        拷贝到FaceAlignment/build文件夹下。
        然后在FaceAlignment/src/test/face_alignment_test.cpp中的main函数中的开头地方:

      • seeta::FaceDetection detector("./build/seeta_fd_frontal_v1.0.bin"); //修改这里的路径成这样

      • cd 进入 到FaceAlignment/build
      • 进行cmake,注意这里的工具链路径是我的,不一定和你的一样,要灵活变动
        • sudo cmake -D CMAKE_C_COMPILER=/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc -D CMAKE_CXX_COMPILER=/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-g++ ..
      • make -j4

编译FaceIndentification

    • cd 进入 FaceAlignment
    • mkdir build
    • cp 将 libseeta_facedet_lib.so(FaceDetection/build/),libseeta_fa_lib.so(FaceAlignment/build/),seeta_fd_frontal_v1.0.bin(/FaceDetection/model/),seeta_fa_v1.1.bin(FaceAlignment/model/),添加到FaceIndentification/build中
    • cp 将 face_alignment.h(FaceAlignment/include/),face_detection.h(/FaceDetection/include/)添加到FaceIndentification/include中
    • vim 打开 FaceIdentification/src/test/CMakeLists.txt,用下面内容全代替CMakeLists.txt中地内容
      • aux_source_directory (. SRC_LIST)
      • link_directories(${PROJECT_BINARY_DIR})
      • message(${SRC_LIST})
      • # add external libraries
      • find_package(OpenCV REQUIRED)
      • include_directories(${seeta_facedet_lib_INCLUDE_DIRS} ${seeta_fa_lib_INCLUDE_DIRS})
      • list(APPEND seeta_fi_lib_required_libs ${OpenCV_LIBS} seeta_facedet_lib seeta_fa_lib)
      • enable_testing ()
      • foreach (f ${SRC_LIST})
      • string(REGEX REPLACE "[.]cpp" ".bin" BIN ${f})
      • add_executable(${BIN} ${f})
      • #target_link_libraries(${BIN} viplnet ${OpenCV_LIBS} seeta_facede_lib seeta_fa_lib)
      • target_link_libraries(${BIN} viplnet ${seeta_fi_lib_required_libs})
      • endforeach ()
    • 在 FaceIdentification/src/test/test_face_recognizer.cpp文件中添加如下内容头文件:
      • #include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>
    • 在 FaceIdentification/src/test/test_face_verification.cpp文件中添加如下内容头文件:
      • #include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>
    • 解压 FaceIdentification/model/seeta_fr_v1.0.part1.rar
      • apt-get install unrar
      • unrar x seeta_fr_v1.0.part1.rar
    • cd 进入 FaceIdentification/build
    • 进行cmake,注意这里的工具链路径是我的,不一定和你的一样,要灵活变动
      • sudo cmake -D CMAKE_C_COMPILER=/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc -D CMAKE_CXX_COMPILER=/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-g++ ..
    • make -j4
    • 报错信息1:
    • 解决方法:复制这个链接中已经打开地文件内容https://github.com/ydar95/SeetaFaceEngine/blob/4c2ce314b0e618306879acb285af80ed05a2b49e/FaceIdentification/src/math_functions.cpp,替换FaceIdentification/src/math_functions.cpp中的全部内容即可
    • 报错信息2:
      • #error You must enable NEON instructions (e.g. -mfloat-abi=softfp -mfpu=neon) to use arm_neon.h
      • 如果有上面这类报错信息,则在FaceIdentification/CMakeLists.txt的CMAKE_CXX_FLAGS_RELEASE中加上-mfloat-abi=softfp -mfpu=neon
      • 注意:注意是硬浮点还是软浮点,mfloat-abi选项有hard、soft、softfp,如果写成了softfp,而硬件支持硬浮点可能导致运行程序时找不到动态链接库的问题。(至于如何查看动态链接库是否是硬浮点,可以运行ldconfig -p|grep xxx来查看输出中是否包含hardsoft字样)。所有以后发现找不到动态链接库,而ldconfig -p能找到、ldd却找不到且设置LD_LIBRARY_PATH也无效的情况下就要考虑CPU架构不同、编译选项不同了。
    • 编译成功,至此,seetaface全部交叉编译成功
  • 你的点赞,便是我的动力!!!

ubuntu16.04-交叉编译-SeetaFaceEngine-master的更多相关文章

  1. ubuntu16.04(64位)建立交叉编译环境,并配置编译内核

    安装步骤 1.准备工具安装目录 将压缩包gcc-linaro-arm-linux-bnueabihf-4.9-2014.07_linux.tar存放在一个目录下,这个目录就是你等会解压缩的目录,以后这 ...

  2. 在Ubuntu16.04集群上手工部署Kubernetes

    目前Kubernetes为Ubuntu提供的kube-up脚本,不支持15.10以及16.04这两个使用systemd作为init系统的版本. 这里详细介绍一下如何以非Docker方式在Ubuntu1 ...

  3. ubuntu16.04配置py-faster-rcnn

    在ubuntu16.04下编译安装了py-faster-rcnn. 主要步骤包括:安装cuda/cudnn,换apt源,装开源显卡驱动,装caffe依赖的apt包和python包,下载py-faste ...

  4. acm的ubuntu (ubuntu16.04 安装指南,chrome安装,vim配置,git设置和github,装QQ)

    日常手贱把ubuntu14.04更新到了16.04,然后就game over了.mdzz,不然泥萌也看不到这篇博客了=.= 然后花了些时间重装了一个16.04版的,原来那个14.04的用可以用,就是动 ...

  5. ubuntu16.04下配置JDK 1.8+安装Java EE,并实现最大子数组算法

    软工第二次作业: 1.在个人电脑中安装一个集成开发环境(Microsoft Visual Studio.Eclipse或其它工具均可),要求该环境能够提供单元自动测试功能: 2.记录安装过程,并将全部 ...

  6. 深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow

    深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow 最近在公司做深度学习相关的学习和实验,原来一直 ...

  7. C#码农的大数据之路 - 使用Ambari自动化安装HDP2.6(基于Ubuntu16.04)并运行.NET Core编写的MR作业

    准备主机 准备3台主机,名称作用如下: 昵称 Fully Qualified Domain Name IP 作用 Ubuntu-Parrot head1.parrot 192.168.9.126 Am ...

  8. Ubuntu16.04.1上搭建分布式的Redis集群

    为什么要集群: 通常为了,提高网站的响应速度,总是把一些经常用到的数据放到内存中,而不是放到数据库中,Redis是一个很好的Cache工具,当然了还有Memcached,这里只讲Redis.在我们的电 ...

  9. 2017年BackBox5和Ubuntu16.04.1国内更新源

    BackBox是基于Ubuntu的Linux发行版,因此,我们可以使用Ubuntu的更新源作为BackBox的更新源. 1.查看系统版本信息: 输入: uname -a 显示计算机及操作系统的有关信息 ...

  10. ubuntu16.04 部署配置LVS主从

    实验环境---ubuntu16.04 四台机器:10.211.55.13—55.16 具体实验环境配置如下: 10.211.55.102  LVS_VIP 10.211.55.13  LVS_MAST ...

随机推荐

  1. 【Pytest02】全网最全最新的Pytest框架快速进阶篇(pytest前置和后置以及忽略测试用例)

    一.Pytest的前置和后置方法 1.Pytest可以集成unittest实现前置和后置 import unittest import pytest class TestCase(unittest.T ...

  2. coding++: java把一个整数拆分为单个值

    方式一: int num = 100; int[] ary = new int[(num+"").length()]; for(int i = ary.length-1;i> ...

  3. [HDU1029]Ignatius and the Princess IV<桶 水题>

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1029 题目大意: 多组数据,每组数据先给一个n,然后给n各数字,找出n各数字中出现了至少(n+1)/2 ...

  4. 树形dp技巧,多叉树转二叉树

    今天复习树形dp时发现一道比较古老的题,叫选课,是树形dp的一道基础题,也是多叉树转二叉树应用的模版题 多叉树转二叉树的应用非常广泛,因为如果一个节点的儿子太多,一个一个存下来不方便去查询,并且会增加 ...

  5. P3376 【模板】网络最大流( Edmonds-krap、Dinic、ISAP 算法)

    P3376 [模板]网络最大流( Edmonds-krap.Dinic.ISAP 算法) 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入格式 第一行包含四个正整数N.M.S ...

  6. 1046 Shortest Distance (20分)

    The task is really simple: given N exits on a highway which forms a simple cycle, you are supposed t ...

  7. 面试官再问你 HashMap 底层原理,就把这篇文章甩给他看

    前言 HashMap 源码和底层原理在现在面试中是必问的.因此,我们非常有必要搞清楚它的底层实现和思想,才能在面试中对答如流,跟面试官大战三百回合.文章较长,介绍了很多原理性的问题,希望对你有所帮助~ ...

  8. python--爬虫之JSON于JsonPath

    JSON json的引入 在python中json作为一个内建库不需要额外安装,只需要使用import json执行引入 json模块的功能 在python中json模块提供了四个功能:dumps.d ...

  9. 一天学一个Linux命令:第二天 cd pwd

    文章更新于:2020-03-08 注:本文参照 man pwd 手册,并给出使用样例. 文章目录 一.命令之 `cd` 和 `pwd` 1.命令介绍 2.语法格式 3.使用样例 4.pwd 参数 5. ...

  10. Adb adb push (remote write failed: No space left on device)

    修改完成程序后, mm 后, 准备要push 进到公司测试手机里面的.之前还真的没有遇到过这个问题,查了一下, 应该是手机没空间了的 sudo adb root sudo adb remount su ...