import tkinter.ttk
import cv2
import numpy as np
import xlsxwriter
import datetime
from tkinter.filedialog import askopenfilename, asksaveasfilename
import os
import tkinter.messagebox
import matplotlib.pyplot as plt
import pandas as pd
class penampil:
# membuat tampilan antar muka
def __init__(self, induk):
self.induk = induk
self.induk.resizable(True, True)
contentFrame = Frame(induk, borderwidth=2, relief=GROOVE)
contentFrame.pack(side=LEFT, expand=YES, fill=BOTH)
self.btn0 = Button(contentFrame, text='Petunjuk',
command=self.petunjuk).pack(side=LEFT, expand=YES, fill=BOTH)
self.btn1 = Button(contentFrame, text='Ukur',
command=self.ukur_rekam).pack(side=LEFT, expand=YES, fill=BOTH)
# self.btn2 = Button(contentFrame, text='lihat grafik 3D',
command=self.grafik3D).pack(side=LEFT, expand=YES,fill=BOTH)
self.btn3 = Button(contentFrame, text='Lihat Hasil Ukur',
command=self.buka_file).pack(side=LEFT, expand=YES,
fill=BOTH)
self.btn4 = Button(contentFrame, text='Keluar',
command=self.quit).pack(side=LEFT, expand=YES, fill=BOTH)
self.btn5=Button(contentFrame,text='Camera',command=self.camera).pack(side=LEFT,exp
and=YES,fill=BOTH)
menu = Menu(self.induk)
self.induk.config(menu=menu)
def petunjuk(self):
# membuat petunjuk penggunaan software
tkinter.messagebox.showinfo("Info", "1. Hubungkan kamera stereo dengan
notebook atau PC.\n"
"2. Tekan ukur dan rekam untuk memulai
pengukuran.\n"
"3. Saat mengukur, pastikan persegi
merah muda menandai objek yang diukur pada kedua citra.\n"
"4. Jika belum arahkan krusor pada
objek yang diukur pada citra kiri lalu tekan klik.\n"
"5. Tekan ( q ) untuk mengakhiri
pengukuran.\n"
"6. Hasil pengukuran tersimpan dalam
folder aplikasi ini.\n")
def ukur_rekam(self):
# mengatur ukuran template
r = 12
w = h = 2 * r
x1 = [0,0,0]
y1 = [0,0]
# inisialisasi kamera
cap = cv2.VideoCapture(1)
# menentukan resolusi citra
cap.set(3, 1280)
row = 1
column = 0
# definisi variabel
X_ob = 0
Y_ob = 0
Z_ob = 0
# merekam video
size = (int(cap.get(3)), int(cap.get(4)))
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
out = cv2.VideoWriter("Data_{}.avi".format(tsv.strftime("%d-%m-%Y_%H-%M-
%S")), fourcc, fps, size)
# while 1
while (1):
ret, frame = cap.read()
# cv2.setMouseCallback('image', pilih_objek)
cv2.imshow('image', frame)
j = 1
k = cv2.waitKey(1) & 0xff
if k == ord('q'):
cv2.destroyAllWindows()
break
elif k == ord('s'): # menjeda
cv2.setMouseCallback('image', pilih_objek)
# cv2.rectangle(frame, (x1,y1), (x2,y2), (0, 255, 0), 2)
cv2.waitKey(0)
cv2.waitKey(10)
elif k == ord('c'): # memotret
ts = datetime.datetime.now()
# cv2.imwrite('citra.png', frame)
cv2.imwrite(r"E:\pengukuran tesis\
Citra_{}.tiff".format(ts.strftime("%d-%m-%Y_%H-%M-%S")), frame)
cv2.imshow('citra', frame)
cv2.waitKey(0)
cv2.waitKey(1)
# while 2
while (1):
ret, frame = cap.read() # membaca frame
cv2.namedWindow('image')
cv2.setMouseCallback('image', pilih_objek)
disparitas = x1[2]
cv2.imshow('image', frame)
# cv2.imwrite('citra.png', frame)
# cv2.imshow('citra',frame)
cv2.setMouseCallback('image', pilih_objek)
cv2.waitKey(0)
cv2.waitKey(1)
cv2.imshow('citra', frame)
cv2.waitKey(0)
cv2.waitKey(1)
# while 3
while (1):
# menghitung disparitas
x_kiri = int(pt1[0] - 0.5 * lb)
x_kanan = int(pt2[0] - 0.5 * lb + 19) # ralat sistematis pusat kamera
kanan 19 (diperoleh saat kalibrasi)
disparitas = x_kiri - x_kanan
out.write(frame)
cv2.imshow('image', frame)
cv2.imshow('citra', frame)
cv2.waitKey(0)
cv2.waitKey(1)
workbook.close()
cap.release()
out.release()
cv2.destroyAllWindows()
def buka_file(self):
# Membuat fuction open_dialog()
fileName = askopenfilename(filetypes=(("All files", "*.*"), ("Video file",
"*.avi"), ("Excel file", "*.xlsx")))
os.startfile(fileName) # memutar video pakai aplikasi pada OS (operating
sistem)
def quit(self):
import sys
sys.exit()
def camera(self):
print('aaaaa')
# inisialisasi kamera
vid = cv2.VideoCapture(1)
# menentukan resolusi citra
vid.set(3, 1280)
while (True):
break
if cv2.waitKey(1) & 0xFF == ord('q'):
break
root = Tk()
app = penampil(root)
root.title('PENGUKURAN GERAK 3D OBJEK BERBASIS KAMERA STEREO')
root.geometry('500x20')
root.mainloop()