0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【PHYTEC开发板试用体验】phyBOARD-Pollux i.MX 8M Plus 主机开发程序并尝试开发板调试2

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-12-05 10:39 次阅读

本文来源电子发烧友社区,作者:王志奇, 帖子地址:https://bbs.elecfans.com/jishu_2305273_1_1.html

之前测试搭建好了软硬件开发环境后,我开始了项目开发尝试,首先是调试了虚拟机Ubuntu的摄像头获取,然后利用QT程序调用摄像头拍照,并尝试在开发板上直接调试摄像头调用程序,

第二个小目标是在主机上安装OpenCV,并利用OpenCV调用摄像头,然后是通过QT程序通过OpenCV实现调用摄像头,并且通过QT直接在开发板上调式这个OpenCV调用摄像头的应用

第三个大目标是将程序移植到开发板并在开发板上测试,这一步由于我之前没有完全解决opt下root目录空间的问题,未能完全实现,

并且在调试中发现,我的主机和开发板用了不同的摄像头出现了我还未能解决的问题。目前还在尝试中。

本次项目测试在开发板上没有完全实现,主要是调试的root空间百分百被使用,把程序直接复制到开发板后由于摄像头问题未能实现,

但是,整个开发过程以及遇到的问题还是能起到一些避坑帮助的。

接下来,我将测试开发过程简单介绍,并把一些问题记录出来,

我在上一篇中,测试好了主机的开发环境,因为开发板提供的系统已经完成了一些配置,只需要稍微测试程序调试即可,但是一定要注意在开发调试的时候,注意使用开发板root空间,不要将大的程序文件拷贝过去,会导致开发板端调试报错的。

vmbox使用摄像头的时候,需要在设置里面USB添加一个摄像头筛选器,笔记本开发时候建议使用外接USB摄像头,不建议使用笔记本自带摄像头开发测试,这会导致在开发板上测试使用摄像头可能无法成功的问题。
2022-09-12_090918.png

另外,vmbox虚拟机需要安装vbox官网的对应版本的usb扩展插件,这个很重要,下载好插件后需要在vbox启动后的上方菜单设备设置中添加设备控制增强插件,并且,在选择USB控制器的时候要选择2.0 和3.0
2022-09-12_153218.png

两个选项轮流尝试,并添加USB摄像头,有的usb摄像头虽然是2。0但USB选择器需要选3.0才能被vbox虚拟机中的Ubuntu系统识别。2022-09-12_155802.png
2022-09-12_154833.png

QT程序控制摄像头开发程序在网上都有,比较简单,创建新项目的时候注意选择正确项目属性如图,一般Ubuntu系统设别了摄像头,

2022-09-12_171856.png
QT代码问题不大,在主机桌面测试后,可以选择在ARM开发板上测试QT启用摄像头,你需要吧虚拟机识别的USB摄像头插到开发板上进行测试,如果你使用的是笔记本自带的摄像头,这个时候多多少少会有些问题,另外,最好先关虚拟机再插拔摄像头,我的系统奔溃了好几次,耽误了很多时间用于恢复虚拟机系统,很不稳定。

test.pro

QT += core gui

QT += multimedia

QT += multimediawidgets

greaterThan(QT_MAJOR_VERSION,
4): QT += widgets

TARGET
= QCameratest

TEMPLATE
= app

SOURCES
+= main.cpp

widget.cpp

HEADERS += widget.h

FORMS += widget.ui

.h

#ifndef
WIDGET_H

#define
WIDGET_H

#include

class
QCamera;

class
QCameraViewfinder;

class
QCameraImageCapture;

class
Widget : public QWidget

{

Q_OBJECT

public:

Widget(QWidget *parent = 0);



~Widget();

private
slots:

void exitBtnResponded();



void cameraImageCaptured(int,QImage);

private:

QCamera*             m_pCamera;       //读取摄像头



QCameraViewfinder*   m_pViewfinder;   //渲染摄像头



QCameraImageCapture* m_pImageCapture; //获取摄像头当前帧

};

