赞
踩
目录
参考前面发的几篇文章http识别车牌,sqlite3数据库、摄像头的文章
新建一个项目,加入前面用到的http和image两个文件,和加入用到的模块和头函数和成员,加入前面用到的全局变量
qt学习:QTSQL+连接sqlite数据库+增删改查-CSDN博客
qt学习:http+访问百度智能云api实现车牌识别-CSDN博客
完整项目
- 头函数
- #include <QFileDialog>
- #include <QThread>
- #include <QWidget>
- #include <QDebug>
- #include <QJsonArray>
- #include <QJsonDocument>
- #include <QJsonObject>
- #include <QThread>
- #include <QSqlDatabase>
- #include <QSqlQuery>
- #include <QSqlError>
- #include <QCameraViewfinder>
- #include <QCameraImageCapture>
- #include <QCamera>
- #include <QCameraInfo>
- #include <QImage>
- #include <QBuffer>
- #include <QString>
- #include <QNetworkAccessManager>
- #include <QNetworkReply>
- #include <QNetworkRequest>
- #include <QEventLoop>
- #include <QTextCodec>
- #include "image.h"
- #include "http.h"
-
- 成员
- private:
- QString fileName ;//图片文件名
- QString accessToken;//access-Token
- QSqlDatabase db;//数据库对象
- QCamera *camera;//摄像头对象
- QCameraImageCapture* imageCapture;//摄像头拍照类的对象
- enum CaptureIdentify flag;//标志位
-
- 全局变量
- const QString baiduTokenUrl = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%1&client_secret=%2&";
-
- const char *client_id = "";//API Key
- const char *secret_id = "";//Secret Key
- const QString baiduImageUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate?access_token=%1";
-
- //界面全屏
- this->showMaximized();
-
- //数据库的初始化
- //连接数据库,并且要指定你要连接哪一种数据库
- db = QSqlDatabase::addDatabase("QSQLITE");
- //指定你要操作的数据库文件名字
- db.setDatabaseName("xxx.db");
-
- //打开数据库文件,如果该文件不存在 则创建
- bool ret = db.open();
- if(ret == false)
- {
- qDebug()<<db.lastError().text();
- return ;
- }
- //创建表
- QString sql = QString("create table if not test user(carId text,enterTime text,leaveTime text,money double);");
-
- //使用QSqlQuery类来执行操作,实例化一个sql语句执行类QSqlQuery的对象
- QSqlQuery query;
- //执行sql语句,如果执行成功,返回true
- ret = query.exec(sql);
- if(ret == false)
- {
- qDebug()<<"create table error:"<<query.lastError().text();
- }
-
- //表格控件的初始化
- //设置表头列标题的文本
- QStringList list;
- list<<"车牌号"<<"入库时间"<<"出库时间"<<"消费金额";
-
- //设置表格控件的列数
- ui->tableWidget->setColumnCount(4);
-
- //设置颜色交替
- ui->tableWidget->setAlternatingRowColors(true);
-
- //设置列的宽度自适应
- ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
-
- //设置单元格嵌套到水平表头表格上
- for(int i=0; i<ui->tableWidget->columnCount(); i++)
- {
- //实例化一个单元格类的对象
- QTableWidgetItem *item = new QTableWidgetItem;
- //向单元格写入文字
- item->setText(list.at(i));
-
- //设置字体
- QFont font = item->font();
- font.setBold(true);//加粗
- font.setPixelSize(32);
- item->setFont(font);
-
- //设置单元格嵌套到水平表头表格上
- ui->tableWidget->setHorizontalHeaderItem(i,item);
- }
-
- //从数据库中初始化数据
- updateTableUi();
- //摄像头的初始化
- initCamerea();
- //设置文件名
- fileName = "1.jpg";
- //关闭命令
- camera->stop();
- //释放内存
- delete camera;
- //入库标志位,标志位会随着拍照完成的信号一起传入槽函数
- flag = Identify_Enter;
-
- //捕捉画面
- imageCapture->capture();
-
-
- //入库标志位,标志位会随着拍照完成的信号一起传入槽函数
- flag = Identify_Leave;
-
- //捕捉画面
- imageCapture->capture();
- qDebug()<<"onSaveCaptureImage";
- //将图片保存为1.jgp图片
- preview.save("1.jpg");
-
- if(flag == Identify_Enter)
- {
- //入库,上传http,加入数据库,更新表格,显示价格
- onEnterIdentify();
- }
- else if(flag == Identify_Leave)
- {
- //出库,上传http,加入数据库,更新表格,显示价格
- onLeaveIdentify();
- }
- //进行车牌识别
- //将图片上传http获取车牌号码
- QString carId = carIdentify();
- if(carId.isEmpty())
- {
- return;
- }
-
- //进入数据库中,进行比较,获取到该车牌的入库时间
- QString sql = QString("select * from user where carId='%1';")
- .arg(carId);
-
-
- //执行sql语句,如果执行成功,返回true
- QSqlQuery query;
- int ret = query.exec(sql);
- if(ret == false)
- {
- qDebug()<<"select error:"<<query.lastError().text();
- }
-
- //如果找到了
- QString enterTime;
- QString leaveTime;
- double money;
- while (query.next()) {
- //找到了才会进来
- enterTime = query.value("enterTime").toString();
- leaveTime = query.value("leaveTime").toString();
- money = query.value("money").toDouble();
-
- if(leaveTime.isEmpty())
- break;
- }
-
- //跟出库时间进行相减,得出停车时间,算出停车费用
- QDateTime lTime = QDateTime::currentDateTime();
- //相差的秒数
- int timeLength = QDateTime::fromString(enterTime).secsTo(lTime);
- money = timeLength;
-
- //更新数据库 --更新数据
- sql = QString("update user set leaveTime='%1',money=%2 where carId='%3';")
- .arg(lTime.toString())
- .arg(money)
- .arg(carId);
-
-
- //执行sql语句,如果执行成功,返回true
- ret = query.exec(sql);
- if(ret == false)
- {
- qDebug()<<"update error:"<<query.lastError().text();
- }
- //显示
- QString text = QString("车牌号为%1 出库,出库时间:%2 停车时间:%3秒 费用:%4")
- .arg(carId)
- .arg(lTime.toString())
- .arg(timeLength)
- .arg(money);
-
- ui->textBrowser->append(text);
-
- //更新表格控件
- updateTableUi();
-
- //出库的时候从数据库中进行删除
- sql = QString("delete from user where carId='%1';")
- .arg(carId);
-
-
- //执行sql语句,如果执行成功,返回true
- ret = query.exec(sql);
- if(ret == false)
- {
- qDebug()<<"delete error:"<<query.lastError().text();
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。