cbc code added with GUI
This commit is contained in:
256
src/ofm_code_cbc_v1/new_updated_ofm .py
Normal file
256
src/ofm_code_cbc_v1/new_updated_ofm .py
Normal file
@@ -0,0 +1,256 @@
|
||||
#import matlab.engine
|
||||
from PyQt5 import QtCore, QtGui, uic, QtWidgets
|
||||
import sys,os
|
||||
import numpy as np
|
||||
import cv2
|
||||
import serial,sys
|
||||
import threading, time, Queue
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
name=raw_input("enter patient's name ")
|
||||
#age=raw_input("enter age ")
|
||||
today=datetime.now().date()
|
||||
today1=datetime.now().time()
|
||||
#t = datetime.time(datetime.now())
|
||||
|
||||
path = "./%s-" %name + str(today)
|
||||
try:
|
||||
os.mkdir(path)
|
||||
except OSError:
|
||||
print ("Creation of the directory %s failed" % path)
|
||||
else:
|
||||
print ("Successfully created the directory %s " % path)
|
||||
|
||||
|
||||
running = False
|
||||
capture_thread = None
|
||||
#for i in range(3):
|
||||
form_class = uic.loadUiType("simple.ui")[0]
|
||||
q = Queue.Queue()
|
||||
ser = serial.Serial('COM3',57600)
|
||||
capture = cv2.VideoCapture(0)
|
||||
capture_duration = 60*1
|
||||
q_write = Queue.Queue()
|
||||
|
||||
|
||||
def grab(width, height):
|
||||
global running,q,capture
|
||||
#capture = cv2.VideoCapture(0)
|
||||
capture.set(cv2.CAP_PROP_FRAME_WIDTH, width)
|
||||
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
|
||||
capture.set(cv2.CAP_PROP_EXPOSURE, -13)
|
||||
#print (capture.get(cv2.CAP_PROP_EXPOSURE) )
|
||||
while(running):
|
||||
retval, img = capture.read()
|
||||
if q.qsize() < 7200:
|
||||
q.put(img)
|
||||
|
||||
class OwnImageWidget(QtWidgets.QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super(OwnImageWidget, self).__init__(parent)
|
||||
self.image = None
|
||||
|
||||
def setImage(self, image):
|
||||
self.image = image
|
||||
sz = image.size()
|
||||
self.setMinimumSize(sz)
|
||||
self.update()
|
||||
|
||||
def paintEvent(self, event):
|
||||
qp = QtGui.QPainter()
|
||||
qp.begin(self)
|
||||
if self.image:
|
||||
qp.drawImage(QtCore.QPoint(0, 0), self.image)
|
||||
qp.end()
|
||||
|
||||
|
||||
|
||||
class MyWindowClass(QtWidgets.QMainWindow, form_class):
|
||||
location=''
|
||||
def __init__(self, parent=None):
|
||||
QtWidgets.QMainWindow.__init__(self, parent)
|
||||
self.setupUi(self)
|
||||
self.resize(730,730)
|
||||
self.currzpos=0
|
||||
#btn1 = QtWidgets.QPushButton('X+', self)
|
||||
#btn2 = QtWidgets.QPushButton('X-', self)
|
||||
#btn1.move(200, 500)
|
||||
#btn2.move(300, 500)
|
||||
self.startButton.clicked.connect(self.start_clicked)
|
||||
self.startButton4.clicked.connect(self.main)
|
||||
self.window_width = self.ImgWidget.frameSize().width()
|
||||
self.window_height = self.ImgWidget.frameSize().height()
|
||||
self.ImgWidget = OwnImageWidget(self.ImgWidget)
|
||||
self.startButton1.clicked.connect(self.xPos)
|
||||
self.startButton2.clicked.connect(self.xNeg)
|
||||
self.timer = QtCore.QTimer(self)
|
||||
self.timer.timeout.connect(self.update_frame)
|
||||
self.timer.start(.01)
|
||||
self.startButton3.clicked.connect(self.fCapture)
|
||||
self.startButton5.clicked.connect(self.home)
|
||||
self.startButton6.clicked.connect(self.start)
|
||||
self.startButton7.clicked.connect(self.xPoss)
|
||||
self.startButton8.clicked.connect(self.xNegg)
|
||||
|
||||
|
||||
def main(self):
|
||||
|
||||
capture_thread2 = threading.Thread(target=self.autofocus, args = ())
|
||||
capture_thread2.start()
|
||||
#capture_thread2.join()
|
||||
#self.autofocus()
|
||||
|
||||
def home(self):
|
||||
ser.write('Q')
|
||||
self.currzpos=0
|
||||
|
||||
def start(self):
|
||||
self.Zpulserate = 57600
|
||||
#ser.write('S')
|
||||
auto_travel=-650000
|
||||
self.gotoZ(auto_travel)
|
||||
|
||||
def gotoZ(self,zValue):
|
||||
zValue = int(zValue)
|
||||
if self.currzpos != zValue:
|
||||
zValue_str = str("%($)07d" % {"$":zValue})
|
||||
print zValue_str
|
||||
ser.write('M')
|
||||
ser.write(str(zValue_str))
|
||||
time.sleep(abs(self.currzpos-zValue)/self.Zpulserate)
|
||||
self.currzpos = int(zValue)
|
||||
|
||||
def autofocus(self):
|
||||
|
||||
global q
|
||||
Z_travel_for_crude = 16000; crude_step_count = 200;
|
||||
crude_pulse_count = Z_travel_for_crude / crude_step_count;
|
||||
crude_max_var=0; crude_loc_max_var=0;
|
||||
crude_start_loc = self.currzpos -(Z_travel_for_crude/2);
|
||||
self.gotoZ(crude_start_loc)
|
||||
crude_curr_loc = crude_start_loc;
|
||||
kernel = np.ones((5,5),np.float32)/25
|
||||
|
||||
for i in range(int(crude_pulse_count)):
|
||||
img=q.get()
|
||||
crude_curr_var = np.var(cv2.filter2D(img,-1,kernel))
|
||||
#cv2.imwrite("image/image_crude_auto{0}.jpg".format(i),img)
|
||||
print(crude_curr_var,'||',self.currzpos)
|
||||
if crude_curr_var > crude_max_var:
|
||||
crude_max_var = crude_curr_var
|
||||
crude_loc_max_var = crude_curr_loc
|
||||
image=img
|
||||
crude_curr_loc = crude_curr_loc + crude_step_count
|
||||
self.gotoZ(crude_curr_loc)
|
||||
time.sleep(.075)
|
||||
#a="image/image_crude%d.jpg"%crude_loc_max_var
|
||||
#cv2.imwrite(a ,image)
|
||||
self.gotoZ(crude_loc_max_var)
|
||||
|
||||
|
||||
def xPos(self):
|
||||
self.currzpos=int(self.currzpos)
|
||||
ser.write('G')
|
||||
self.currzpos = self.currzpos + 1
|
||||
print self.currzpos
|
||||
|
||||
def xNeg(self):
|
||||
self.currzpos=int(self.currzpos)
|
||||
ser.write('T')
|
||||
print self.currzpos
|
||||
|
||||
def xPoss(self):
|
||||
self.currzpos=int(self.currzpos)
|
||||
ser.write('D')
|
||||
self.currzpos = self.currzpos + 1
|
||||
print self.currzpos
|
||||
|
||||
def xNegg(self):
|
||||
self.currzpos=int(self.currzpos)
|
||||
ser.write('A')
|
||||
self.currzpos = self.currzpos - 1
|
||||
print self.currzpos
|
||||
|
||||
def start_clicked(self):
|
||||
global running
|
||||
running = True
|
||||
capture_thread.start()
|
||||
|
||||
|
||||
def update_frame(self):
|
||||
global q
|
||||
if not q.empty():
|
||||
img = q.get()
|
||||
img_height, img_width, img_colors = img.shape
|
||||
scale_w = float(self.window_width) / float(img_width)
|
||||
scale_h = float(self.window_height) / float(img_height)
|
||||
scale = min([scale_w, scale_h])
|
||||
|
||||
if scale == 0:
|
||||
scale = 1
|
||||
|
||||
img = cv2.resize(img, None, fx=scale, fy=scale, interpolation = cv2.INTER_CUBIC)
|
||||
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
|
||||
height, width, bpc = img.shape
|
||||
bpl = bpc * width
|
||||
image = QtGui.QImage(img.data, width, height, bpl, QtGui.QImage.Format_RGB888)
|
||||
self.ImgWidget.setImage(image)
|
||||
|
||||
|
||||
def fCapture(self):
|
||||
capture_thread3 = threading.Thread(target=self.fCapture_read, args = ())
|
||||
capture_thread3.start()
|
||||
|
||||
def fCapture_read(self):
|
||||
global capture,capture_duration
|
||||
global q_write
|
||||
t_end = time.time() + capture_duration
|
||||
self.counter=0
|
||||
print "frame capture started"
|
||||
while(capture.isOpened()):
|
||||
ret, frame = capture.read()
|
||||
if time.time() < t_end:
|
||||
if (ret==True):
|
||||
self.counter=self.counter+1
|
||||
if q_write.qsize()<120*capture_duration:
|
||||
q_write.put(frame)
|
||||
else:
|
||||
print "frames captured"
|
||||
print self.counter
|
||||
self.fcapture_write()
|
||||
|
||||
#cap.release()
|
||||
|
||||
def fcapture_write(self):
|
||||
global q_write,capture
|
||||
i=0
|
||||
if not q_write.empty():
|
||||
for i in range (self.counter):
|
||||
img=q_write.get()
|
||||
i=i+1
|
||||
cv2.imwrite(str(path)+ "/image%d.bmp" %i,img)
|
||||
|
||||
self.call_matlab()
|
||||
|
||||
def call_matlab(self):
|
||||
print "calling matlab"
|
||||
print path
|
||||
import matlab.engine as m
|
||||
eng = m.start_matlab()
|
||||
eng.new_whole_blood_segment_odroid(path)
|
||||
#print "calling matlab"
|
||||
#mlab.new_whole_blood_segment_odroid(path)
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__' :
|
||||
capture_thread = threading.Thread(target=grab, args = (640,480))
|
||||
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
w = MyWindowClass()
|
||||
w.setWindowTitle('OFM GUI')
|
||||
w.show()
|
||||
app.exec_()
|
||||
|
||||
Reference in New Issue
Block a user