当前位置: 首页 > article >正文

数据集标注txt文件读取小工具

        最近在看遥感图像目标检测相关的yolo10,自己在网上下载了数据集跑模型,但是跑出来的结果与数据集出处的论文介绍分类有些不同,只出现了分类0的情况,怀疑是标注有问题,但是数据集太大,于是做了个小工具对标注生成的txt文件进行分析。

        使用的是QTCreator,核心就是读取目录下所有的txt文件读取每个txt文件每行的第一个数字,并且最后统计结果。

        运行结果

              a1bbb40fe9f04a3f9ecd554c786e69f2.png

         功能基本实现,发现确实标注都是0,哭死,希望有做计算机视觉的大佬可以帮助。

 小工具源码

        mianwindow.ui

        ad09596aaf814527a173fa3526f609b1.png

        mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QDropEvent>
#include <QMAp>
#include <QMainWindow>
#include <QMimeData>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void readAllTextFilesInDirectory(const QString &directoryPath);
protected:
    void  dragEnterEvent(QDragEnterEvent *event) override;
    void  dropEvent(QDropEvent * event) override;
private slots:
    void on_toolButton_clicked();

    void on_pushButton_clicked();
signals:
    void progressUpdated(int progress);
    void processingFinished();

private:
    Ui::MainWindow *ui;

    QString txtPath;
    QMap<int , int> numberCounts;

};
#endif // MAINWINDOW_H

         mainwindow.c

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDir>
#include <QFileInfoList>
#include <QTextStream>
#include <QDebug>
#include <QFileDialog>



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 启用拖放支持
    setAcceptDrops(true);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::readAllTextFilesInDirectory(const QString &directoryPath)
{
    QDir dir(directoryPath);

       // 设置过滤器,只选择 .txt 文件
       QStringList filters;
       filters << "*.txt";
       dir.setNameFilters(filters);

       // 获取目录下的所有 .txt 文件
       QFileInfoList fileList = dir.entryInfoList();

       int totalFiles = fileList.size();
       int progessdFiles = 0;

       foreach (const QFileInfo &fileInfo, fileList) {
           if (fileInfo.isFile()) {
               QFile file(fileInfo.absoluteFilePath());

               if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
                   QTextStream in(&file);
                   QString fileContent = in.readAll();
                   file.close();

                   // 输出文件内容
                   qDebug() << "File:" << fileInfo.fileName();
                   qDebug() << "Content:" << fileContent;
                   ui->textBrowser->append("File:" + fileInfo.fileName());
                   ui->textBrowser->append("Content:" + fileContent);
                   ui->textBrowser->append("");

                   // 读取每个行的第一个数字
                   QStringList lines = fileContent.split('\n');
                   foreach (const QString &line, lines)
                   {
                       if (!line.isEmpty())
                       {
                        QString firstWord = line.trimmed().split(' ').first();
                        bool ok;
                        int number = firstWord.toInt(&ok);
                        if (ok)
                        {
                           // 记录数字的出现次数
                           if (numberCounts.contains(number))
                           {
                                numberCounts[number]++;
                           }
                           else
                            {
                                numberCounts[number] = 1;
                            }
                          }
                         }
                     }


                   progessdFiles++;
                   int progess = (progessdFiles * 100) / totalFiles;
                   ui->progressBar->setValue(progess);
               } else {
                   qDebug() << "Failed to open file:" << fileInfo.fileName();
               }
           }
       }

       // 所有文件解析完成后,将进度条设置为 100%
          if (progessdFiles == totalFiles) {
              ui->progressBar->setValue(100);

              // 输出数字及其出现次数
              qDebug() << "Number counts:";
              for (auto it = numberCounts.begin(); it != numberCounts.end(); ++it) {
                  qDebug() << it.key() << ":" << it.value();
                  ui->textBrowser->append(QString::number(it.key()) + " : " + QString::number(it.value()));
              }
          }

}

void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
    // 检查拖放的数据是否包含文件路径
       if (event->mimeData()->hasUrls()) {
           // 只接受 .txt 文件
           QList<QUrl> urls = event->mimeData()->urls();
           if (!urls.isEmpty() && urls.first().toString().endsWith(".txt")) {
               event->acceptProposedAction();
           }
       }
}

void MainWindow::dropEvent(QDropEvent *event)
{
    // 获取拖放的文件路径
       QList<QUrl> urls = event->mimeData()->urls();
       if (!urls.isEmpty()) {
           QString filePath = urls.first().toLocalFile();

           // 检查文件路径是否为 .txt 文件
           if (filePath.endsWith(".txt")) {
               // 将文件路径显示在 QLineEdit 中
               ui->lineEdit->setText(filePath);

               // 记录文件路径
               txtPath = filePath;


           }
       }
}



void MainWindow::on_toolButton_clicked()
{
    // 使用 QFileDialog 选择单个 .txt 文件
        QString filePath = QFileDialog::getOpenFileName(this, tr("Open File"), "/home", tr("Text Files (*.txt)"));

        if (!filePath.isEmpty()) {
            // 将文件路径显示在 QLabel 中
            ui->lineEdit->setText(filePath);
        }

        txtPath = filePath;
}

void MainWindow::on_pushButton_clicked()
{
    numberCounts.clear();
    ui->textBrowser->clear();
    readAllTextFilesInDirectory(QFileInfo(txtPath).path());
}

 

 


http://www.kler.cn/a/392333.html

相关文章:

  • OpenGL ES 共享上下文实现多线程渲染
  • 基于混合配准策略的多模态医学图像配准方法研究
  • Unity3D学习FPS游戏(12)敌人检测和攻击玩家
  • 【C++】new操作符的使用说明
  • ArcGIS Pro属性表乱码与字段名3个汉字解决方案大总结
  • FreeRTOS学习13——任务相关API函数
  • # 如何查看 Ubuntu 版本?
  • Java | Leetcode Java题解之第559题N叉树的最大深度
  • 漏洞分析 | Spring Framework路径遍历漏洞(CVE-2024-38816)
  • 小波神经网络:结合小波变换与神经网络的力量(附Pytorch代码实现)
  • 详细介绍MySQL、Mongo、Redis等数据库的索引
  • Prometheus常用查询PromQL表达式
  • 国家网络安全法律法规
  • mqtt学习笔记(一)
  • 汽车共享管理:SpringBoot技术的应用与挑战
  • 操作系统离散存储练习题
  • C#核心(9)静态类和静态构造函数
  • 机器学习——朴素贝叶斯
  • C++ QT 工具日志异步分批保存
  • 英伟达Isaac Manipulator产品体验
  • 【Vue3】知识汇总,附详细定义和源码详解,后续出微信小程序项目(3)
  • Error response from daemon:
  • OCRSpace申请free api流程
  • Power bi中的lookupvalue函数
  • Oracle In子句
  • 每日OJ题_牛客_春游_贪心+数学_C++_Java