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 相关文章推荐
Python3写入文件常用方法实例分析
May 22 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
Python程序中设置HTTP代理
Nov 06 Python
Python3实现的字典、列表和json对象互转功能示例
May 22 Python
修复 Django migration 时遇到的问题解决
Jun 14 Python
python爬虫之自动登录与验证码识别
Jun 15 Python
Flask模板引擎之Jinja2语法介绍
Jun 26 Python
使用Python为中秋节绘制一块美味的月饼
Sep 11 Python
python输入错误后删除的方法
Oct 12 Python
python 串口读取+存储+输出处理实例
Dec 26 Python
python实现拼接图片
Mar 23 Python
Python pymysql模块安装并操作过程解析
Oct 13 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
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
2017/08/04 PHP
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
2013/04/17 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
js读取本地文件的实例
2017/12/22 Javascript
vue2.0 axios跨域并渲染的问题解决方法
2018/03/08 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
js实现简单掷骰子效果
2019/10/24 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
Python2中文处理纪要的实现方法
2018/03/10 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
使用Pyhton 分析酒店针孔摄像头
2020/03/04 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
ORACLE第二个十问
2013/12/14 面试题
委托公证书
2014/04/08 职场文书
书法大赛策划方案
2014/06/04 职场文书
店铺转让协议书
2015/01/29 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
如何在Python项目中引入日志
2021/05/31 Python
Redis 异步机制
2022/05/15 Redis
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android