当前位置:   article > 正文

qt学习:停车场管理系统+摄像头+http识别车牌+sqlite3数据库

qt学习:停车场管理系统+摄像头+http识别车牌+sqlite3数据库

目录

参考前面发的几篇文章http识别车牌,sqlite3数据库、摄像头的文章

步骤    部分代码

新建一个项目,加入前面用到的http和image两个文件,和加入用到的模块和头函数和成员,加入前面用到的全局变量

配置ui界面

在构造函数中初始化数据库,表格控件,摄像头,开启摄像头

在析构函数中停止摄像头

在车辆入库和车辆出库按钮点击函数中实现拍照

在拍照完成的槽函数中实现判断标志位来决定是出库还是入库

上传http,查询数据库计算价格显示


参考前面发的几篇文章http识别车牌,sqlite3数据库、摄像头的文章

qt学习:多媒体Multimedia摄像头-CSDN博客

qt学习:QTSQL+连接sqlite数据库+增删改查-CSDN博客

qt学习:http+访问百度智能云api实现车牌识别-CSDN博客

步骤    部分代码

完整项目

qt学习:停车场管理系统+摄像头+http识别车牌+sqlite3数据库资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/weixin_59669309/88800578

新建一个项目,加入前面用到的http和image两个文件,和加入用到的模块和头函数和成员,加入前面用到的全局变量

  1. 头函数
  2. #include <QFileDialog>
  3. #include <QThread>
  4. #include <QWidget>
  5. #include <QDebug>
  6. #include <QJsonArray>
  7. #include <QJsonDocument>
  8. #include <QJsonObject>
  9. #include <QThread>
  10. #include <QSqlDatabase>
  11. #include <QSqlQuery>
  12. #include <QSqlError>
  13. #include <QCameraViewfinder>
  14. #include <QCameraImageCapture>
  15. #include <QCamera>
  16. #include <QCameraInfo>
  17. #include <QImage>
  18. #include <QBuffer>
  19. #include <QString>
  20. #include <QNetworkAccessManager>
  21. #include <QNetworkReply>
  22. #include <QNetworkRequest>
  23. #include <QEventLoop>
  24. #include <QTextCodec>
  25. #include "image.h"
  26. #include "http.h"
  27. 成员
  28. private:
  29. QString fileName ;//图片文件名
  30. QString accessToken;//access-Token
  31. QSqlDatabase db;//数据库对象
  32. QCamera *camera;//摄像头对象
  33. QCameraImageCapture* imageCapture;//摄像头拍照类的对象
  34. enum CaptureIdentify flag;//标志位
  35. 全局变量
  36. const QString baiduTokenUrl = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%1&client_secret=%2&";
  37. const char *client_id = "";//API Key
  38. const char *secret_id = "";//Secret Key
  39. const QString baiduImageUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate?access_token=%1";

配置ui界面

  1. 一个QTableWidget表格用于显示数据库数据
  2. 两个QPushButton按钮
  3. 一个QtextBrowser显示金额
  4. 一个QLabel用于显示摄像头画面

在构造函数中初始化数据库,表格控件,摄像头,开启摄像头

  1. //界面全屏
  2. this->showMaximized();
  3. //数据库的初始化
  4. //连接数据库,并且要指定你要连接哪一种数据库
  5. db = QSqlDatabase::addDatabase("QSQLITE");
  6. //指定你要操作的数据库文件名字
  7. db.setDatabaseName("xxx.db");
  8. //打开数据库文件,如果该文件不存在 则创建
  9. bool ret = db.open();
  10. if(ret == false)
  11. {
  12. qDebug()<<db.lastError().text();
  13. return ;
  14. }
  15. //创建表
  16. QString sql = QString("create table if not test user(carId text,enterTime text,leaveTime text,money double);");
  17. //使用QSqlQuery类来执行操作,实例化一个sql语句执行类QSqlQuery的对象
  18. QSqlQuery query;
  19. //执行sql语句,如果执行成功,返回true
  20. ret = query.exec(sql);
  21. if(ret == false)
  22. {
  23. qDebug()<<"create table error:"<<query.lastError().text();
  24. }
  25. //表格控件的初始化
  26. //设置表头列标题的文本
  27. QStringList list;
  28. list<<"车牌号"<<"入库时间"<<"出库时间"<<"消费金额";
  29. //设置表格控件的列数
  30. ui->tableWidget->setColumnCount(4);
  31. //设置颜色交替
  32. ui->tableWidget->setAlternatingRowColors(true);
  33. //设置列的宽度自适应
  34. ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  35. //设置单元格嵌套到水平表头表格上
  36. for(int i=0; i<ui->tableWidget->columnCount(); i++)
  37. {
  38. //实例化一个单元格类的对象
  39. QTableWidgetItem *item = new QTableWidgetItem;
  40. //向单元格写入文字
  41. item->setText(list.at(i));
  42. //设置字体
  43. QFont font = item->font();
  44. font.setBold(true);//加粗
  45. font.setPixelSize(32);
  46. item->setFont(font);
  47. //设置单元格嵌套到水平表头表格上
  48. ui->tableWidget->setHorizontalHeaderItem(i,item);
  49. }
  50. //从数据库中初始化数据
  51. updateTableUi();
  52. //摄像头的初始化
  53. initCamerea();
  54. //设置文件名
  55. fileName = "1.jpg";

