0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【PHYTEC開(kāi)發(fā)板試用體驗(yàn)】phyBOARD-Pollux i.MX 8M Plus 主機(jī)開(kāi)發(fā)程序并嘗試開(kāi)發(fā)板調(diào)試2

開(kāi)發(fā)板試用精選 ? 來(lái)源:開(kāi)發(fā)板試用 ? 作者:電子發(fā)燒友論壇 ? 2022-12-05 10:39 ? 次閱讀

本文來(lái)源電子發(fā)燒友社區(qū),作者:王志奇, 帖子地址:https://bbs.elecfans.com/jishu_2305273_1_1.html

之前測(cè)試搭建好了軟硬件開(kāi)發(fā)環(huán)境后,我開(kāi)始了項(xiàng)目開(kāi)發(fā)嘗試,首先是調(diào)試了虛擬機(jī)Ubuntu的攝像頭獲取,然后利用QT程序調(diào)用攝像頭拍照,并嘗試在開(kāi)發(fā)板上直接調(diào)試攝像頭調(diào)用程序,

第二個(gè)小目標(biāo)是在主機(jī)上安裝OpenCV,并利用OpenCV調(diào)用攝像頭,然后是通過(guò)QT程序通過(guò)OpenCV實(shí)現(xiàn)調(diào)用攝像頭,并且通過(guò)QT直接在開(kāi)發(fā)板上調(diào)式這個(gè)OpenCV調(diào)用攝像頭的應(yīng)用

第三個(gè)大目標(biāo)是將程序移植到開(kāi)發(fā)板并在開(kāi)發(fā)板上測(cè)試,這一步由于我之前沒(méi)有完全解決opt下root目錄空間的問(wèn)題,未能完全實(shí)現(xiàn),

并且在調(diào)試中發(fā)現(xiàn),我的主機(jī)和開(kāi)發(fā)板用了不同的攝像頭出現(xiàn)了我還未能解決的問(wèn)題。目前還在嘗試中。

本次項(xiàng)目測(cè)試在開(kāi)發(fā)板上沒(méi)有完全實(shí)現(xiàn),主要是調(diào)試的root空間百分百被使用,把程序直接復(fù)制到開(kāi)發(fā)板后由于攝像頭問(wèn)題未能實(shí)現(xiàn),

但是,整個(gè)開(kāi)發(fā)過(guò)程以及遇到的問(wèn)題還是能起到一些避坑幫助的。

接下來(lái),我將測(cè)試開(kāi)發(fā)過(guò)程簡(jiǎn)單介紹,并把一些問(wèn)題記錄出來(lái),

我在上一篇中,測(cè)試好了主機(jī)的開(kāi)發(fā)環(huán)境,因?yàn)殚_(kāi)發(fā)板提供的系統(tǒng)已經(jīng)完成了一些配置,只需要稍微測(cè)試程序調(diào)試即可,但是一定要注意在開(kāi)發(fā)調(diào)試的時(shí)候,注意使用開(kāi)發(fā)板root空間,不要將大的程序文件拷貝過(guò)去,會(huì)導(dǎo)致開(kāi)發(fā)板端調(diào)試報(bào)錯(cuò)的。

vmbox使用攝像頭的時(shí)候,需要在設(shè)置里面USB添加一個(gè)攝像頭篩選器,筆記本開(kāi)發(fā)時(shí)候建議使用外接USB攝像頭,不建議使用筆記本自帶攝像頭開(kāi)發(fā)測(cè)試,這會(huì)導(dǎo)致在開(kāi)發(fā)板上測(cè)試使用攝像頭可能無(wú)法成功的問(wèn)題。
2022-09-12_090918.png

另外,vmbox虛擬機(jī)需要安裝vbox官網(wǎng)的對(duì)應(yīng)版本的usb擴(kuò)展插件,這個(gè)很重要,下載好插件后需要在vbox啟動(dòng)后的上方菜單設(shè)備設(shè)置中添加設(shè)備控制增強(qiáng)插件,并且,在選擇USB控制器的時(shí)候要選擇2.0 和3.0
2022-09-12_153218.png

兩個(gè)選項(xiàng)輪流嘗試,并添加USB攝像頭,有的usb攝像頭雖然是2。0但USB選擇器需要選3.0才能被vbox虛擬機(jī)中的Ubuntu系統(tǒng)識(shí)別。2022-09-12_155802.png
2022-09-12_154833.png

