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中测试访问同一数据的竞争条件的方法
Apr 23 Python
Python求算数平方根和约数的方法汇总
Mar 09 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
Apr 24 Python
利用python打印出菱形、三角形以及矩形的方法实例
Aug 08 Python
python机器学习理论与实战(一)K近邻法
Jan 28 Python
代码讲解Python对Windows服务进行监控
Feb 11 Python
Python GUI编程完整示例
Apr 04 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
python入门之井字棋小游戏
Mar 05 Python
Python3.6 中的pyinstaller安装和使用教程
Mar 16 Python
深入浅析python 中的self和cls的区别
Jun 20 Python
Python函数中apply、map、applymap的区别
Nov 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
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
2016/12/14 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
jQuery实现查看图片功能
2020/12/01 jQuery
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
python url 参数修改方法
2018/12/26 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
Python pymysql模块安装并操作过程解析
2020/10/13 Python
Python的logging模块基本用法
2020/12/24 Python
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
法国在线宠物店:zooplus.fr
2018/02/23 全球购物
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
荷兰时尚精品店:Labels Fashion
2020/03/22 全球购物
同居协议书范本
2014/04/23 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
人才市场接收函
2015/01/30 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
2015中学学校工作总结
2015/07/20 职场文书
公司人力资源管理制度
2015/08/05 职场文书
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