hi3520d平台编译使用opencv3.4.1

hi3520d平台编译使用opencv3.4.1 刘兵 2022-10-18 17:16:42 1092

hi3520dv300,不多介绍,坛子里资料多的是。

opencv3.4.1,opencv不多介绍,百度一下知道是什么东西,有什么用。3.4.1版本是opencv比较新的版本,做AI算法的话用新一点版本不会落后。


说实话,hi3520dv300这颗SOC性能有限,做视频的行为分析肯定很累,如果每秒抓拍一张图片,做图片分析还是能够物尽其用的。

下面说一下我移植使用的过程。

首先,opencv官网下载了源码包,为了稳当期间,在当前目录建了一个build文件夹,用cmake-gui默认参数,prefix指定这个build文件夹,其他默认编译,过几分钟很顺利就出来了,写一个简单图片的行人识别、人脸识别代码,编译通过之后,百度几张有行人的照片,在PC上的速度和效果很不错,

贴出代码:

void human(const char *fname)

{

  Mat image;

  bool safehead=false;

  (void)safehead;

  HOGDescriptor hog; // 采用默认参数

  CascadeClassifier dail_cascade;

  std::vector regions;  

  Mat grayscaleFrame;

  Mat tmpp;

  String flq = "/mnt/nfs/terminal3/cascade.xml";

  IplImage*img;

  if(dail_cascade.load(flq))

  {

    safehead = true;

  }

  else

  {

    cout<<"warning : load cascade-v2.5.xml fault!"<<endl;

  }

  hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());   // 采用已经训练好的行人检测分类器

  img = cvLoadImage(fname);  

  if (!img)

  {  

      std::cout<<"read img failed"<<std::endl;  

      return;

  }  

  image = cvarrToMat(img);

//  delete img;

    // 1. 定义HOG对象

    // 2. 设置SVM分类器

  // 3. 在测试图像上检测行人区域

  resize(image, tmpp, Size(720,576));

  cvtColor(tmpp, grayscaleFrame, CV_BGR2GRAY);

  hog.detectMultiScale(grayscaleFrame, regions, 0, Size(8,8), Size(32,32), 1.05, 1);

//    hog.detectMultiScale(grayscaleFrame, regions, 0.6, Size(4,4), Size(0,0), 1.07, 1);

    // 显示

    for (size_t i = 0; i < regions.size(); i++)  

    {

      Mat tmp_roi;

      size_t j;

      vector rect_roi;

      char fname[128];

      Rect x,y;

      int xx,yy,ww,hh;

      int w_s,h_s;

      xx = regions[i].x;

      w_s = regions[i].width;

      w_s *= 2;

      w_s /= 3;    // 宽度增量

      h_s = regions[i].height;

      h_s *= 2;

      h_s /= 3;   // 高度增量

//      printf("w_s=%d,h_s=%d\n", w_s,h_s);

      if(w_s > xx)

      {

        xx = 0;

      }

      else

      {

        xx -= w_s/2;

      }

      yy = regions[i].y;

      if(h_s > yy)

      {

        yy = 0;

      }

      else

      {

        yy -= h_s;

      }

      ww = regions[i].width+w_s;

      hh = regions[i].height+h_s;

      if(ww+xx > tmpp.cols)

      {

        ww = tmpp.cols-xx;

      }

      if(hh+yy > tmpp.rows)

      {

        hh = tmpp.rows-yy;

      }

      x = Rect(xx, yy, ww, hh);

//      x = regions[i];

      tmp_roi = Mat();

      tmp_roi = grayscaleFrame(x);

      printf("detect %d people ...\n", (int)i+1);

      dail_cascade.detectMultiScale(tmp_roi, rect_roi, 1.01, 5);

      for(j=0; j<rect_roi.size(); j++)

      {

        if(j>50)break;

        printf("find object %d ...\n", (int)j+1);

        y = rect_roi[j];

        rectangle(tmp_roi, rect_roi[j], Scalar(0,0,255),1);

        y.x += regions[i].x;

//        y.y = regions[i].y;

        rectangle(tmpp, y, Scalar(0,0,255),1);

      }

      char fff[32];

      sprintf(fff,"picture %d",(int)i+1);

      putText(tmp_roi, fff, Point(0,20), FONT_HERSHEY_SIMPLEX,1.0,Scalar(0,0,255));

      const char *s;

      if(i==0)s="'st";

      else if(i==1)s="'nd";

      else if(i==2)s="'rd";

      else s="'th";

      printf("found %d objects in %d%s people\n", (int)j,(int)i+1, s);

      sprintf(fname, "res/%d.jpg",(int)i+1);

      imwrite(fname, tmp_roi);

      rectangle(tmpp, regions[i], Scalar(0,255,0), 1);

    }  

imwrite("res/test2.png",&nbsp;tmpp);

}

然后PC的测试过程就顺利结束了。

然后再建一个build_arm文件夹,cmake-gui指定了交叉编译器,出现一大堆错误,主要就是链接不到dlopen、pthread_create函数之类的错误。

百度很多内容,根据内容和make文件比较,发现链接时需要链接pthread库,重新cmake-gui,增加一个entry,指定一个HAVE_PTHREAD的BOOL字段,然后打钩,错误少了很多,但是test相关的仍然报错。

百度无果,但是知道问题所在,就根据报错的文件夹,发现是在build_arm/modules/XXXX/CMakeFiles/opencv_test_XXXX.dir下的下的链接报错。XXXX指的是highgui、core、features2d、imgproc等多个文件夹。

这些文件夹和文件都是cmake-gui生成,又不知道怎么样加上链接库,就找各文件夹下面的文件名分析,发现都有一个link.txt,里面一大堆obj文件,指定生成一个可执行文件。在这个尾部加上“ -lpthread -ldl”后保存,继续再make,就编译成功了。

大约有17个这样的文件,逐个改了就行了,哪个不改,就会出错停在哪里,发现出错,改了link.txt就能通过。

make顺利通过,make install顺利通过,sample代码顺利通过,一切都正常了

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

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

举报反馈

举报类型

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

详细说明

审核成功

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

审核失败

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

小包子的红包

恭喜发财,大吉大利

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

    易百纳技术社区