zoukankan      html  css  js  c++  java
  • 项目实战-图像识别项目-通过QT制作图形界面并调用百度AI进行图像识别(一)

     

     

    转自迅为4412开发板项目实战教程

    B站视频地址:https://www.bilibili.com/video/BV157411c7sc?p=7

     

    硬件平台: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.05gdbname起名为arm-linux-gdb,设置完成后点击apply,如下图所示:

     

     

     

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

     

     

     

    点击kits,然后点击add,在弹出来的name选项中,我们填写ARMdevice type,设备类型我们选择桌面,Compiler CC++我们选择我们刚刚添加的4.4.1CC++Debugger我们选择我们刚刚添加的4.4.1GDBQT 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

     

     

     

    我们把百度AISDK拷贝到UbuntuQT工程下,如下图所示:

     

     

     

    然后右键点击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", &image)

    Json::Value result;

    std::string image; aip::get_file_content("/assets/sample.jpg", &image);

    // 调用车牌识别

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

    // 如果有可选参数 std::map<std::string, std::string> 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)函数下面:如下图所示:

     

     

     

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

     

     

     

     

     

    关注迅为公众号,持续更新技术干货。

  • 相关阅读:
    Java GC机制详解
    程序员面试的时候如何谈薪酬待遇?
    每个程序员都会遇到的面试问题:谈谈进程和线程的区别
    面试问题:你了解Java内存结构么(Java7、8、9内存结构的区别)
    UVa 208
    山科 STUST OJ Problem B: 编写函数:String to Double (II) (Append Code)
    山科SDUST OJ Problem J :连分数
    辗转相除法
    [比赛总结]ACM div3 G 比赛总结
    SDUST OJ Problem G 动态的字符串排序
  • 原文地址:https://www.cnblogs.com/topeet/p/13984429.html
Copyright © 2011-2022 走看看