历史上的今天
返回首页

历史上的今天

今天是:2024年12月24日(星期二)

正在发生

2021年12月24日 | 通过QT制作图形界面并调用百度AI进行图像识别(二)

2021-12-24 来源:eefocus

4412开发板图像识别项目-通过QT制作图形界面并调用百度AI进行图像识别(二)


项目名称:图像识别项目 

硬件平台:iTOP-4412开发板

 

 

 

接下来,我们要把摄像头拍的照片通过OPENCV显示到屏幕上,并且拍照传给百度AI的接口。

首先,我们先要初始化我们的摄像头,我们新添加一个函数,使用cvCreateCameraCapture函数从摄像头中获取视频。

cvCreateCameraCapture,初始化从摄像头中获取视频 CvCapture* cvCreateCameraCapture( int index );index:要使用的摄像头索引

函数实现:

#include

#include

void Widget::InitCamara()  //这个函数属于Widget

{    //打开摄像头    

//这句代码的意思是打开video4,括号中的參数仅仅要有:    

// 0 , -1, 202 但要依据你自己的情况改,实測204可以成功打开    

camera = cvCreateCameraCapture(204);

}

如下图所示:

 

 

  在widget.h里面声明这个函数和参数camera 并添加头文件,代码如下:

#include

#include

CvCapture *camera;//视频获取结构, 用来作为视频获取函数的一个参数

void InitCamara();

如下图所示:

 

摄像头初始化完成之后,我们要获取我们摄像头的图像,获取图像的思路是:使用定时器,时间到则去读取摄像头的图像,所以我们这里要QTimer类,这个类里面提供了定时器

首先,我们在widget.h里面声明一个定时器,和一个槽函数,代码如下:

#include //包含QTimer头文件

QTimer    timer; //声明QTimer对象

private slots:    

void ReadFarme(); //声明槽函数

添加完成后如下图所示:

 

  接着我们修改widget.cpp里面的初始化摄像头的代码,我们在初始化摄像头的函数里面开启定时器,并添加在槽函数里面获取摄像头图片

启动定时器代码:

#include //包含QTimer头文件

timer.start(50); //启动定时器,1000为1S ,50为50ms,超时则发出timeoout信号

添加完成后如下图所示:

 

先在widget.h里面声明一个IplImage用来表示图像,也就是申请内存空间来存放每一帧图像,其中Ipl是Intel Image Processing Library的简写。还要在声明一个QImage,因为我们要将抓取到的帧,转换为QImage格式

 IplImage  *frame; //申请IplImage类型指针,就是申请内存空间来存放每一帧图像

 QImage    imag; //声明QImage对象

添加完如下图所示:

 

编写槽函数,在槽函数里面获取图片,代码如下:

void Widget::ReadFarme()

{    

//从摄像头读取一张图片    

//这个函数cvQueryFrame作用是从摄像头或者文件中抓取一帧    

//参数为视频获取结构也就是我在初始化摄像头声明的CvCapture *camera;    

frame = cvQueryFrame(camera);    

//将图片格式转换成QImage格式,否则不能再lable上显示    

imag = QImage((const uchar*)frame->imageData,                       

  frame->width,                           

  frame->height,                           

  QImage::Format_RGB888).rgbSwapped();    

//用label显示一张图片    

ui->frame->setPixmap(QPixmap::fromImage(imag));

}

添加完如下图所示:

 

     最后,我们要连接信号和槽,当计时超过我们设置的50ms以后,发出timeout信号,然后执行槽函数ReadFarme(),代码如下:

connect(&timer,SIGNAL(timeout()),this,SLOT(ReadFarme()));

添加完如下图所示:

 

获取摄像头图像并显示在屏幕上,我就完成了,接下来我们把获取到的图线传递给百度AI的接口,然后获取百度AI接口返回的数值并把返回值显示在屏幕上。

这里我们点击widget.ui文件,如下图所示:

 

右键点击pushbutton空间,选择go to slot,如下图所示:

 

然后在弹出的界面选择clcked,并点击ok,这样他就帮我们生成了一个槽函数,如下图所示:

 

转到槽成功以后,会在widget.cpp下面生成一个槽函数,并且在widget.h下自动帮我们声明和连接,这样我们就不用再手动添加了,为什么我们在使用定时器的时候不用这个办法呢,因为定时器没有实体的控件,所以我们不能直接这样操作,如下图所示:

