python数据标注工具_PyQt5实现简单数据标注工具

本文实例为大家分享了PyQt5实现简单数据标注工具的具体代码,分类用,供大家参考,具体内容如下

201931893654152.jpg?20192189374

第一个最大的图片是当前要标注的类别,接下来的两个图片是对接下来会出现的图片的预览(方便连续点好几个)。分类之后的会保存到和按钮名字一样的文件夹里面,如果文件夹不存在就会自动新建一个(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())

如果有什么需要完善的地方,请提出。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值