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

关于我利用python开发的PC端标注软件及目标检测软件

如何利用python快速开发PC端目标检测及数据标注软件

  • 概述
  • 开发软件背景
  • 开发第一步:功能需求分析
  • 开发第二步: 前端分区设计
  • 开发第三步:功能开发
  • 开发第四步:程序功能的打包与检查
  • 开发第五步:程序的反馈与改善
  • 一个例子的展示


PS:本文仅供学习,未经同意请勿转载。本文仍待更新(开发及部分可开源代码后期会有分享~),对应的软件已授权对应的软著

😝 未完待续…
注:下面三个的软件均为本人在本科时期从头至尾手敲代码,借助任何源码进行魔改,独立开发完成,平均一个软件开发周期为1周(不包括项目后期变动的要求改动时间的话)

概述

先简单概括一下本科阶段开发的标注软件及目标检测软件主要有三个:
(1)手部关键点标注软件: 可以对手部关键节点进行标注(labelme有的功能基本上都有,附带左右手节点顺序标注时错误的用户提示及数据归一化处理等操作)
(2)耳朵关键点标注软件:可以对耳朵进行关键节点的标注(labelme有的功能基本上都有,附带辅助线标注及节点相对位置错误提示)
(3)细胞病理检测分析软件: 可以对细胞进行检测识别,并根据检测结果自动化生成病理报告(同样,labelme有的功能基本上都有,引入自己训练的模型进行自动检测,后期只需人工手动调整

开发软件背景

目前现有的labelme软件和labelImg开源软件无法满足特殊数据集的标注要求,而且没有标注顺序的报错提示。当然我设计的软件就会不具有适用性了(毕竟上面开发的软件可以明显看出来我做的基本上是项目驱动的😂)。在实际使用中,会发现,labelme软件在导入文件时的效率中的很低下,特别时标记后的json文件,当然也可以通过代码来实现,这个很多博客上面都有,这里就不赘述了。

  • 使用的框架:PyQt5

开发第一步:功能需求分析

分析开发的软件需要哪些功能:
(1)罗列基本功能:可以对标某些同品类的产品,快速得到软件开发本身需要的基本功能。这些基本功能一般都是需要的,不然为什么要自己开发,直接使用该对标软件不就好了?
(2)思考特色功能:根据项目本身特色,添加新功能,这些新功能也是软件本身区分别的软件的点,也就是改善对标软件的局限性
(3)思考多种可能的操作错误:在功能需求分析的同时,需要思考该功能可能存在哪些操作错误导致程序的报错
(4)功能分区:将上述的功能分类,有利于后期的前端的界面开发
(5)功能分级:功能分类后,对每一类的功能进行分级,优先开发底层及首要的功能

开发第二步: 前端分区设计

前端是利用PyQt5来构建的,直接根据前面的功能分区安排合理的位置,并选择合适的模块(比如该功能是适合Tab选卡还是按键模块)
上面三个软件我都是用Qt designer来设计前端界面,生成对应的前端结构代码,这样子的快速的节省时间,并且比较清晰的了解自己软件开发的布局。
至于怎么在pycharm或者vscode中安装Qt designer,可以自己搜索一下,网上的资源很多。这里我先不讲了。以后有时间再做分享吧。

开发第三步:功能开发

在前端设计之后,就直接利用pyQt5进行事件触发的编程(用python编程就是比较爽,哈哈哈哈)。后面再介绍一下我编程的主要流程。因为三个软件开发时间相对久远,等后面再整理介绍吧。先来看看其中一个软件的界面及对应的功能吧。请移步至最后一步中查阅。

开发第四步:程序功能的打包与检查

最后利用pyinstaller将开发的软件打包成为.exe。打包程可执行程序后,自己先使用一下,看看是否存在没有考虑的操作失误问题。

开发第五步:程序的反馈与改善

然后交付给其他人进行使用。(毕竟自己的软件开发自己比较熟悉,一般操作不会失误,所以得让别人用一下,才知道有哪些需要改善得地方。

一个例子的展示

这里只展示可公开项目的例子。也就是第三个软件。下面是软件运行的主界面。
在这里插入图片描述它的功能包括:

  • 自动检索划分功能
    可自动检索所选择目录下所有满足软件检测格式的图像,并以一个子目录为一个主体文件的方式加载显示。

  • 自动检测标注功能

在这里插入图片描述

  • 手动标注修改功能
    提供手动标注的功能,在模型漏检、误检的情况下,提供手动的修改可保证模型报告的准确性。在开启该功能之后:左键单击可添加对应的边界框,并选择对应的标签;右键单击对应边界框可修改标签或删除;右键单击滑动(非边界框)区域可实现该区域的放大;左键双击可修改对应边界框。
    在这里插入图片描述

  • 多模态自适应功能

  • 遍历图像/主体(子目录)功能

  • 缩放显示功能

  • 表单自动更新功能
    会自动更新检测的统计结果

  • 标签显示/隐藏功能

  • 文件描述备注功能
    提供为当前图像添加备注描述,该备注描述会再模型报告中加以显示

  • 选择示例图功能
    由于我做的是医学图像,所以通常需要在报告中显示对应的图片及检测结果的分析描述。

  • 自动填补示例图功能
    在没有手动选择的情况下,我设计的软件会根据检测的结果进行统计分析,选择比较典型的图像作为示例图展示在报告中。

  • 自动填补基本信息功能
    可利用文件名来生成基本信息的填补

  • 报告自动生成导出功能
    在这里插入图片描述

  • 检测结果统计图像导出功能

  • 获取帮助功能
    获取帮助文档,即为本软件使用说明书。

  • 标签数据导出功能
    导出所有图像的标注及标签数据

  • 标签格式设置功能

还有其他功能,就不一一赘述了。

相关文章:

关于我利用python开发的PC端标注软件及目标检测软件

如何利用python快速开发PC端目标检测及数据标注软件概述开发软件背景开发第一步:功能需求分析开发第二步: 前端分区设计开发第三步:功能开发开发第四步:程序功能的打包与检查开发第五步:程序的反馈与改善一个例子的展示…...

Git导出增量包的操作步骤

前言在项目开发部署中,通常是将一个Git项目全量打包发布,但有的场景只需要导出有变更的那部分文件,增量发布,此时就需要使用Git导出增量包了。一、查看提交记录拿到提交ID码①例如使用的gitlab使用方法参考下图(一目了然) 【推荐】…...

JavaWeb--JavaScript

JavaScript1 JavaScript简介2 JavaScript引入方式2.1 内部脚本2.2 外部脚本3 JavaScript基础语法3.1 书写语法3.2 输出语句3.3 变量3.4 数据类型3.5 运算符3.5.1 \\ 和 区别3.5.2 类型转换3.6 流程控制语句3.6.1 if 语句3.6.2 switch 语句3.6.3 for 循环语句3.6.4 while 循环语…...

mars3d加载建筑物白膜及简单建筑物样式

首先需要拥有shp格式的数据。可以通过水经微图下载,注意此软件是付费的将shp格式的数据处理为切片数据,可以使用cesiumlab处理完成得到json数据就可以在mars3d中加载了 function init() { // 判断webgl支持 if (!mars3d.Util.webglreport()) { …...

数据结构之顺序表

本章重点: 1.线性表 2.顺序表 3.链表 4.顺序表和链表的区别和联系 目录 1.线性表 2.顺序表 2.1概念及结构 2.2接口实现 2.2.1 SeqList.h 2.2.2 SeqList.c 2.3数组相关面试题 2.3.1移除元素 2.3.2删除有序数组中的重复项 ​编辑 2.3.3合并两个有序数组…...

【数据挖掘实战】——家用电器用户行为分析及事件识别

项目地址:Datamining_project: 数据挖掘实战项目代码 目录 一、背景和挖掘目标 1、问题背景 2、原始数据 3、挖掘目标 二、分析方法与过程 1、初步分析 2、总体流程 第一步:数据抽取 第二步:探索分析 第三步:数据的预处…...

肠道核心菌属——双歧杆菌属,了解并拥有它

双歧杆菌 双歧杆菌属(Bifidobacterium)是放线菌门严格厌氧的革兰氏阳性多形性杆状细菌。末端常常分叉,故名双歧杆菌。是人和动物肠道的重要核心菌群和有益生理菌群,也是母乳喂养婴儿中发现的第二大菌。 肥胖、糖尿病和过敏等各种疾…...

Python 之 Pandas 生成时间戳范围、Pandas 的时期函数 Period() 和时间序列 - 重采样 resample

文章目录一、生成时间戳范围1. 指定值2. 指定开始日期并设置期间数3. 频率 freq4. closed二、Pandas 的时期函数 Period()三、时间序列 - 重采样 resample在开始之前,我们先导入 numpy 和 pandas 库,同时导入 python 内置的模块。 import pandas as pd​…...

利用Python和Sprak求曲线与X轴上方的面积

有n组标本(1, 2, 3, 4), 每组由m个( , , ...)元素( , )组成(m值不定), . 各组样本的分布 曲线如下图所示. 通过程序近似实现各曲线与oc, cd直线围成的⾯积. 思路 可以将图像分成若干个梯形,每个梯形的底边长为(Xn1 - Xn-1),面积为矩形的一半&#xff0c…...

利用机器学习(mediapipe),进行人手的21个3D手关节坐标检测

感知手的形状和动作的能力可能是在各种技术领域和平台上改善用户体验的重要组成部分。例如,它可以构成手语理解和手势控制的基础,并且还可以在增强现实中将数字内容和信息覆盖在物理世界之上。虽然自然而然地出现在人们手中,但是强大的实时手感知力无疑是一项具有挑战性的计…...

【添砖java】谁说编程第一步是hello world

编程第一步明明是下载编译器和配置环境(小声逼逼)。 Windows下的java环境安装: java的安装包分为两类,一类是JRE(Java Runtime Environmental),是一个独立的java运行环境;一类是JDK…...

el-table大数据量渲染卡顿问题

1、场景描述 在项目开发中,遇到在表格中一次性加载完的需求,且加载数量不少,有几百几千条,并且每条都可能有自己的下拉框,输入框来做编辑功能,此时普通的el-table肯定会导致浏览器卡死,那么怎么…...

MyBatis-Plus 实现分页的几种写法

简介MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。快速开始添加依赖全新的 MyBatis-Plus 3.0 版本基于 JDK8&#xff…...

记一次Binder内存不足导致的应用被杀

每个进程的可用Binder内存大小是 1M-8KB 也就是900多KB 事情的起因的QA压测过程发生进程号变更,怀疑APP被杀掉过,于是开始看日志(实际后来模拟的时候可以发现app确实被杀掉了) APP的压测平台会上报进程号变更时间点,发…...

Zabbix4.0架构理解-zabbix的工作方式

目录 1.1、zabbix4.0架构图 1.2、zabbix的进程 1、 zabbix server 2、zabbix agent 3、 zabbix proxy 4、 java gateway 5、zabbix get 1.3、zabbix的几种工作方式 1、通过zabbix agent 2、通过zabbix proxy 3、通过 zabbix java gateway 4、其他 1.3、zabbix 数据走…...

MySQL中的一些非常实用的函数、语法

前言我最近几年用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。1.group_concat在我们平常的工作中,使用group by进行分组的场景,是非常多的。比如想统计出用户表中&#x…...

RT-Thread移植到STM32F407

文章目录第一步:获取RT-Thread源码第二步:项目结构介绍第三步:拷贝示例代码到裸机工程第四步:删除无用文件第五步:修改工程目录结构第六步:添加工程文件路径第七步:编译第八步:修改配…...

VR全景到底有多全能?为何屡受关注?

告别两年的“冰封”时期,现在疫情放开已经有一段时间了,各个行业的市场和经济已经逐步回暖,但是疫情对广大群众造成的心理阴影还是迟迟未有退散。就拿去电影院看电影来说,以前看电影是看心情,现在看电影则是看环境&…...

剑指 Offer 30. 包含min函数的栈

摘要 剑指 Offer 30. 包含min函数的栈 一、栈解析 package Stock;import java.util.Stack;/*** Classname JZ30min函数栈* Description TODO* Date 2023/2/24 18:59* Created by xjl*/ public class JZ30min函数栈 {/*** description 最小栈的含义是每次从栈中获取的数据都是…...

stm32f407探索者开发板(二十二)——通用定时器基本原理讲解

文章目录一、三种定时器的区别二、通用定时器特点2.1 功能特点描述2.2 计数器模式三、通用定时器工作过程四、附一、三种定时器的区别 STM32F40x系列总共最多有14个定时器 三种(4)STM32定时器区别 二、通用定时器特点 2.1 功能特点描述 STM3 F4的通…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...