Doctor AI

Dr. Savath Saypadith

240 ບົດຄວາມ

ການກວດຫາພະຍາດຂີ້ໝ້ຽງໃບກາເຟ ດ້ວຍ OpenCV ແລະ Python

ໂພສເມື່ອ # Computer Vision # OpenCV # Python # AI in Agriculture

ການກວດຫາພະຍາດຂີ້ໝ້ຽງໃບກາເຟ ດ້ວຍ OpenCV ແລະ Python

ກາເຟປາກຊ່ອງ ເຊິ່ງປູກຢູ່ເທິງພູພຽງບໍລະເວນ (Bolaven Plateau) ແມ່ນໜຶ່ງໃນຜະລິດຕະພັນກະສິກຳຊັ້ນນຳທີ່ສ້າງຊື່ສຽງລະດັບໂລກໃຫ້ແກ່ປະເທດລາວ. ແນວໃດກໍ່ຕາມ, ໜຶ່ງໃນສັດຕູຕົວຮ້າຍທີ່ຊາວກະສິກອນມັກຈະພົບເຫັນເປັນປະຈຳຄື “ພະຍາດຂີ້ໝ້ຽງໃບກາເຟ” (Coffee Leaf Rust) ເຊິ່ງເກີດຈາກເຊື້ອຣາ ແລະ ສາມາດເຮັດໃຫ້ຜົນຜະລິດກາເຟຫຼຸດລົງຢ່າງມະຫາສານ ຫາກບໍ່ໄດ້ຮັບການແກ້ໄຂຢ່າງທັນທ່ວງທີ.

ລອງນຶກພາບເບິ່ງວ່າ ຖ້າເຮົາສາມາດນຳໃຊ້ເຕັກໂນໂລຊີ AI ເຂົ້າມາຊ່ວຍຊາວກະສິກອນກວດຫາພະຍາດນີ້ໄດ້ຢ່າງວ່ອງໄວພຽງແຕ່ການຖ່າຍຮູບ ມັນຈະດີສໍ່າໃດ? ໃນບົດຄວາມນີ້, ເຮົາຈະມາຮຽນຮູ້ວິທີການນຳໃຊ້ເທັກນິກ Computer Vision ລະດັບກາງ ຂຽນດ້ວຍພາສາ Python ແລະ ຫ້ອງສະໝຸດ OpenCV ເພື່ອສ້າງໂມເດວຈຳແນກຮູບພາບໃບກາເຟທີ່ມີສຸຂະພາບດີ ອອກຈາກໃບທີ່ຕິດພະຍາດຂີ້ໝ້ຽງກັນ.

ສິ່ງທີ່ຕ້ອງກຽມພ້ອມ (Prerequisites)

ກ່ອນຈະເລີ່ມຕົ້ນ, ໃຫ້ແນ່ໃຈວ່າທ່ານມີພື້ນຖານການຂຽນ Python ແລະ ໄດ້ຕິດຕັ້ງຫ້ອງສະໝຸດ (Libraries) ທີ່ຈຳເປັນແລ້ວໃນເຄື່ອງຂອງທ່ານ:

ທ່ານສາມາດຕິດຕັ້ງໄດ້ຜ່ານຄຳສັ່ງ:

pip install opencv-python numpy scikit-learn

ຂັ້ນຕອນທີ 1: ຮູບແບບສະຖາປັດຕະຍະກຳຂອງໂມເດວ (Model Architecture)

ສຳລັບບົດຄວາມນີ້ ເຮົາຈະໃຊ້ເຕັກນິກທີ່ເອີ້ນວ່າ Color Histogram Feature Extraction ບວກກັບ Support Vector Machine (SVM). ເນື່ອງຈາກພະຍາດຂີ້ໝ້ຽງໃບກາເຟຈະສະແດງອາການເປັນຈຸດສີສົ້ມ-ນ້ຳຕານ (Rust) ທີ່ຊັດເຈນເທິງໃບສີຂຽວ, ການວິເຄາະການແຈກຢາຍຂອງ “ສີ” (Color Distribution) ດ້ວຍ Histogram ຈຶ່ງເປັນວິທີທີ່ຕອບໂຈດ ແລະ ມີປະສິດທິຜົນສູງ ໂດຍບໍ່ຈຳເປັນຕ້ອງໃຊ້ໂມເດວ Deep Learning ທີ່ໜັກໜ່ວງ.

