Artikel Lainnya

Cek Kematangan Buah dengan Phython

Berikut adalah penjelasan step-by-step dari skrip Python yang kamu berikan untuk mendeteksi tingkat kematangan buah menggunakan analisis warna HSV:

Impor Library yang Dibutuhkan

import cv2
import numpy as np
import matplotlib.pyplot as plt
  • cv2 (OpenCV): Digunakan untuk membaca gambar, mengubah ruang warna, melakukan masking, dan menambahkan teks pada gambar.
  • numpy (np): Digunakan untuk memproses matriks piksel, khususnya menentukan batas warna dalam bentuk array.
  • matplotlib.pyplot (plt): Digunakan untuk menampilkan hasil gambar akhir di lingkungan seperti Google Colab.

Memuat dan Mengubah Ukuran Gambar

def cek_kematangan_colab(image_path):
    img = cv2.imread(image_path)
    if img is None:
        print("Gambar tidak ditemukan! Pastikan path file sudah benar di Google Colab.")
        return

    img_resized = cv2.resize(img, (500, 500))
  • Fungsi mendeteksi keberadaan gambar berdasarkan image_path. Jika file tidak ditemukan atau path salah, proses akan dihentikan.
  • Gambar yang berhasil dimuat diubah ukurannya menjadi $500 \times 500$ piksel (img_resized) agar ukuran data seragam dan proses komputasi lebih konsisten.

Konversi Ruang Warna ke HSV

hsv = cv2.cvtColor(img_resized, cv2.COLOR_BGR2HSV)
  • Secara default, OpenCV membaca gambar dalam format BGR (Blue, Green, Red).
  • Gambar dikonversi ke format HSV (Hue, Saturation, Value) karena ruang warna ini jauh lebih stabil dan akurat untuk mendeteksi warna tertentu terlepas dari intensitas cahaya atau bayangan.

Menentukan Batas Warna (Hijau & Kuning)

lower_green = np.array([35, 40, 40])
upper_green = np.array([85, 255, 255])

lower_yellow = np.array([15, 40, 40])
upper_yellow = np.array([35, 255, 255])

Di sini ditentukan batas bawah (lower) dan batas atas (upper) nilai HSV untuk dua kategori warna:

  • Hijau (mewakili buah mentah): Rentang Hue sekitar 35 hingga 85.
  • Kuning (mewakili buah matang): Rentang Hue sekitar 15 hingga 35.

Segmentasi Warna (Masking) dan Penghitungan Piksel

mask_green = cv2.inRange(hsv, lower_green, upper_green)
    mask_yellow = cv2.inRange(hsv, lower_yellow, upper_yellow)

    pixels_green = cv2.countNonZero(mask_green)
    pixels_yellow = cv2.countNonZero(mask_yellow)
    total_pixels = pixels_green + pixels_yellow
  • cv2.inRange membuat gambar biner (mask). Piksel yang masuk dalam rentang warna akan diubah menjadi putih (255), dan yang di luar rentang menjadi hitam (0).
  • cv2.countNonZero menghitung jumlah piksel yang berwarna putih pada masing-masing mask untuk mengetahui seberapa banyak warna hijau dan kuning yang terdeteksi.
  • total_pixels adalah jumlah gabungan dari piksel hijau dan kuning yang ditemukan.

Klasifikasi Tingkat Kematangan

if total_pixels == 0:
        status = "Warna buah tidak dikenali (Bukan hijau/kuning)"
        warna_teks = (255, 0, 0)
    else:
        persen_matang = (pixels_yellow / total_pixels) * 100

        if persen_matang > 80:
            status = f"Matang Sempurna ({persen_matang:.1f}%)"
            warna_teks = (0, 255, 0)
        elif persen_matang > 30:
            status = f"Hampir Matang ({persen_matang:.1f}%)"
            warna_teks = (255, 165, 0)
        else:
            status = f"Mentah ({persen_matang:.1f}%)"
            warna_teks = (0, 0, 255)
  • Jika tidak ada piksel kuning atau hijau sama sekali (total_pixels == 0), sistem mengeluarkan status tidak dikenali.
  • Jika ada, sistem menghitung persentase kematangan berdasarkan perbandingan piksel kuning terhadap total piksel warna yang terdeteksi.
  • Logika Keputusan:
    • > 80 berarti Matang Sempurna (Teks Hijau)
    • 30\% – 80% berarti Hampir Matang (Teks Oranye)
    • <= 30\% berarti Mentah (Teks Merah)

Menambahkan Teks pada Gambar

cv2.putText(img_resized, f"Status: {status}", (20, 40),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, warna_teks, 2)

Hasil klasifikasi berupa teks status dicetak langsung di atas gambar img_resized pada koordinat $(20, 40)$ dengan warna yang sesuai (warna_teks).

Konversi Balik dan Menampilkan Gambar

img_rgb = cv2.cvtColor(img_resized, cv2.COLOR_BGR2RGB)

    plt.figure(figsize=(6, 6))
    plt.imshow(img_rgb)
    plt.axis('off')
    plt.show()
  • Sebelum ditampilkan menggunakan Matplotlib, gambar dikonversi kembali dari format BGR ke RGB. Jika tidak dikonversi, warna gambar yang muncul di Google Colab akan tertukar (misalnya merah menjadi biru).
  • plt.imshow dan plt.show() digunakan untuk merender gambar tersebut langsung di dalam notebook Colab tanpa membuka jendela baru.

Eksekusi Program Utama

if __name__ == "__main__":
    cek_kematangan_colab("drive/MyDrive/AI/mentah.jpg")

Bagian ini menjalankan fungsi utama dengan memasukkan jalur (path) gambar mentah yang tersimpan di Google Drive kamu sebagai target analisis.

Hasilnya bisa dilihat pada video berikut ini

Made with by Ardheefy