Skip to content

Commit

Permalink
sd card import implemented
Browse files Browse the repository at this point in the history
  • Loading branch information
EasyIsrael committed May 13, 2019
1 parent f39c341 commit bb6f6c9
Show file tree
Hide file tree
Showing 7 changed files with 254 additions and 19 deletions.
18 changes: 8 additions & 10 deletions poitagger/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
from . import PATHS
from . import __version__
# Widgets
from . import save_as
from . import importer
from . import workflow
from . import poiview
from . import info
Expand Down Expand Up @@ -68,7 +68,7 @@ def __init__(self, imgdir = None, rootdir = None,resetwindow = None):
self.imgdiff = 1 if imgdir is not None else int(self.settings.value('PATHS/lastimgid',0))
startfilename = str(self.settings.value('PATHS/lastimgname'))

self.saveDialog = save_as.SaveAsDialog(self)
self.saveDialog = importer.SaveAsDialog(self)

self.conf = properties.PropertyDialog("Einstellungen",self.settings)

Expand All @@ -79,7 +79,7 @@ def __init__(self, imgdir = None, rootdir = None,resetwindow = None):
self.info = info.Info()
# self.calib = calib.Calib()
# self.dem = dem.Dem()
self.wf = workflow.Araloader()
#self.wf = workflow.Araloader()

#self.poiview = pois.Pois(self.conf)
self.poidata = poimodel2.PoiModel()
Expand Down Expand Up @@ -151,8 +151,6 @@ def connections(self):
self.logconnects()
self.info.position.connect(self.geomain.view.moveUav)
#self.wf.progress.connect(self.AraLoaderProgressBar.setValue)
self.wf.critical.connect(lambda txt : QtGui.QMessageBox.critical(self, "SD-Karte einlesen",txt))
self.wf.info.connect(lambda txt : QtGui.QMessageBox.information(self, "SD-Karte einlesen",txt))
self.escAction.triggered.connect(self.close)

self.poiview.sigJumpTo.connect(self.treemain.view.setCurrent)
Expand Down Expand Up @@ -182,17 +180,17 @@ def connections(self):
self.img.sigMouseMode.connect(self.focusDockWidget)

def actionconnects(self):
self.actionSD_Karte_einlesen.triggered.connect(lambda: self.wf.readSDCard(self.saveDialog,self.settings))
self.actionSD_Karte_einlesen.triggered.connect(self.saveDialog.open) #lambda: self.wf.readSDCard(self.saveDialog,self.settings))
self.actionJpg_export.triggered.connect(self.img.save_jpg)
self.actionPng_export.triggered.connect(self.img.save_png)
self.actionConvert_folder_to_jpg.triggered.connect(lambda: self.wf.convertFolderJpg(self.treemain.view.current_path()))
self.actionCreate_subimages.triggered.connect(lambda: self.wf.createSubimages(self.treemain.view.current_path()))
#self.actionConvert_folder_to_jpg.triggered.connect(lambda: self.wf.convertFolderJpg(self.treemain.view.current_path()))
#self.actionCreate_subimages.triggered.connect(lambda: self.wf.createSubimages(self.treemain.view.current_path()))
self.actionGpx_to_gps.triggered.connect(self.gpx_to_gps)
self.actionEinstellungen.triggered.connect(self.conf.openPropDialog)

def logconnects(self):
self.log.connect(self.Console.append)
self.wf.log.connect(self.Console.append)
#self.wf.log.connect(self.Console.append)
self.treemain.view.log.connect(self.Console.append)
self.img.log.connect(self.Console.append)
self.info.log.connect(self.Console.append)
Expand Down Expand Up @@ -326,7 +324,7 @@ def writeSettings(self,s):

s.setValue('VIEW/fliphor',self.img.infoUI.CVfliphorCheckBox.isChecked())
s.setValue('VIEW/flipver',self.img.infoUI.CVflipverCheckBox.isChecked())
s.setValue("SDCARD/device",self.saveDialog.sourceLE.text())
# s.setValue("SDCARD/device",self.saveDialog.sourceLE.text())
# self.poiview.writeSettings()


Expand Down
4 changes: 3 additions & 1 deletion poitagger/image.py
Original file line number Diff line number Diff line change
Expand Up @@ -578,6 +578,7 @@ def fill_header_dji(self):
self.header["file"]["about"]=a.get("rdf:about",0)
self.header["file"]["modifydate"]=a.get("xmp:modifydate",0)
self.header["file"]["createdate"]=a.get("xmp:createdate",0)
self.header["file"]["DateTimeOriginal"]=self.extract_exif("EXIF DateTimeOriginal")
self.header["file"]["format"]=a.get("dc:format",0)
self.header["file"]["version"]=a.get("crs:version",0)

