MuhammmadRizwanRizwan commited on
Commit
6472b08
·
verified ·
1 Parent(s): ba23bdb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +116 -10
app.py CHANGED
@@ -480,6 +480,108 @@ from detectron2.data import MetadataCatalog
480
 
481
 
482
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
483
 
484
 
485
 
@@ -487,6 +589,7 @@ import streamlit as st
487
  import numpy as np
488
  import cv2
489
  import torch
 
490
  from PIL import Image
491
  from tensorflow.keras.models import load_model
492
  from tensorflow.keras.preprocessing import image
@@ -513,8 +616,10 @@ model_name, model_quality = load_models()
513
  @st.cache_resource
514
  def load_detectron_model(fruit_name):
515
  cfg = get_cfg()
516
- cfg.merge_from_file(f"{fruit_name.lower()}.yaml")
517
- cfg.MODEL.WEIGHTS = f"{fruit_name.lower()}_model.pth"
 
 
518
  cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5
519
  cfg.MODEL.DEVICE = 'cpu'
520
  predictor = DefaultPredictor(cfg)
@@ -563,15 +668,16 @@ def main():
563
 
564
  if predicted_name.lower() in ["kaki", "tomato", "strawberry", "pepper", "pear", "peach", "papaya", "watermelon", "grape", "banana", "cucumber"] and predicted_quality in ["Mild", "Rotten"]:
565
  st.write("Detecting damage...")
566
- predictor, cfg = load_detectron_model(predicted_name)
567
- outputs = predictor(cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR))
568
- v = Visualizer(np.array(img), MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=0.8)
569
- out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
570
- st.image(out.get_image(), caption="Damage Detection Result", use_column_width=True)
 
 
 
571
  else:
572
  st.write("No damage detection performed for this fruit or quality level.")
573
 
574
  if __name__ == "__main__":
575
- main()
576
-
577
-
 
480
 
481
 
482
 
