关于我利用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),面积为矩形的一半,…...

利用机器学习(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ÿ…...

记一次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的通…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...