{"id":118,"date":"2026-06-19T06:36:12","date_gmt":"2026-06-19T06:36:12","guid":{"rendered":"https:\/\/ardheefy.dooha.id\/?p=118"},"modified":"2026-07-09T01:15:50","modified_gmt":"2026-07-09T01:15:50","slug":"cek-kematangan-buah-dengan-phython","status":"publish","type":"post","link":"https:\/\/ardheefy.dsign.id\/?p=118","title":{"rendered":"Cek Kematangan Buah dengan Phython"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Berikut adalah penjelasan <em>step-by-step<\/em> dari skrip Python yang kamu berikan untuk mendeteksi tingkat kematangan buah menggunakan analisis warna HSV:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Impor Library yang Dibutuhkan<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>import cv2\nimport numpy as np\nimport matplotlib.pyplot as plt<\/code><\/pre><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>cv2<\/code> (OpenCV): Digunakan untuk membaca gambar, mengubah ruang warna, melakukan <em>masking<\/em>, dan menambahkan teks pada gambar.<\/li>\n\n\n\n<li><code>numpy<\/code> (np): Digunakan untuk memproses matriks piksel, khususnya menentukan batas warna dalam bentuk <em>array<\/em>.<\/li>\n\n\n\n<li><code>matplotlib.pyplot<\/code> (plt): Digunakan untuk menampilkan hasil gambar akhir di lingkungan seperti Google Colab.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Memuat dan Mengubah Ukuran Gambar<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>def cek_kematangan_colab(image_path):\n    img = cv2.imread(image_path)\n    if img is None:\n        print(&quot;Gambar tidak ditemukan! Pastikan path file sudah benar di Google Colab.&quot;)\n        return\n\n    img_resized = cv2.resize(img, (500, 500))<\/code><\/pre><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fungsi mendeteksi keberadaan gambar berdasarkan <code>image_path<\/code>. Jika file tidak ditemukan atau <em>path<\/em> salah, proses akan dihentikan.<\/li>\n\n\n\n<li>Gambar yang berhasil dimuat diubah ukurannya menjadi $500 \\times 500$ piksel (<code>img_resized<\/code>) agar ukuran data seragam dan proses komputasi lebih konsisten.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Konversi Ruang Warna ke HSV<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>hsv = cv2.cvtColor(img_resized, cv2.COLOR_BGR2HSV)<\/code><\/pre><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Secara default, OpenCV membaca gambar dalam format BGR (Blue, Green, Red).<\/li>\n\n\n\n<li>Gambar dikonversi ke format <strong>HSV (Hue, Saturation, Value)<\/strong> karena ruang warna ini jauh lebih stabil dan akurat untuk mendeteksi warna tertentu terlepas dari intensitas cahaya atau bayangan.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Menentukan Batas Warna (Hijau &amp; Kuning)<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>lower_green = np.array([35, 40, 40])\nupper_green = np.array([85, 255, 255])\n\nlower_yellow = np.array([15, 40, 40])\nupper_yellow = np.array([35, 255, 255])<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Di sini ditentukan batas bawah (<em>lower<\/em>) dan batas atas (<em>upper<\/em>) nilai HSV untuk dua kategori warna:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Hijau<\/strong> (mewakili buah mentah): Rentang Hue sekitar 35 hingga 85.<\/li>\n\n\n\n<li><strong>Kuning<\/strong> (mewakili buah matang): Rentang Hue sekitar 15 hingga 35.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Segmentasi Warna (<em>Masking<\/em>) dan Penghitungan Piksel<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>mask_green = cv2.inRange(hsv, lower_green, upper_green)\n    mask_yellow = cv2.inRange(hsv, lower_yellow, upper_yellow)\n\n    pixels_green = cv2.countNonZero(mask_green)\n    pixels_yellow = cv2.countNonZero(mask_yellow)\n    total_pixels = pixels_green + pixels_yellow<\/code><\/pre><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>cv2.inRange<\/code> membuat gambar biner (<em>mask<\/em>). Piksel yang masuk dalam rentang warna akan diubah menjadi putih (255), dan yang di luar rentang menjadi hitam (0).<\/li>\n\n\n\n<li><code>cv2.countNonZero<\/code> menghitung jumlah piksel yang berwarna putih pada masing-masing <em>mask<\/em> untuk mengetahui seberapa banyak warna hijau dan kuning yang terdeteksi.<\/li>\n\n\n\n<li><code>total_pixels<\/code> adalah jumlah gabungan dari piksel hijau dan kuning yang ditemukan.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Klasifikasi Tingkat Kematangan<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>if total_pixels == 0:\n        status = &quot;Warna buah tidak dikenali (Bukan hijau\/kuning)&quot;\n        warna_teks = (255, 0, 0)\n    else:\n        persen_matang = (pixels_yellow \/ total_pixels) * 100\n\n        if persen_matang &gt; 80:\n            status = f&quot;Matang Sempurna ({persen_matang:.1f}%)&quot;\n            warna_teks = (0, 255, 0)\n        elif persen_matang &gt; 30:\n            status = f&quot;Hampir Matang ({persen_matang:.1f}%)&quot;\n            warna_teks = (255, 165, 0)\n        else:\n            status = f&quot;Mentah ({persen_matang:.1f}%)&quot;\n            warna_teks = (0, 0, 255)<\/code><\/pre><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jika tidak ada piksel kuning atau hijau sama sekali (<code>total_pixels == 0<\/code>), sistem mengeluarkan status tidak dikenali.<\/li>\n\n\n\n<li>Jika ada, sistem menghitung persentase kematangan berdasarkan perbandingan piksel kuning terhadap total piksel warna yang terdeteksi.<\/li>\n\n\n\n<li><strong>Logika Keputusan:<\/strong>\n<ul class=\"wp-block-list\">\n<li>&gt; 80 berarti <strong>Matang Sempurna<\/strong> (Teks Hijau)<\/li>\n\n\n\n<li>30\\% &#8211; 80% berarti  <strong>Hampir Matang<\/strong> (Teks Oranye)<\/li>\n\n\n\n<li>&lt;= 30\\% berarti  <strong>Mentah<\/strong> (Teks Merah)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Menambahkan Teks pada Gambar<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>cv2.putText(img_resized, f&quot;Status: {status}&quot;, (20, 40),\ncv2.FONT_HERSHEY_SIMPLEX, 0.7, warna_teks, 2)<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Hasil klasifikasi berupa teks <code>status<\/code> dicetak langsung di atas gambar <code>img_resized<\/code> pada koordinat $(20, 40)$ dengan warna yang sesuai (<code>warna_teks<\/code>).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Konversi Balik dan Menampilkan Gambar<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>img_rgb = cv2.cvtColor(img_resized, cv2.COLOR_BGR2RGB)\n\n    plt.figure(figsize=(6, 6))\n    plt.imshow(img_rgb)\n    plt.axis(&#39;off&#39;)\n    plt.show()<\/code><\/pre><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sebelum ditampilkan menggunakan Matplotlib, gambar dikonversi kembali dari format BGR ke <strong>RGB<\/strong>. Jika tidak dikonversi, warna gambar yang muncul di Google Colab akan tertukar (misalnya merah menjadi biru).<\/li>\n\n\n\n<li><code>plt.imshow<\/code> dan <code>plt.show()<\/code> digunakan untuk merender gambar tersebut langsung di dalam <em>notebook<\/em> Colab tanpa membuka jendela baru.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Eksekusi Program Utama<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>if __name__ == &quot;__main__&quot;:\n    cek_kematangan_colab(&quot;drive\/MyDrive\/AI\/mentah.jpg&quot;)<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Bagian ini menjalankan fungsi utama dengan memasukkan jalur (<em>path<\/em>) gambar mentah yang tersimpan di Google Drive kamu sebagai target analisis.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"470\" height=\"452\" src=\"https:\/\/ardheefy.dooha.id\/wp-content\/uploads\/2026\/06\/1-1.png\" alt=\"\" class=\"wp-image-121\" srcset=\"https:\/\/ardheefy.dsign.id\/wp-content\/uploads\/2026\/06\/1-1.png 470w, https:\/\/ardheefy.dsign.id\/wp-content\/uploads\/2026\/06\/1-1-300x289.png 300w\" sizes=\"(max-width: 470px) 100vw, 470px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"461\" height=\"465\" src=\"https:\/\/ardheefy.dooha.id\/wp-content\/uploads\/2026\/06\/2.png\" alt=\"\" class=\"wp-image-122\" srcset=\"https:\/\/ardheefy.dsign.id\/wp-content\/uploads\/2026\/06\/2.png 461w, https:\/\/ardheefy.dsign.id\/wp-content\/uploads\/2026\/06\/2-297x300.png 297w, https:\/\/ardheefy.dsign.id\/wp-content\/uploads\/2026\/06\/2-150x150.png 150w\" sizes=\"(max-width: 461px) 100vw, 461px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Hasilnya bisa dilihat pada video berikut ini<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"720\" style=\"aspect-ratio: 1244 \/ 720;\" width=\"1244\" controls src=\"https:\/\/ardheefy.dsign.id\/wp-content\/uploads\/2026\/06\/cek-kematangan-buah-dengan-python.mp4\"><\/video><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>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 Memuat dan Mengubah Ukuran Gambar Konversi Ruang Warna ke HSV Menentukan Batas Warna (Hijau &amp; Kuning) Di sini ditentukan batas bawah (lower) dan batas atas (upper) nilai HSV untuk dua kategori warna: Segmentasi Warna (Masking) dan Penghitungan Piksel Klasifikasi Tingkat Kematangan Menambahkan Teks pada Gambar 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 Eksekusi Program Utama 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<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-118","post","type-post","status-publish","format-standard","hentry","category-python"],"_links":{"self":[{"href":"https:\/\/ardheefy.dsign.id\/index.php?rest_route=\/wp\/v2\/posts\/118","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ardheefy.dsign.id\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ardheefy.dsign.id\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ardheefy.dsign.id\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ardheefy.dsign.id\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=118"}],"version-history":[{"count":3,"href":"https:\/\/ardheefy.dsign.id\/index.php?rest_route=\/wp\/v2\/posts\/118\/revisions"}],"predecessor-version":[{"id":137,"href":"https:\/\/ardheefy.dsign.id\/index.php?rest_route=\/wp\/v2\/posts\/118\/revisions\/137"}],"wp:attachment":[{"href":"https:\/\/ardheefy.dsign.id\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ardheefy.dsign.id\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=118"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ardheefy.dsign.id\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}