当前位置: 首页 > 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的通…...

cmake 入门三 常用变量和指令

cmake常用变量 一、cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用。在IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定义变量的方式: 主要有隐式定义和显式定义两种,一…...

Linux基础命令-find搜索文件位置

文章目录 find 命令介绍 语法格式 命令基本参数 参考实例 1)在root/data目录下搜索*.txt的文件名 2)搜索一天以内最后修改时间的文件;并将文件删除 3)搜索777权限的文件 4)搜索一天之前变动的文件复制到test…...

获取浏览器硬件资源的媒体数据(拍照、录音、录频、屏幕共享)

目录一、window.navigator 对象包含有关访问者浏览器的信息取二、MediaDevices1.使用麦克风2.使用摄像头&#xff08;和音频一样&#xff09;3.拍照4.录屏三、MediaRecorder(录制,可录制音频视屏)一、window.navigator 对象包含有关访问者浏览器的信息取 <!DOCTYPE html>…...

Java入门教程||Java 日期时间||Java 正则表达式

Java 日期时间java.util包提供了Date类来封装当前的日期和时间。Date类提供两个构造函数来实例化Date对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数&#xff0c;该参数是从1970年1月1日起的毫秒数。Date(long millisec)Date对象创建…...

详解八大排序算法

文章目录前言排序算法插入排序直接插入排序:希尔排序(缩小增量排序)选择排序直接选择排序堆排序交换排序冒泡排序快速排序hoare版本挖坑法前后指针版本快速排序的非递归快速排序总结归并排序归并排序的非递归实现&#xff1a;计数排序排序算法复杂度及稳定性分析总结前言 本篇…...

python库streamlit学习笔记

什么是streamlit&#xff1f; Streamlit是一个免费的开源框架&#xff0c;用于快速构建和共享漂亮的机器学习和数据科学Web应用程序。它是一个基于Python的库&#xff0c;专为机器学习工程师设计。数据科学家或机器学习工程师不是网络开发人员&#xff0c;他们对花几周时间学习…...

C/C++开发,无可避免的内存管理(篇一)-约束好跳脱的内存

一、养成内存管理好习惯 1.1 养成动态对象创建、调用及释放好习惯 开发者手动接管内存分配时&#xff0c;必须处理这两个任务。分配原始内存时&#xff0c;必须在该内存中构造对象&#xff1b;在释放该内存之前&#xff0c;必须保证适当地撤销这些对象。如果你的项目是c项目&am…...

在React项目中引入字体文件并使用

一、背景 设计稿里某些文字所用的字体&#xff0c;系统默认不支持。 比如设计需要的这个字体&#xff1a;EmerlandRegular&#xff0c;即使在css里将文字字体设置为他们&#xff0c;实际效果也显示不出来。 二、现象及原因 1、样式 2、期待效果 3、实际效果 实际上是因为这个…...

STM32 CubeMX按键点灯

本文代码使用 HAL 库。 文章目录前言一、按键原理图二、CubeMX 创建工程三、代码讲解&#xff1a;1. GPIO的输入HAL库函数&#xff1a;2. 消抖&#xff1a;3. 详细代码四&#xff0c;实验现象&#xff1a;总结前言 我们继续讲解 stm32 f103&#xff0c;这篇文章将详细 为大家讲…...

2023链动2+1模式到底是什么?带你了解核心规则

2023链动21模式到底是什么&#xff1f;带你了解核心规则 2023-02-24 梦龙 大家好&#xff0c;我是你们熟悉而又陌生的好朋友梦龙&#xff0c;一个创业期的年轻人 传统的直销模式产品低价高卖&#xff0c;消费者难以接受。虽然直销省去了传统流通渠道的中间环节&#xff0c;但…...