算法工程师实习总结(7-9)

1. 软件开发

  • 业务要求:制作多任务RTSP视频流播放以及区域画线的界面,并完善界面程序相应的基本功能。
  • 整体思路:由于使用的语言是Python,且该软件制作只是用作后面务中算法调用的工具,并未采用专业的软开制作程序以及界面美化等手段,只需要达到基本的功能即可,恰好在Python中有制作程序界面最好的库:PyQt5, 实现较为简单。为了更好地调整软件界面相关部件的布局,采用了Qt Designer设计了界面相关部件的布局,使用PyUIC将设计好的界面导出为python 基本程序,在此基础上,在界面程序中嵌入实现相应的功能,开发框架见图1.

在这里插入图片描述

图1 多任务RTSP视频流播放以及区域画线程序界面开发框架流程

1.1 多任务RTSP视频流播放与画线UI设计

1.1.1 Pycharm(或VsCode)配置PyQt5及其工具

  环境配置:pyqt5、pyqt5-tools、opencv,为了避免因为环境包之间的冲突,安装包主要在anaconda单独配置的环境中,本文为anaconda下的pytorch环境。若出现版本不一致的问题。建议降低版本再操作,特别是opencv与pyqt5要保持版本匹配,否则在后续RTSP视频流播放嵌入会出现问题。经过测试,在Windows上能够正常运行,在Ubuntu系统上会出现版本匹配不一致,无法播放视频流的问题,需要重新编译opencv才行。

pip install pyqt5
pip install pyqt5-tools
pip install opencv-contrib-python
  1. 进入Pycharm 项目界面,点击”File“,选择”Settings“,弹出设置界面。在设置界面中选择”Tools“ → \rightarrow External Tools“,操作见图2。
    在这里插入图片描述

    图2 操作流程1
  2. Qt Designer配置:点击”+“按钮新建工具,弹出工具配置界面,“Name”一栏填写”Qt Designer“;在”Group“一栏填写”Qt“;”Program“一栏填designe.exe的路径,本文安装在anaconda下pytorch环境里,位置为:E:\anaconda\envs\pytorch\Lib\sitepackages\qt5_applications\Qt\bin\designer.exe”(根据实际情况填写);在”Working directory“一栏填写”$FileDir“。最后点击OK,如图3所示。
    在这里插入图片描述

    图3 操作流程2
  3. PyUIC配置:同样地点击”+“按钮新建工具,弹出工具配置界面;“Name”一栏填写”Qt Designer“,在”Group“一栏填写”Qt“;”Program“一栏填pyuic5.exe的路径,一般在对应环境的”Scripts“目录下,本文路径为”E:\anaconda\envs\pytorch\Scripts\pyuic5.exe“;在”Working directory“一栏填写”$FileDir“。在”Arguments“中填写如下内容,完成填写后,点击“OK”,步骤如图4

$FileName$
-o
$FileNameWithoutExtension.py$

在这里插入图片描述

图4 操作流程3

1.1.2 Qt Designer设计基本布局

  按照业务要求,分两步进行。

  • 主窗口布局设计:将整个窗口主要划分为3部分,具体来说分为菜单栏、主体部分、提交部分。
    菜单栏主要在子窗口进行新增任务,通过新增任务按钮实现;以及实现RTSP视频流画线的保存、撤销、清空、撤销等基本功能;主体部分呈现任务列表、RTSP视频流播放以及参数配置;提交部分在完成任务人进行保存区域画线提交并退出所有操作。其界面如下

在这里插入图片描述

图5 主窗口UI
  • 子窗口布局设计:子窗口主要是用来填写新增任务的信息,包括任务名称以及rtsp视频流地址。其布局见图6。
    在这里插入图片描述
图6 子窗口UI