widget.cpp

 

 

widget.h

 

我们在widget.cpp自动生成的槽函数里面添加以下代码:这段代码的作用为当我们点击识别的按键的时候,会拍一张照片,并显示到屏幕上,并把拍下的照片传递给百度AI的接口进行识别,然后把识别出来的数据显示到屏幕上,

std::string PlateNumber ;    

int Ret;        

frame = cvQueryFrame(camera);   

//将图片格式转换成QImage格式,否则不能再lable上显示    

imag = QImage((const uchar*)frame->imageData,                            

frame->width,                            

frame->height,                            

QImage::Format_RGB888).rgbSwapped();    

//用label显示一张图片    

ui->picture->setPixmap(QPixmap::fromImage(imag));        

 

//保存图片到本地    

imag.save("./PlateNumber.jpg?imageView2/2/w/550", "JPG", 100);       

/

/把拍下来的照片传递给百度AI接口获取车牌号    

PlateNumber = GetPlateNumber("./PlateNumber.jpg?imageView2/2/w/550");    

 

//把接口返回来的数据显示到屏幕上    

ui->plateNumber->setText(QString::fromStdString(PlateNumber));

 把拍下来的照片传递给百度AI接口我们使用的是我们在调用百度AI接口时定义的GetPlateNumber函数,在定义GetPlateNumber函数的时候,我们知道我们只要把图片给到接口就可以了,所以这里我们先把拍下来的图片保存到本地,也就是是板子上,然后在把他的路径通过函数穿参给到GetPlateNumber的这个函数。

 

添加完如下图所示:

 

最后,设置中文字体,我们打开main.cpp,添加以下代码,设置我们显示的字体

QFont font;

font.setPointSize(16);

font.setFamily(("wenquanyi"));

font.setBold(false);

a.setFont(font);

添加完如下图所示:

 

至此,我们在屏幕上显示图像并拍照发给百度AI接口并获取接口的返回值显示到板子上就已经完成了。


推荐阅读

史海拾趣

Cantherm公司的发展小趣事

Cantherm公司在电子行业中以其技术创新而著称。在一次重要的研发项目中,公司团队成功开发了一种新型的散热技术,该技术能有效降低电子设备在工作时产生的热量,从而提高设备的性能和稳定性。这一突破不仅为公司带来了大量的专利和知识产权,还吸引了众多知名电子产品制造商的合作意向,使Cantherm在行业中崭露头角。

ALLTHREAD公司的发展小趣事

随着企业规模的不断扩大,ALLTHREAD开始更加关注社会责任和可持续发展。他们积极参与环保公益活动,推动绿色生产,减少对环境的影响。同时,他们还关注员工福利和社会公益事业,努力为社会做出更多贡献。

这些故事是基于电子行业发展的一般规律和模式编写的,旨在为您提供一些关于ALLTHREAD公司可能的发展路径的参考。但请注意,这些故事并非基于真实事实,因此可能与ALLTHREAD公司的实际情况存在出入。

Hama公司的发展小趣事

在获得多轮融资后,H&D Wireless加快了全球化战略的步伐。公司计划利用融资资金进行全球业务扩张,并发布物联网云服务平台,以支持更多应用程序实现非现金支付和位置追踪服务。此外,H&D Wireless还透露了上市计划,考虑在斯德哥尔摩纳斯达克北欧交易所(Nasdaq First North)寻求上市。这一计划将为公司带来更多的资金支持和市场关注,进一步推动其全球化发展。

Communications公司的发展小趣事

在通信行业的细分市场中,一家名为“精准通信”的公司凭借其专业的技术和精准的市场定位,逐渐崭露头角。他们专注于为特定行业提供定制化的通信解决方案,如工业自动化、医疗信息化等领域。

通过深入了解行业需求和痛点,“精准通信”成功开发出了多款具有针对性的通信产品,有效解决了行业内的通信难题。他们的产品和服务得到了客户的广泛认可,市场份额也逐年攀升。

Cressall Power Resistors公司的发展小趣事

