历史上的今天
返回首页

历史上的今天

今天是:2024年12月27日(星期五)

正在发生

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

2021-12-27 来源:eefocus

硬件平台:iTOP-4412开发板

项目名称:图像识别项目 


本文我们来学习利用QT构建一个图形界面并用QT调用百度AI的接口

 

一.添加arm编译套件

打开QT creator 点击Tools->Options

 

 

点击Build&run,并选择Compilers,如下图所示:

 


点击add,选择gcc->c,并在Compiler path 中选择2014.05编译器的gcc,名字起名为arm-linux-gcc,设置完成后点击apply

 

 

点击add,选择gcc->c,并在Compiler path 中选择2014.05编译器的g++,名字起名为arm-linux-g++,设置完成和后点击apply,如下图所示:

点击debuggers,选择add,在path路径里面我们选择2014.05的gdb,name起名为arm-linux-gdb,设置完成后点击apply,如下图所示:

我们把编译好的QT库拷贝到ubuntu的/opt路径下,并解压,如下图所示:

 


点击kits,然后点击add,在弹出来的name选项中,我们填写ARM,device type,设备类型我们选择桌面,Compiler C和C++我们选择我们刚刚添加的4.4.1的C和C++,Debugger我们选择我们刚刚添加的4.4.1的GDB,QT version我们选择我们刚刚在/opt下解压的qmake,设置完成之后我们点击apply并点击ok。如下图所示:

 

 

 

二.创建一个工程把添加环境变量

     点击file->new file or prohect ,创建一个工程,如下图所示:

 

 

 

 

选择qt widgets

 

 

 

设置工程名称和存放路径,如下图所示:

 

 

 

 

编译套件选择我们刚刚添加的arm,设置好以后,点击next,如下图所示:

 

 

 

在弹出来的base class选项中,我们选择qwidget,设置好以后选择next,如下图所示:

 

 

 

点击finish,如下图所示:

 

 

 

这样我们这个工程就创建完成了,在添加环境变量之前,我们把我们编译的libv4l-0.6.4库拷贝到/usr/local/opencv-2.4.9/lib/下面,命令如下:

 

