番茄熟度辨識處理

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

番茄colab程式

yolo取番茄->圖去背->計算像素比->模糊規則->結果上傳

YoloV5 摳圖

yolov5結果取圖
Caution
resize大小
路徑位置
方框遮擋圖片 解決辦法

2023/2/22更
YoloV5中 detect.py參數中的save_crops就有裁切功能
✔️

Pre-processing(預處理)

1.Resizing Images✔️
re-sized all images to 250 × 250
2.Background Removal
2023/02/25
處理辦法:
背景去除算法
API去背(花錢)
重新label圖片訓練新模型

2023/3/9 今日進度:label到134
labelme使用
2023/5/2 放棄重新label,跳過此階段
3.Convert RGB to HSV color space
4.Extract(H,S,V) Compoents

Feature extraction(特徵提取)

提取個顏色與原圖像素比

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Generate fuzzy rule base for the system(模糊規則)

4 channel green,yellow,orange,red
4 degree xs,s,m,l
if rule 256 判別成熟度
4 result

(2023/5/2)程式:

import cv2
import numpy as np
import os

def ripeness_judgement(input_folder):
    for filename in os.listdir(input_folder):
        if filename.endswith(".jpg") or filename.endswith(".jpeg") or filename.endswith(".png"):
            # 讀入圖片
            img = cv2.imread(os.path.join(input_folder, filename))            

            # 轉換成 HSV
            hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)      

            # 定義綠、黃、橘、紅的顏色範圍 (HSV)
            lower_green = np.array([35, 43, 46])
            upper_green = np.array([77, 255, 255])
            lower_yellow = np.array([26, 43, 46])
            upper_yellow = np.array([34, 255, 255])
            lower_orange = np.array([11, 43, 46])
            upper_orange = np.array([25, 255, 255])
            lower_red = np.array([0, 43, 46])
            upper_red = np.array([10, 255, 255])

            # 進行色度分割
            mask_green = cv2.inRange(hsv, lower_green, upper_green)
            mask_yellow = cv2.inRange(hsv, lower_yellow, upper_yellow)
            mask_orange = cv2.inRange(hsv, lower_orange, upper_orange)
            mask_red = cv2.inRange(hsv, lower_red, upper_red)

            # 取得各個顏色部分的圖像
            green_part = cv2.bitwise_and(img, img, mask=mask_green)
            yellow_part = cv2.bitwise_and(img, img, mask=mask_yellow)
            orange_part = cv2.bitwise_and(img, img, mask=mask_orange)
            red_part = cv2.bitwise_and(img, img, mask=mask_red)


            # 計算像素與去除綠色圖比例
            total_pixels = np.count_nonzero(img)
            green_pixels = cv2.countNonZero(mask_green)
            yellow_pixels = cv2.countNonZero(mask_yellow)
            orange_pixels = cv2.countNonZero(mask_orange)
            red_pixels = cv2.countNonZero(mask_red)

            green_ratio = green_pixels / total_pixels
            yellow_ratio = yellow_pixels / total_pixels
            orange_ratio = orange_pixels / total_pixels
            red_ratio = red_pixels / total_pixels

            print("{}\n".format(filename))
            print("Green_ratio", green_ratio)
            print("Yellow ratio:", yellow_ratio)
            print("Orange ratio:", orange_ratio)
            print("Red ratio:", red_ratio,"\n")
            
            
            # 放大圖片
            scale = 5
            img = cv2.resize(img, (img.shape[1] * scale, img.shape[0] * scale))
            green_part = cv2.resize(green_part, (green_part.shape[1] * scale, green_part.shape[0] * scale))
            yellow_part = cv2.resize(yellow_part, (yellow_part.shape[1] * scale, yellow_part.shape[0] * scale))
            orange_part = cv2.resize(orange_part, (orange_part.shape[1] * scale, orange_part.shape[0] * scale))
            red_part = cv2.resize(red_part, (red_part.shape[1] * scale, red_part.shape[0] * scale))


            if not os.path.exists("output"):
                os.makedirs("output")
            if not os.path.exists("output/{}".format(filename)):
                if green_ratio >0.15 and orange_ratio <0.05 and red_ratio <0.05:
                    cv2.imwrite("output/Immature_{}.png".format(filename), img)
                elif yellow_ratio > 0.05:
                    cv2.imwrite("output/Break_{}.png".format(filename), img)
                elif orange_ratio > 0.1 and red_ratio < 0.08 and yellow_ratio < 0.6:
                    cv2.imwrite("output/Pre-harvest_{}.png".format(filename), img)
                elif red_ratio > orange_ratio:
                    cv2.imwrite("output/Harvest_{}.png".format(filename), img)
                else:
                    cv2.imwrite("output/unclear_{}.png".format(filename), img)
            else:
                if green_ratio >0.15 and orange_ratio <0.05 and red_ratio <0.05:
                    cv2.imwrite("output/Immature_{}_2.png".format(filename), img)
                elif yellow_ratio > 0.05:
                    cv2.imwrite("output/Break_{}_2.png".format(filename), img)
                elif orange_ratio > 0.1 and red_ratio < 0.08 and yellow_ratio < 0.6:
                    cv2.imwrite("output/Pre-harvest_{}_2.png".format(filename), img)
                elif red_ratio > orange_ratio:
                    cv2.imwrite("output/Harvest_{}_2.png".format(filename), img)
                else:
                    cv2.imwrite("output/unclear_{}_2.png".format(filename), img)

for k in range(1,3):
    if k==1:
        input_folder = r"crops\ripe"
        print("ripe開始處理\n")
        ripeness_judgement(input_folder)
    elif k==2:
        input_folder = r"crops\unripe"
        print("unripe開始處理\n")
        ripeness_judgement(input_folder)

Result

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →