用Python写一个图片标注工具
2018-12-27 本文已影响0人
听风轻咛
程序补充库
# tkinter
$ sudo apt intall python-tk
# PIL (Python Image Library)
$ sudo apt-get install python-imaging
# 上面的命令如果不行的话
$ sudo apt-get install python-pil
# 需要安装python-imaging-tk
$ sudo apt install python-imaging-tk
过程很重要
我们要实现一个点击输入框就弹出文件夹选择的界面,然后点击确定就把取到的文件路径显示在文本框上面;
点击输入框的方法没有找到,为方便起见我们写了一个按钮专门用来调起系统文件夹;
import tkFileDialog
# 调取系统文件选择框
dirPath_ = tkFileDialog.askdirectory()
# 如果是选取文件,则应该是
filePath_ = tkFileDialog.askopenfilename(title=u'choose file', initialdir=(os.path.expanduser("默认打开路径")))
# 文本框清除并重新填写文字
entry.delete(0, END)
entry.insert(END, "要显示的内容")
接下来我们要对选择的路径下的图片进行操作,理论上这里应该考虑多种图片格式以增加程序健壮性,但是这里我们不作扩展,这就涉及到了一种编程的思想,“增量式编程————罗马不是一天建成的”(一本正经的胡说八道)。
虽然我们这里不做其他图片格式的考虑,但是我们需要给出提示,所以我们要进行某种警告来告诉我们的小白使用者,“你错了!”;
import tkMessageBox
# 非常简单,就一句话
tkMessageBox.showerror("Error!", message='究竟做错了什么')
路径的问题解决之后,我们就要加载图片了,这部分使用了github上的一部分代码,稍候我们慢慢讲解;
from Tkinter import *
from PIL import Image, ImageTk
# load image
imagepath = image_path
pil_image = Image.open(imagepath)
# get the size of the image
#获取图像的原始大小
global w0,h0
w0, h0 = pil_image.size
#缩放到指定大小
pil_image = pil_image.resize((DEST_SIZE[0], DEST_SIZE[1]), Image.ANTIALIAS)
self.tkimg = ImageTk.PhotoImage(pil_image)
self.mainPanel = Canvas(self.frame, cursor='tcross')
self.mainPanel.config(width = max(self.tkimg.width(), 400), height = max(self.tkimg.height(), 400))
self.mainPanel.create_image(0, 0, image = self.tkimg, anchor=NW)
到这里,我们的图片已经加载成功,下面我们要做的是标定,就是框出我们要标识的真实物品;
这里顺便说一下我们接下来的产品需求,我们的图片是一组照片,照片内容是一个物体,我们在第一张照片上标定要tracking的物品,既而使用其他工具把接下来的其他图片的该物品全部标定出来;
拉下来我们要做的是用框标定第一张图片内容,并将所标定的数据记录下来;
self.mainPanel.bind("<Button-1>", self.mouseClick)
def mouseClick(self, event, save=True):
print event.x, event.y
数据标计已完成,然后我们就到了本文最重要的部分,使用深度学习网络框架对图片进行tracking,这里我们选用的是py-MDNet,有关于该框架的论文可以看一下 这里,
网络标定请看下节;
py-MDNet环境
Python2.7下安装matplotlib
sudo apt-get build-dep python-matplotlib --fix-missing
git clone git://github.com/matplotlib/matplotlib.git
cd matplotlib
python -mpip install
# 说一下这里的-mpip
pip install matplotlib==2.1.2 # (3.0.2)
我们在服务器上使用scp命令进行文件下载时,使用ipv6地址时需要注意ip位置需要转义;
scp username@\[ipv6 host\]:/filepath localpath
py-MDNet过程
这部分内容略过,本篇主要讲UI部分内容;说一下该网络主要做了一个图像的tracking工作,具体请见py-MDNet;
图片标识还没完
这篇就先写到这吧,持续时间有点久,接下来内容后续另写一篇进行补充。