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. Flutter 实现整个App变为灰色

    在Flutter中实现整个App变为灰色是非常简单的,只需要在最外层的控件上包裹ColorFiltered,用法如下: @override Widget build(BuildContext cont ...

  2. office2010安装与破解,笔者亲测可用!!!!!!

    我们首先需要准备office2010安装包与破相应的破解软件.软件包的获取方式:扫码关注[猿成长],,回复 office2010安装,即可获取,下载解压后文件目录结构如下图所示: 打开安装程序文件夹, ...

  3. Fast Enumeration

    在 Objective-C 2.0 中提供了快速枚举的语法,它是我们遍历集合元素的首选方法.它具有以下优点: 比直接使用 NSEnumerator 更高效: 语法非常简洁: 如果集合在遍历的过程中被修 ...

  4. Python第十二章-多进程和多线程01-多进程

    多进程和多线程 一.进程 1.1 进程的引入 现实生活中,有很多的场景中的事情是同时进行的,比如开车的时候 手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的:试想,如果把唱歌和跳舞这2件事情分开依次 ...

  5. Java 对象容器

    一.ArrayList 容器 1.记事本 package booknote; import java.util.ArrayList; public class NoteBook { private A ...

  6. Javascript/Jquery实现日期前一天后一天

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  7. Pyhton多线程

    在了解多线程前先给大家介绍下并发和并行: 并发:多个任务一起执行 在多任务之间快速切换处理 任务数量大于cpu核数  并行:一个cpu核处理一个任务,多个cpu核同时处理多个任务 任务数量等于或者小于 ...

  8. 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充

    文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...

  9. 云计算介绍、TCP/IP协议及配置

                                                 云计算介绍.TCP/IP协议及配置 1案例1:配置计算机名及工作组 1.1问题 本例要求为修改计算机名并加入工 ...

  10. Vulnhub DC-4靶机渗透

    信息搜集 nmap -sP 192.168.146.0/24 #扫网段看看存活的主机,找到靶机 nmap -sS -Pn -A 192.168.146.141 可以看到开放了22和80端口,那么就可以 ...