From 01df3966400e389b7c80e47f3018c77a1c450007 Mon Sep 17 00:00:00 2001 From: Kentaro Wada Date: Mon, 9 May 2016 20:15:29 +0900 Subject: [PATCH] Prepare source to release pypi --- .gitignore | 11 +++-- Makefile | 6 --- README.md | 8 ++-- screencast.ogv => _images/screencast.ogv | Bin labelme/__init__.py | 0 canvas.py => labelme/canvas.py | 4 +- colorDialog.py => labelme/colorDialog.py | 0 {icons => labelme/icons}/cancel.png | Bin {icons => labelme/icons}/close.png | Bin {icons => labelme/icons}/color.png | Bin {icons => labelme/icons}/color_line.png | Bin {icons => labelme/icons}/copy.png | Bin {icons => labelme/icons}/delete.png | Bin {icons => labelme/icons}/done.png | Bin {icons => labelme/icons}/done.svg | 0 {icons => labelme/icons}/edit.png | Bin {icons => labelme/icons}/expert1.png | Bin {icons => labelme/icons}/expert2.png | Bin {icons => labelme/icons}/eye.png | Bin {icons => labelme/icons}/feBlend-icon.png | Bin {icons => labelme/icons}/file.png | Bin {icons => labelme/icons}/fit-width.png | Bin {icons => labelme/icons}/fit-window.png | Bin {icons => labelme/icons}/fit.png | Bin {icons => labelme/icons}/help.png | Bin {icons => labelme/icons}/labels.png | Bin {icons => labelme/icons}/labels.svg | 0 {icons => labelme/icons}/new.png | Bin {icons => labelme/icons}/objects.png | Bin {icons => labelme/icons}/open.png | Bin {icons => labelme/icons}/open.svg | 0 {icons => labelme/icons}/quit.png | Bin {icons => labelme/icons}/save-as.png | Bin {icons => labelme/icons}/save-as.svg | 0 {icons => labelme/icons}/save.png | Bin {icons => labelme/icons}/save.svg | 0 {icons => labelme/icons}/undo-cross.png | Bin {icons => labelme/icons}/undo.png | Bin {icons => labelme/icons}/zoom-in.png | Bin {icons => labelme/icons}/zoom-out.png | Bin {icons => labelme/icons}/zoom.png | Bin labelDialog.py => labelme/labelDialog.py | 0 labelFile.py => labelme/labelFile.py | 0 lib.py => labelme/lib.py | 0 resources.qrc => labelme/resources.qrc | 0 shape.py => labelme/shape.py | 0 toolBar.py => labelme/toolBar.py | 0 zoomWidget.py => labelme/zoomWidget.py | 0 labelme.py => scripts/labelme | 19 ++++---- setup.py | 52 ++++++++++++++++++++++ test.py | 38 ---------------- 51 files changed, 71 insertions(+), 67 deletions(-) delete mode 100644 Makefile rename screencast.ogv => _images/screencast.ogv (100%) create mode 100644 labelme/__init__.py rename canvas.py => labelme/canvas.py (99%) rename colorDialog.py => labelme/colorDialog.py (100%) rename {icons => labelme/icons}/cancel.png (100%) rename {icons => labelme/icons}/close.png (100%) rename {icons => labelme/icons}/color.png (100%) rename {icons => labelme/icons}/color_line.png (100%) rename {icons => labelme/icons}/copy.png (100%) rename {icons => labelme/icons}/delete.png (100%) rename {icons => labelme/icons}/done.png (100%) rename {icons => labelme/icons}/done.svg (100%) rename {icons => labelme/icons}/edit.png (100%) rename {icons => labelme/icons}/expert1.png (100%) rename {icons => labelme/icons}/expert2.png (100%) rename {icons => labelme/icons}/eye.png (100%) rename {icons => labelme/icons}/feBlend-icon.png (100%) rename {icons => labelme/icons}/file.png (100%) rename {icons => labelme/icons}/fit-width.png (100%) rename {icons => labelme/icons}/fit-window.png (100%) rename {icons => labelme/icons}/fit.png (100%) rename {icons => labelme/icons}/help.png (100%) rename {icons => labelme/icons}/labels.png (100%) rename {icons => labelme/icons}/labels.svg (100%) rename {icons => labelme/icons}/new.png (100%) rename {icons => labelme/icons}/objects.png (100%) rename {icons => labelme/icons}/open.png (100%) rename {icons => labelme/icons}/open.svg (100%) rename {icons => labelme/icons}/quit.png (100%) rename {icons => labelme/icons}/save-as.png (100%) rename {icons => labelme/icons}/save-as.svg (100%) rename {icons => labelme/icons}/save.png (100%) rename {icons => labelme/icons}/save.svg (100%) rename {icons => labelme/icons}/undo-cross.png (100%) rename {icons => labelme/icons}/undo.png (100%) rename {icons => labelme/icons}/zoom-in.png (100%) rename {icons => labelme/icons}/zoom-out.png (100%) rename {icons => labelme/icons}/zoom.png (100%) rename labelDialog.py => labelme/labelDialog.py (100%) rename labelFile.py => labelme/labelFile.py (100%) rename lib.py => labelme/lib.py (100%) rename resources.qrc => labelme/resources.qrc (100%) rename shape.py => labelme/shape.py (100%) rename toolBar.py => labelme/toolBar.py (100%) rename zoomWidget.py => labelme/zoomWidget.py (100%) rename labelme.py => scripts/labelme (98%) create mode 100644 setup.py delete mode 100755 test.py diff --git a/.gitignore b/.gitignore index 767aaf5..decd9d1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ +build/ +dist/ +*.py[cdo] +*.egg-info/ icons/.DS_Store - -resources.py - -*.pyc -.*.swp - +labelme/resources.py diff --git a/Makefile b/Makefile deleted file mode 100644 index 28aa5a6..0000000 --- a/Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -all: resources.py - -%.py: %.qrc - pyrcc4 -o $@ $< - diff --git a/README.md b/README.md index 8f34172..c001efb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ - # Labelme Labelme is a graphical image annotation tool inspired by @@ -6,13 +5,13 @@ http://labelme.csail.mit.edu. It is written in Python and uses Qt for its graphical interface. -# Dependencies +## Dependencies Labelme requires at least [Python 2.6](http://www.python.org/getit/) and has been tested with [PyQt 4.8](http://www.riverbankcomputing.co.uk/software/pyqt/intro). -# Usage +## Usage After cloning the code you should first run `make` to generate the resource file (a Python module containing all the icons). @@ -24,8 +23,7 @@ At the moment annotations are saved as a [JSON](http://www.json.org/) file. The file includes the image itself. In the feature support for XML output or possibly even [SVG](http://www.w3.org/Graphics/SVG/) will be added. -# TODO +## TODO - Refactor into a Python package. - Add installation script. - diff --git a/screencast.ogv b/_images/screencast.ogv similarity index 100% rename from screencast.ogv rename to _images/screencast.ogv diff --git a/labelme/__init__.py b/labelme/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/canvas.py b/labelme/canvas.py similarity index 99% rename from canvas.py rename to labelme/canvas.py index f213612..2fa9602 100644 --- a/canvas.py +++ b/labelme/canvas.py @@ -21,8 +21,8 @@ from PyQt4.QtGui import * from PyQt4.QtCore import * #from PyQt4.QtOpenGL import * -from shape import Shape -from lib import distance +from labelme.shape import Shape +from labelme.lib import distance # TODO: # - [maybe] Find optimal epsilon value. diff --git a/colorDialog.py b/labelme/colorDialog.py similarity index 100% rename from colorDialog.py rename to labelme/colorDialog.py diff --git a/icons/cancel.png b/labelme/icons/cancel.png similarity index 100% rename from icons/cancel.png rename to labelme/icons/cancel.png diff --git a/icons/close.png b/labelme/icons/close.png similarity index 100% rename from icons/close.png rename to labelme/icons/close.png diff --git a/icons/color.png b/labelme/icons/color.png similarity index 100% rename from icons/color.png rename to labelme/icons/color.png diff --git a/icons/color_line.png b/labelme/icons/color_line.png similarity index 100% rename from icons/color_line.png rename to labelme/icons/color_line.png diff --git a/icons/copy.png b/labelme/icons/copy.png similarity index 100% rename from icons/copy.png rename to labelme/icons/copy.png diff --git a/icons/delete.png b/labelme/icons/delete.png similarity index 100% rename from icons/delete.png rename to labelme/icons/delete.png diff --git a/icons/done.png b/labelme/icons/done.png similarity index 100% rename from icons/done.png rename to labelme/icons/done.png diff --git a/icons/done.svg b/labelme/icons/done.svg similarity index 100% rename from icons/done.svg rename to labelme/icons/done.svg diff --git a/icons/edit.png b/labelme/icons/edit.png similarity index 100% rename from icons/edit.png rename to labelme/icons/edit.png diff --git a/icons/expert1.png b/labelme/icons/expert1.png similarity index 100% rename from icons/expert1.png rename to labelme/icons/expert1.png diff --git a/icons/expert2.png b/labelme/icons/expert2.png similarity index 100% rename from icons/expert2.png rename to labelme/icons/expert2.png diff --git a/icons/eye.png b/labelme/icons/eye.png similarity index 100% rename from icons/eye.png rename to labelme/icons/eye.png diff --git a/icons/feBlend-icon.png b/labelme/icons/feBlend-icon.png similarity index 100% rename from icons/feBlend-icon.png rename to labelme/icons/feBlend-icon.png diff --git a/icons/file.png b/labelme/icons/file.png similarity index 100% rename from icons/file.png rename to labelme/icons/file.png diff --git a/icons/fit-width.png b/labelme/icons/fit-width.png similarity index 100% rename from icons/fit-width.png rename to labelme/icons/fit-width.png diff --git a/icons/fit-window.png b/labelme/icons/fit-window.png similarity index 100% rename from icons/fit-window.png rename to labelme/icons/fit-window.png diff --git a/icons/fit.png b/labelme/icons/fit.png similarity index 100% rename from icons/fit.png rename to labelme/icons/fit.png diff --git a/icons/help.png b/labelme/icons/help.png similarity index 100% rename from icons/help.png rename to labelme/icons/help.png diff --git a/icons/labels.png b/labelme/icons/labels.png similarity index 100% rename from icons/labels.png rename to labelme/icons/labels.png diff --git a/icons/labels.svg b/labelme/icons/labels.svg similarity index 100% rename from icons/labels.svg rename to labelme/icons/labels.svg diff --git a/icons/new.png b/labelme/icons/new.png similarity index 100% rename from icons/new.png rename to labelme/icons/new.png diff --git a/icons/objects.png b/labelme/icons/objects.png similarity index 100% rename from icons/objects.png rename to labelme/icons/objects.png diff --git a/icons/open.png b/labelme/icons/open.png similarity index 100% rename from icons/open.png rename to labelme/icons/open.png diff --git a/icons/open.svg b/labelme/icons/open.svg similarity index 100% rename from icons/open.svg rename to labelme/icons/open.svg diff --git a/icons/quit.png b/labelme/icons/quit.png similarity index 100% rename from icons/quit.png rename to labelme/icons/quit.png diff --git a/icons/save-as.png b/labelme/icons/save-as.png similarity index 100% rename from icons/save-as.png rename to labelme/icons/save-as.png diff --git a/icons/save-as.svg b/labelme/icons/save-as.svg similarity index 100% rename from icons/save-as.svg rename to labelme/icons/save-as.svg diff --git a/icons/save.png b/labelme/icons/save.png similarity index 100% rename from icons/save.png rename to labelme/icons/save.png diff --git a/icons/save.svg b/labelme/icons/save.svg similarity index 100% rename from icons/save.svg rename to labelme/icons/save.svg diff --git a/icons/undo-cross.png b/labelme/icons/undo-cross.png similarity index 100% rename from icons/undo-cross.png rename to labelme/icons/undo-cross.png diff --git a/icons/undo.png b/labelme/icons/undo.png similarity index 100% rename from icons/undo.png rename to labelme/icons/undo.png diff --git a/icons/zoom-in.png b/labelme/icons/zoom-in.png similarity index 100% rename from icons/zoom-in.png rename to labelme/icons/zoom-in.png diff --git a/icons/zoom-out.png b/labelme/icons/zoom-out.png similarity index 100% rename from icons/zoom-out.png rename to labelme/icons/zoom-out.png diff --git a/icons/zoom.png b/labelme/icons/zoom.png similarity index 100% rename from icons/zoom.png rename to labelme/icons/zoom.png diff --git a/labelDialog.py b/labelme/labelDialog.py similarity index 100% rename from labelDialog.py rename to labelme/labelDialog.py diff --git a/labelFile.py b/labelme/labelFile.py similarity index 100% rename from labelFile.py rename to labelme/labelFile.py diff --git a/lib.py b/labelme/lib.py similarity index 100% rename from lib.py rename to labelme/lib.py diff --git a/resources.qrc b/labelme/resources.qrc similarity index 100% rename from resources.qrc rename to labelme/resources.qrc diff --git a/shape.py b/labelme/shape.py similarity index 100% rename from shape.py rename to labelme/shape.py diff --git a/toolBar.py b/labelme/toolBar.py similarity index 100% rename from toolBar.py rename to labelme/toolBar.py diff --git a/zoomWidget.py b/labelme/zoomWidget.py similarity index 100% rename from zoomWidget.py rename to labelme/zoomWidget.py diff --git a/labelme.py b/scripts/labelme similarity index 98% rename from labelme.py rename to scripts/labelme index 356fde3..1623bc0 100755 --- a/labelme.py +++ b/scripts/labelme @@ -30,16 +30,15 @@ from collections import defaultdict from PyQt4.QtGui import * from PyQt4.QtCore import * -import resources - -from lib import struct, newAction, newIcon, addActions, fmtShortcut -from shape import Shape, DEFAULT_LINE_COLOR, DEFAULT_FILL_COLOR -from canvas import Canvas -from zoomWidget import ZoomWidget -from labelDialog import LabelDialog -from colorDialog import ColorDialog -from labelFile import LabelFile, LabelFileError -from toolBar import ToolBar +from labelme import resources +from labelme.lib import struct, newAction, newIcon, addActions, fmtShortcut +from labelme.shape import Shape, DEFAULT_LINE_COLOR, DEFAULT_FILL_COLOR +from labelme.canvas import Canvas +from labelme.zoomWidget import ZoomWidget +from labelme.labelDialog import LabelDialog +from labelme.colorDialog import ColorDialog +from labelme.labelFile import LabelFile, LabelFileError +from labelme.toolBar import ToolBar __appname__ = 'labelme' diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..a983dcd --- /dev/null +++ b/setup.py @@ -0,0 +1,52 @@ +from distutils.command.build_py import build_py as BuildPyCommand +from setuptools import find_packages +from setuptools import setup +import shlex +import subprocess +import sys + + +version = '1.0' + + +class LabelmeBuildPyCommand(BuildPyCommand): + + def run(self): + BuildPyCommand.run(self) + src = 'labelme/resources.py' + dst = 'labelme/resources.qrc' + cmd = 'pyrcc4 -o {0} {1}'.format(src, dst) + print('converting {0} -> {1}'.format(src, dst)) + subprocess.check_call(shlex.split(cmd)) + + +try: + import PyQt4 +except ImportError: + sys.stderr.write('Please install PyQt4.\n') + sys.exit(1) + + +setup( + name='labelme', + version=version, + packages=find_packages(), + cmdclass={'build_py': LabelmeBuildPyCommand}, + description='Simple Image Annotation Tool.', + long_description=open('README.md').read(), + author='mpitid', + author_email='mpitid@gmail.com', + url='https://github.com/mpitid/pylabelme', + install_requires=[], + license='MIT', + keywords='Image Annotation, Machine Learning', + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Operating System :: POSIX', + 'Topic :: Internet :: WWW/HTTP', + ], + package_data={'labelme': ['icons']}, + scripts=['scripts/labelme'], +) diff --git a/test.py b/test.py deleted file mode 100755 index a29b710..0000000 --- a/test.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf8 -*- - -import sys - -from PyQt4.QtGui import * -from PyQt4.QtCore import * - -class MainWindow(QMainWindow): - def __init__(self): - super(MainWindow, self).__init__() - self.setWindowTitle("test") - - quit = QAction("&Quit", self) - quit.triggered.connect(self.close) - - menu = self.menuBar().addMenu('&File') - menu.addAction(quit) - - self.notepad = QTabWidget() - tabs = [("hello", QWidget(), "test")] - for i, (name, widget, title) in enumerate(tabs): - self.notepad.addTab(widget, title) - - self.setCentralWidget(self.notepad) - self.statusBar().show() - - -def main(argv): - app = QApplication(argv) - app.setApplicationName("test") - win = MainWindow() - win.show() - return app.exec_() - -if __name__ == '__main__': - sys.exit(main(sys.argv)) - -- GitLab