{"cells":[{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport cv2\nimport os\n\nimport torch\nimport torchvision\nfrom torchvision import models,transforms\nfrom torchvision.models.detection.faster_rcnn import FastRCNNPredictor\nfrom torchvision.models.detection import FasterRCNN\nfrom torchvision.models.detection.rpn import AnchorGenerator\nfrom torch.utils.data import DataLoader, Dataset\nfrom torch.utils.data.sampler import SequentialSampler\n\nfrom PIL import Image\nfrom matplotlib import pyplot as plt\n# import imgaug as ia\n# import imageio\n# from imgaug import augmenters as iaa\n# from imgaug.augmentables.bbs import BoundingBox, BoundingBoxesOnImage","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"dir_test = \"/kaggle/input/global-wheat-detection/test\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = torch.load(\"/kaggle/input/model-colab/fasterrcnn_resnet50_fpn0.pth\",map_location='cpu')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# model = torch.load(\"/kaggle/input/gwd-augs-out/fasterrcnn_resnet50_fpn_new0.pth\",map_location='cpu')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# model = torch.load(\"/kaggle/input/gwd-augmentations/fasterrcnn_resnet50_fpn_new.pth\",map_location='cpu')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# model = torch.load(\"/kaggle/input/gwd-train/fasterrcnn_resnet50_fpn_new.pth\",map_location = 'cpu')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"preprocess = transforms.Compose([transforms.ToTensor()])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"A function to reduce the temperature of the image;kind of an image transform","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"from PIL import Image\n\nkelvin_table = {\n    1000: (255,56,0),\n    1500: (255,109,0),\n    2000: (255,137,18),\n    2500: (255,161,72),\n    3000: (255,180,107),\n    3500: (255,196,137),\n    4000: (255,209,163),\n    4500: (255,219,186),\n    5000: (255,228,206),\n    5500: (255,236,224),\n    6000: (255,243,239),\n    6500: (255,249,253),\n    7000: (245,243,255),\n    7500: (235,238,255),\n    8000: (227,233,255),\n    8500: (220,229,255),\n    9000: (214,225,255),\n    9500: (208,222,255),\n    10000: (204,219,255),\n    15000: (179, 204, 255),\n    20000: (168 ,197, 255)}\n\n\ndef convert_temp(image, temp):\n    r, g, b = kelvin_table[temp]\n    matrix = ( r / 255.0, 0.0, 0.0, 0.0,\n               0.0, g / 255.0, 0.0, 0.0,\n               0.0, 0.0, b / 255.0, 0.0 )\n    return image.convert('RGB', matrix)\n\n# for file in os.listdir(dir_test):\n#     a = cv2.imread(os.path.join(dir_test,file))\n#     a = cv2.cvtColor(a,cv2.COLOR_BGR2RGB).astype(np.float32)\n# #     a = Image.open(os.path.join(dir_test,file))\n#     fig,(ax1,ax2) = plt.subplots(1,2,figsize = (16,8))\n#     ax1.imshow(a)\n#     img = Image.fromarray(np.uint8(a))\n#     b = convert_temp(img,20000)\n#     ax2.imshow(b)\n#     plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.eval()\ncolor = (220,0,0)\nresults = []\nfor img_file in os.listdir(dir_test):\n    result = []\n    img = cv2.imread(os.path.join(dir_test,img_file))\n    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB).astype(np.float32)\n    img = Image.fromarray(np.uint8(img))\n    img = convert_temp(img,15000)\n    img = np.array(img).astype(np.float32)\n    img = img/255.0\n    img_t = preprocess(img)\n    img_t = img_t.unsqueeze(0)\n    pred = model(img_t)\n    bboxes = pred[0]['boxes'].cpu().detach().numpy()\n    bscores = pred[0]['scores'].cpu().detach().numpy()\n    img_name = img_file.split('.')[:-1]\n    for i in range(len(bboxes)):\n        if bscores[i]>0.5:\n            result.append((bscores[i],bboxes[i]))\n    results.append((str(img_name[0]),result))\n    fig, ax = plt.subplots(1, 1, figsize=(8, 4))\n    for i in result:\n        if i[0]>0.5:\n            box = i[1]\n            cv2.rectangle(img,(int(box[0]), int(box[1])),(int(box[2]), int(box[3])),color, 5)\n    ax.set_axis_off()\n    ax.imshow(img)\n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"res = []\nfor result in results:\n#     print(result[0],end='')\n    pred_str = []\n    for box in result[1]:\n        pred_str.append(box[0])\n        pred_str.append(box[1][0])\n        pred_str.append(box[1][1])\n        pred_str.append(box[1][2]-box[1][0])\n        pred_str.append(box[1][3]-box[1][1])\n    pred = {}\n    pred['image_id'] = str(result[0])\n    pred['PredictionString'] = ' '.join(str(i) for i in pred_str)\n    res.append(pred)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df = pd.DataFrame(res, columns=['image_id', 'PredictionString'])\nprint(test_df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df.to_csv(\"/kaggle/working/submission.csv\",index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!cat submission.csv","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}