1.1.3 PyUIC转python代码

  • 主窗口mainWindow.py
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1675, 854)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout_5.setContentsMargins(9, 9, 9, 9)
        self.verticalLayout_5.setSpacing(6)
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setSpacing(6)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.button_a_1 = QtWidgets.QPushButton(self.centralwidget)
        self.button_a_1.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.button_a_1.setObjectName("button_a_1")
        self.horizontalLayout_2.addWidget(self.button_a_1)
        spacerItem = QtWidgets.QSpacerItem(148, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem)
        self.hl_a_1 = QtWidgets.QHBoxLayout()
        self.hl_a_1.setSpacing(6)
        self.hl_a_1.setObjectName("hl_a_1")
        self.button_a_2 = QtWidgets.QPushButton(self.centralwidget)
        self.button_a_2.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.button_a_2.setObjectName("button_a_2")
        self.hl_a_1.addWidget(self.button_a_2)
        self.button_a_3 = QtWidgets.QPushButton(self.centralwidget)
        self.button_a_3.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.button_a_3.setObjectName("button_a_3")
        self.hl_a_1.addWidget(self.button_a_3)
        self.button_a_4 = QtWidgets.QPushButton(self.centralwidget)
        self.button_a_4.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.button_a_4.setObjectName("button_a_4")
        self.hl_a_1.addWidget(self.button_a_4)
        self.button_a_5 = QtWidgets.QPushButton(self.centralwidget)
        self.button_a_5.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.button_a_5.setObjectName("button_a_5")
        self.hl_a_1.addWidget(self.button_a_5)
        self.horizontalLayout_2.addLayout(self.hl_a_1)
        spacerItem1 = QtWidgets.QSpacerItem(298, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem1)
        self.horizontalLayout_2.setStretch(0, 1)
        self.horizontalLayout_2.setStretch(1, 1)
        self.horizontalLayout_2.setStretch(2, 4)
        self.horizontalLayout_2.setStretch(3, 5)
        self.verticalLayout_5.addLayout(self.horizontalLayout_2)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setSpacing(6)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
        self.verticalLayout_3.setSpacing(6)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.label_b_1 = QtWidgets.QLabel(self.centralwidget)
        self.label_b_1.setObjectName("label_b_1")
        self.verticalLayout_3.addWidget(self.label_b_1)
        self.scrollArea_b_1 = QtWidgets.QScrollArea(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.scrollArea_b_1.sizePolicy().hasHeightForWidth())
        self.scrollArea_b_1.setSizePolicy(sizePolicy)
        self.scrollArea_b_1.setWidgetResizable(False)
        self.scrollArea_b_1.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
        self.scrollArea_b_1.setObjectName("scrollArea_b_1")
        self.scrollAreaWidgetContents_b_1 = QtWidgets.QWidget()
        self.scrollAreaWidgetContents_b_1.setGeometry(QtCore.QRect(80, 0, 131, 251))
        self.scrollAreaWidgetContents_b_1.setObjectName("scrollAreaWidgetContents_b_1")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents_b_1)
        self.verticalLayout.setContentsMargins(9, 9, 9, 9)
        self.verticalLayout.setSpacing(6)
        self.verticalLayout.setObjectName("verticalLayout")
        self.button_b_1_1 = QtWidgets.QPushButton(self.scrollAreaWidgetContents_b_1)
        self.button_b_1_1.setEnabled(False)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.button_b_1_1.sizePolicy().hasHeightForWidth())
        self.button_b_1_1.setSizePolicy(sizePolicy)
        self.button_b_1_1.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.button_b_1_1.setObjectName("button_b_1_1")
        self.verticalLayout.addWidget(self.button_b_1_1)
        self.button_b_1_2 = QtWidgets.QPushButton(self.scrollAreaWidgetContents_b_1)
        self.button_b_1_2.setEnabled(False)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.button_b_1_2.sizePolicy().hasHeightForWidth())
        self.button_b_1_2.setSizePolicy(sizePolicy)
        self.button_b_1_2.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.button_b_1_2.setObjectName("button_b_1_2")
        self.verticalLayout.addWidget(self.button_b_1_2)
        self.scrollArea_b_1.setWidget(self.scrollAreaWidgetContents_b_1)
        self.verticalLayout_3.addWidget(self.scrollArea_b_1)
        self.hline_2 = QtWidgets.QFrame(self.centralwidget)
        self.hline_2.setFrameShape(QtWidgets.QFrame.HLine)
        self.hline_2.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.hline_2.setObjectName("hline_2")
        self.verticalLayout_3.addWidget(self.hline_2)
        self.verticalLayout_3.setStretch(0, 1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 第一周:了解公司业务和数据结构 在第一周,我主要了解了公司的业务和数据结构。我研究了公司的网站,了解了公司的目标客户和产品。我还学习了公司的数据结构,包括数据库和数据仓库。 2. 第二周:学习Hadoop技术栈 在第二周,我开始学习Hadoop技术栈,包括HDFS、MapReduce、Hive和Pig。我学习了如何使用这些技术来处理大数据,并使用Cloudera进行了实践。 3. 第三周:了解数据清洗和数据预处理 在第三周,我学习了数据清洗和数据预处理的技术。我学习了如何处理缺失值和异常值,并使用Python和Pandas进行了实践。 4. 第四周:学习数据可视化和报告 在第四周,我学习了数据可视化和报告的技术。我学习了如何使用Tableau和Power BI来创建数据可视化和报告,并使用实例进行了实践。 5. 第五周:学习机器学习算法 在第五周,我开始学习机器学习算法,包括监督学习、非监督学习和深度学习。我学习了如何使用Python和Scikit-Learn来实现这些算法。 6. 第六周:实践机器学习算法 在第六周,我开始使用机器学习算法进行实践。我使用Kaggle数据集来训练和测试机器学习算法,并使用Python和Scikit-Learn进行了实践。 7. 第七周:学习Spark技术栈 在第七周,我开始学习Spark技术栈,包括Spark Core、Spark SQL和Spark Streaming。我学习了如何使用Spark来处理大数据,并使用Databricks进行了实践。 8. 第八周:了解数据挖掘和大数据分析 在第八周,我学习了数据挖掘和大数据分析的技术。我学习了如何使用Python和Scikit-Learn进行数据挖掘,并使用Spark进行了大数据分析。 9. 第九周:实践数据挖掘和大数据分析 在第九周,我使用数据挖掘和大数据分析技术进行实践。我使用Kaggle数据集进行数据挖掘,并使用Spark进行了大数据分析。 10. 第十周:了解数据治理和数据安全 在第十周,我学习了数据治理和数据安全的技术。我学习了如何管理数据和保护数据安全,并使用Apache Ranger进行了实践。 11. 第十一周:学习数据流水线和自动化 在第十一周,我学习了数据流水线和自动化的技术。我学习了如何使用Apache Airflow来创建数据流水线,并使用Python进行了实践。 12. 第十二周:学习数据可视化和故障排除 在第十二周,我学习了数据可视化和故障排除的技术。我学习了如何使用Grafana来创建数据可视化,并使用ELK Stack进行了故障排除。 13. 第十三周:了解云计算和容器化 在第十三周,我学习了云计算和容器化的技术。我学习了如何使用AWS和Docker来进行云计算和容器化,并使用实例进行了实践。 14. 第十四周:学习数据架构和数据模型 在第十四周,我学习了数据架构和数据模型的技术。我学习了如何设计和实现数据架构和数据模型,并使用实例进行了实践。 15. 第十五周:了解数据迁移和数据同步 在第十五周,我学习了数据迁移和数据同步的技术。我学习了如何使用AWS和Apache Kafka来进行数据迁移和数据同步,并使用实例进行了实践。 16. 第十六周:学习数据分析和数据挖掘工具 在第十六周,我学习了数据分析和数据挖掘工具的技术。我学习了如何使用R和Python的数据分析和数据挖掘工具,并使用实例进行了实践。 17. 第十七周:了解大数据存储和数据治理工具 在第十七周,我学习了大数据存储和数据治理工具的技术。我学习了如何使用Hadoop和Apache Atlas来进行大数据存储和数据治理,并使用实例进行了实践。 18. 第十八周:学习数据科学和人工智能 在第十八周,我学习了数据科学和人工智能的技术。我学习了如何使用Python和TensorFlow来进行数据科学和人工智能,并使用实例进行了实践。 19. 第十九周:了解数据安全和数据监控 在第十九周,我学习了数据安全和数据监控的技术。我学习了如何保护数据安全和监控数据,并使用实例进行了实践。 20. 第二十周:总结和展示项目成果 在最后一周,我对整个实习进行了总结,并展示了我的项目成果。我分享了我的学习和实践经验,并回答了问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值