PredictionDialog.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env python
  2. """PredictionDialog: Dialog to select images and videos to predict."""
  3. import os
  4. from PyQt5 import uic, QtWidgets, QtGui, QtCore
  5. class PredictionDialog:
  6. FileTypeRole = QtCore.Qt.UserRole + 1
  7. FileNameRole = QtCore.Qt.UserRole + 2
  8. image_extensions = ['.jpg', '.png', '.jpeg']
  9. video_extensions = ['.mp4', '.avi', '.mkv', '.mpg', '.mpeg']
  10. def _get_jobs(self):
  11. def to_job(item: QtGui.QStandardItem):
  12. filename = item.data(self.FileNameRole)
  13. filetype = item.data(self.FileTypeRole)
  14. return {'filename': filename, 'filetype': filetype, 'jobs': ['detect-faces']}
  15. return list(map(to_job, [self.model.item(index) for index in range(self.model.rowCount())]))
  16. jobs = property(fget=_get_jobs)
  17. def __init__(self, **kwargs):
  18. self.ui = QtWidgets.QDialog(**kwargs)
  19. spath = os.path.dirname(__file__)
  20. uic.loadUi(os.path.join(spath, 'PredictionDialog.ui'), self.ui)
  21. self.model = QtGui.QStandardItemModel()
  22. self.ui.filesList.setModel(self.model)
  23. # self.add_image('/home/brust/demonstrations/carpe-simiam/images/Alexandra_V110_5_09-08-10.png')
  24. # self.add_video('/home/brust/demonstrations/carpe-simiam/images/cut.avi')
  25. self.ui.addFileButton.clicked.connect(self._add_files)
  26. def _add_files(self):
  27. extensions = 'All supported files (' + \
  28. (' '.join(['*' + extension for extension in self.image_extensions + self.video_extensions])) + \
  29. ')'
  30. selection = QtWidgets.QFileDialog.getOpenFileNames(self.ui, 'Select Files To Add', filter=extensions)
  31. for filename in selection[0]:
  32. _, extension = os.path.splitext(filename)
  33. extension = extension.lower()
  34. if extension in self.image_extensions:
  35. self.add_image(filename)
  36. elif extension in self.video_extensions:
  37. self.add_video(filename)
  38. def exec_(self):
  39. return self.ui.exec_()
  40. def add_image(self, image):
  41. # TODO Check for existence
  42. item = QtGui.QStandardItem(QtGui.QIcon(image), os.path.basename(image))
  43. item.setData('image', self.FileTypeRole)
  44. item.setData(image, self.FileNameRole)
  45. self.model.appendRow(item)
  46. def add_video(self, video):
  47. # TODO Check for existence
  48. item = QtGui.QStandardItem(QtGui.QIcon(video), os.path.basename(video))
  49. item.setData('video', self.FileTypeRole)
  50. item.setData(video, self.FileNameRole)
  51. self.model.appendRow(item)