Fix encode filename issues python2

This commit is contained in:
tzutalin 2017-02-15 17:33:55 +08:00
parent afee5a4e95
commit 62507a1958
2 changed files with 28 additions and 29 deletions

View File

@ -43,9 +43,9 @@ __appname__ = 'labelImg'
def u(x): def u(x):
'''py2/py3 unicode helper''' '''py2/py3 unicode helper'''
try: try:
return x.decode('utf8') # py2 return unicode(x) # py2
except AttributeError: except AttributeError:
return x # py3 return str(x) # py3
def have_qstring(): def have_qstring():
@ -399,8 +399,8 @@ class MainWindow(QMainWindow, WindowMixin):
self.move(position) self.move(position)
saveDir = settings.get('savedir', None) saveDir = settings.get('savedir', None)
self.lastOpenDir = settings.get('lastOpenDir', None) self.lastOpenDir = settings.get('lastOpenDir', None)
if os.path.exists(str(saveDir)): if os.path.exists(u(saveDir)):
self.defaultSaveDir = str(saveDir) self.defaultSaveDir = u(saveDir)
self.statusBar().showMessage('%s started. Annotation will be saved to %s' %(__appname__, self.defaultSaveDir)) self.statusBar().showMessage('%s started. Annotation will be saved to %s' %(__appname__, self.defaultSaveDir))
self.statusBar().show() self.statusBar().show()
@ -556,7 +556,7 @@ class MainWindow(QMainWindow, WindowMixin):
def updateFileMenu(self): def updateFileMenu(self):
current = self.filename current = self.filename
def exists(filename): def exists(filename):
return os.path.exists(filename) return os.path.exists(u(filename))
menu = self.menus.recentFiles menu = self.menus.recentFiles
menu.clear() menu.clear()
files = [f for f in self.recentFiles if f != current and exists(f)] files = [f for f in self.recentFiles if f != current and exists(f)]
@ -581,7 +581,7 @@ class MainWindow(QMainWindow, WindowMixin):
# Tzutalin 20160906 : Add file list and dock to move faster # Tzutalin 20160906 : Add file list and dock to move faster
def fileitemDoubleClicked(self, item=None): def fileitemDoubleClicked(self, item=None):
currIndex = self.mImgList.index(item.text()) currIndex = self.mImgList.index(u(item.text()))
if currIndex < len(self.mImgList): if currIndex < len(self.mImgList):
filename = self.mImgList[currIndex] filename = self.mImgList[currIndex]
if filename: if filename:
@ -637,7 +637,7 @@ class MainWindow(QMainWindow, WindowMixin):
def saveLabels(self, filename): def saveLabels(self, filename):
lf = LabelFile() lf = LabelFile()
def format_shape(s): def format_shape(s):
return dict(label=s.label, return dict(label=u(s.label),
line_color=s.line_color.getRgb()\ line_color=s.line_color.getRgb()\
if s.line_color != self.lineColor else None, if s.line_color != self.lineColor else None,
fill_color=s.fill_color.getRgb()\ fill_color=s.fill_color.getRgb()\
@ -649,10 +649,10 @@ class MainWindow(QMainWindow, WindowMixin):
try: try:
if self.usingPascalVocFormat is True: if self.usingPascalVocFormat is True:
print('savePascalVocFormat save to:' + filename) print('savePascalVocFormat save to:' + filename)
lf.savePascalVocFormat(filename, shapes, str(self.filename), self.imageData, lf.savePascalVocFormat(filename, shapes, u(self.filename), self.imageData,
self.lineColor.getRgb(), self.fillColor.getRgb()) self.lineColor.getRgb(), self.fillColor.getRgb())
else: else:
lf.save(filename, shapes, str(self.filename), self.imageData, lf.save(filename, shapes, u(self.filename), self.imageData,
self.lineColor.getRgb(), self.fillColor.getRgb()) self.lineColor.getRgb(), self.fillColor.getRgb())
self.labelFile = lf self.labelFile = lf
self.filename = filename self.filename = filename
@ -675,9 +675,9 @@ class MainWindow(QMainWindow, WindowMixin):
def labelItemChanged(self, item): def labelItemChanged(self, item):
shape = self.itemsToShapes[item] shape = self.itemsToShapes[item]
label = item.text() label = u(item.text())
if label != shape.label: if label != shape.label:
shape.label = item.text() shape.label = u(item.text())
self.setDirty() self.setDirty()
else: # User probably changed item visibility else: # User probably changed item visibility
self.canvas.setShapeVisible(shape, item.checkState() == Qt.Checked) self.canvas.setShapeVisible(shape, item.checkState() == Qt.Checked)
@ -748,7 +748,7 @@ class MainWindow(QMainWindow, WindowMixin):
self.resetState() self.resetState()
self.canvas.setEnabled(False) self.canvas.setEnabled(False)
if filename is None: if filename is None:
filename = self.settings.get('filename') filename = u(self.settings.get('filename'))
# Tzutalin 20160906 : Add file list and dock to move faster # Tzutalin 20160906 : Add file list and dock to move faster
# Highlight the file item # Highlight the file item
@ -782,9 +782,9 @@ class MainWindow(QMainWindow, WindowMixin):
u"<p>Make sure <i>%s</i> is a valid image file." % filename) u"<p>Make sure <i>%s</i> is a valid image file." % filename)
self.status("Error reading %s" % filename) self.status("Error reading %s" % filename)
return False return False
self.status("Loaded %s" % os.path.basename(str(filename))) self.status("Loaded %s" % os.path.basename(u(filename)))
self.image = image self.image = image
self.filename = filename self.filename = u(filename)
self.canvas.loadPixmap(QPixmap.fromImage(image)) self.canvas.loadPixmap(QPixmap.fromImage(image))
if self.labelFile: if self.labelFile:
self.loadLabels(self.labelFile.shapes) self.loadLabels(self.labelFile.shapes)
@ -886,11 +886,11 @@ class MainWindow(QMainWindow, WindowMixin):
def changeSavedir(self, _value=False): def changeSavedir(self, _value=False):
if self.defaultSaveDir is not None: if self.defaultSaveDir is not None:
path = str(self.defaultSaveDir) path = u(self.defaultSaveDir)
else: else:
path = '.' path = u'.'
dirpath = str(QFileDialog.getExistingDirectory(self, dirpath = u(QFileDialog.getExistingDirectory(self,
'%s - Save to the directory' % __appname__, path, QFileDialog.ShowDirsOnly '%s - Save to the directory' % __appname__, path, QFileDialog.ShowDirsOnly
| QFileDialog.DontResolveSymlinks)) | QFileDialog.DontResolveSymlinks))
@ -904,14 +904,14 @@ class MainWindow(QMainWindow, WindowMixin):
if self.filename is None: if self.filename is None:
return return
path = os.path.dirname(str(self.filename))\ path = os.path.dirname(u(self.filename))\
if self.filename else '.' if self.filename else '.'
if self.usingPascalVocFormat: if self.usingPascalVocFormat:
formats = ['*.%s' % str(fmt).lower()\ formats = ['*.%s' % str(fmt).lower()\
for fmt in QImageReader.supportedImageFormats()] for fmt in QImageReader.supportedImageFormats()]
filters = "Open Annotation XML file (%s)" % \ filters = "Open Annotation XML file (%s)" % \
' '.join(formats + ['*.xml']) ' '.join(formats + ['*.xml'])
filename = str(QFileDialog.getOpenFileName(self, filename = u(QFileDialog.getOpenFileName(self,
'%s - Choose a xml file' % __appname__, path, filters)) '%s - Choose a xml file' % __appname__, path, filters))
self.loadPascalXMLByFilename(filename) self.loadPascalXMLByFilename(filename)
@ -919,13 +919,13 @@ class MainWindow(QMainWindow, WindowMixin):
if not self.mayContinue(): if not self.mayContinue():
return return
path = os.path.dirname(self.filename)\ path = os.path.dirname(u(self.filename))\
if self.filename else '.' if self.filename else '.'
if self.lastOpenDir is not None and len(self.lastOpenDir) > 1: if self.lastOpenDir is not None and len(self.lastOpenDir) > 1:
path = self.lastOpenDir path = self.lastOpenDir
dirpath = str(QFileDialog.getExistingDirectory(self, dirpath = u(QFileDialog.getExistingDirectory(self,
'%s - Open Directory' % __appname__, path, QFileDialog.ShowDirsOnly '%s - Open Directory' % __appname__, path, QFileDialog.ShowDirsOnly
| QFileDialog.DontResolveSymlinks)) | QFileDialog.DontResolveSymlinks))
@ -981,13 +981,13 @@ class MainWindow(QMainWindow, WindowMixin):
def openFile(self, _value=False): def openFile(self, _value=False):
if not self.mayContinue(): if not self.mayContinue():
return return
path = os.path.dirname(str(self.filename))\ path = os.path.dirname(u(self.filename))\
if self.filename else '.' if self.filename else u'.'
formats = ['*.%s' % str(fmt).lower()\ formats = ['*.%s' % str(fmt).lower()\
for fmt in QImageReader.supportedImageFormats()] for fmt in QImageReader.supportedImageFormats()]
filters = "Image & Label files (%s)" % \ filters = "Image & Label files (%s)" % \
' '.join(formats + ['*%s' % LabelFile.suffix]) ' '.join(formats + ['*%s' % LabelFile.suffix])
filename = str(QFileDialog.getOpenFileName(self, filename = u(QFileDialog.getOpenFileName(self,
'%s - Choose Image or Label file' % __appname__, path, filters)) '%s - Choose Image or Label file' % __appname__, path, filters))
if filename: if filename:
self.loadFile(filename) self.loadFile(filename)
@ -1061,7 +1061,7 @@ class MainWindow(QMainWindow, WindowMixin):
'<p><b>%s</b></p>%s' % (title, message)) '<p><b>%s</b></p>%s' % (title, message))
def currentPath(self): def currentPath(self):
return os.path.dirname(str(self.filename)) if self.filename else '.' return os.path.dirname(u(self.filename)) if self.filename else '.'
def chooseColor1(self): def chooseColor1(self):
color = self.colorDialog.getColor(self.lineColor, u'Choose line color', color = self.colorDialog.getColor(self.lineColor, u'Choose line color',

View File

@ -5,8 +5,7 @@ import sys
from xml.etree import ElementTree from xml.etree import ElementTree
from xml.etree.ElementTree import Element, SubElement from xml.etree.ElementTree import Element, SubElement
from lxml import etree from lxml import etree
import codecs import io
class PascalVocWriter: class PascalVocWriter:
@ -101,9 +100,9 @@ class PascalVocWriter:
self.appendObjects(root) self.appendObjects(root)
out_file = None out_file = None
if targetFile is None: if targetFile is None:
out_file = codecs.open(self.filename + '.xml', 'w', encoding='utf-8') out_file = io.open(self.filename + '.xml', 'w', encoding='utf-8')
else: else:
out_file = codecs.open(targetFile, 'w', encoding='utf-8') out_file = io.open(targetFile, 'w', encoding='utf-8')
prettifyResult = self.prettify(root) prettifyResult = self.prettify(root)
out_file.write(prettifyResult.decode('utf8')) out_file.write(prettifyResult.decode('utf8'))