IMPLEMENTASI SISTEM
2. IDLE
5.5. Implementasi Antarmuka
5.5.1. Halaman Proses mencari nilai CCD
Halaman ini berfungsi untuk mencari nilai CCD dari data latih yang dikumpulkan dalam satu folder khusus lalu ditempatkan pada file ekstensi excel yang sudah disediakan. Data latih diproses secara bertahap sampai akhirnya terkumpul masing – masing jenis daun mangga sebanyak 1000 data. Berikut ini kodingan dari halaman proses mencari nilai CCD.
import cv2
import numpy as np import math
import xlwt
from xlwt import Workbook import glob
wb = Workbook()
sheet1 = wb.add_sheet('Sheet 1')
#from matplotlib import pyplot as plt
# load the image and show it key = 0
p = 1
path = "D:/Tugas Akhir/T-A/proses data latih/datalatih/*.*"
for file in glob.glob(path):
print(file)
text = file.replace("D:/Tugas Akhir/T-A/proses data latih/datalatih", "") nama = text
text = text.replace("(","") text = text.replace(")","") text = text.replace(".jpg","") text = text.replace(" ","")
text = ''.join([i for i in text if not i.isdigit()])
print(text)
68
image = cv2.imread(file,0)
# resize imagg
#print('Original Dimensions : ',image.shape) scale_percent = 22.08 # percent of original size width = int(image.shape[1] * scale_percent / 100) height = int(image.shape[0] * scale_percent / 100) dim = (width, height)
image = cv2.resize(image, dim, interpolation = cv2.INTER_AREA) #print('Resized Dimensions : ',image.shape)
#cv2.imshow("daun.jpg", image)
ret, thresh = cv2.threshold(image, 200, 255, cv2.THRESH_BINARY) kernel = np.ones((10,10),np.uint8)
erosi = cv2.morphologyEx(thresh,cv2.MORPH_CLOSE, kernel) #cv2.imshow("binary",thresh)
#cv2.imshow("morfologi", erosi) #cv2.imwrite("face.jpg", erosi) height, width = erosi.shape[:2]
#print ("nilai height", height) datax = 0
datay = 0 greyscale = 0 binary = 0 total = 0 a = 500 b = 0 c = 500 d = 0
for y in range (height):
for x in range (width):
if erosi[y,x] == 0:
#print ("datay = ",y,"datax = ",x) greyscale = greyscale + image[y,x]
binary = binary + thresh[y,x]
if a > y : a = y if b < y : b = y if c > x : c = x if d < x : d = x
total = height*width greyscale = greyscale/total binary = binary/total cropped = erosi[a:b, c:d]
#cv2.imshow("cropped", cropped) height, width = cropped.shape[:2]
for y in range (height):
for x in range (width):
datax = datax + cropped[y,x]
datay = height*width datax = datax/datay
#print("greyscale = ", greyscale)
#print("binary = ", binary)
#print("auto cropped = ", datax)
70
# start CCD
# resize image
#print('Original Dimensions : ',cropped.shape) width = 0
plus = 50
while(width < 540):
scale_percent = plus # percent of original size width = int(cropped.shape[1] * scale_percent / 100) height = int(cropped.shape[0] * scale_percent / 100) dim = (width, height)
image = cv2.resize(cropped, dim, interpolation = cv2.INTER_AREA) #print('Resized Dimensions : ',image.shape)
#print("plus = ", plus) plus = plus + 0.1
#print("height = ", height) #print("width = ", width) center_x = height/2 center_y = width/2
center_x = round(center_x) center_y = round(center_y) #print("center_y = ", center_y) #print("center_x = ", center_x) tengah = cropped[center_x,center_y]
#print("titik tengah = ",tengah) height, width = image.shape[:2]
baru = image.copy() for y in range (height):
for x in range (width):
baru[y,x] = 255
for x in range (width):
image[0,x] = 255
image[height-1,x] = 255
baru[center_x,center_y] = 0 #for y in range(height):
# for x in range(0,width,3):
# if cropped[y,x] == 0:
# baru[y,x] = 0 hasil = 0
average = 0 a = 0
kuadrat1 = 0 kuadrat2 = 0
for y in range (0,width,3):
for x in range(height):
if image[x,y] == 0:
baru[x,y] = 0
kuadrat1 = (y - center_y) * (y - center_y) kuadrat2 = (x - center_x) * (x - center_x) hasil = math.sqrt(kuadrat1 + kuadrat2) hasil = round(hasil,2)
average = average + hasil sheet1.write(a,key, hasil) a = a + 1
print("R",a ," = ",hasil)
break
72
b = 0 c = 0
for y in range (0,width,3):
for x in range(height):
if image[x,y] == 0:
b = 1
if image[x,y] == 255 and b == 1:
baru[x,y] = 0 b = 0
c = c + 1
kuadrat1 = (y - center_y) * (y - center_y) kuadrat2 = (x - center_x) * (x - center_x) hasil = math.sqrt(kuadrat1 + kuadrat2) hasil = round(hasil,2)
average = average + hasil sheet1.write(a,key, hasil) a = a + 1
print("R",a ," = ",hasil) break
if text == "\gadung":
sheet1.write(360,key, "Gadung") if text == "\manalagi":
sheet1.write(360,key, "Manalagi")
if text == "\lalijiwo":
sheet1.write(360,key, "Lalijiwo")
sheet1.write(361,key,nama) p = p + 1
key = key + 1
average = round(average/360,2) #print("Rata-rata ccd = ",average) height, width = image.shape[:2]
#cv2.imshow("cropped", baru) wb.save('xlwt datalatihbaru.xls') cv2.destroyAllWindows()
Ketika dijalankan maka akan muncul jendela Python Shell untuk memunculkan hasil nilai CCD seperti pada gambar 5.1 dan gambar 5.2 dibawah ini.
Gambar 5.1. Jendela Phython Shell untuk mencari data CCD
74
5.5.2. Halaman Proses Klasifikasi K-NN
Halaman ini berfungsi untuk melakukan klasifikasi pada data uji atau implementasi user. Memiliki user interface untuk menginput image yang selanjutnya dicari nilai CCD nya kemudian ditentukan jenis daun mangga nya menggunakan metode K-Nearest Neighbour.
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'daunmangga.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
Gambar 5.2. Jendela Phython Shell untuk mencari data CCD
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtGui
from PyQt5.QtWidgets import QApplication,QWidget, QVBoxLayout, QPushButton, QFileDialog , QLabel, QTextEdit
import sys import cv2
import numpy as np import math
import xlwt
from xlwt import Workbook import xlrd
from PyQt5.QtGui import QPixmap class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog") Dialog.resize(894, 286)
self.frame1 = QtWidgets.QLabel(Dialog)
self.frame1.setGeometry(QtCore.QRect(20, 40, 285, 191)) self.frame1.setText("")
self.frame1.setPixmap(QtGui.QPixmap("putih.png")) self.frame1.setScaledContents(True)
self.frame1.setObjectName("frame1") self.label_2 = QtWidgets.QLabel(Dialog)
self.label_2.setGeometry(QtCore.QRect(80, 10, 151, 16)) font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.label_2.setFont(font)
76
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(Dialog)
self.label_3.setGeometry(QtCore.QRect(370, 10, 151, 16)) font = QtGui.QFont()
font.setPointSize(12) font.setBold(True) font.setWeight(75) self.label_3.setFont(font)
self.label_3.setObjectName("label_3") self.label_4 = QtWidgets.QLabel(Dialog)
self.label_4.setGeometry(QtCore.QRect(690, 10, 151, 16)) font = QtGui.QFont()
font.setPointSize(12) font.setBold(True) font.setWeight(75) self.label_4.setFont(font)
self.label_4.setObjectName("label_4") self.frame1_2 = QtWidgets.QLabel(Dialog)
self.frame1_2.setGeometry(QtCore.QRect(310, 40, 281, 191)) self.frame1_2.setText("")
self.frame1_2.setPixmap(QtGui.QPixmap("putih.png")) self.frame1_2.setScaledContents(True)
self.frame1_2.setObjectName("frame1_2") self.frame1_3 = QtWidgets.QLabel(Dialog)
self.frame1_3.setGeometry(QtCore.QRect(600, 40, 271, 111)) self.frame1_3.setText("")
self.frame1_3.setPixmap(QtGui.QPixmap("putih.png")) self.frame1_3.setScaledContents(True)
self.frame1_3.setObjectName("frame1_3")
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(20, 240, 281, 31))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(Dialog)
self.pushButton_2.setGeometry(QtCore.QRect(310, 240, 281, 31)) self.pushButton_2.setObjectName("pushButton_2")
self.label_5 = QtWidgets.QLabel(Dialog)
self.label_5.setGeometry(QtCore.QRect(650, 230, 161, 31)) font = QtGui.QFont()
font.setPointSize(12) font.setBold(True) font.setWeight(75) self.label_5.setFont(font)
self.label_5.setObjectName("label_5") self.label_6 = QtWidgets.QLabel(Dialog)
self.label_6.setGeometry(QtCore.QRect(670, 190, 161, 41)) font = QtGui.QFont()
font.setPointSize(12) font.setBold(True) font.setWeight(75) self.label_6.setFont(font)
self.label_6.setObjectName("label_6") self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog) self.pushButton.clicked.connect(self.get_image) self.pushButton_2.clicked.connect(self.process) def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "DETEKSI DAUN
MANGGA "))
78
self.label_2.setText(_translate("Dialog", "ORIGINAL IMAGE"))
self.label_3.setText(_translate("Dialog", "PRE-PROCESSING")) self.label_4.setText(_translate("Dialog", "HASIL CCD"))
self.pushButton.setText(_translate("Dialog", "B R O W S E")) self.pushButton_2.setText(_translate("Dialog", "P R O C E S S")) self.label_5.setText(_translate("Dialog", "HASIL KLASIFIKASI")) self.label_6.setText(_translate("Dialog", "DAUN MANGGA")) def get_image(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName, _ =
QFileDialog.getOpenFileName(None,"QFileDialog.getOpenFileName()",
"","All Files (*);;Python Files (*.py)", options=options) if fileName:
print(fileName)
self.frame1.setPixmap(QtGui.QPixmap(fileName)) img = cv2.imread(fileName)
print('Original Dimensions : ',img.shape) scale_percent = 22.08 # percent of original size width = int(img.shape[1] * scale_percent / 100) height = int(img.shape[0] * scale_percent / 100) dim = (width, height)
img = cv2.resize(img, dim, interpolation = cv2.INTER_AREA) image = img
print('Resized Dimensions : ',img.shape) cv2.imwrite("objek.jpg", img)
self.frame1.setPixmap(QtGui.QPixmap("objek.jpg"))
def process(self):
#---Can be edit--- BLUR = 21
CANNY_THRESH_1 = 10
Dalam dokumen
BAB IV ANALISA DAN DESAIN SISTEM
(Halaman 37-49)