yolov7:https://github.com/WongKinYiu/yolov7
人脸口罩数据集:链接:https://pan.baidu.com/s/1bnxJPnoRNwUfVzLxKjIvkQ?pwd=c0yc
300轮训练趋于稳定:
276/299 34.3G 0.0257 0.007348 0.00204 0.03509 1466 416 0.9493 0.8662 0.9207 0.6118 0.06233 0.01659 0.0317 277/299 34.3G 0.02548 0.007208 0.002046 0.03473 1397 416 0.9512 0.8673 0.9206 0.6138 0.06227 0.0166 0.03165 278/299 34.3G 0.02532 0.007306 0.001777 0.0344 1487 416 0.9605 0.8608 0.9207 0.6124 0.06215 0.01658 0.03148 279/299 34.3G 0.02536 0.007267 0.00177 0.0344 1447 416 0.9605 0.8605 0.921 0.6127 0.06217 0.01652 0.03169 280/299 34.3G 0.02569 0.007402 0.001857 0.03495 1581 416 0.9475 0.8719 0.9223 0.6111 0.06234 0.01662 0.03161 281/299 34.3G 0.02528 0.007174 0.001653 0.03411 1525 416 0.9539 0.8662 0.9215 0.6138 0.06228 0.01673 0.03155 282/299 34.3G 0.02548 0.007163 0.001838 0.03448 1497 416 0.9445 0.8734 0.922 0.6131 0.06231 0.01659 0.032 283/299 34.3G 0.02502 0.00728 0.001912 0.03421 1581 416 0.9623 0.8628 0.9217 0.6129 0.06229 0.01658 0.03189 284/299 34.3G 0.0256 0.00737 0.001769 0.03474 1443 416 0.953 0.87 0.9205 0.6125 0.0622 0.01653 0.03176 285/299 34.3G 0.02513 0.00714 0.001742 0.03401 1407 416 0.9554 0.8657 0.9196 0.6116 0.0622 0.01652 0.03188 286/299 34.3G 0.02545 0.007449 0.001775 0.03468 1489 416 0.96 0.8633 0.9201 0.6109 0.0622 0.01662 0.03191 287/299 34.3G 0.02528 0.007087 0.00196 0.03433 1576 416 0.9434 0.8748 0.9204 0.6096 0.06215 0.0166 0.03185 288/299 34.3G 0.02556 0.007509 0.00175 0.03481 1435 416 0.944 0.8723 0.9187 0.6102 0.06218 0.01653 0.0319 289/299 34.3G 0.02504 0.007301 0.001822 0.03416 1432 416 0.9412 0.8713 0.9192 0.6112 0.06223 0.0165 0.03185 290/299 34.3G 0.0254 0.007088 0.001781 0.03427 1531 416 0.9587 0.86 0.9185 0.611 0.06227 0.01651 0.03189 291/299 34.3G 0.02507 0.007189 0.001821 0.03408 1431 416 0.9585 0.8635 0.9199 0.612 0.06223 0.01658 0.03172 292/299 34.3G 0.02508 0.00739 0.001682 0.03415 1519 416 0.9615 0.8644 0.92 0.6137 0.06216 0.01661 0.03165 293/299 34.3G 0.02538 0.00718 0.001836 0.03439 1348 416 0.9599 0.8617 0.9186 0.6131 0.06213 0.01657 0.03178 294/299 34.3G 0.02553 0.007235 0.002009 0.03477 1330 416 0.95 0.8668 0.9186 0.6109 0.06213 0.01662 0.03183 295/299 34.3G 0.02568 0.007386 0.00182 0.03489 1599 416 0.9563 0.8642 0.9201 0.6123 0.06213 0.01664 0.03188 296/299 34.3G 0.02541 0.007049 0.001726 0.03419 1528 416 0.9507 0.8662 0.9194 0.6127 0.06217 0.01665 0.03198 297/299 34.3G 0.0251 0.007234 0.001805 0.03414 1395 416 0.9429 0.8727 0.919 0.6114 0.06224 0.01664 0.03192 298/299 34.3G 0.02508 0.006955 0.001866 0.0339 1465 416 0.9458 0.8713 0.9197 0.6121 0.06223 0.01662 0.03193 299/299 34.3G 0.02551 0.007269 0.001724 0.0345 1555 416 0.9528 0.8664 0.9199 0.6123 0.0622 0.01658 0.03203
准确率曲线:
召回率曲线:
Qt界面:
播放过程中,没戴口罩的人脸红色框,戴口罩的白色框。
sqlite数据库,可以查看报警信息,右键可以删除某条记录。
sqllite用着很便利,无需安装数据库服务。
qt中从主窗口跳转到别的窗口再回来的方法:
要在DatabaseViewer页面退出后返回到主页面,你需要进行以下操作:
1、在MainWindow类中,创建一个方法来显示DatabaseViewer页面。在这个方法中,实例化DatabaseViewer类,并将其显示为一个对话框或窗口。
pythonfrom PyQt5.QtWidgets import QDialog
class MainWindow(QWidget):
# ...
def show_database_viewer(self):
# 调用并显示DatabaseViewer页面
self.database_viewer = DatabaseViewer()
self.database_viewer.show()
2、在主页面的初始化方法中,连接history_btn按钮的点击事件到
pythondef __init__(self):
super().__init__()
# ...
self.history_btn.clicked.connect(self.show_database_viewer)
# ...
3、在DatabaseViewer类中,添加一个属性来保存主页面的引用。
pythonclass DatabaseViewer(QMainWindow):
def __init__(self, main_window):
super().__init__()
self.main_window = main_window
# ...
4、在主页面的show_database_viewer方法中,将主页面的引用传递给DatabaseViewer类的实例。
pythondef show_database_viewer(self):
# 调用并显示DatabaseViewer页面
self.database_viewer = DatabaseViewer(self)
self.database_viewer.show()
5、在DatabaseViewer类中,重写关闭事件的方法closeEvent。在关闭事件中,调用父类的关闭事件方法,并显示主页面。
pythonclass DatabaseViewer(QMainWindow):
# ...
def closeEvent(self, event):
# 调用父类的关闭事件方法
super().closeEvent(event)
# 显示主页面
self.main_window.show()
这样,当你在主页面点击"查看记录"按钮时,会调用show_database_viewer方法,显示DatabaseViewer页面。当你在DatabaseViewer页面关闭窗口时,会触发关闭事件,显示主页面。这样就可以在两个页面之间进行切换了。
以下是参考:
pythonimport os
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView, QMenu, QAction, QMessageBox, QDesktopWidget, \
QHeaderView
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QStandardItemModel, QStandardItem
import sqlite3
class DatabaseViewer(QMainWindow):
def __init__(self, main_window):
super().__init__()
self.main_window = main_window
# 设置主窗口的大小为屏幕宽高的一半
screen_geometry = QDesktopWidget().screenGeometry()
width = screen_geometry.width() // 2
height = screen_geometry.height() // 2
self.resize(width, height)
# 连接到数据库文件
self.conn = sqlite3.connect('database.db')
self.cursor = self.conn.cursor()
self.table_view = QTableView(self)
self.setCentralWidget(self.table_view)
# 创建数据模型
self.model = QStandardItemModel()
self.model.setColumnCount(3)
self.model.setHorizontalHeaderLabels(['ID', '时间戳', '图片路径'])
self.table_view.setModel(self.model)
# 设置表格属性
self.table_view.setEditTriggers(QTableView.NoEditTriggers)
self.table_view.setSelectionBehavior(QTableView.SelectRows)
self.table_view.setSelectionMode(QTableView.SingleSelection)
self.table_view.setContextMenuPolicy(Qt.CustomContextMenu)
self.table_view.customContextMenuRequested.connect(self.show_context_menu)
# 设置最后一列填充剩余空间
self.table_view.horizontalHeader().setStretchLastSection(True)
# 设置第二列宽度为自定义宽度
self.table_view.horizontalHeader().setSectionResizeMode(1, QHeaderView.ResizeToContents)
# 查询数据并显示
self.query_data()
def query_data(self):
# 查询数据
self.cursor.execute("SELECT * FROM warning_table")
rows = self.cursor.fetchall()
# 清空数据模型
self.model.removeRows(0, self.model.rowCount())
# 添加数据到数据模型
for row_data in rows:
row = [QStandardItem(str(data)) for data in row_data]
self.model.appendRow(row)
def show_context_menu(self, position):
# 右键菜单
menu = QMenu(self.table_view)
delete_action = QAction("删除", self.table_view)
delete_action.triggered.connect(self.delete_row)
menu.addAction(delete_action)
# 显示右键菜单
menu.exec_(self.table_view.viewport().mapToGlobal(position))
def delete_row(self):
# 获取选中的行
selected_row = self.table_view.selectedIndexes()
if selected_row:
row = selected_row[0].row()
item_id = self.model.item(row, 0)
id_value = int(item_id.text())
# 拿出数据库里的此id的一行数据,有id、时间戳、图片路径,删除图片路径
self.cursor.execute("SELECT * FROM warning_table WHERE id = ?", (id_value,))
rows = self.cursor.fetchall()
for row_data in rows:
os.remove(row_data[2])
# 删除数据
self.cursor.execute("DELETE FROM warning_table WHERE id = ?", (id_value,))
self.conn.commit()
# 从数据模型中移除该行
self.model.removeRow(row)
QMessageBox.information(self, "提示", "删除成功")
else:
QMessageBox.warning(self, "警告", "请先选择要删除的行")
def closeEvent(self, event):
# 调用父类的关闭事件方法
super().closeEvent(event)
# 显示主页面
self.main_window.show()
采用416*416的一个输入,使得对小脸检测效果不是很好。训练数据也是重点,肯定是需求更多的训练数据让模型更加稳定。
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!