QT程序控制攝像頭開(kāi)發(fā)程序在網(wǎng)上都有,比較簡(jiǎn)單,創(chuàng)建新項(xiàng)目的時(shí)候注意選擇正確項(xiàng)目屬性如圖,一般Ubuntu系統(tǒng)設(shè)別了攝像頭,

2022-09-12_171856.png
QT代碼問(wèn)題不大,在主機(jī)桌面測(cè)試后,可以選擇在ARM開(kāi)發(fā)板上測(cè)試QT啟用攝像頭,你需要吧虛擬機(jī)識(shí)別的USB攝像頭插到開(kāi)發(fā)板上進(jìn)行測(cè)試,如果你使用的是筆記本自帶的攝像頭,這個(gè)時(shí)候多多少少會(huì)有些問(wèn)題,另外,最好先關(guān)虛擬機(jī)再插拔攝像頭,我的系統(tǒng)奔潰了好幾次,耽誤了很多時(shí)間用于恢復(fù)虛擬機(jī)系統(tǒng),很不穩(wěn)定。

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; //獲取攝像頭當(dāng)前幀

};

#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調(diào)用攝像頭,

OpenCV安裝過(guò)程會(huì)不斷更新對(duì)應(yīng)的庫(kù), 以及更新cmake
相關(guān),需要你給虛擬機(jī)再添加一個(gè)橋接到無(wú)線網(wǎng)卡的虛擬機(jī)網(wǎng)卡,如果,你使用的是網(wǎng)線與開(kāi)發(fā)板調(diào)試的話。這樣就不需要來(lái)回切換了。

CSDN
上 有個(gè)叫不高興的
Ubuntu下QT 調(diào)用OpenCV使用攝像頭帖子中對(duì)于OpenCV安裝非常詳細(xì),可以參考,之后的具體開(kāi)發(fā)就參考思路即可。

其中,OpenCV安裝過(guò)程中要不斷注意報(bào)錯(cuò)提示,安裝網(wǎng)絡(luò)上的步驟基本問(wèn)題不大,少什么就裝什么,網(wǎng)絡(luò)暢通的話也就個(gè)把小時(shí)。
2022-09-13_092150.png

2022-09-13_092248.png

2022-09-13_092416.png

2022-09-13_094036.png

OpenCV安裝之后,有一件重要的事情就是升級(jí)QT,直接安裝QT5并設(shè)置環(huán)境變量,官方的Ubuntu 虛擬機(jī)中是QT4 ,這個(gè)開(kāi)發(fā)的時(shí)候需要QT5,我使用的是OpenCV3, 已經(jīng)很古老了,但都需要QT5支持。

QT調(diào)用OpenCV開(kāi)啟攝像頭的代碼放在文章最后,
2022-09-13_105019.png

我在實(shí)現(xiàn)qt調(diào)用OpenCV設(shè)別人臉的時(shí)候,Ubuntu崩潰了,開(kāi)發(fā)板之前的root空間也又成了百分百占用了,我之前已經(jīng)重新擴(kuò)展的etx4根空間了,但我發(fā)現(xiàn)我需要重新掛載一個(gè)新建的root空間,
2022-09-13_105606.png

另外就是,虛擬機(jī)以及硬盤所在
空間一定要留夠25G以上的空間,因?yàn)樵诎惭bopencv相關(guān)時(shí)候,虛擬內(nèi)存和虛擬空間增長(zhǎng)速度很快,盤滿了虛擬機(jī)Ubuntu系統(tǒng)容易崩潰導(dǎo)致重裝環(huán)境,刪除虛擬機(jī)重新連接虛擬硬盤無(wú)法繼續(xù)開(kāi)發(fā)和測(cè)試,

目前,我正在解決重裝環(huán)境,等解決完,下一期我將著重在開(kāi)發(fā)板上測(cè)試項(xiàng)目程序,實(shí)現(xiàn)最終項(xiàng)目。

這是找到一個(gè)比較好用的OpenCV編輯照片和調(diào)用攝像頭的代碼

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()