#endif
// WIDGET_H

main.cpp

#include
"widget.h"

#include

int
main(int argc, char *argv[])

{

QApplication a(argc, argv);



Widget w;



w.show();







return a.exec();

}

Widget.cpp

#include
"widget.h"

#include

#include

#include

#include

#include

#include

#include

Widget::Widget(QWidget
*parent)

: QWidget(parent)

{

setWindowTitle("QCamera");



m_pCamera = new QCamera(this);



m_pViewfinder = new

QCameraViewfinder(this);

m_pImageCapture = new

QCameraImageCapture(m_pCamera);

QPushButton* button1 = new

QPushButton("Capture");

QPushButton* button2 = new

QPushButton("Exit");

QVBoxLayout *mainLayout = new

QVBoxLayout(this);

mainLayout->addWidget(m_pViewfinder);



mainLayout->addWidget(button1);



mainLayout->addWidget(button2);



connect(button1, SIGNAL(clicked()),

m_pImageCapture, SLOT(capture()));

connect(button2, SIGNAL(clicked()), this,

SLOT(exitBtnResponded()));

connect(m_pImageCapture,

SIGNAL(imageCaptured(int,QImage)), this,
SLOT(cameraImageCaptured(int,QImage)));

m_pImageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);

m_pCamera->setCaptureMode(QCamera::CaptureStillImage);

m_pCamera->setViewfinder(m_pViewfinder);



m_pCamera->start();

}

Widget::~Widget()

{

delete

m_pCamera;

delete

m_pViewfinder;

delete m_pImageCapture;

}

void
Widget::exitBtnResponded()

{

m_pCamera->stop();



close();

}

void
Widget::cameraImageCaptured(int, QImage image)

