ການກວດຫາພະຍາດຂີ້ໝ້ຽງໃບກາເຟ ດ້ວຍ OpenCV ແລະ Python
ການກວດຫາພະຍາດຂີ້ໝ້ຽງໃບກາເຟ ດ້ວຍ OpenCV ແລະ Python
ກາເຟປາກຊ່ອງ ເຊິ່ງປູກຢູ່ເທິງພູພຽງບໍລະເວນ (Bolaven Plateau) ແມ່ນໜຶ່ງໃນຜະລິດຕະພັນກະສິກຳຊັ້ນນຳທີ່ສ້າງຊື່ສຽງລະດັບໂລກໃຫ້ແກ່ປະເທດລາວ. ແນວໃດກໍ່ຕາມ, ໜຶ່ງໃນສັດຕູຕົວຮ້າຍທີ່ຊາວກະສິກອນມັກຈະພົບເຫັນເປັນປະຈຳຄື “ພະຍາດຂີ້ໝ້ຽງໃບກາເຟ” (Coffee Leaf Rust) ເຊິ່ງເກີດຈາກເຊື້ອຣາ ແລະ ສາມາດເຮັດໃຫ້ຜົນຜະລິດກາເຟຫຼຸດລົງຢ່າງມະຫາສານ ຫາກບໍ່ໄດ້ຮັບການແກ້ໄຂຢ່າງທັນທ່ວງທີ.
ລອງນຶກພາບເບິ່ງວ່າ ຖ້າເຮົາສາມາດນຳໃຊ້ເຕັກໂນໂລຊີ AI ເຂົ້າມາຊ່ວຍຊາວກະສິກອນກວດຫາພະຍາດນີ້ໄດ້ຢ່າງວ່ອງໄວພຽງແຕ່ການຖ່າຍຮູບ ມັນຈະດີສໍ່າໃດ? ໃນບົດຄວາມນີ້, ເຮົາຈະມາຮຽນຮູ້ວິທີການນຳໃຊ້ເທັກນິກ Computer Vision ລະດັບກາງ ຂຽນດ້ວຍພາສາ Python ແລະ ຫ້ອງສະໝຸດ OpenCV ເພື່ອສ້າງໂມເດວຈຳແນກຮູບພາບໃບກາເຟທີ່ມີສຸຂະພາບດີ ອອກຈາກໃບທີ່ຕິດພະຍາດຂີ້ໝ້ຽງກັນ.
ສິ່ງທີ່ຕ້ອງກຽມພ້ອມ (Prerequisites)
ກ່ອນຈະເລີ່ມຕົ້ນ, ໃຫ້ແນ່ໃຈວ່າທ່ານມີພື້ນຖານການຂຽນ Python ແລະ ໄດ້ຕິດຕັ້ງຫ້ອງສະໝຸດ (Libraries) ທີ່ຈຳເປັນແລ້ວໃນເຄື່ອງຂອງທ່ານ:
- OpenCV ສຳລັບການປະມວນຜົນຮູບພາບ (Image Preprocessing)
- NumPy ສຳລັບການຄຳນວນທາງຄະນິດສາດ (Matrix operations)
- Scikit-Learn ສຳລັບສ້າງໂມເດວຮຽນຮູ້ (Machine Learning Classifier)
ທ່ານສາມາດຕິດຕັ້ງໄດ້ຜ່ານຄຳສັ່ງ:
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
- Color Space Conversion: ການປ່ຽນຈາກລະບົບ BGR ໄປຍັງ HSV ຂອງ OpenCV
cv2.cvtColor()ມີປະໂຫຍດສູງຫຼາຍສຳລັບງານ Computer Vision ທີ່ກ່ຽວຂ້ອງກັບການຈຳແນກສີ ເຊັ່ນ: ສີສົ້ມຂອງຂີ້ໝ້ຽງເທິງໃບກາເຟ. - Feature Extraction vs Deep Learning: ໃນລະດັບກາງ, ການໃຊ້
cv2.calcHist()ແລ້ວນຳໄປລ້ຽງ Machine learning ແບບດັ້ງເດີມ (Scikit-Learn SVM) ຖືວ່າກິນຊັບພະຍາກອນໜ້ອຍກວ່າການໃຊ້ CNNs (Convolutional Neural Networks) ເໝາະສົມຈະເຮັດເປັນຕົວຕົ້ນແບບ (Prototype) ແບບອອບລາຍ. - Scalability: ເມື່ອຂໍ້ມູນໃຫຍ່ຂຶ້ນ ລະບົບ Histogram ອາດຈະຄາດເຄື່ອນໄດ້ຖ້າສະພາບແສງຕອນຖ່າຍແຕກຕ່າງກັນຫຼາຍ. ການອັບເກຣດໃນອະນາຄົດອາດຈະປ່ຽນໄປໃຊ້ PyTorch ຫຼື TensorFlow ທີ່ເປັນ Deep Learning ຈະມອບຄວາມແມ່ນຍຳສູງກວ່າໃນສະພາບແວດລ້ອມທີ່ຊັບຊ້ອນ.
ບົດສະຫຼຸບ
ການນຳໃຊ້ Computer Vision ແລະ Python ບໍ່ແມ່ນເລື່ອງທີ່ໄກຕົວອີກຕໍ່ໄປ. ດ້ວຍໂຄດພຽງບໍ່ເທົ່າໃດແຖວ ເຮົາກໍ່ສາມາດສ້າງໂມເດວເພື່ອກວດຫາພະຍາດຂີ້ໝ້ຽງໃບກາເຟໄດ້ແລ້ວ. ຫາກນັກພັດທະນາຊາວລາວສາມາດນຳເອົາແນວຄິດນີ້ໄປຕໍ່ຍອດພັດທະນາເປັນແອັບພລິເຄຊັນ (App) ໃນສະມາດໂຟນ, ມັນກໍ່ຈະກາຍເປັນເຄື່ອງມືອັນລ້ຳຄ່າທີ່ຊ່ວຍຊາວກະສິກອນຢູ່ປາກຊ່ອງ ແລະ ທົ່ວປະເທດລາວ ໃນການປ້ອງກັນພະຍາດພືດໄດ້ແຕ່ເນີ່ນໆ ນຳໄປສູ່ຜົນຜະລິດທີ່ດີ ແລະ ເສດຖະກິດທີ່ໝັ້ນຄົງຂຶ້ນ. ເຕັກໂນໂລຊີ AI ສາມາດສ້າງການປ່ຽນແປງທີ່ຈັບບາຍໄດ້ແທ້ໃນຂະແໜງຮາກຖານຂອງບ້ານເຮົາ!