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项目发布为exe可执行程序过程分享
Oct 23 Python
Python 2.7.x 和 3.x 版本的重要区别小结
Nov 28 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
Apr 16 Python
Python3调用微信企业号API发送文本消息代码示例
Nov 10 Python
和孩子一起学习python之变量命名规则
May 27 Python
django 单表操作实例详解
Jul 30 Python
Python利用全连接神经网络求解MNIST问题详解
Jan 14 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
python中sympy库求常微分方程的用法
Apr 28 Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 Python
python小技巧——将变量保存在本地及读取
Nov 13 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 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
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
php写入mysql中文乱码的实例解决方法
2019/09/17 PHP
laravel5.6实现数值转换
2019/10/23 PHP
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
2012/10/11 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
2015/02/17 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
Javascript生成器(Generator)的介绍与使用
2021/01/31 Javascript
python练习程序批量修改文件名
2014/01/16 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
Python 转义字符详细介绍
2017/03/21 Python
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
美国设计师精美珠宝购物网:Netaya
2016/08/28 全球购物
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
综合办公室主任岗位职责
2014/04/13 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
小学数学教研活动总结
2014/07/01 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
美术教师个人总结
2015/02/06 职场文书
自荐信格式范文
2015/03/04 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
2016大学军训心得体会
2016/01/11 职场文书
使用python向MongoDB插入时间字段的操作
2021/05/18 Python