{

QString savepath =

QFileDialog::getSaveFileName(this,"Save
Capture","Capture","Image png(.png);;Image
jpg(
.jpg);;Image bmp(*.bmp)");

if(!savepath.isEmpty()){



    image.save(savepath);



}

第二部分是安装OpenCV在Ubuntu上,并使用opencv调用摄像头,

OpenCV安装过程会不断更新对应的库, 以及更新cmake
相关,需要你给虚拟机再添加一个桥接到无线网卡的虚拟机网卡,如果,你使用的是网线与开发板调试的话。这样就不需要来回切换了。

CSDN
上 有个叫不高兴的
Ubuntu下QT 调用OpenCV使用摄像头帖子中对于OpenCV安装非常详细,可以参考,之后的具体开发就参考思路即可。

其中,OpenCV安装过程中要不断注意报错提示,安装网络上的步骤基本问题不大,少什么就装什么,网络畅通的话也就个把小时。
2022-09-13_092150.png

2022-09-13_092248.png

2022-09-13_092416.png

2022-09-13_094036.png

OpenCV安装之后,有一件重要的事情就是升级QT,直接安装QT5并设置环境变量,官方的Ubuntu 虚拟机中是QT4 ,这个开发的时候需要QT5,我使用的是OpenCV3, 已经很古老了,但都需要QT5支持。

QT调用OpenCV开启摄像头的代码放在文章最后,
2022-09-13_105019.png

我在实现qt调用OpenCV设别人脸的时候,Ubuntu崩溃了,开发板之前的root空间也又成了百分百占用了,我之前已经重新扩展的etx4根空间了,但我发现我需要重新挂载一个新建的root空间,
2022-09-13_105606.png

另外就是,虚拟机以及硬盘所在
空间一定要留够25G以上的空间,因为在安装opencv相关时候,虚拟内存和虚拟空间增长速度很快,盘满了虚拟机Ubuntu系统容易崩溃导致重装环境,删除虚拟机重新连接虚拟硬盘无法继续开发和测试,

目前,我正在解决重装环境,等解决完,下一期我将着重在开发板上测试项目程序,实现最终项目。

这是找到一个比较好用的OpenCV编辑照片和调用摄像头的代码

optest.cpp

#include

#include

using
namespace cv;

using
namespace std;

int
main(int argc, char** argv)

{

CvPoint center;

double scale = -3;

IplImage* image =
cvLoadImage("lena.jpg");

argc == 2? cvLoadImage(argv[1]) : 0;

cvShowImage("Image", image);

if (!image) return -1; center = cvPoint(image->width / 2,
image->height / 2);

for (int i = 0;iheight;i++)

for (int j = 0;jwidth;j++) {



    double dx = (double)(j - center.x) /

center.x;

double dy = (double)(i - center.y) /

center.y;

double weight = exp((dx*dx +

dy*dy)*scale);

uchar* ptr = &CV_IMAGE_ELEM(image,

uchar, i, j * 3);

ptr[0] = cvRound(ptr[0] * weight);



    ptr[1] = cvRound(ptr[1] * weight);



    ptr[2] = cvRound(ptr[2] * weight);



  }

Mat src;Mat dst;

src = cvarrToMat(image);

cv::imwrite("test.png", src);

cvNamedWindow("test",1);  imshow("test",

src);

cvWaitKey();



return

0;

}

g++ test.cpp -o testpkg-config --cflags--libs opencv

摄像头使用代码

#include

#include

#include

#include

using
namespace cv;

using
namespace std;

int
main()

{

//打开电脑摄像头

VideoCapture cap(0);

if (!cap.isOpened())

{

cout << "error" <<

endl;

waitKey(0);



  return 0;

}

//获得cap的分辨率

int w =
static_cast(cap.get(CV_CAP_PROP_FRAME_WIDTH));

int h =
static_cast(cap.get(CV_CAP_PROP_FRAME_HEIGHT));

Size videoSize(w, h);

VideoWriter
writer("RecordVideo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25,
videoSize);

Mat frame;

int key;//记录键盘按键

char startOrStop = 1;//0 开始录制视频; 1 结束录制视频

char flag = 0;//正在录制标志 0-不在录制; 1-正在录制

while (1)

{

cap >> frame;



  key = waitKey(100);



  if (key == 32)//按下空格开始录制、暂停录制   可以来回切换



  {



    startOrStop = 1 - startOrStop;



    if (startOrStop == 0)



    {



       flag = 1;



    }



  }



  if (key == 27)//按下ESC退出整个程序,保存视频文件到磁盘



  {



    break;



  }







  if (startOrStop == 0 && flag==1)



  {



    writer << frame;



    cout << "recording"

<< endl;

}



  else if (startOrStop == 1)



  {



    flag = 0;



    cout << "end recording"

<< endl;

}



  imshow("picture", frame);

}

cap.release();

writer.release();

destroyAllWindows();

return 0;

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PHYTEC
    +关注

    关注

    0

    文章

    19

    浏览量

    3613
  • 开发板试用
    +关注

    关注

    3

    文章

    299

    浏览量

    1913
收藏 人收藏

    评论

    相关推荐

    【涂鸦T2-U开发板试用体验】初识及试玩开发板

    开发板由一个高集成度的无线射频模组 T2-U 和外围的按键、LED 指示灯、I/O 接口、电源和 USB 转串口芯片构成。T2-U 模组 内置了 32 bit RISC-MCU,最高
    发表于 11-17 22:44

    【LuckFox Pico Plus开发板免费试用】LuckFox Pico Plus开发板测评(一)

    1 LuckFox Pico Plus开发板简介 LuckFox Pico Plus 是一款基于瑞芯微 RV1103 芯片的低成本微型 linux 开发板。RV1103是一款专门用于人
    发表于 10-22 22:40

    【LuckFox Pico 开发板免费试用】开箱初体验

    A7@1.2GHz + RISC-V处理器,内置64MB DDR2内存、NPU 0.5TOPS算力。开发板支持多个接口,包括MIPICSI、GPIO、UART、SPI、I2C、USB 等接口,便于
    发表于 10-15 19:09

    【LuckFox Pico Plus开发板免费试用】使用ADB命令访问开发板

    感谢电子发烧友和幸狐科技提供了此次LuckFox Pico Plus开发板试用机会。 LuckFox Pico 是一款基于瑞芯微 RV1103 芯片具有高性价比的微型 Linux 开发板
    发表于 10-14 09:42

    【LuckFox Pico Plus开发板免费试用】+开发板初体验

    、SPI、I2C、USB等,便于快速进行开发调试。 LuckFox Pico Plus以体积小巧而著称,其外观如图1和图2所示。 由图可以
    发表于 10-13 16:38

    NXP开发板有哪些?基于NXP i.MX 6UL、i.MX 8M Mini、i.MX 8M Plus、LS1028A的开发板概述

    一直以来,米尔和NXP都保持着深度合作,推出了基于NXP系列产品(包括i.MX 6UL、i.MX 8M Mini、i.MX 8M
    的头像 发表于 09-15 09:15 696次阅读
    NXP<b class='flag-5'>开发板</b>有哪些?基于NXP <b class='flag-5'>i.MX</b> 6UL、<b class='flag-5'>i.MX</b> <b class='flag-5'>8M</b> Mini、<b class='flag-5'>i.MX</b> <b class='flag-5'>8M</b> <b class='flag-5'>Plus</b>、LS1028A的<b class='flag-5'>开发板</b>概述

    迅为i.MX8M Mini开发板一些功能

    )、Linux4.14.78 + Qt5.10.1Yocto、Ubuntu20、Debian9系统 07、迅为特别推出《嵌入式Liunx开发指南》 倾心力作! i.MX8MM开发板指南,涵盖范围广,覆盖
    发表于 09-05 10:30

    使用Arm Development Studio进行异构系统调试

    我们将向您展示如何设置恩智浦i.MX7 SABRE开发板使用它来调试Cortex®-A内核上的Linux映像以及Cortex-M内核上的
    发表于 08-24 06:15

    【飞凌i.MX9352开发板试用】+外设功能测试

    问题。 i.MX 9系列的处理器刚推出没多久,芯片太新了,相应的资料还在不断的完善中。NPU的开发方式,Cortex-M33 核心的使用、核间通讯等等很多方面需要补充。但此系列处理器,也算是万多油
    发表于 06-20 08:37

    【资料分享】NXP i.MX 8M Mini工业核心规格书

    产品二次开发;(6)提供长期的售后服务。 9 增值服务 主板定制设计 核心定制设计 嵌入式软件开发 项目合作开发 技术培训 如需获取更完整的关于NXP
    发表于 06-15 10:54

    【飞凌i.MX9352开发板试用】开箱+电路分析+环境搭建

    2.0 Type C接口,2个千兆以太网,2个CAN-FD,8个UART,1个4通道12位ADC,2个32引脚FlexIO接口。 2
    发表于 06-05 16:44

    【CW32饭盒派开发板试用体验】开发板及核心介绍

    CW32饭盒派是一款基于CW32F030C8T6的开发板。 接上tpye-c数据线后,板子tft有以下显示: 这块MCU是48PIN MCU:CW32F030C8T6位微控制器,是64M
    发表于 05-22 11:28

    i.MX评估板和开发板官方资源大全:一键获取,拿走不谢!

    恩智浦官网精彩导览 i.MX评估板和开发板 好马配好鞍,好的MPU/MCU应用开发,也少不了一块好用的开发板!想驾驭恩智浦的i.MX系列应用
    的头像 发表于 05-19 11:00 493次阅读
    <b class='flag-5'>i.MX</b>评估板和<b class='flag-5'>开发板</b>官方资源大全:一键获取,拿走不谢!

    如何在android源代码的imx8mp-phyboard-pollux上连接wm8960音频模块?

    我们正在开发 phycore i MX 8M plus,我们正在尝试将WM8960 音频编解码器
    发表于 05-10 07:28

    如何在Android 11中为imx8mp-phyboard-pollux开发板调出wm8960音频模块?

    我们正在开发 phycore i MX 8M plus,我们正在尝试将WM8960 音频编解码器
    发表于 05-09 08:40