在析构函数中停止摄像头

  1. //关闭命令
  2. camera->stop();
  3. //释放内存
  4. delete camera;

在车辆入库和车辆出库按钮点击函数中实现拍照

  1. //入库标志位,标志位会随着拍照完成的信号一起传入槽函数
  2. flag = Identify_Enter;
  3. //捕捉画面
  4. imageCapture->capture();
  5. //入库标志位,标志位会随着拍照完成的信号一起传入槽函数
  6. flag = Identify_Leave;
  7. //捕捉画面
  8. imageCapture->capture();

在拍照完成的槽函数中实现判断标志位来决定是出库还是入库

  1. qDebug()<<"onSaveCaptureImage";
  2. //将图片保存为1.jgp图片
  3. preview.save("1.jpg");
  4. if(flag == Identify_Enter)
  5. {
  6. //入库,上传http,加入数据库,更新表格,显示价格
  7. onEnterIdentify();
  8. }
  9. else if(flag == Identify_Leave)
  10. {
  11. //出库,上传http,加入数据库,更新表格,显示价格
  12. onLeaveIdentify();
  13. }

上传http,查询数据库计算价格显示

  1. //进行车牌识别
  2. //将图片上传http获取车牌号码
  3. QString carId = carIdentify();
  4. if(carId.isEmpty())
  5. {
  6. return;
  7. }
  8. //进入数据库中,进行比较,获取到该车牌的入库时间
  9. QString sql = QString("select * from user where carId='%1';")
  10. .arg(carId);
  11. //执行sql语句,如果执行成功,返回true
  12. QSqlQuery query;
  13. int ret = query.exec(sql);
  14. if(ret == false)
  15. {
  16. qDebug()<<"select error:"<<query.lastError().text();
  17. }
  18. //如果找到了
  19. QString enterTime;
  20. QString leaveTime;
  21. double money;
  22. while (query.next()) {
  23. //找到了才会进来
  24. enterTime = query.value("enterTime").toString();
  25. leaveTime = query.value("leaveTime").toString();
  26. money = query.value("money").toDouble();
  27. if(leaveTime.isEmpty())
  28. break;
  29. }
  30. //跟出库时间进行相减,得出停车时间,算出停车费用
  31. QDateTime lTime = QDateTime::currentDateTime();
  32. //相差的秒数
  33. int timeLength = QDateTime::fromString(enterTime).secsTo(lTime);
  34. money = timeLength;
  35. //更新数据库 --更新数据
  36. sql = QString("update user set leaveTime='%1',money=%2 where carId='%3';")
  37. .arg(lTime.toString())
  38. .arg(money)
  39. .arg(carId);
  40. //执行sql语句,如果执行成功,返回true
  41. ret = query.exec(sql);
  42. if(ret == false)
  43. {
  44. qDebug()<<"update error:"<<query.lastError().text();
  45. }
  46. //显示
  47. QString text = QString("车牌号为%1 出库,出库时间:%2 停车时间:%3秒 费用:%4")
  48. .arg(carId)
  49. .arg(lTime.toString())
  50. .arg(timeLength)
  51. .arg(money);
  52. ui->textBrowser->append(text);
  53. //更新表格控件
  54. updateTableUi();
  55. //出库的时候从数据库中进行删除
  56. sql = QString("delete from user where carId='%1';")
  57. .arg(carId);
  58. //执行sql语句,如果执行成功,返回true
  59. ret = query.exec(sql);
  60. if(ret == false)
  61. {
  62. qDebug()<<"delete error:"<<query.lastError().text();
  63. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/程序代码艺术家/article/detail/63341
推荐阅读
相关标签
  

闽ICP备14008679号