• Tidak ada hasil yang ditemukan

Halaman Proses mencari nilai CCD

Dalam dokumen BAB IV ANALISA DAN DESAIN SISTEM (Halaman 37-49)

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)

Dokumen terkait