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使用Mechanize模块编写爬虫的要点解析
Mar 31 Python
Python可变参数用法实例分析
Apr 02 Python
spyder常用快捷键(分享)
Jul 19 Python
Python基础之getpass模块详细介绍
Aug 10 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
Python实现带下标索引的遍历操作示例
May 30 Python
Python3 Click模块的使用方法详解
Feb 12 Python
TensorFlow的reshape操作 tf.reshape的实现
Apr 19 Python
python中get和post有什么区别
Jun 19 Python
Python实现数字的格式化输出
Aug 01 Python
浅析Python打包时包含静态文件处理方法
Jan 15 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 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中的array数组类型分析说明
2010/07/27 PHP
解析coreseek for sphinx的使用
2013/06/21 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
JavaScript QueryString解析类代码
2010/01/17 Javascript
浅析return false的正确使用
2013/11/04 Javascript
jquery学习总结(超级详细)
2014/09/04 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
JS实现关闭当前页而不弹出提示框的方法
2016/06/22 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
各个系统下的Python解释器相关安装方法
2015/10/12 Python
windows下安装Python和pip终极图文教程
2017/03/05 Python
python操作oracle的完整教程分享
2018/01/30 Python
Django开发中复选框用法示例
2018/03/20 Python
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
python使用递归的方式建立二叉树
2019/07/03 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
Tensorflow累加的实现案例
2020/02/05 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
英国门把手公司:Door Handle Company
2019/05/12 全球购物
大学毕业生通用求职信
2013/09/28 职场文书
日语专业推荐信
2013/11/12 职场文书
物流仓管员岗位职责
2013/12/04 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
高中教师个人总结
2015/02/10 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
创业计划书之家教中心
2019/09/25 职场文书
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js