最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

QT結(jié)合百度Ai實現(xiàn)車牌識別

 更新時間:2024年03月17日 08:36:12   作者:Attitude Rabbit  
當(dāng)下的人工智能勢頭很盛,本文主要介紹了QT結(jié)合百度Ai實現(xiàn)車牌識別,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.申請網(wǎng)頁

https://cloud.baidu.com/product/ocr_cars/plate

在這里插入圖片描述

2.創(chuàng)建應(yīng)用

在這里插入圖片描述

在這里插入圖片描述

3.獲取AK與SK

在這里插入圖片描述

在這里插入圖片描述

4.根據(jù)AK與SK獲取token

在這里插入圖片描述

5.圖片轉(zhuǎn)Base64

接口文檔需要我們把需要上傳的車牌圖片轉(zhuǎn)為Base64格式

//圖片轉(zhuǎn)base64
QByteArray carNum::imageToBase64(QString fileName)
{
    //創(chuàng)建一個QImage對象img,并使用傳入的文件名fileName來初始化它
        QImage img(fileName);
        //創(chuàng)建一個空的QByteArray對象ba,用于存儲圖片的二進制數(shù)據(jù)
        QByteArray ba;
        //用QByteArray構(gòu)造QBuffer
        //創(chuàng)建一個QBuffer對象buf,并將之前創(chuàng)建的QByteArray對象ba的地址傳遞給它。
        //這樣,我們可以將數(shù)據(jù)寫入這個緩沖區(qū)
        QBuffer buf(&ba);
        //打開緩沖區(qū)buf以進行寫操作。這是為了準備將圖片數(shù)據(jù)寫入緩沖區(qū)
        buf.open(QIODevice::WriteOnly);
        //將圖片對象img保存到緩沖區(qū)buf中,使用JPG格式。
        //這樣,圖片的二進制數(shù)據(jù)將被寫入到之前創(chuàng)建的QByteArray對象中
        img.save(&buf,"JPG");//把img 寫入QBuffer
        //將之前存儲的圖片二進制數(shù)據(jù)轉(zhuǎn)換為Base64編碼的字符串,并存儲在新的QByteArray對象中
        QByteArray base64 = ba.toBase64();//不包含編碼頭
        //創(chuàng)建一個指向UTF-8編碼的文本編解碼器的指針。
        QTextCodec *codec = QTextCodec::codecForName("utf-8");
        //對Base64編碼的字符串進行URL編碼
        //對圖片urlencode
        QByteArray imaData = codec->fromUnicode(base64).toPercentEncoding();
        return imaData;
  }

6.示例代碼

#include "carnum.h"
#include "ui_carnum.h"

carNum::carNum(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::carNum)
{
    ui->setupUi(this);
    ui->pushButton->setStyleSheet("QPushButton {"
                                  "    border: 2px solid #87CEEB;"
                                  "    border-radius: 15px;"
                                  "    background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1,"
                                  "                                      stop: 0 #F0FFFF, stop: 1 #87CEEB);"
                                  "    font-weight: bold;"
                                  "    padding: 5px;"
                                  "}");
    ui->pushButton_2->setStyleSheet("QPushButton {"
                                  "    border: 2px solid #87CEEB;"
                                  "    border-radius: 15px;"
                                  "    background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1,"
                                  "                                      stop: 0 #F0FFFF, stop: 1 #87CEEB);"
                                  "    font-weight: bold;"
                                  "    padding: 5px;"
                                  "}");
    ui->pushButton_2->setEnabled(false);
    manager=new QNetworkAccessManager(this);
    connect(manager,&QNetworkAccessManager::finished,this,&carNum::reply);
    speech= new QTextToSpeech(this);

}