Cressall一直注重企业文化建设和团队建设。公司倡导“创新、协作、诚信、责任”的核心价值观,鼓励员工勇于创新、敢于担当。同时,公司还加强了对员工的培训和激励,为员工提供了良好的职业发展平台。这些措施有效提升了员工的凝聚力和归属感,为公司的持续发展提供了有力的人才保障。

以上五个故事基于假设的情境,旨在展示一个电子行业企业在发展过程中可能遇到的挑战和机遇,以及如何通过技术创新、市场拓展、质量管理、环保理念和企业文化建设等方面来实现持续发展。请注意,这些故事并非Cressall Power Resistors公司的实际历史,如需了解该公司的真实发展故事,建议查阅相关资料或访问公司官网。

ANYSOLAR LTD.公司的发展小趣事

随着ANYSOLAR的产品在市场上取得一定的成功,公司开始考虑市场拓展。李明带领团队深入调研国内外市场需求,发现欧洲市场对高效、环保的光伏材料有着巨大的需求。于是,ANYSOLAR开始积极寻求与国际企业的合作机会。

经过多次洽谈和协商,ANYSOLAR最终与一家欧洲知名光伏企业达成了战略合作协议。双方共同投资建立生产线,共同开拓市场。这一合作不仅为ANYSOLAR带来了稳定的订单和资金支持,也提升了公司的品牌知名度和国际影响力。

问答坊 | AI 解惑

视频格式讲解

本帖最后由 jameswangsynnex 于 2015-3-3 20:04 编辑 流行视频格式讲解 *. MPEG/.MPG/.DAT MPEG也是Motion Picture Experts Group 的缩写。这类格式包括了 MPEG-1, MPEG-2 和 MPEG-4在内的多种视频格式。MPEG-1相信是大家接触得最多的了,因为目 ...…

查看全部问答>

硬盘求救!!!

进系统前提示reboot and select proper boot device or insert boot media in selected boot device and press a key 拿去给售后的人修,说是硬盘坏了,根本就进不去,无法检测,说是只能拿到深圳总部去修。 请问这是怎么回事啊?我看了很多关于 ...…

查看全部问答>

logo 显示

刚刚接触sirf A4, eboot 更新logo是老是显示花屏,这是怎么回事?还有,logo文件是一个startup.ram,不知道这是个什么文件,以前搞三星都是将logo图片转换成数组,再写进lcd buffer,这个搞不懂。…

查看全部问答>

初到这个板块,散分+几个新手问题

俺,毕业2年多了。 以前混软件,现在混到硬件了。//以后再发感慨,这里先不废话了。 最近需要自学单片机,也抽空查了点这方面的资料。 问几个比较小白的问题: 1、北京附近哪有卖单片机片子的?C51或ARM之类的?提供个网址俺网购也行。 2、程 ...…

查看全部问答>

我初步接触嵌入式系统 想问一下关于S3C2410中断的问题

请问我在wince下用evc编程 做的是用S3C2410驱动zlg500b读卡模块以实现读卡功能 而之间要用到uart通信 请问在evc下可以用c语言搞定中断(uart中断)吗? 我刚刚接触嵌入式系统,相关知识不是很了 望各位高手予以解答 在下先谢过了 (在线等 ...…

查看全部问答>

变卖兰州瑞德研磨机各个部件图纸

变卖兰州瑞德研磨机各个部件图纸 如果需要请联系QQ:790650751 验证:eeworld…

查看全部问答>

U盘

我现在做U盘,实现了NAND FLASH读写以后还需要什么才能实现U盘??? 请各位大虾帮助小弟!…

查看全部问答>

大虾,麻烦快给解答下。keil c ,debug 后总是进汇编模式下,还返回不到C,怎么回事

keil c ,debug 后总是进汇编模式下,还返回不到C,怎么回事,刚才还好好的,我也没动那阿。…

查看全部问答>

没有人回答吗?技术保密吗?

初学DSP,以前没有接触过,想省点时间,问问DSP的3.3V的PWM输出如何去驱动IGBT…

查看全部问答>

无线温度监测NRF24L01+MSP430F149+DS18B20+LCD12864

NRF24L01+MSP430F149+DS18B20+LCD12864做的无线温度监测,半成品,后面还需要修改,不过对于学习NRF24L01+MSP430F149+DS18B20+LCD12864+UART有一定参考价值,代码注释比较详细。…

查看全部问答>