Expand Down Expand Up @@ -816,7 +817,7 @@ def get_meta(self,old=True):
self.header["camera"]["pixelshift_y"] = 17e-6
self.header["gps"]["dateTtime"] = UTCFromGps(self.rawheader["falcon"]["gps_week"],
self.rawheader["falcon"]["gps_time_ms"])

self.header["file"]["DateTimeOriginal"] = self.header["gps"]["dateTtime"] # a must have parameter

self.header["file"]["asctec_fw_version"] = {"major":self.rawheader["firmware_version"]["major"],
"minor":self.rawheader["firmware_version"]["minor"],
Expand Down Expand Up @@ -975,6 +976,7 @@ def fill_header_dji(self):
self.header["file"]["about"]=a.get("rdf:about",0)
self.header["file"]["modifydate"]=a.get("xmp:modifydate",0)
self.header["file"]["createdate"]=a.get("xmp:createdate",0)
self.header["file"]["DateTimeOriginal"] = a.get("xmp:createdate",0)
self.header["file"]["format"]=a.get("dc:format",0)
self.header["file"]["version"]=a.get("crs:version",0)

Expand Down
57 changes: 57 additions & 0 deletions poitagger/import.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
from PyQt5 import QtCore, QtGui, uic
import os
import time
import datetime
import logging
import sys
import PIL
import shutil

from . import PATHS
from . import image

class CopyThread(QtCore.QThread):
log = QtCore.pyqtSignal(str)
critical = QtCore.pyqtSignal(str)
info = QtCore.pyqtSignal(str)
progress = QtCore.pyqtSignal(int)

outdirlist = []
eigeneConf = False


class SaveAsDialog(QtGui.QDialog):
def __init__(self,parent=None):
super(SaveAsDialog,self).__init__(parent)
uic.loadUi(os.path.join(PATHS["UI"],'save_as.ui'),self)
self.sourceTB.clicked.connect(self.onSearchSource)
self.pathButton.clicked.connect(self.onSearch)
self.setWindowTitle("SD-Karte einlesen")
self.setModal(True)

def st(self, sdcard, workspace, projektName):
self.sourceLE.setText(sdcard)
self.pathBox.setText(workspace)
self.nameBox.setText(projektName)

def onSearchSource(self):
path = QtGui.QFileDialog.getExistingDirectory(self, "einen anderen Ordner waehlen", self.sourceLE.text())
if path == "":
return
else:
self.sourceLE.setText(path)

def onSearch(self):
path = QtGui.QFileDialog.getExistingDirectory(self, "einen anderen Ordner waehlen", self.pathBox.text())
if path == "":
return
else:
self.pathBox.setText(path)

# def accept(self):
# print "Hallo"
# super(SaveAsDialog, self).accept()

# def reject(self):
# super(SaveAsDialog, self).reject()

153 changes: 153 additions & 0 deletions poitagger/importer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
from PyQt5 import QtCore, QtGui, uic
import os
import time
import datetime
import logging
import sys
import PIL
import shutil
from dateutil import parser
#import pytz
#from tzlocal import get_localzone

from . import PATHS
from . import image

class CopyThread(QtCore.QThread):
log = QtCore.pyqtSignal(str)
critical = QtCore.pyqtSignal(str)
info = QtCore.pyqtSignal(str)
progress = QtCore.pyqtSignal(int)

outdirlist = []
eigeneConf = False
def copy(self,indir,rootdir,flightname,nurFlugBilder,clearsdcard):
self.indir = indir
self.rootdir = rootdir
self.flightname = flightname
self.nurFlugBilder = nurFlugBilder
self.clearsdcard = clearsdcard
self.start()

def is_flying(self,img):
imag = image.Image.factory(img,True)
try:
if imag.header["gps"]["rel_altitude"]>5:
return True
else:
return False
except:
logging.warning("there was no rel_altitude exif tag in the image header")
return False

def get_foldername(self,img):
try:
print(img.header["file"]["DateTimeOriginal"],img.header["file"]["name"])
time = parser.parse(img.header["file"]["DateTimeOriginal"])
except:
time = datetime.datetime.now()
logging.warning("I didn't find a 'DateTimeOriginal'-Tag in Image Header, so i'll take the current time")
foldername = time.strftime("%y%m%d_%H%M_")+self.flightname.replace(" ", "_") #.astimezone(get_localzone())
outpath = os.path.join(self.rootdir,foldername)
return outpath

def create_folder(self,foldername): #and append (1) or (2) ... if it already exist
index = ''
while True:
try:
os.makedirs(foldername+index)
return foldername+index
except:
if index:
index = '('+str(int(index[1:-1])+1)+')' # Append 1 to number in brackets
else:
index = '(1)'
pass # Go and try create file again

def run(self):
self.Flights = {}
try:
for root, dirs, files in sorted(os.walk(self.indir)):
ImagesToCopy = []
for f in files:
if not os.path.splitext(f)[1].lower() in image.SUPPORTED_EXTENSIONS: continue
if self.nurFlugBilder and not self.is_flying(os.path.join(root,f)): continue
ImagesToCopy.append(os.path.join(root,f))
if len(files)==0: continue
img = image.Image.factory(os.path.join(root,f),True)
name = self.get_foldername(img)
self.Flights[name]=ImagesToCopy.copy()

for k,v in self.Flights.items():
k_renamed = self.create_folder(k)
for img in v:
shutil.copy2(img,k_renamed)

# prog += 1.0
# self.progress.emit(int(prog/foldersamount*100))
# if len(files)==0: continue
if self.clearsdcard:
for root, dirs, files in os.walk(self.indir):
for d in dirs:
shutil.rmtree(os.path.join(root, d))
for f in files:
os.remove(os.path.join(root, f))
self.info.emit("Das Einlesen der SD-Karte war erfolgreich!")


except:
(type, value, traceback) = sys.exc_info()
sys.excepthook(type, value, traceback)
self.critical.emit("SD-Karte einlesen fehlgeschlagen: %s "%value)

class SaveAsDialog(QtGui.QDialog):

def __init__(self,parent=None):
super().__init__(parent)
self.settings = QtCore.QSettings(PATHS["CONF"], QtCore.QSettings.IniFormat)
self.settings.setFallbacksEnabled(False)
uic.loadUi(os.path.join(PATHS["UI"],'save_as.ui'),self)
self.sourceTB.clicked.connect(self.onSearchSource)
self.pathButton.clicked.connect(self.onSearch)
self.setWindowTitle("Daten einlesen")
self.setModal(True)
self.worker = CopyThread()
self.sourceLE.setText(self.settings.value('IMPORT/folder'))
self.rootLE.setText(self.settings.value('PATHS/rootdir'))
self.flightnameLE.setText(self.settings.value('IMPORT/flightname'))
self.nurFlugBilder.setChecked(self.settings.value('IMPORT/nurFlugBilder',False,type=bool))
self.SDCard_leeren.setChecked(self.settings.value('IMPORT/SDCard_leeren',False,type=bool))

def connections(self):
self.worker.critical.connect(lambda txt : QtGui.QMessageBox.critical(self, "SD-Karte einlesen",txt))
self.worker.info.connect(lambda txt : QtGui.QMessageBox.information(self, "SD-Karte einlesen",txt))

# def st(self, sdcard, workspace, projektName):
# self.sourceLE.setText(sdcard)
# self.pathBox.setText(workspace)
# self.nameBox.setText(projektName)

def onSearchSource(self):
path = QtGui.QFileDialog.getExistingDirectory(self, "einen anderen Ordner waehlen", self.sourceLE.text())
if path != "": self.sourceLE.setText(path)

def onSearch(self):
path = QtGui.QFileDialog.getExistingDirectory(self, "einen anderen Ordner waehlen", self.rootLE.text())
if path != "": self.rootLE.setText(path)

def accept(self):
indir = str(self.sourceLE.text())
self.settings.setValue('IMPORT/folder',indir)
rootdir = str(self.rootLE.text())
self.settings.setValue('PATH/rootdir',rootdir)
flightname = str(self.flightnameLE.text())
self.settings.setValue('IMPORT/flightname',flightname)
nurFlugBilder = self.nurFlugBilder.isChecked()
self.settings.setValue('IMPORT/nurFlugBilder',nurFlugBilder)
clearsdcard = self.SDCard_leeren.isChecked()
self.settings.setValue('IMPORT/SDCard_leeren',clearsdcard)
self.worker.copy(indir, rootdir, flightname,nurFlugBilder,clearsdcard)
self.hide()
#def reject(self):
# super().reject()

21 changes: 19 additions & 2 deletions poitagger/save_as.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,25 @@
from PyQt5 import QtCore, QtGui, uic

import os
from . import PATHS
import time
import datetime
import logging
import sys
import PIL
import shutil

from . import PATHS
from . import image

class CopyThread(QtCore.QThread):
log = QtCore.pyqtSignal(str)
critical = QtCore.pyqtSignal(str)
info = QtCore.pyqtSignal(str)
progress = QtCore.pyqtSignal(int)

outdirlist = []
eigeneConf = False


class SaveAsDialog(QtGui.QDialog):
def __init__(self,parent=None):
super(SaveAsDialog,self).__init__(parent)
Expand Down
4 changes: 2 additions & 2 deletions poitagger/ui/save_as.ui
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="pathBox">
<widget class="QLineEdit" name="rootLE">
<property name="minimumSize">
<size>
<width>0</width>
Expand Down Expand Up @@ -62,7 +62,7 @@
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="nameBox">
<widget class="QLineEdit" name="flightnameLE">
<property name="minimumSize">
<size>
<width>0</width>
Expand Down
Loading

0 comments on commit bb6f6c9

Please sign in to comment.