{

//打開(kāi)電腦攝像頭

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 開(kāi)始錄制視頻; 1 結(jié)束錄制視頻

char flag = 0;//正在錄制標(biāo)志 0-不在錄制; 1-正在錄制

while (1)

{

cap >> frame;



  key = waitKey(100);



  if (key == 32)//按下空格開(kāi)始錄制、暫停錄制   可以來(lái)回切換



  {



    startOrStop = 1 - startOrStop;



    if (startOrStop == 0)



    {



       flag = 1;



    }



  }



  if (key == 27)//按下ESC退出整個(gè)程序,保存視頻文件到磁盤



  {



    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;

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • PHYTEC
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    3633
  • 開(kāi)發(fā)板試用

    關(guān)注

    3

    文章

    300

    瀏覽量

    1997
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用TPS65219為i.MX 8M Plus供電

    電子發(fā)燒友網(wǎng)站提供《使用TPS65219為i.MX 8M Plus供電.pdf》資料免費(fèi)下載
    發(fā)表于 08-31 10:15 ?0次下載
    使用TPS65219為<b class='flag-5'>i.MX</b> <b class='flag-5'>8M</b> <b class='flag-5'>Plus</b>供電

    i.MX 8M Plus中的ISP圖像信號(hào)處理模塊特性概述

    日常生活中,人類約80%的信息來(lái)自于視覺(jué)信息,而視覺(jué)信息的載體是數(shù)以億萬(wàn)計(jì)的圖片和視頻流,因此如何打造高效而智能的視覺(jué)處理解決方案,是擺在開(kāi)發(fā)者面前的重要課題。 恩智浦推出的i.MX 8M P
    的頭像 發(fā)表于 08-02 11:39 ?878次閱讀

    2章_開(kāi)發(fā)板使用

    本課程使用 ST-Link 給開(kāi)發(fā)板供電、燒錄、調(diào)試。
    的頭像 發(fā)表于 06-29 14:25 ?709次閱讀
    第<b class='flag-5'>2</b>章_<b class='flag-5'>開(kāi)發(fā)板</b>使用

    米爾基于NXP iMX.93開(kāi)發(fā)板M33處理器應(yīng)用開(kāi)發(fā)筆記

    1.概述本文主要介紹M33核的兩種工程調(diào)試開(kāi)發(fā),第一種方式是通過(guò)板子自帶的固件進(jìn)行開(kāi)發(fā),第二種方式是使用IAREmbeddedWorkbench來(lái)構(gòu)建可移植的Freertos文件進(jìn)行開(kāi)發(fā)
    的頭像 發(fā)表于 06-29 08:01 ?1003次閱讀
    米爾基于NXP iMX.93<b class='flag-5'>開(kāi)發(fā)板</b>的<b class='flag-5'>M</b>33處理器應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b>筆記

    PHYTEC AM62x開(kāi)發(fā)板試用】開(kāi)箱

    本帖最后由 如去如來(lái) 于 2024-6-27 12:28 編輯 收到PHYTEC AM62x開(kāi)發(fā)板已經(jīng)兩周,忙于其他事情還沒(méi)來(lái)得及開(kāi)箱測(cè)試,今天來(lái)補(bǔ)上。 自從1986年德國(guó)PHYTEC公司創(chuàng)立
    發(fā)表于 06-18 23:27

    點(diǎn)擊參與米爾NXP i.MX 93開(kāi)發(fā)板有獎(jiǎng)試用

    米爾與NXP合作發(fā)布的新品基于NXPi.MX93應(yīng)用處理器的MYD-LMX9X開(kāi)發(fā)板免費(fèi)試用活動(dòng)來(lái)啦~~米爾提供了3塊價(jià)值678元的MYD-LMX9X開(kāi)發(fā)板發(fā)起
    的頭像 發(fā)表于 06-13 08:02 ?277次閱讀
    點(diǎn)擊參與米爾NXP <b class='flag-5'>i.MX</b> 93<b class='flag-5'>開(kāi)發(fā)板</b>有獎(jiǎng)<b class='flag-5'>試用</b>

    米爾NXP i.MX 93開(kāi)發(fā)板的Qt開(kāi)發(fā)指南

    1.概述Qt是一個(gè)跨平臺(tái)的圖形應(yīng)用開(kāi)發(fā)框架,被應(yīng)用在不同尺寸設(shè)備和平臺(tái)上,同時(shí)提供不同版權(quán)版本供用戶選擇。米爾NXPi.MX93開(kāi)發(fā)板(MYD-LMX9X開(kāi)發(fā)板)使用Qt6.5版本進(jìn)行
    的頭像 發(fā)表于 06-07 08:01 ?1439次閱讀
    米爾NXP <b class='flag-5'>i.MX</b> 93<b class='flag-5'>開(kāi)發(fā)板</b>的Qt<b class='flag-5'>開(kāi)發(fā)</b>指南

    免費(fèi)!NXP i.MX 93開(kāi)發(fā)板有獎(jiǎng)試用

    米爾與NXP合作發(fā)布的新品基于NXPi.MX93應(yīng)用處理器的MYD-LMX9X開(kāi)發(fā)板免費(fèi)試用活動(dòng)來(lái)啦~~米爾提供了2塊價(jià)值678
    的頭像 發(fā)表于 05-23 08:01 ?497次閱讀
    免費(fèi)!NXP <b class='flag-5'>i.MX</b> 93<b class='flag-5'>開(kāi)發(fā)板</b>有獎(jiǎng)<b class='flag-5'>試用</b>

    NXP系列-NXP i.MX 93核心開(kāi)發(fā)板-入門級(jí)嵌入式核心-產(chǎn)品資料

    MYC-LMX9X核心開(kāi)發(fā)板NXP i.MX 93重新定義入門級(jí)嵌入式CPU模組2*Cortex-A55@1.7GHz+Cortex-M
    發(fā)表于 04-23 11:07 ?3次下載

    fpga開(kāi)發(fā)板是什么?fpga開(kāi)發(fā)板有哪些?

    FPGA開(kāi)發(fā)板是一種基于FPGA(現(xiàn)場(chǎng)可編程門陣列)技術(shù)的開(kāi)發(fā)平臺(tái),它允許工程師通過(guò)編程來(lái)定義和配置FPGA芯片上的邏輯電路,以實(shí)現(xiàn)各種數(shù)字電路和邏輯功能。FPGA開(kāi)發(fā)板通常包括FPGA芯片、時(shí)鐘模塊、電源模塊、輸入輸出接口等組
    的頭像 發(fā)表于 03-14 18:20 ?1496次閱讀

    方法|如何為開(kāi)發(fā)板調(diào)試新的觸摸屏

    方法|如何為開(kāi)發(fā)板調(diào)試新的觸摸屏
    的頭像 發(fā)表于 11-30 11:30 ?766次閱讀
    方法|如何為<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>調(diào)試</b>新的觸摸屏

    8PEdge AI SBC將恩智浦 i.MX 8M Plus SoC與Hailo-8 AI加速器相結(jié)合

    8PEdge AI Pico-ITX SBC將NXP i.MX 8M Plus處理器(本身與2.3 TOPS NPU)與26 TOPS
    的頭像 發(fā)表于 10-17 11:49 ?852次閱讀
    蜂<b class='flag-5'>板</b><b class='flag-5'>8</b>PEdge AI SBC將恩智浦 <b class='flag-5'>i.MX</b> <b class='flag-5'>8M</b> <b class='flag-5'>Plus</b> SoC與Hailo-<b class='flag-5'>8</b> AI加速器相結(jié)合

    【LuckFox Pico Plus開(kāi)發(fā)板免費(fèi)試用】使用ADB命令訪問(wèn)開(kāi)發(fā)板

    感謝電子發(fā)燒友和幸狐科技提供了此次LuckFox Pico Plus開(kāi)發(fā)板試用機(jī)會(huì)。 LuckFox Pico 是一款基于瑞芯微 RV1103 芯片具有高性價(jià)比的微型 Linux 開(kāi)發(fā)板
    發(fā)表于 10-14 09:42

    【LuckFox Pico Plus開(kāi)發(fā)板免費(fèi)試用】+開(kāi)發(fā)板初體驗(yàn)

    、SPI、I2C、USB等,便于快速進(jìn)行開(kāi)發(fā)調(diào)試。 LuckFox Pico Plus以體積小巧而著稱,其外觀如圖1和圖2所示。 由圖可以
    發(fā)表于 10-13 16:38

    如何使用gdbserver對(duì)目標(biāo)開(kāi)發(fā)板上的程序進(jìn)行遠(yuǎn)程調(diào)試

    本篇講解如何使用 gdbserver 對(duì)目標(biāo)開(kāi)發(fā)板上的程序進(jìn)行遠(yuǎn)程調(diào)試。 安裝 GDBSERVER 首先在開(kāi)發(fā)板上安裝 gdbserver: apt install gdbserver
    的頭像 發(fā)表于 10-04 15:27 ?963次閱讀