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
.