PyQt5实现简单数据标注工具


Posted in Python onMarch 18, 2019

本文实例为大家分享了PyQt5实现简单数据标注工具的具体代码,分类用,供大家参考,具体内容如下

PyQt5实现简单数据标注工具

第一个最大的图片是当前要标注的类别,接下来的两个图片是对接下来会出现的图片的预览(方便连续点好几个)。分类之后的会保存到和按钮名字一样的文件夹里面,如果文件夹不存在就会自动新建一个(makedirs)。如果中断了标注,可以修改代码中的self.idx属性,从某个位置开始。

视频效果:地址链接

接下来是代码:

from PyQt5.QtWidgets import QApplication,QPushButton,QLabel,QMainWindow
from PyQt5.QtGui import QFont,QPixmap
import sys,os
import shutil
 
def copyfile(srcfile, dstfile):#用来复制文件,源文件会保留
 
  if not os.path.isfile(srcfile):
    print("%s not exist!" % srcfile)
  else:
    f_path, f_name = os.path.split(dstfile) # 分离文件名和路径
    if not os.path.exists(f_path):
      os.makedirs(f_path) # 创建路径
    shutil.copyfile(srcfile, dstfile) # 复制文件
    print("copy %s -> %s" % (srcfile, dstfile))
class mainForm(QMainWindow):
  def __init__(self):
    super(mainForm, self).__init__()
 
    self.img_path="faces/" #文件夹和py文件要再同一个目录下面
    self.img_list=os.listdir(self.img_path) #获取目录下的所有文件
    self.idx=0#可以改这里,选择程序运行的时候第一个显示的图片是哪一个
 
    self.initUI()
    self.show()
  def initUI(self):
    font=QFont()
    font.setPixelSize(20)#新建一个字体控件
 
    self.setWindowTitle("label_me")#设置窗体的标题
    self.setGeometry(0,0,900,600)#位置和大小
 
    button_list=["Chandler","Phoebe","Joey","Monica","Rachel","Ross","Others","Thing",]#这里是显示的按钮们,也是可能的类别数
 
    for idx, label_name in enumerate(button_list):
 
      button=QPushButton(label_name,self)
      button.move(idx*110+20,500)
      button.setFont(font)
      button.setFixedHeight(35)
 
      button.clicked.connect(self.classify)#动态控件绑定同一个事件,根据事件的sender判断是哪个按钮按下
 
    self.lbl_list=[]#存放显示图片的label 的list
    for i in range(self.get_remainder()):
 
      self.pix = QPixmap(self.img_path+self.img_list[self.idx+i])
      label_img = QLabel(self)
      label_img.setGeometry(360*i+10, 400-100*(3-i)+40, 100*(3-i)+40,100*(3-i)+40)
      label_img.setStyleSheet("border:2px solid red")
      label_img.setPixmap(self.pix)#设置label控件要显示的图片
      label_img.setScaledContents(True)
      self.lbl_list.append(label_img)
 
  def get_remainder(self):#打算是要显示3个label图片,如果是到了最后,显示不了那么多了。
    r=len(self.img_list)-self.idx
    if r>3:
      r=3
    return r
  def clear_lbls(self):#最后的时候会用到,不显示某些label
    for i in range(len(self.lbl_list)):
      self.lbl_list[i].hide()
 
  def classify(self):
 
    sender = self.sender()
    dir_path=sender.text()+"/"#获取按钮的text属性
 
    current_img_path=self.img_list[self.idx]#获取刚刚被分类的图片的路径
    copyfile(self.img_path+current_img_path , dir_path+current_img_path)
    self.idx +=1#下一个图片
    img_full_path = [self.img_path + self.img_list[self.idx + i]  for i in range(self.get_remainder())]
 
    self.clear_lbls()
    for i in range(self.get_remainder()):
 
      pix = QPixmap(img_full_path[i])
      self.lbl_list[i].setPixmap(pix)
      self.lbl_list[i].show()
    self.setWindowTitle("当前是第 %d 个图片"%self.idx)
 
app=QApplication(sys.argv)
f=mainForm()
sys.exit(app.exec())

如果有什么需要完善的地方,请提出。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python单线程实现多个定时器示例
Mar 30 Python
python中的reduce内建函数使用方法指南
Aug 31 Python
Python使用shelve模块实现简单数据存储的方法
May 20 Python
深入理解Python3中的http.client模块
Mar 29 Python
vscode 远程调试python的方法
Dec 01 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
Jul 04 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
Python 实现顺序高斯消元法示例
Dec 09 Python
python3利用Axes3D库画3D模型图
Mar 25 Python
Python API 操作Hadoop hdfs详解
Jun 06 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 Python
一个入门级python爬虫教程详解
Jan 27 Python
Python简单I/O操作示例
Mar 18 #Python
python实现简单图片物体标注工具
Mar 18 #Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 #Python
Python动态赋值的陷阱知识点总结
Mar 17 #Python
Python将字符串常量转化为变量方法总结
Mar 17 #Python
实例讲解Python中整数的最大值输出
Mar 17 #Python
python3+selenium自动化测试框架详解
Mar 17 #Python
You might like
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
jquery 得到当前页面高度和宽度的两个函数
2010/02/21 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
js中数组Array的一些常用方法总结
2013/08/12 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
JavaScript地理位置信息API
2016/06/11 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
python自定义解析简单xml格式文件的方法
2015/05/11 Python
python数据类型_字符串常用操作(详解)
2017/05/30 Python
python之pandas用法大全
2018/03/13 Python
Numpy数组的保存与读取方法
2018/04/04 Python
python3爬虫之设计签名小程序
2018/06/19 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
python日志模块logbook使用方法
2019/09/19 Python
python数据爬下来保存的位置
2020/02/17 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
REISS英国官网:伦敦High Street最受欢迎品牌
2016/12/21 全球购物
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
linux面试题参考答案(9)
2015/01/07 面试题
联片教研活动总结
2014/07/01 职场文书
优秀纪检干部材料
2014/08/27 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
python自动化之如何利用allure生成测试报告
2021/05/02 Python