Program Pendeteksi Uang Menggunakan Color Detection
Program Pendeteksi Uang Menggunakan Color Detection
Berikut adalah kode python untuk mendeteksi uang berdasarkan warna, dengan fitur tambahan yaitu membuka dan menutup gerbang menggunakan servo dan arduino dengan komunikasi serial pada COM13 dan Pin PWM Sevo 9.
import numpy as np
import cv2
from pyfirmata import Arduino, util
import time
# Inisialisasi komunikasi dengan Arduino pada COM10
board = Arduino('COM13')
servo_pin = board.get_pin('d:9:s') # Servo terhubung ke pin digital 9 (PWM)
# Fungsi untuk memutar servo ke sudut yang diinginkan
def rotate_servo(angle):
servo_pin.write(angle)
# Setel posisi awal servo ke 0 derajat
rotate_servo(0)
# Mengambil video melalui webcam dengan resolusi lebih rendah untuk pemrosesan yang lebih cepat
ip_camera_url = (1) # Ganti dengan URL IP camera
webcam = cv2.VideoCapture(ip_camera_url)
webcam.set(cv2.CAP_PROP_FRAME_WIDTH, 530) # Lebar video
webcam.set(cv2.CAP_PROP_FRAME_HEIGHT, 320) # Tinggi video
# Variabel untuk perhitungan FPS
prev_time = 0
fps = 0
# Mulai loop utama
while True:
# Membaca video dari webcam dalam frame gambar
_, imageFrame = webcam.read()
# Mengonversi frame gambar dari BGR (ruang warna RGB) ke HSV (hue-saturation-value)
hsvFrame = cv2.cvtColor(imageFrame, cv2.COLOR_BGR2HSV)
# Menetapkan rentang warna biru dan mendefinisikan mask
blue_lower = np.array([94, 80, 2], np.uint8)
blue_upper = np.array([120, 255, 255], np.uint8)
blue_mask = cv2.inRange(hsvFrame, blue_lower, blue_upper)
# Menetapkan rentang warna pink dan mendefinisikan mask
pink_lower = np.array([140, 50, 50], np.uint8)
pink_upper = np.array([170, 255, 255], np.uint8)
pink_mask = cv2.inRange(hsvFrame, pink_lower, pink_upper)
# Transformasi morfologis, dilasi untuk setiap warna
kernel = np.ones((3, 3), "uint8") # Ukuran kernel dikurangi untuk efisiensi
# Untuk warna biru
blue_mask = cv2.dilate(blue_mask, kernel)
res_blue = cv2.bitwise_and(imageFrame, imageFrame, mask = blue_mask)
# Untuk warna pink
pink_mask = cv2.dilate(pink_mask, kernel)
res_pink = cv2.bitwise_and(imageFrame, imageFrame, mask = pink_mask)
# Membuat kontur untuk melacak warna biru
contours, _ = cv2.findContours(blue_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
blue_detected = False
for contour in contours:
area = cv2.contourArea(contour)
if area > 300: # Jika area kontur lebih besar dari 300, deteksi warna biru
x, y, w, h = cv2.boundingRect(contour)
imageFrame = cv2.rectangle(imageFrame, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.putText(imageFrame, "Palsu inimahh, Dilarang Masuk!", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 4)
blue_detected = True
# Membuat kontur untuk melacak warna pink
contours, _ = cv2.findContours(pink_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
pink_detected = False
for contour in contours:
area = cv2.contourArea(contour)
if area > 300: # Jika area kontur lebih besar dari 300, deteksi warna pink
x, y, w, h = cv2.boundingRect(contour)
imageFrame = cv2.rectangle(imageFrame, (x, y), (x + w, y + h), (255, 255, 255), 2)
cv2.putText(imageFrame, "Nahh ini baru uang", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 4)
pink_detected = True
# Memutar servo berdasarkan deteksi warna
if pink_detected:
rotate_servo(0) # Putar servo ke 90 derajat jika warna pink terdeteksi
if blue_detected:
rotate_servo(90) # Putar servo ke 0 derajat jika warna biru terdeteksi
# Perhitungan FPS
curr_time = time.time()
fps = 1 / (curr_time - prev_time)
prev_time = curr_time
# Menampilkan FPS di sudut kiri atas
cv2.putText(imageFrame, f"FPS: {int(fps)}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
# Tampilkan hasil deteksi warna dan kontrol servo
cv2.imshow("Pendeteksi Duid", imageFrame)
# Menghentikan program jika tombol 'q' ditekan
if cv2.waitKey(10) & 0xFF == ord('q'):
webcam.release()
cv2.destroyAllWindows()
board.exit() # Tutup koneksi ke Arduino
break
0 Response to "Program Pendeteksi Uang Menggunakan Color Detection"
Post a Comment