轉自迅為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.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", &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)函數下面:如下圖所示:
至此,我們識別調用百度的接口的代碼已經完成了。
關注迅為公眾號,持續更新技術干貨。