ຂັ້ນຕອນທີ 2: ການຈັດຕຽມຂໍ້ມູນ ແລະ ສະກັດຄຸນລັກສະນະ (Feature Extraction)

ເຮົາຈະໃຊ້ OpenCV ເພື່ອອ່ານຮູບພາບ, ຫຍໍ້ຂະໜາດ ແລະ ປ່ຽນລະບົບສີຈາກ BGR ເປັນ HSV (Hue, Saturation, Value) ເຊິ່ງເປັນລະບົບສີທີ່ແຍກຄວາມສະຫວ່າງອອກຈາກສີແທ້ ເຮັດໃຫ້ການຈຳແນກຈຸດສີສົ້ມຂອງຂີ້ໝ້ຽງເຮັດໄດ້ດີກວ່າ.

import cv2
import numpy as np
import os
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report

def extract_color_histogram(image_path):
    # 1. ອ່ານຮູບພາບ
    image = cv2.imread(image_path)
    if image is None:
        return None
        
    # 2. ຫຍໍ້ຂະໜາດພາບໃຫ້ເທົ່າກັນ (Resize) ເພື່ອສະດວກໃນການປະມວນຜົນ
    image = cv2.resize(image, (256, 256))
    
    # 3. ປ່ຽນລະບົບສີ BGR (ຄ່າເລີ່ມຕົ້ນຂອງ OpenCV) ໄປເປັນ HSV
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    
    # 4. ສ້າງ Color Histogram 
    # [8, 8, 8] ຄືຈຳນວນຫຼອດ (Bins) ຂອງ H, S, V 
    hist = cv2.calcHist([hsv], [0, 1, 2], None, [8, 8, 8], [0, 256, 0, 256, 0, 256])
    
    # 5. ປັບຄ່າ (Normalize) ເພື່ອບໍ່ໃຫ້ພາບມືດ ຫຼື ແຈ້ງເກີນໄປມີຜົນກະທົບຕໍ່ຄ່າ
    cv2.normalize(hist, hist)
    
    # ແປງຮູບແບບເປັນ Vector ແຖວດຽວເພື່ອປ້ອນເຂົ້າໃນ AI Model
    return hist.flatten()

ຂັ້ນຕອນທີ 3: ການໂຫຼດຮູບພາບ ແລະ ຝຶກຝົນໂມເດວ (Training the Model)

ສົມມຸດວ່າພວກເຮົາມີຮູບພາບເກັບໄວ້ໃນສອງໂຟນເດີຄື: dataset/healthy (ໃບກາເຟປົກກະຕິ) ແລະ dataset/rust (ໃບກາເຟທີ່ເປັນພະຍາດ). ເຮົາຈະຂຽນດຶງຂໍ້ມູນ ແລະ ນຳໄປຝຶກຝົນດ້ວຍລະບົບ SVM.

def load_dataset(base_folder):
    features = []
    labels = []
    
    categories = ['healthy', 'rust']
    
    for label_idx, category in enumerate(categories):
        folder_path = os.path.join(base_folder, category)
        # ວົນລູບອ່ານຮູບພາບທັງໝົດໃນໂຟນເດີ
        for img_name in os.listdir(folder_path):
            img_path = os.path.join(folder_path, img_name)
            hist = extract_color_histogram(img_path)
            
            if hist is not None:
                features.append(hist)
                labels.append(label_idx) # 0 = healthy, 1 = rust
                
    return np.array(features), np.array(labels)