483
+
484
+
485
+
486
+ # import streamlit as st
487
+ # import numpy as np
488
+ # import cv2
489
+ # import torch
490
+ # from PIL import Image
491
+ # from tensorflow.keras.models import load_model
492
+ # from tensorflow.keras.preprocessing import image
493
+ # from detectron2.engine import DefaultPredictor
494
+ # from detectron2.config import get_cfg
495
+ # from detectron2.utils.visualizer import Visualizer
496
+ # from detectron2.data import MetadataCatalog
497
+
498
+ # # Suppress warnings
499
+ # import warnings
500
+ # import tensorflow as tf
501
+ # warnings.filterwarnings("ignore")
502
+ # tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)
503
+
504
+ # @st.cache_resource
505
+ # def load_models():
506
+ # model_name = load_model('name_model_inception.h5')
507
+ # model_quality = load_model('type_model_inception.h5')
508
+ # return model_name, model_quality
509
+
510
+ # model_name, model_quality = load_models()
511
+
512
+ # # Detectron2 setup
513
+ # @st.cache_resource
514
+ # def load_detectron_model(fruit_name):
515
+ # cfg = get_cfg()
516
+ # cfg.merge_from_file(f"{fruit_name.lower()}.yaml")
517
+ # cfg.MODEL.WEIGHTS = f"{fruit_name.lower()}_model.pth"
518
+ # cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5
519
+ # cfg.MODEL.DEVICE = 'cpu'
520
+ # predictor = DefaultPredictor(cfg)
521
+ # return predictor, cfg
522
+
523
+ # # Labels
524
+ # label_map_name = {
525
+ # 0: "Banana", 1: "Cucumber", 2: "Grape", 3: "Kaki", 4: "Papaya",
526
+ # 5: "Peach", 6: "Pear", 7: "Pepper", 8: "Strawberry", 9: "Watermelon",
527
+ # 10: "Tomato"
528
+ # }
529
+ # label_map_quality = {0: "Good", 1: "Mild", 2: "Rotten"}
530
+
531
+ # def predict_fruit(img):
532
+ # # Preprocess image
533
+ # img = Image.fromarray(img.astype('uint8'), 'RGB')
534
+ # img = img.resize((224, 224))
535
+ # x = image.img_to_array(img)
536
+ # x = np.expand_dims(x, axis=0)
537
+ # x = x / 255.0
538
+
539
+ # # Predict
540
+ # pred_name = model_name.predict(x)
541
+ # pred_quality = model_quality.predict(x)
542
+
543
+ # predicted_name = label_map_name[np.argmax(pred_name, axis=1)[0]]
544
+ # predicted_quality = label_map_quality[np.argmax(pred_quality, axis=1)[0]]
545
+
546
+ # return predicted_name, predicted_quality, img
547
+
548
+ # def main():
549
+ # st.title("Fruit Quality and Damage Detection")
550
+ # st.write("Upload an image of a fruit to detect its type, quality, and potential damage.")
551
+
552
+ # uploaded_file = st.file_uploader("Choose a fruit image...", type=["jpg", "jpeg", "png"])
553
+
554
+ # if uploaded_file is not None:
555
+ # image = Image.open(uploaded_file)
556
+ # st.image(image, caption="Uploaded Image", use_column_width=True)
557
+
558
+ # if st.button("Analyze"):
559
+ # predicted_name, predicted_quality, img = predict_fruit(np.array(image))
560
+
561
+ # st.write(f"Fruit Type: {predicted_name}")
562
+ # st.write(f"Fruit Quality: {predicted_quality}")
563
+
564
+ # if predicted_name.lower() in ["kaki", "tomato", "strawberry", "pepper", "pear", "peach", "papaya", "watermelon", "grape", "banana", "cucumber"] and predicted_quality in ["Mild", "Rotten"]:
565
+ # st.write("Detecting damage...")
566
+ # predictor, cfg = load_detectron_model(predicted_name)
567
+ # outputs = predictor(cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR))
568
+ # v = Visualizer(np.array(img), MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=0.8)
569
+ # out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
570
+ # st.image(out.get_image(), caption="Damage Detection Result", use_column_width=True)
571
+ # else:
572
+ # st.write("No damage detection performed for this fruit or quality level.")
573
+
574
+ # if __name__ == "__main__":
575
+ # main()
576
+
577
+
578
+
579
+
580
+
581
+
582
+
583
+
584
+
585
 
586
 
587
 
 
589
  import numpy as np
590
  import cv2
591
  import torch
592
+ import os
593
  from PIL import Image
594
  from tensorflow.keras.models import load_model
595
  from tensorflow.keras.preprocessing import image
 
616
  @st.cache_resource
617
  def load_detectron_model(fruit_name):
618
  cfg = get_cfg()
619
+ config_path = os.path.join('utils', f"{fruit_name.lower()}_config.yaml")
620
+ cfg.merge_from_file(config_path)
621
+ model_path = os.path.join('models', f"{fruit_name.lower()}_model.pth")
622
+ cfg.MODEL.WEIGHTS = model_path
623
  cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5
624
  cfg.MODEL.DEVICE = 'cpu'
625
  predictor = DefaultPredictor(cfg)
 
668
 
669
  if predicted_name.lower() in ["kaki", "tomato", "strawberry", "pepper", "pear", "peach", "papaya", "watermelon", "grape", "banana", "cucumber"] and predicted_quality in ["Mild", "Rotten"]:
670
  st.write("Detecting damage...")
671
+ try:
672
+ predictor, cfg = load_detectron_model(predicted_name)
673
+ outputs = predictor(cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR))
674
+ v = Visualizer(np.array(img), MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=0.8)
675
+ out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
676
+ st.image(out.get_image(), caption="Damage Detection Result", use_column_width=True)
677
+ except Exception as e:
678
+ st.error(f"Error in damage detection: {str(e)}")
679
  else:
680
  st.write("No damage detection performed for this fruit or quality level.")
681
 
682
  if __name__ == "__main__":
683
+ main()