cp -r ./lib/* /usr/local/opencv-2.4.9/lib/

如下图所示:

 

 

 

我们点击pro文件,添加库的环境变量。环境变量如下:

INCLUDEPATH +=  /usr/local/curl/include                                         /usr/local/json/include                               

                   /usr/local/openssl/include                          

                   /usr/local/opencv-2.4.9/include                       

                  /usr/local/opencv-2.4.9/include/opencv                  

/usr/local/opencv-2.4.9/include/opencv2     

 

LIBS +=   /usr/local/curl/lib/libcurl.so.4.5.0              

          /usr/local/json/lib/libjsoncpp.so                 

          /usr/local/openssl/lib/libssl.so.1.0.0            

         /usr/local/openssl/lib/libcrypto.so.1.0.0        

         /usr/local/opencv-2.4.9/lib/libopencv*          

        /usr/local/opencv-2.4.9/lib/libv4l1*             

/usr/local/opencv-2.4.9/lib/libv4l2*               

 /usr/local/opencv-2.4.9/lib/libv4lc*        

 

 

添加完成后如下图所示:

 

 

 

设计UI,添加三个label,一个按钮,一个消息框,为了简单,我们就不布局了,所以qwidge的大小我们要设置成和屏幕分辨率大小一样,这里我使用的是金属壳7寸屏幕,所以我这里设置成了1024*600。

 

 

 

我们把百度AI的SDK拷贝到Ubuntu的QT工程下,如下图所示:

 

 

 

然后右键点击qtcreator中我们的新建的工程,选add existing files,如下图所示:

 

 

 

在我们拷贝到工程下面的SDK中找到百度AI提示需要的头文件,

 

 

 

添加完成如下图所示:

 

 

 

头文件的路径要和我这里保持一致,路径如下:

 

 

 

然后把快速入门的中的client的例子拷贝到widget.cpp里面,拷贝内容如下:

 

 

 

#include "ocr.h"   

// 设置APPID/AK/SK    

std::string app_id = "你的 App ID";    

std::string api_key = "你的 Api key";    

std::string secret_key = "你的 Secret Key";    

aip::Ocr client(app_id, api_key, secret_key);

拷贝完成如下:

 

 

 

 

 

 

 

然后把里面的APPID/AK/SK替换成我们第一节课创建的应用中生成的APPID/AK/SK,如下图所示:

 

 

 

替换完成如下图所示:

 

 

 

 

新建一个函数接着把百度AI 提供的调用的例子直接拷贝过来,如下图所示:

 

 

 

 

拷贝内容如下:

 

 

//我们只要把我们用摄像头拍的照片传到下面的这个函数就可以了 //aip::get_file_content("/assets/sample.jpg?imageView2/2/w/550", &image)

Json::Value result;

std::string image; aip::get_file_content("/assets/sample.jpg?imageView2/2/w/550", &image);

// 调用车牌识别

result = client.license_plate(image, aip::null);

// 如果有可选参数 std::map options;

options["multi_detect"] = "true";

// 带参数调用车牌识别

result = client.license_plate(image, options);

添加完如下图所示:

 

 

 

 

 

判断返回值和错误信息,返回格式如下:

 

 

 

错误信息如下:

 

 

 

判断返回值代码:

if(result["error_code"].isNull())    

{        

      return (result["words_result"][0]["number"].asString() + ",欢迎光临.");    

}   

else    

{        

return ("识别失败");    

}    

return ("识别失败");

我们把判断返回值代码写到我们上面新建的std::string eNGetPLatumber(std::string PicturePath)函数下面:如下图所示:

至此,我们识别调用百度的接口的代码已经完成了。


推荐阅读

史海拾趣

HARTING公司的发展小趣事

Hanghsing Enterprise Co., Ltd. 的五个发展故事

故事一:初创与起步

Hanghsing Enterprise Co., Ltd.(以下简称“Hanghsing”)成立于台湾,起初是一家专注于精密零部件制造的小型公司。公司位于No. 1, Lane 39, Seuwe St., Tali City, Taichung Hsien, Taiwan 412,凭借对品质的不懈追求和对市场的敏锐洞察,Hanghsing逐渐在行业内崭露头角。公司初期主要生产Valve Shafts、Nuts、Screws等精密不锈钢部件,这些产品广泛应用于电子、机械等多个领域。通过不断优化生产工艺和质量控制体系,Hanghsing逐渐建立了良好的市场口碑。

故事二:技术突破与产品升级

随着电子行业的快速发展,Hanghsing意识到技术创新的重要性。公司加大了对研发的投入,引进了一批高素质的技术人才,致力于新产品的开发和现有产品的升级。经过不懈努力,Hanghsing成功推出了一系列高精度、高可靠性的电子产品零部件,如Sleeve Barrels、Toggles和Mandrels等。这些产品不仅满足了市场对高品质零部件的需求,还进一步巩固了公司在电子行业供应链中的地位。

故事三:市场拓展与国际合作

随着产品质量的不断提升和市场份额的逐步扩大,Hanghsing开始将目光投向国际市场。公司积极参加各类国际展会,与全球知名电子企业建立合作关系,将产品销往世界各地。同时,Hanghsing还注重与国际技术标准的接轨,确保产品符合国际市场的严格要求。通过不断的市场拓展和国际合作,Hanghsing在国际上的知名度和影响力得到了显著提升。

故事四:产业升级与多元化发展

面对电子行业的快速发展和市场竞争的日益激烈,Hanghsing积极寻求产业升级和多元化发展的路径。公司开始涉足电子元器件的制造和研发领域,通过引进先进的生产设备和工艺技术,不断提升产品的附加值和市场竞争力。同时,Hanghsing还积极拓展上下游产业链,与原材料供应商和终端客户建立紧密的合作关系,形成了完整的产业生态体系。

故事五:绿色生产与可持续发展

在追求经济效益的同时,Hanghsing始终不忘履行社会责任。公司积极响应国家环保政策,致力于绿色生产和可持续发展。通过引进环保设备和工艺技术,减少生产过程中的污染物排放和资源消耗。同时,Hanghsing还加强了对员工的环保教育和培训,提高员工的环保意识和责任感。这些举措不仅有助于提升公司的社会形象和市场竞争力,还为推动电子行业的绿色发展做出了积极贡献。

HEICO Corporation公司的发展小趣事

在追求业务增长的同时,HEICO Corporation也积极履行社会责任,注重环保与可持续发展。公司致力于减少生产过程中的能源消耗和废弃物排放,采用环保材料和工艺进行生产。此外,HEICO还积极参与环保公益活动,推动电子行业的绿色发展。这种环保理念不仅提升了公司的社会形象,也为公司在电子行业中树立了良好的口碑。通过持续推动环保与可持续发展战略的实施,HEICO在电子行业中实现了经济效益与社会效益的双赢。

Hi-Tech Resistors Pvt Ltd公司的发展小趣事

在追求业务增长的同时,HEICO Corporation也积极履行社会责任,注重环保与可持续发展。公司致力于减少生产过程中的能源消耗和废弃物排放,采用环保材料和工艺进行生产。此外,HEICO还积极参与环保公益活动,推动电子行业的绿色发展。这种环保理念不仅提升了公司的社会形象,也为公司在电子行业中树立了良好的口碑。通过持续推动环保与可持续发展战略的实施,HEICO在电子行业中实现了经济效益与社会效益的双赢。

EICHHOFF公司的发展小趣事

在电子行业的快速发展中,EICHHOFF公司始终保持着对技术创新的追求。XX年代,公司成功研发出了一款具有革命性意义的连接器产品,该产品凭借其独特的设计和卓越的性能,迅速在市场上获得了广泛认可。这一创新不仅为EICHHOFF带来了丰厚的利润,也进一步巩固了其在行业中的领先地位。

此后,EICHHOFF公司继续加大研发投入,不断推出具有竞争力的新产品。这些产品不仅在性能上有所提升,还在设计和功能上进行了创新,满足了客户日益增长的需求。

Electronicon Kondensatoren GmbH公司的发展小趣事

1976年,ELECTRONICON推出了采用金属化聚丙烯薄膜的电容器系列,这一创新技术为电容器行业带来了显著的空间和成本优势,进一步巩固了其在市场上的领先地位。随着技术的不断进步,ELECTRONICON的产品逐渐拓展至照明、电机和电力电子等多个领域。

德力西(DELIXI)公司的发展小趣事

1984年,胡成中偕其弟胡成国等人在浙江省乐清市创立了“乐清县求精开关厂”,这便是德力西的前身。当时,企业仅有3位股东,5万元的资本,8名员工,以及单一的热继电器产品。凭借“以质取胜”的经营理念和灵活的机制,德力西在温州市电器行业中逐渐崭露头角。

问答坊 | AI 解惑

应用定时器中断实例技术

如何应用定时器实现中断呢?具体的操作步骤有呢些?应该注意什么问题?下面由工程师讲解一个应用定时器中断的实例: 现要求编制一段程序,使P1.0端口线上输出周期为2ms的方波脉冲。设单片机晶振频率 Fosc=6MHZ. 1、方法:利用定时器T0作1ms定 ...…

查看全部问答>

求助:用C51系列的单片机模拟一个非标准的SPI接口的从机?

大家知道有什么办法么?怎么才能及时的响应主机clk信号的,就是用单片机对主机的响应返回一定的值?我暂时想到用单片机C51来模拟,不知道大家在这方面有什么建议?不胜感激~~~~~~~…

查看全部问答>

寻LED显示屏供应商(不知贴在这边合适不合适)

有朋友最近想做LED广告屏,让帮忙找找有没有合适的供应商。 有意向的可以留下联系方式和公司产品介绍相关链接,谢谢~…

查看全部问答>

急救:WM5注册表问题,在线等!!

我用EVC4写的程序 可以修改WM5的注册表 就是Today下面的 用我写的程序修改后 用EVC自带的注册表编辑器查看显示修改是正确地 但是 只要一重启 就还原了 不知道这个问题怎么解决 谢谢了 ps 最好不要用破解注册表这种办法…

查看全部问答>

请教:为什么程序可以单步运行,但不能快速运行

各位大侠:我写了一个简单的关于字符串转换为无符号长整形秒数的程序。因为EVC不支持mktime()和localtime()等函数, 我自己写了一个。目前此程序单步执行可以,但是如果直接run,在模拟器上就会看到The application has performed an Illegal Opera ...…

查看全部问答>

超低价380元-基于最新ARM内核Cortex-M3之STM32评估板

     深圳市英蓓特信息技术有限公司*与德国KEIL公司合作,在市场第一时间推出Embest STM32评估板。该开发套件主控芯片采用意法半导体*之STM32F103RB芯片*。此芯片采用ARM公司最新的Cortex-M3内核*。   ...…

查看全部问答>

51DIY-LC测量小工具 后传

如你所知,和所有 电视剧或者小说 的后传一样。往往都比之前难看或者恶心。很遗憾地说,这个LC测量小工具 后传 也如此。当然了,在这里,发这个 昨日黄花,并不是无聊,只是一种 自我激励 ,同时也希望听到一些 专业意见 或者 记录一下 这个 过程— ...…

查看全部问答>

超声波测距 cx20106 接收信号一直出错

用的就是网上常用的电路 可是接收的信号不确定而且都不正确 求教用过cx20106的大侠帮忙一下  谢谢了  我是用105电容接一个5欧的电阻    5脚是220K电阻  接收头到cx20106这个我画图时太水了 用的是跳线(单面板) 而 ...…

查看全部问答>

管理员还有wstt进来交待

在一个帖子中我纠结要不要买25元的LaunchPad回来拆元件 现在想到一个办法 论坛好像计划过要搞什么MSP430DIY活动的,看来涉及面窄了点,估计要开展下去不易。不过我已经被你们忽悠住一下了,起码我还多花了时间在那个文档模版里添加文字图片介绍我 ...…

查看全部问答>

MSP430跟手机通信,你能想到什么办法?

大家有没有想过这样一个问题,用MSP430和我们的智能机通信,你能想到什么办法呢? 全双工的、半双工的、单工的都可以,当然双工最好啦! 你能想到什么样的办法呢?…

查看全部问答>