# ໂຫຼດຂໍ້ມູນ
print("ກຳລັງໂຫຼດຮູບພາບ ແລະ ສະກັດຄຸນລັກສະນະ...")
X, y = load_dataset('dataset')

# ແບ່ງຂໍ້ມູນສຳລັບຝຶກຝົນ (Train) 80% ແລະ ທົດສອບ (Test) 20%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# ສ້າງໂມເດວດ້ວຍ SVM
print("ກຳລັງຝຶກຝົນໂມເດວ ດ້ວຍ Support Vector Machine...")
model = SVC(kernel='linear')
model.fit(X_train, y_train)

# ທົດສອບ ແລະ ປະເມີນຜົນ
predictions = model.predict(X_test)
accuracy = accuracy_score(y_test, predictions)

print(f"ທົດສອບສຳເລັດ! ຄວາມແມ່ນຍຳຂອງໂມເດວ (Accuracy): {accuracy * 100:.2f}%")
print("\nລາຍລະອຽດເພີ່ມເຕີມ:")
print(classification_report(y_test, predictions, target_names=['Healthy', 'Rust']))

ຂັ້ນຕອນທີ 4: ທົດລອງນຳໃຊ້ (Inferencing)

ຫຼັງຈາກໂມເດວຝຶກສຳເລັດ, ທ່ານສາມາດເອົາຮູບໃບກາເຟໃໝ່ໆມາທົດສອບໄດ້ດັ່ງນີ້:

def predict_new_image(image_path, trained_model):
    hist = extract_color_histogram(image_path)
    if hist is None:
        return "ບໍ່ສາມາດອ່ານຮູບພາບໄດ້"
    
    hist = hist.reshape(1, -1) # ປັບຮູບແບບ Matrix ກ່ອນປ້ອນໃຫ້ Model
    prediction = trained_model.predict(hist)
    
    if prediction[0] == 1:
        return "ລະວັງ! ພົບເຊື້ອພະຍາດຂີ້ໝ້ຽງເທິງໃບກາເຟ (Rust Detected)"
    else:
        return "ໃບກາເຟສົມບູນດີປົກກະຕິ (Healthy)"

# ທົດລອງທຳນາຍ
test_image = "test_images/coffee_leaf_sample.jpg"
result = predict_new_image(test_image, model)
print(f"ຜົນກວດ: {result}")

Technical Key Takeaways

ບົດສະຫຼຸບ

ການນຳໃຊ້ Computer Vision ແລະ Python ບໍ່ແມ່ນເລື່ອງທີ່ໄກຕົວອີກຕໍ່ໄປ. ດ້ວຍໂຄດພຽງບໍ່ເທົ່າໃດແຖວ ເຮົາກໍ່ສາມາດສ້າງໂມເດວເພື່ອກວດຫາພະຍາດຂີ້ໝ້ຽງໃບກາເຟໄດ້ແລ້ວ. ຫາກນັກພັດທະນາຊາວລາວສາມາດນຳເອົາແນວຄິດນີ້ໄປຕໍ່ຍອດພັດທະນາເປັນແອັບພລິເຄຊັນ (App) ໃນສະມາດໂຟນ, ມັນກໍ່ຈະກາຍເປັນເຄື່ອງມືອັນລ້ຳຄ່າທີ່ຊ່ວຍຊາວກະສິກອນຢູ່ປາກຊ່ອງ ແລະ ທົ່ວປະເທດລາວ ໃນການປ້ອງກັນພະຍາດພືດໄດ້ແຕ່ເນີ່ນໆ ນຳໄປສູ່ຜົນຜະລິດທີ່ດີ ແລະ ເສດຖະກິດທີ່ໝັ້ນຄົງຂຶ້ນ. ເຕັກໂນໂລຊີ AI ສາມາດສ້າງການປ່ຽນແປງທີ່ຈັບບາຍໄດ້ແທ້ໃນຂະແໜງຮາກຖານຂອງບ້ານເຮົາ!