海思Hi3519v101平台移植OpenCV

海思Hi3519v101平台移植OpenCV 易木雨 2024-01-03 17:15:03 571

opencv是图像处理中不可或缺的库函数,而海思作为视频处理芯片,自然是支持opencv库的移植,本文参考网上的博客,以Hi3519v101的SDK为对象,编译opencv并移植。笔者先后使用海思500和600两个工具链对opencv2.4.9、opencv3.0.0和opencv3.4.2进行了编译,方法都一样,可提供借鉴。

一、opencv库下载

opencv所有版本(2/3/4,Linux/Windows)的下载地址:https://opencv.org/releases/
参考之前的博客,选择了opencv2.4.9版本(其他版本安装也一样的步骤),下载地址https://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.9/opencv-2.4.9.zip/download

Opencv官网地址:https://opencv.org/releases/

二、cmake-gui安装

sudo apt-get install cmake-qt-gui

三、解压opencv

新建一个文件夹opencv,将opencv2.4.9.zip放进去,并新建build、output文件夹,解压opencv2.4.9.zip,完成后如下:

四、cmake-gui编译

输入sudo cmake-gui
点击Browse Source选择/home/username/opencv/opencv-2.4.9
点击Browse Build选择/home/username//opencv/build
然后点击Configure
此时出现的对话框选择最后一项:Specify options for cross-compiling
下一步
Operating System填写 arm-hisiv500-linux //注意,这里的工具链使用自己的
C填写arm-hisiv500-linux-gcc //注意,这里的工具链使用自己的
C++填写arm-hisiv500-linux-g++

可能出现的问题
问题1、compiler identification is unknown

The CXX compiler identification is unknown
The C compiler identification is unknown

主要是因为安装的交叉编译工具不在环境变量中,可以修改/etc/profile,添加交叉编译工具的路径,也可以点击下图的“…”,手动选择Linux编译器,比如我的编译器地址如下:/opt/hisi-linux/x86-arm/arm-hisiv500-linux/bin/arm-hisiv500-linux-

问题2、CMake Error at cmake/FindCUDA.cmake:763

CMake Error at cmake/FindCUDA.cmake:763 (if):
  if given arguments:

    "CUDA_VERSION" "VERSION_GREATER" "5.0" "AND" "CMAKE_CROSSCOMPILING" "AND" "MATCHES" "arm"

  Unknown arguments specified
Call Stack (most recent call first):
  cmake/OpenCVDetectCUDA.cmake:26 (find_package)
  cmake/OpenCVFindLibsPerf.cmake:24 (include)
  CMakeLists.txt:468 (include)

将WITH_CUDA的Value取消,如下

config成功后如下,修改CMAKE_INSTALL_PREFIX的路径

点击generate,完成后关闭cmake-gui

五、安装

5.1问题一

进入bulid文件夹,make进行编译,出现如下问题:

解决方法:
打开CMakeCache.txt,修改206行
CMAKE_EXE_LINKER_FLAGS:STRING= -lpthread -lrt

重新make即可。在output文件夹下有编译好的lib库,移植到海思板子底下即可。
make完成后如下

make insatll完成后如下

5.2问题二

另外,笔者在编译opencv2.4.9时没有出现以下问题,但在编译opencv3.4.2时出现以下问题

解决方法:
打开opencv-3.4.2/3rdparty/protobuf/src/google/protobuf/stubs/common.cc,并在前面添加#define HAVE_PTHREAD即可

5.3问题三

再者,笔者在使用arm-hisiv600-linux-gnueabi工具链编译opencv时,出现如下的问题,算是把网上遇到的所有编译问题集齐了

解决方法
打开问题一说讲的CMakeCache.txt,在后缀再加上-ldl

六、opencv库移植到海思3519板子端

编译好opencv后,output目录如下

1.将库函数与头函数复制到交叉编译工具底下
sudo cp lib/* /opt/hisi-linux/x86-arm/arm-hisiv500-linux/arm-hisiv500-linux-uclibcgnueabi/lib/
sudo cp include/* /opt/hisi-linux/x86-arm/arm-hisiv500-linux/arm-hisiv500-linux-uclibcgnueabi/include/ -r
2. 编译

新建一个face.cpp源程序

 /***********Author:9crk 2014-12-24*****************************/
#include "cv.h"
#include "highgui.h"
#include "stdio.h"
/******************for time mesurement*************************/
#include <sys/time.h>
struct timeval tpstart,tpend;
unsigned long timeuses;
void timeRec()
{
    gettimeofday(&tpstart,0);
}
int timeRep()
{
    gettimeofday(&tpend,0);
    timeuses=(tpend.tv_sec-tpstart.tv_sec)*1000000+tpend.tv_usec-tpstart.tv_usec;
    printf("use time: %uus\n",timeuses);
    return timeuses;
}
/********************end**************************************/

int main(int argc, char* argv[])
{
   IplImage* img = NULL;
   IplImage* cutImg = NULL;
   CvMemStorage* storage = cvCreateMemStorage(0);
   CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad("./haarcascade_frontalface_alt2.xml", 0, 0, 0);
   CvSeq* faces; 

    img = cvLoadImage(argv[1], 0);
   timeRec();
    faces = cvHaarDetectObjects(img, cascade,  storage, 1.2, 2, 0, cvSize(25,25) );
    timeRep();
    if (faces->total == 0){
        printf("no face!\n");
    }
    cvSetImageROI(img, *((CvRect*)cvGetSeqElem( faces, 0))); 
    cvSaveImage("face.bmp", img);    
    cvResetImageROI(img);
    printf("face detected! in face.bmp!\n");
}
arm-hisiv500-linux-g++ face.cpp -I/home/username/work/opencv/output/include/opencv -lopencv_highgui -lopencv_core -lopencv_imgproc -lpthread -lrt -lopencv_objdetect -o face

编译成功如下,尽管会出现一些warning,但不影响

3.移植到海思板子端

需要准备的东西有:
1、找一张人脸图片,如lena.png
2、将opencv库自带的人脸识别分类器(output/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml )拷到板子上
3、lib库的移植

1、sudo cp /home/username/work/opencv/output/lib/libopencv_objdetect.so ./
2、sudo cp /home/username/work/opencv/output/lib/libopencv_imgproc.so ./
3、sudo cp /home/username/work/opencv/output/lib/libopencv_highgui.so
4、sudo cp /home/username/work/opencv/output/lib/libopencv_core.so ./

移植到板子的内容如下,lib中包含上诉四个文件so文件

4.测试

将lib底下的四个so文件移植到板子的/lib底下
输入 ./face lena.png,测试结果如下

移植成功
Done!
文章来源:https://blog.csdn.net/qq_40199447/article/details/105186561?spm=1001.2014.3001.5502

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 1 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
易木雨
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区