carNum::~carNum()
{
    delete ui;
}
void carNum::on_pushButton_clicked()
{
    QFileDialog dialog(this);
    dialog.setDirectory("C:/Users/19811/Desktop/carPic");
    //設(shè)置打開文件過濾屏蔽不需要的文件
    //QString filter = "車牌圖片類型二(*.png;;*.jpg)";
    //獲取文件路徑
    QString fileName=dialog.getOpenFileName(this,NULL, QString(),NULL);
    if (!fileName.isEmpty()) {
        //設(shè)置label自適應(yīng)
        ui->label->setScaledContents(true);
        //設(shè)置label圖片
        ui->label->setPixmap(QPixmap(fileName));
        if(!fileName.isEmpty()){
            ui->pushButton_2->setEnabled(true);
        }
        //
        QString client_id="申請的AK";
        QString secret_id="申請的Sk";
        QString access_token="生成的token";
           // 打開文件
        QFile file(fileName);
           if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
               // 讀取文件內(nèi)容
               //QTextStream in(&file);

               //QString picData=in.readAll();
               //qDebug()<<content;
               //創(chuàng)建網(wǎng)絡(luò)請求
               QNetworkRequest request;
               //baidu url需要三個參數(shù) client_id,secret_id,access_token;
               QString url=(QString("https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate?"
                                    "client_id=%1&secret_id=%2&access_token=%3")
                                    .arg(client_id).arg(secret_id).arg(access_token)
                            );

               QByteArray body= imageToBase64(fileName);
               QByteArray imgData = "image=" + body;
               qDebug()<<body;
               //設(shè)置url
               request.setUrl(url);
               //設(shè)置頭
               request.setHeader(QNetworkRequest::ContentTypeHeader,QString("application/x-www-form-urlencoded"
                                                                            "Accept: application/json"
                                                                            ));
               manager->post(request,imgData);

               // 在文本編輯框中顯示文件內(nèi)容
           }
       }


}

void carNum::reply(QNetworkReply *workReply)
{
    QByteArray data =workReply->readAll();

    QJsonObject root=QJsonDocument::fromJson(data).object();
    //獲取key為words_result的對象
    QJsonValue val = root.value("words_result");

    //獲取key為number的值
    QString carId = val.toObject().value("number").toString();
    ui->lineEdit->setText(carId);
    int carNum=2000;
    QString num= QString::number(carNum);
    speech->say(QString("車牌號"+ carId)+"歡迎進入"+"剩余車位"+ num);
    //speech->say(QString());
    qDebug()<<QString("welcome"+ carId);


}
//圖片轉(zhuǎn)base64
QByteArray carNum::imageToBase64(QString fileName)
{
    //創(chuàng)建一個QImage對象img,并使用傳入的文件名fileName來初始化它
        QImage img(fileName);
        //創(chuàng)建一個空的QByteArray對象ba,用于存儲圖片的二進制數(shù)據(jù)
        QByteArray ba;
        //用QByteArray構(gòu)造QBuffer
        //創(chuàng)建一個QBuffer對象buf,并將之前創(chuàng)建的QByteArray對象ba的地址傳遞給它。
        //這樣,我們可以將數(shù)據(jù)寫入這個緩沖區(qū)
        QBuffer buf(&ba);
        //打開緩沖區(qū)buf以進行寫操作。這是為了準備將圖片數(shù)據(jù)寫入緩沖區(qū)
        buf.open(QIODevice::WriteOnly);
        //將圖片對象img保存到緩沖區(qū)buf中,使用JPG格式。
        //這樣,圖片的二進制數(shù)據(jù)將被寫入到之前創(chuàng)建的QByteArray對象中
        img.save(&buf,"JPG");//把img 寫入QBuffer
        //將之前存儲的圖片二進制數(shù)據(jù)轉(zhuǎn)換為Base64編碼的字符串,并存儲在新的QByteArray對象中
        QByteArray base64 = ba.toBase64();//不包含編碼頭
        //創(chuàng)建一個指向UTF-8編碼的文本編解碼器的指針。
        QTextCodec *codec = QTextCodec::codecForName("utf-8");
        //對Base64編碼的字符串進行URL編碼
        //對圖片urlencode
        QByteArray imaData = codec->fromUnicode(base64).toPercentEncoding();
        return imaData;
  }

7.效果展示

在這里插入圖片描述

