import gradio as gr import torch import torch.nn from torch import Tensor import torch.nn.functional import torchvision from torchvision import transforms MODEL_NAME = 'ResNeXt-101-64x4d' DEVICE = "cuda" if torch.cuda.is_available() else "cpu" MEAN = [0.485, 0.456, 0.406] STD = [0.229, 0.224, 0.225] from torchvision.models import resnext101_64x4d model = resnext101_64x4d() model.fc = torch.nn.Linear(model.fc.in_features, 88) if (torch.cuda.is_available()): model.load_state_dict(torch.load(MODEL_NAME+'-model-1.pt')) else: model.load_state_dict(torch.load(MODEL_NAME+'-model-1.pt', map_location=torch.device('cpu'))) model = model.to(DEVICE) labels = ['Apple__black_rot', 'Apple__healthy', 'Apple__rust', 'Apple__scab', 'Cassava__bacterial_blight', 'Cassava__brown_streak_disease', 'Cassava__green_mottle', 'Cassava__healthy', 'Cassava__mosaic_disease', 'Cherry__healthy', 'Cherry__powdery_mildew', 'Chili__healthy', 'Chili__leaf curl', 'Chili__leaf spot', 'Chili__whitefly', 'Chili__yellowish', 'Coffee__cercospora_leaf_spot', 'Coffee__healthy', 'Coffee__red_spider_mite', 'Coffee__rust', 'Corn__common_rust', 'Corn__gray_leaf_spot', 'Corn__healthy', 'Corn__northern_leaf_blight', 'Cucumber__diseased', 'Cucumber__healthy', 'Gauva__diseased', 'Gauva__healthy', 'Grape__black_measles', 'Grape__black_rot', 'Grape__healthy', 'Grape__leaf_blight_(isariopsis_leaf_spot)', 'Jamun__diseased', 'Jamun__healthy', 'Lemon__diseased', 'Lemon__healthy', 'Mango__diseased', 'Mango__healthy', 'Peach__bacterial_spot', 'Peach__healthy', 'Pepper_bell__bacterial_spot', 'Pepper_bell__healthy', 'Pomegranate__diseased', 'Pomegranate__healthy', 'Potato__early_blight', 'Potato__healthy', 'Potato__late_blight', 'Rice__brown_spot', 'Rice__healthy', 'Rice__hispa', 'Rice__leaf_blast', 'Rice__neck_blast', 'Soybean__bacterial_blight', 'Soybean__caterpillar', 'Soybean__diabrotica_speciosa', 'Soybean__downy_mildew', 'Soybean__healthy', 'Soybean__mosaic_virus', 'Soybean__powdery_mildew', 'Soybean__rust', 'Soybean__southern_blight', 'Strawberry___leaf_scorch', 'Strawberry__healthy', 'Sugarcane__bacterial_blight', 'Sugarcane__healthy', 'Sugarcane__red_rot', 'Sugarcane__red_stripe', 'Sugarcane__rust', 'Tea__algal_leaf', 'Tea__anthracnose', 'Tea__bird_eye_spot', 'Tea__brown_blight', 'Tea__healthy', 'Tea__red_leaf_spot', 'Tomato__bacterial_spot', 'Tomato__early_blight', 'Tomato__healthy', 'Tomato__late_blight', 'Tomato__leaf_mold', 'Tomato__mosaic_virus', 'Tomato__septoria_leaf_spot', 'Tomato__spider_mites_(two_spotted_spider_mite)', 'Tomato__target_spot', 'Tomato__yellow_leaf_curl_virus', 'Wheat__brown_rust', 'Wheat__healthy', 'Wheat__septoria', 'Wheat__yellow_rust'] predictTransform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize(mean=MEAN, std=STD) ]) def predict(img): img = predictTransform(img).unsqueeze(0).to(DEVICE) with torch.no_grad(): model.eval() prediction = torch.nn.functional.softmax(model(img)[0], dim=0) confidences = {labels[i]: float(prediction[i]) for i in range(len(labels))} return confidences title = "Plant Disease Classifier" description = "Please upload a photo containing a plant leaf." iface = gr.Interface(predict, inputs=gr.Image(shape=(224, 224)), outputs=gr.Label(num_top_classes=7), live=True, title=title, description=description, interpretation='default').launch()