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 相关文章推荐
在Windows8上的搭建Python和Django环境
Jul 03 Python
读写json中文ASCII乱码问题的解决方法
Nov 05 Python
Python实现查找匹配项作处理后再替换回去的方法
Jun 10 Python
python中文乱码不着急,先看懂字节和字符
Dec 20 Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 Python
python和pygame实现简单俄罗斯方块游戏
Feb 19 Python
Python多线程原理与用法实例剖析
Jan 22 Python
搞定这套Python爬虫面试题(面试会so easy)
Apr 03 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
python3.7调试的实例方法
Jul 21 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
Nov 01 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
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
php自动加载的两种实现方法
2010/06/21 PHP
php学习笔记之 函数声明
2011/06/09 PHP
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
css3元素简单的闪烁效果实现(html5 jquery)
2013/12/28 Javascript
JS设置获取cookies的方法
2014/01/26 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
2015/10/10 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
python中 chr unichr ord函数的实例详解
2017/08/06 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
深入浅析Python传值与传址
2018/07/10 Python
详解Python 正则表达式模块
2018/11/05 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
2019/06/27 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
Python字符串三种格式化输出
2020/09/17 Python
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
写出二分查找算法的两种实现
2013/05/13 面试题
急诊科护士自我鉴定
2013/10/14 职场文书
会计应聘求职信范文
2013/12/17 职场文书
中专生自荐信
2014/06/25 职场文书
三八节标语
2014/06/27 职场文书
党在我心中演讲稿
2014/09/02 职场文书
工程款催款函
2015/06/24 职场文书
七年级话题作文之执着
2019/11/19 职场文书