到此這篇關(guān)于QT結(jié)合百度Ai實現(xiàn)車牌識別的文章就介紹到這了,更多相關(guān)QT 車牌識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 深入C語言內(nèi)存區(qū)域分配(進程的各個段)詳解

    深入C語言內(nèi)存區(qū)域分配(進程的各個段)詳解

    一般情況下,一個可執(zhí)行二進制程序(更確切的說,在Linux操作系統(tǒng)下為一個進程單元,在UC/OSII中被稱為任務(wù))在存儲(沒有調(diào)入到內(nèi)存運行)時擁有3個部分,分別是代碼段(text)、數(shù)據(jù)段(data)和BSS段。這3個部分一起組成了該可執(zhí)行程序的文件
    2013-07-07
  • C語言數(shù)據(jù)結(jié)構(gòu)深入探索順序表

    C語言數(shù)據(jù)結(jié)構(gòu)深入探索順序表

    大家好,今天給大家?guī)淼氖琼樞虮?,我覺得順序表還是有比較難理解的地方的,于是我就把這一塊的內(nèi)容全部整理到了一起,希望能夠給剛剛進行學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的人帶來一些幫助,或者是已經(jīng)學(xué)過這塊的朋友們帶來更深的理解,我們現(xiàn)在就開始吧
    2022-05-05
  • C語言文件操作詳解以及詳細步驟

    C語言文件操作詳解以及詳細步驟

    文件(file)一般指存儲在外部介質(zhì)上數(shù)據(jù)的集合,比如我們經(jīng)常使用的.txt,?.bmp,?jpg.?.exe,.rmvb等等,下面這篇文章主要給大家介紹了關(guān)于C語言文件操作的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • C語言實現(xiàn)學(xué)生信息管理系統(tǒng)(多文件)

    C語言實現(xiàn)學(xué)生信息管理系統(tǒng)(多文件)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C++核心編程之類和對象詳解

    C++核心編程之類和對象詳解

    這篇文章主要介紹了C++編程進階之類和對象用法等相關(guān)使用技巧,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • C++中::SHCreateDirectoryEx函數(shù)使用方法

    C++中::SHCreateDirectoryEx函數(shù)使用方法

    ::SHCreateDirectoryEx用于創(chuàng)建多級目錄,類似于mkdir -p命令,本文主要介紹了C++中::SHCreateDirectoryEx函數(shù)使用方法,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • C++?基礎(chǔ)函數(shù)的介紹及使用(Vector+deque+STL)

    C++?基礎(chǔ)函數(shù)的介紹及使用(Vector+deque+STL)

    這篇文章主要介紹了C++?基礎(chǔ)函數(shù)的介紹及使用(Vector+deque+STL),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • c++冒泡排序示例分享

    c++冒泡排序示例分享

    冒泡排序是一種計算機科學(xué)領(lǐng)域的較簡單的排序算法,這篇文章主要介紹了c++冒泡排序示例,需要的朋友可以參考下
    2014-03-03
  • 深入了解c++11 移動語義與右值引用

    深入了解c++11 移動語義與右值引用

    這篇文章主要介紹了c++ 移動語義與右值引用的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C語言實現(xiàn)學(xué)生宿舍信息管理系統(tǒng)課程設(shè)計

    C語言實現(xiàn)學(xué)生宿舍信息管理系統(tǒng)課程設(shè)計

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學(xué)生宿舍信息管理系統(tǒng)課程設(shè)計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論

抚宁县| 秦安县| 金湖县| 伊宁市| 高台县| 翁源县| 无棣县| 金湖县| 通州区| 福鼎市| 清苑县| 邛崃市| 平遥县| 霍州市| 嘉鱼县| 鄂托克前旗| 贵定县| 隆尧县| 南丰县| 九寨沟县| 苏尼特右旗| 平塘县| 嘉黎县| 汉川市| 博兴县| 广饶县| 呼伦贝尔市| 白山市| 体育| 永济市| 邢台县| 万州区| 七台河市| 汪清县| 灵台县| 柘荣县| 固原市| 靖西县| 泰和县| 道孚县| 华阴市|