Skip to content
Snippets Groups Projects
Commit 552347d8 authored by Harrison Edwards's avatar Harrison Edwards
Browse files

added logging and screen capture

parent b9ecba17
No related merge requests found
INFO:root:finished init.........................................05_10_2017_10.31.11.812096
INFO:root:starting video........................................05_10_2017_10.31.11.812096
INFO:root:taking target picture.................................05_10_2017_10.31.13.485490
INFO:root:taking non target picture.............................05_10_2017_10.31.13.966944
INFO:root:taking non target picture.............................05_10_2017_10.31.15.836573
Experiments/experiment_05_10_2017_10.31.11.429987/target_05_10_2017_10.31.13.486506.jpg

55.9 KiB

......@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>376</width>
<height>315</height>
<width>520</width>
<height>353</height>
</rect>
</property>
<property name="windowTitle">
......@@ -17,8 +17,8 @@
<widget class="QPushButton" name="up_button">
<property name="geometry">
<rect>
<x>150</x>
<y>200</y>
<x>210</x>
<y>220</y>
<width>90</width>
<height>23</height>
</rect>
......@@ -30,8 +30,8 @@
<widget class="QPushButton" name="right_button">
<property name="geometry">
<rect>
<x>190</x>
<y>220</y>
<x>250</x>
<y>240</y>
<width>75</width>
<height>23</height>
</rect>
......@@ -43,8 +43,8 @@
<widget class="QPushButton" name="left_button">
<property name="geometry">
<rect>
<x>120</x>
<y>220</y>
<x>180</x>
<y>240</y>
<width>75</width>
<height>23</height>
</rect>
......@@ -56,8 +56,8 @@
<widget class="QPushButton" name="down_button">
<property name="geometry">
<rect>
<x>150</x>
<y>240</y>
<x>210</x>
<y>260</y>
<width>90</width>
<height>23</height>
</rect>
......@@ -69,21 +69,76 @@
<widget class="QWidget" name="verticalLayoutWidget">
<property name="geometry">
<rect>
<x>80</x>
<y>20</y>
<width>221</width>
<height>171</height>
<x>130</x>
<y>0</y>
<width>261</width>
<height>201</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout"/>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>-90</x>
<y>200</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
<widget class="QPushButton" name="target_screenshot_button">
<property name="geometry">
<rect>
<x>40</x>
<y>10</y>
<width>81</width>
<height>61</height>
</rect>
</property>
<property name="text">
<string>Target
Screenshot</string>
</property>
</widget>
<widget class="QPushButton" name="non_target_screenshot_button">
<property name="geometry">
<rect>
<x>40</x>
<y>70</y>
<width>81</width>
<height>61</height>
</rect>
</property>
<property name="text">
<string>Non-Target
Screenshot</string>
</property>
</widget>
<widget class="QPushButton" name="misc_screenshot">
<property name="geometry">
<rect>
<x>40</x>
<y>130</y>
<width>81</width>
<height>61</height>
</rect>
</property>
<property name="text">
<string>Miscellaneous
Screenshot</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>376</width>
<width>520</width>
<height>21</height>
</rect>
</property>
......
import sys
import sys,logging,os
import cv2
import numpy as np
from PyQt5.QtWidgets import QApplication, QMainWindow
......@@ -6,6 +6,7 @@ from LCL_ui import Ui_MainWindow
from PyQt5 import QtCore
from PyQt5 import QtWidgets
from PyQt5 import QtGui
from utils import screen_shooter,now,comment
class ShowVideo(QtCore.QObject):
......@@ -13,35 +14,28 @@ class ShowVideo(QtCore.QObject):
camera_port = 0
camera = cv2.VideoCapture(camera_port)
VideoSignal = QtCore.pyqtSignal(QtGui.QImage)
screenshot_signal = QtCore.pyqtSignal('PyQt_PyObject')
def __init__(self, parent = None):
super(ShowVideo, self).__init__(parent)
self.run_video = True
@QtCore.pyqtSlot()
def startVideo(self):
self.run_video = True
print('starting video')
comment('starting video')
while self.run_video:
ret, image = self.camera.read()
color_swapped_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
height, width, _ = color_swapped_image.shape
self.screenshot_signal.emit(image)
color_swapped_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
height, width, _ = color_swapped_image.shape
qt_image = QtGui.QImage(color_swapped_image.data,
width,
height,
color_swapped_image.strides[0],
QtGui.QImage.Format_RGB888)
self.VideoSignal.emit(qt_image)
QtGui.QImage.Format_RGB888)
self.VideoSignal.emit(qt_image)
QApplication.processEvents()
@QtCore.pyqtSlot()
def stop_video(self):
print('stopping video')
self.run_video = False
class ImageViewer(QtWidgets.QWidget):
def __init__(self, parent = None):
......@@ -53,30 +47,31 @@ class ImageViewer(QtWidgets.QWidget):
painter = QtGui.QPainter(self)
painter.drawImage(0,0, self.image)
self.image = QtGui.QImage()
@QtCore.pyqtSlot(QtGui.QImage)
def setImage(self, image):
if image.isNull():
print("Viewer Dropped frame!")
self.image = image.scaled(221,171)
# if image.size() != self.size():
# self.setFixedSize(image.size())
comment("Viewer Dropped frame!")
self.image = self.resize_dynamically(image)
self.update()
def resize_dynamically(self,image):
return image.scaled(window.ui.verticalLayoutWidget.size())
class main_window(QMainWindow):
def __init__(self):
super(main_window, self).__init__()
# set up the video classes and thread
self.thread = QtCore.QThread()
self.thread.start()
self.vid = ShowVideo()
self.vid.moveToThread(self.thread)
# self.vid.moveToThread(self.thread)
self.image_viewer = ImageViewer()
self.vid.VideoSignal.connect(self.image_viewer.setImage)
self.screen_shooter = screen_shooter()
self.vid.screenshot_signal.connect(self.screen_shooter.screenshot_slot)
# Set up the user interface from Designer.
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
......@@ -85,20 +80,18 @@ class main_window(QMainWindow):
self.ui.verticalLayout.addWidget(self.image_viewer)
# Connect up the buttons.
self.ui.left_button.clicked.connect(self.print_test)
self.ui.right_button.clicked.connect(self.vid.startVideo)
self.ui.down_button.clicked.connect(self.vid.stop_video)
print('finished init')
def print_test(self):
print('test')
# TODO add comment logging from the user
# TODO add general screenshot button so user can comment on what is seen
self.ui.target_screenshot_button.clicked.connect(self.screen_shooter.save_target_image)
self.ui.non_target_screenshot_button.clicked.connect(self.screen_shooter.save_non_target_image)
self.show()
comment('finished init')
app = QApplication(sys.argv)
#############
#############
window = main_window()
window.show()
print('exit with code: ' + str(app.exec_()))
sys.exit()
\ No newline at end of file
if __name__ == '__main__':
app = QApplication(sys.argv)
window = main_window()
window.vid.startVideo()
comment('exit with code: ' + str(app.exec_()))
sys.exit()
\ No newline at end of file
......@@ -11,30 +11,42 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(376, 315)
MainWindow.resize(520, 353)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.up_button = QtWidgets.QPushButton(self.centralwidget)
self.up_button.setGeometry(QtCore.QRect(150, 200, 90, 23))
self.up_button.setGeometry(QtCore.QRect(210, 220, 90, 23))
self.up_button.setObjectName("up_button")
self.right_button = QtWidgets.QPushButton(self.centralwidget)
self.right_button.setGeometry(QtCore.QRect(190, 220, 75, 23))
self.right_button.setGeometry(QtCore.QRect(250, 240, 75, 23))
self.right_button.setObjectName("right_button")
self.left_button = QtWidgets.QPushButton(self.centralwidget)
self.left_button.setGeometry(QtCore.QRect(120, 220, 75, 23))
self.left_button.setGeometry(QtCore.QRect(180, 240, 75, 23))
self.left_button.setObjectName("left_button")
self.down_button = QtWidgets.QPushButton(self.centralwidget)
self.down_button.setGeometry(QtCore.QRect(150, 240, 90, 23))
self.down_button.setGeometry(QtCore.QRect(210, 260, 90, 23))
self.down_button.setObjectName("down_button")
self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(80, 20, 221, 171))
self.verticalLayoutWidget.setGeometry(QtCore.QRect(130, 0, 261, 201))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(-90, 200, 75, 23))
self.pushButton.setObjectName("pushButton")
self.target_screenshot_button = QtWidgets.QPushButton(self.centralwidget)
self.target_screenshot_button.setGeometry(QtCore.QRect(40, 10, 81, 61))
self.target_screenshot_button.setObjectName("target_screenshot_button")
self.non_target_screenshot_button = QtWidgets.QPushButton(self.centralwidget)
self.non_target_screenshot_button.setGeometry(QtCore.QRect(40, 70, 81, 61))
self.non_target_screenshot_button.setObjectName("non_target_screenshot_button")
self.misc_screenshot = QtWidgets.QPushButton(self.centralwidget)
self.misc_screenshot.setGeometry(QtCore.QRect(40, 130, 81, 61))
self.misc_screenshot.setObjectName("misc_screenshot")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 376, 21))
self.menubar.setGeometry(QtCore.QRect(0, 0, 520, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
......@@ -51,6 +63,13 @@ class Ui_MainWindow(object):
self.right_button.setText(_translate("MainWindow", "Right"))
self.left_button.setText(_translate("MainWindow", "Left"))
self.down_button.setText(_translate("MainWindow", "Down"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
self.target_screenshot_button.setText(_translate("MainWindow", "Target \n"
" Screenshot"))
self.non_target_screenshot_button.setText(_translate("MainWindow", "Non-Target \n"
" Screenshot"))
self.misc_screenshot.setText(_translate("MainWindow", "Miscellaneous \n"
" Screenshot"))
if __name__ == "__main__":
......
No preview for this file type
File added
utils.py 0 → 100644
from PyQt5 import QtCore
import time,os,datetime
import cv2
import logging
def now():
return datetime.datetime.now().strftime('%d_%m_%Y___%H.%M.%S.%f')
def comment(text):
'''
prints to screen and logs simultaneously
'''
now_time = now()
logging.info('{0}{1}{2}'.format(text,
'.'*(80-(len(text)+len(now_time))),
now_time))
print(text)
class screen_shooter():
'''
handles the various different types of screenshots
'''
@QtCore.pyqtSlot('PyQt_PyObject')
def screenshot_slot(self,image):
self.image = image
@QtCore.pyqtSlot()
def save_target_image(self):
comment('taking target picture')
cv2.imwrite(os.path.join(experiment_folder_location,
'target___{}.jpg'.format(now())),self.image)
@QtCore.pyqtSlot()
def save_non_target_image(self):
comment('taking non target picture')
cv2.imwrite(os.path.join(experiment_folder_location,
'non_target___{}.jpg'.format(now())),self.image)
@QtCore.pyqtSlot()
def save_misc_image(self):
comment('taking miscellaneous picture')
cv2.imwrite(os.path.join(experiment_folder_location,
'miscellaneous___{}.jpg'.format(now())),self.image)
experiment_name = 'experiment_{}'.format(now())
experiment_folder_location = os.path.join(os.path.dirname(os.path.abspath(__file__)),'Experiments',experiment_name)
os.makedirs(experiment_folder_location)
logging.basicConfig(filename=os.path.join(experiment_folder_location,
'{}.log'.format(experiment_name)), level=logging.INFO)
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment