• Tidak ada hasil yang ditemukan

BAB 2 LANDASAN TEORI

3.3 Pengujian Komponen

3.3.2 Pengujian Video StreamIP Camera EZVIZ C1C

Pengujian video stream dari IP Camera EZVIZ C1C di laptop dilakukanuntuk mengetahui apakah video streamsudahtampil di laptop atau belum.Video streamIP Camera EZVIZ C1C dapat diakses dengan terlebih dahulu mengetahui URL stream pada IP Camera EZVIZ C1Ctersebut.

cam=cv2.VideoCapture("rtsp://admin:[email protected]/h264_stream") Kemudian python akan membaca video stream yang ada pada alamat cam tersebut. Untuk mengindari kesalahan ataupun lag saat menampilkan video stream, ukuran layar kan disesuaikan dalam hal ini akan diperkecil sebesar 0,5 kalinya.

if y <= 120 and y > 100 and x >= 320:

matches.remove((x,y))

Gambar 3.9 Tampilan Video Stream dari IP Camera EZVIZ C1C di Laptop

3.3.3 Pengujian 2 Garis Horizontal sebagai Ketinggian pada IP Camera EZVIZC1C

Setelah menampilkan video streamIP Camera EZVIZ C1C di laptop yang dapat diakses dengan mengetahui URL stream pada IP Camera EZVIZ C1C tersebut, langkah selanjutnya adalah memberi program pada python untuk membuat dua garis horizontal sebagai ketinggian dengan perintah :

cv2.line(frame1, (320, garis_sumbu_y), (650, garis_sumbu_y), (255,0,0), 2) cv2.line(frame1, (330, garis_sumbu_y2), (620, garis_sumbu_y2), (255,255,0), 2)

Dengan garis_sumbu_y=120, garis_sumbu_y2=400.

27

Gambar 3.10 Tampilan 2 Garis Horizontal sebagai Ketinggian pada IP Camera EZVIZC1Cdi Laptop

3.3.4 Pengujian Pendeteksian Bola pada IP Camera EZVIZC1C

Setelah menampilkan video streamIP Camera EZVIZ C1C dan menampilkan 2 garis horizontal sebagai ketinggian, langkah selanjutnya adalah memberi program pada python agar dapat mendeteksi bola yang melewati area IP Camera EZVIZ C1C dengan perintah:

d = cv2.absdiff(frame1,frame2)

grey = cv2.cvtColor(d,cv2.COLOR_BGR2GRAY) frame1 = cv2.resize(frame1, None, fx = 0.5, fy = 0.5) blur = cv2.GaussianBlur(grey,(5,5),0)

ret , th = cv2.threshold(blur,60,200,cv2.THRESH_BINARY) th = cv2.resize(th, None, fx = 0.5, fy = 0.5)

dilated = cv2.dilate(th,np.ones((3,3)))

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (2, 2)) closing = cv2.morphologyEx(dilated, cv2.MORPH_CLOSE, kernel)

contours,h=cv2.findContours(closing,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMP LE)

for(i,c) in enumerate(contours):

(x,y,w,h) = cv2.boundingRect(c)

contour_valid = (w >= min_contour_width) and ( h >= min_contour_height)

if not contour_valid:

continue

cv2.rectangle(frame1,(x-10,y-10),(x+w+10,y+h+10),(255,0,0),2)

Gambar 3.11 Tampilan Pendeteksian Bola pada IP Camera EZVIZ C1C di Laptop 3.3.5 Pengujian Waktu pada IP Camera EZVIZC1C

Pengujian waktu adalah waktu dimana program akan mengurangkan ketika bola yang terdeteksi melewati garis biru tua denganketika bola yang terdeteksi melewati garis biru muda. Untuk bola yang terdeteksi melewati garis biru tua, catat waktu:

if y <= 120 and y > 100 and x >= 320:

matches.remove((x,y)) t = datetime.datetime.now() tim1 = t.second

Untuk bola yang terdeteksi melewati garis biru muda, catat waktu lalu

29

kurangkan kedua waktu tersebut:

if y >= 350 and y < 400 and x >= 330:

matches.remove((x,y)) t2 = datetime.datetime.now() total_waktu=t2.second-tim1

Lalu tampilkan waktu dalam satuan detik:

cv2.putText(frame1,"Waktu:"+str(total_waktu)+"detik",(10,100), cv2.FONT_HERSHEY_SIMPLEX, 1,(0, 0, 0), 2)

Gambar 3.12 Tampilan Waktu ketika Bola Melewati 2 Garis Horizontal (Ketinggian) pada IP Camera EZVIZ C1C di Laptop

3.3.6 Pengujian Kelajuan Bola padaIP Camera EZVIZC1C

Pengujian kelajuan Bola dapat dilakukan setelah proses pengujian waktu.

total_waktu=t2.second-tim1 kelajuan=speed_cal(total_waktu)

Dengan speed_cal adalah:

def speed_cal(total_waktu):

try:

kelajuan = (0.1/total_waktu)

cv2.putText(frame1,"Kelajuan:"+str(kelajuan)+"m/detik",(10,100),cv2.FONT_HERS HEY_SIMPLEX, 1, (0, 0, 0), 2)

print(kelajuan) return kelajuan

Kelajuan akan diolah ke dalam persamaan (0.1/total_waktu). Kemudian

“Kelajuan” di tampilkan dalam m/detik.

Gambar 3.13 Tampilan Kelajuan Bolapada IP Camera EZVIZ C1C di Laptop

3.3.7 Pengujian Kelajuan Bola pada Excel

Pengujian kelajuanbolapadaExcel dapat dilakukan setelah semua pengujian sebelumnya berhasil dilakukan.

1 Air 22:44 WIB 4,54 m/s 4,53 m/s

2 Gliserin 00:18 WIB 3,089999 m/s 3,089701m/s

Tabel3.3.7 Kelajuan dan Waktu Bola pada Excel

Diperlukan perintah melalui python untuk membuat tabel kelajuan bola.

thin_border =

Border(left=Side(border_style='dashed',color='FF000000'), right=Side(border_style='dashed',color='FF000000'), top=Side(border_style='thin',color='FF000000'), bottom=Side(border_style='thin',color='FF000000')

)

thick_border = Border(left=Side(border_style='thin',color='FF000000'), right=Side(border_style='thin',color='FF000000'),

31

for _ in range(Table_num):

for i in range (row_loc,row_loc+row_num):

for j in range (col_loc,col_num+col_loc):

ws.cell(row=i+1,

column=j+1).border=thin_border if i ==row_loc:

ws.cell(row=i+1, column=j+1).border=Double_border ws.cell(row=i+1, column=j+1).fill=fill_cell if i

==row_loc+row_num-1:

ws.cell(row=i+1, column=j+1).border=thick_border row_loc= row_loc+row_num+dis

Untuk ”Waktu” dan ”Kelajuan Bola (m/detik)”sudah diisi terlebih dahulu kemudian di savedengan nama “Kelajuan Bola.xlsx”.

ws[“A1”]=”Waktu”

ws[“B1”]=”Kelajuan Bola (m/detik)”

wb.save("Kelajuan Bola.xlsx")

3.4 Pengujian Sistem

Berikut ini adalah kode program yang digunakan untuk menghitung kelajuan Bola Jatuh lalu menampilkannya di excel.

Kode Program:

import cv2 import time import datetime import os import sys

import pandas as pd

from openpyxl import Workbook

from openpyxl.styles import PatternFill, Border, Side, Alignment, Font, fills wb = Workbook()

ws = wb.active

min_contour_width=40 min_contour_height=40 garis_sumbu_y=120 garis_sumbu_y2=400

cam=cv2.VideoCapture('rtsp://admin:[email protected]/h264_stream') thin_border = Border(left=Side(border_style='dashed',color='FF000000'), right=Side(border_style='dashed',color='FF000000'),

top=Side(border_style='thin',color='FF000000'), bottom=Side(border_style='thin',color='FF000000') )

thick_border = Border(left=Side(border_style='thin',color='FF000000'), right=Side(border_style='thin',color='FF000000'),

top=Side(border_style='thin',color='FF000000'),

bottom=Side(border_style='medium',color='FF000000') )

Double_border = Border(left=Side(border_style='dashed',color='FF000000'),

33

for _ in range(Table_num):

for i in range (row_loc,row_loc+row_num):

for j in range (col_loc,col_num+col_loc):

ws.cell(row=i+1, column=j+1).border=thin_border if i ==row_loc:

ws.cell(row=i+1, column=j+1).border=Double_border ws.cell(row=i+1, column=j+1).fill=fill_cell

if i == row_loc+row_num-1:

ws.cell(row=i+1, column=j+1).border=thick_border row_loc= row_loc+row_num+dis

ws["A1"] = "Waktu"

ws["B1"] = "Kelajuan Bola (m/detik)"

wb.save("Kelajuan Bola.xlsx")

cv2.putText(frame1, "Kelajuan: " + str(kelajuan)+"m/detik", (10, 100), cv2.FONT_HERSHEY_SIMPLEX, 1,(255, 255, 255), 2)

print(kelajuan) return kelajuan

except ZeroDivisionError:

print ("unknown")

def get_centroid(x, y, w, h):

x1 = int(w / 2)

ret , th = cv2.threshold(blur,60,200,cv2.THRESH_BINARY) th = cv2.resize(th, None, fx = 0.5, fy = 0.5)

dilated = cv2.dilate(th,np.ones((3,3)))

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (2, 2)) closing = cv2.morphologyEx(dilated, cv2.MORPH_CLOSE, kernel)

contours,h=cv2.findContours(closing,cv2.RETR_TREE,cv2.CHAIN_APPROX_SI MPLE)

for(i,c) in enumerate(contours):

(x,y,w,h) = cv2.boundingRect(c)

35

contour_valid = (w >= min_contour_width) and ( h >= min_contour_height)

if not contour_valid:

continue

cv2.rectangle(frame1,(x-10,y-10),(x+w+10,y+h+10),(255,0,0),2)

cv2.line(frame1, (320, garis_sumbu_y), (650, garis_sumbu_y), (255,0,0), 2) cv2.line(frame1, (330, garis_sumbu_y2), (620, garis_sumbu_y2), (255,255,0), 2) centroid = get_centroid(x, y, w, h)

matches.append(centroid)

cv2.circle(frame1,centroid, 5, (0,255,0), -1) cx,cy= get_centroid(x, y, w, h)

font=cv2.FONT_HERSHEY_PLAIN for (x,y) in matches:

if y <= 120 and y > 100 and x >= 320:

matches.remove((x,y))

t = datetime.datetime.now() tim1 = t.second

if y >= 350 and y < 400 and x >= 330:

matches.remove((x,y))

t2 = datetime.datetime.now() total_waktu=t2.second-tim1 kelajuan=speed_cal(total_waktu)

localtime=time.asctime(time.localtime(time.time())) ws["A2"] = localtime

cv2.imshow("Streaming" , frame1) if(cv2.waitKey(1)==ord('q')):

break

cv2.destroyAllWindows() cam.release()

36 BAB IV

HASIL DAN PEMBAHASAN

4.1 Analisis Hasil Pengukuran dan Perbandingan dengan Hasil Alat Standar Pada penelitian ini, IP Camera berjarak 16 cm dari wadah yang berisi 900 ml zat cair (air maupun gliserin) dengan intensitas cahaya ke wadah adalah 2845 lux dan bola dijatuhkan dari ketinggian 16 cm dari permukaan wadah

Tabel 4.1 Hasil Pengukuran alat.

No

4.2 Analisis dan Pembahasan

Pengukuran ini dialakukan sebanyak 5 kali. Berikut hasil pengukuran dan persentasi ralat:

Tabel 4.2 Hasil Pengukuran dan Persentasi ralat No

37

Dari tabel di atas, maka hasil persentasi ralat dapat kita hitung:

Untuk Kelajuan Terminal Bola:

Untuk Koefisien Viskositas:

Untuk Kelajuan Terminal Bola:

39 BAB V

KESIMPULAN DAN SARAN

5.1 Kesimpulan

1. IP Camera dapat digunakan untuk mengukur kelajuan bola dengan cara menggunakan IP Camera sebagai input kamera kemudian dihubungkan dengan Wi-Fi ke pc/laptop, selanjutnya video hasil rekaman akan diolah dan dialakukan pendeteksian bola menggunakan metode background subtraction.

Penentuan jarak dan waktu dihitung ketika bola melawati garis pembatas pertama dan kedua. Selanjutnya dengan mengandalkan perhitungan komputasi, hasil kelajuan dan kekentalan zat cair akan ditampilkan dalam program dan Microsoft Excel.

2. Prinsip kerja IP Camera adalah mentransfer gambar dengan memanfaatkan jaringan internet. IP Camera digunakan untuk memantau atau mengamati suatu objek atau tempat baik untuk tujuan keamanan maupunmonitoring.Pada penelitian tugas akhir ini, IP Camera dimanfaatkan sebagai alat untuk mendeteksi kelajuan dan kekentalan zat cair.

3. Jarak IP Camera dapat mempengaruhi hasil pengukuran, karena ketika jarak IP Camera dengan gelas ukur terlalu jauh, maka garis horizontal yang dibuat tidak akan persis berada pada batasan zat cair dalam gelas ukur, sehingga jarak IP Camera dengan gelas ukur pada penelitian ini adalah 16 cm. Begitu juga dengan ketinggian bola saat dijatuhkan, ketinggian bola saat dijatuhkan pada penelitian ini adalah 16 cm dari dasar gelas ukur. Jika ketinggian dibuat berubah-ubah maka kelajuan bola juga akan berubah-ubah.

4. Persentase kesalahan pengukuran kelajuan terminal bola pada air adalah 0,2%.

5.2 Saran

1. Perlunya dilakukan penelitian lebih lanjut jika bola padatnya divariasikan dengan berbagai ukuran.

2. Perlunya dilakukan penelitian lebih lanjut dengan menggunakan variasi intensitas cahaya yang berbeda-beda.

3. Perlunya dilakukan penelitian lebih lanjut dengan menggunakan variasi zat cair yang transparan.

41

DAFTAR PUSTAKA

Chen, A. (2006). Hardwaremag The Power to Decide. Singapore: Netgear.

Halaman: 58

Henning, W. F. (1998). Physics Division Annual Report. Argonne National Laboratory.

Halaman: 92-93

Rong, C., Jaatun, M. G., Sandnes, F. E., Yang, L. T., & Ma, J. (2008). Autonomic and Trusted Computing . Germany: Springer Berlin Heidelberg.

Halaman:388-389 (393)

Shah, Priyank. (2014). Moving Object Detection Using Background Subtraction Algorithms.Grin Verlag.

Halaman: 7-10

Utami, Ema., & Raharjo, Suwanto. (2004). Logika Algoritma dan Implementasinya dalamBahasa Phyton. Yogyakarta: Andi Offset.

Halaman: 37-48

Warsito, Suciyati, S. W., & Isworo, D. (2012). Desain Analisis Pengukuran Viskositas Dengan Metode Bola Jatuh Berbasis Sensor Optocoupler dan Sistem Akuisisinya Pada Komputer. Bandar Lampung: Jurnal Natur Indonesia Halaman: 231-232

.

Dokumen terkait