【PyQt5 实战项目1】武汉大学建筑知识系统--思路分享1(总体概述)

目录

  • 1. 简述
  • 2. 总体思路
  • 3. 分工合作
  • 4. 难点
  • 5. 重点
  • 6. 感谢
  • 7. 源代码

1. 简述

上学期由于课程结课作业需要(开发GUI),经过不断搜索最终确定使用 PyQT5 来开发 UI 界面,并使用 Python 来实现整个项目。这时肯定有人会说为什么不用 C++Qt 呢?确实,使用这些底层语言写的软件运行速度快、安装包也小,不过基于时间限制,只能用1个月的时间来熟悉语言以及框架并开发好整个项目,基于学习成本,最终采用 PyQt5。这也是我首次开发这样的软件,现在回想起来,当时写的代码也是有很多地方可以优化的,在最近开发的一款背词软件——“森林背词”就采用了更多的功能,这也是基于后期不断的学习和对 PyQt5 的更深的了解所做到的,在这里给初次使用 PyQt5 的同学讲讲我当时的一个开发思路,希望能帮助你们更快的入门。由于目前没有那么多时间写博客,所以我会把这个项目分成多个块来分享。

2. 总体思路

对于要开发这样一款软件,首先我当时想的是如下3点:

  1. 收集数据集
    作为这样一款介绍性+识别性的软件,首先我们就要数据集——学校建筑的照片,由于后期我们考虑到会用神经网络来实现图片预测,所以我们的数据集就不能少,同时考虑到学校建筑多,只能挑选经典的 35 栋建筑。这样也使得我们的照片收集工作大,根据计算,我们需要每栋建筑收集最少 5000 张照片,可想而知,这种工作量是非常大的,于是我的队友们想到通过以拍视频的方式来抽帧取到不同角度的图片,这样就能减少很大的工作量了。
  2. 构建模型
    面对这样一个项目,相信很多同学第一时间想到的就是搞神经网络,搞大模型,但是我当时不那么认为。确实,神经网络是一个很傻但又很方便的方法,同时结果可能也是表现不错的,但是因为其不可解释性,我提出我们要分2派来搭建模型:(1)传统模型派,利用传统机器学习的模型,其实也有机会做的很好,那么队友选的是 SIFT+BOW+SVM(2)神经网络派,确实大家都喜欢做神经网络,所以选的模型有 CNNEfficientNetDenseNet
    注:此处不会介绍上述提到的模型,后面只会对软件的设计做出分享。对模型有兴趣的同学可以自行搜索了解,这里希望同学们能自行搭建一个新模型来试试看(引用大佬们设计的模型对于结课作业来说其实是扣分项)。
  3. 软件搭建
    初步完善相关逻辑代码(用户上传图片进行识别预测,建筑简介,导航等功能),与界面UI设计同步进行,收集每类建筑的简介,历史来源,用途,地址以及导航网址,并接入训练好的模型进行预测(此时需要考虑接入模型以及预测出来返回结果的时间,若时间过长需要进行多线程,否则单线程会造成系统卡顿,甚至出现宕机情况)。

3. 分工合作

将整个大框架搭建好之后,就要发挥好团队协作的优势,各司其职,首先就是要收集部分数据集,以此来验证我们选取的模型预测效果(此处用到的验证集为视频抽帧的部分图片【未参与训练的】和自行拍摄的照片,,目的是检验视频抽帧的图片和用户自行拍摄的图片会不会有区别,模型是否真正的学到了要学的东西,是否有泛化能力)。

由于校内存在某些建筑的不同面差异较大,如若单纯将建筑名作为一类进行拍摄,后续模型分类效果可能较差,故本小组选择将建筑名加上方位名(如湖滨食堂北)作为一个类进行视频拍摄,并对每一个类进行多方位(拍摄距离远近),多角度(拍摄角度、横屏竖屏拍摄)的视频拍摄。

为尽可能在数据集层面减少类别不平衡的影响(原因有些建筑相对于其他建筑占地面积小,能拍摄的不重复画面有限),本小组将大部分类的视频总拍摄时长限制在1min以上,1min30秒以下。最后选择以 20 帧为抽帧间隔,利用opencv库将拍摄的视频每隔20帧抽取一张图像作为数据集,最终获得包含 81 个类( 35 栋建筑),8964 张图片的数据集。

4. 难点

  1. 难点一
    数据采集方面,武汉大学拥有众多风格迥异的建筑,若全部拍摄则费时费力且游客不一定会注意到,所以需要有条件地选取一些更具有特点或者更常到的建筑作为本建筑知识系统的重点建筑。
  2. 难点二
    对于当今做图像识别领域比较常用的神经网络模型,训练集需要大量的样本作为支撑,但人工拍摄上百张不同视角的照片较难达成,所以需要找到一个更加高效的获取建筑数据集的方法。

5. 重点

  1. 重点一
    模式识别领域有众多模型,选择最适合我们的要求的模型并且调整好合适的参数是本次作业最需要时间并且最重要的部分。
  2. 重点二
    武大植被繁茂,拍摄的照片难免有树木遮挡建筑主体,训练模型时应注意避免主次颠倒,因此数据集的预处理也是各模型需要考虑的重点。
  3. 重点三
    GUI设计要着重考虑用户体验,同时让界面简洁易懂,方便用户操作,外接导航界面也要帮助用户找到离目的地最近的路线。

6. 感谢

感谢指导老师邓娟教授给我们提供了模型训练的平台(华为云的 ModelArts)经费,以及指导我们优化软件界面,给用户更强的体验感。感谢我的队员们:陈天翼、黄祎雯、陈炅封、钟欣睿、周奕圆、徐恬瑞!

7. 源代码

后面我会分块讲解界面搭建思路以及如何用 designer 搭建界面,以及如何优化界面(现在重新回来看自己的代码,感觉写的太冗余了,有很多地方可以用更好的控件以及方法替代,后续会一一分享,当然可能后续说到的优化方法还有更好的方法去解决,也希望有好想法的大佬在评论区提出来,供大家一起学习进步)。

最后项目代码已开源,传送门:武汉大学建筑知识系统源代码

下一篇文章传送门:【PyQt5 实战项目1】武汉大学建筑知识系统–思路分享2(软件版本1.0.0介绍之打开图片)

你可能感兴趣的:(PyQt5,pyqt,用户界面,python)