{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"#加载包\nimport numpy as np\nimport pandas as pd \nimport os\nimport pathlib\nimport PIL\nfrom pathlib import Path\nfrom PIL import Image, ImageDraw\nfrom math import sqrt\nimport ast\n\nimport matplotlib.pyplot as plt\n%matplotlib inline\nimport seaborn as sns\nsns.set()\n\nimport warnings\nwarnings.filterwarnings('ignore')","metadata":{"_uuid":"051d70d956493feee0c6d64651c6a088724dca2a","_execution_state":"idle","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv(\"../input/tensorflow-great-barrier-reef/train.csv\")\ntest = pd.read_csv(\"../input/tensorflow-great-barrier-reef/test.csv\")\nsub = pd.read_csv(\"../input/tensorflow-great-barrier-reef/example_sample_submission.csv\")\n\npath = Path('../input/tensorflow-great-barrier-reef/train_images')\nfilepaths = list(path.glob(r'**/*.jpg'))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#查看数据的长度\nprint(\"Number of training samples: \", len(train))\nprint(\"Number of testing samples: \", len(test))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.head(150)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_clean = train.loc[train[\"annotations\"] != \"[]\"]\nprint(f\"No starfishes in {len(train)-len(train_clean)} samples.\")\nprint(f\"The clean train set has {len(train_clean)} images for us to work with.\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_clean.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#查看序列数\nlen(train_clean.sequence.value_counts())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#每个序列的行数\nprint(\"Sequence Samples\")\nprint(train_clean.sequence.value_counts())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"seq_df = train_clean.sequence.value_counts().to_frame()\nplt.figure(figsize=(16, 9))\nsns.barplot(x=seq_df.index, y=list(seq_df.sequence), palette=\"Greens_d\")\nplt.title(\"Distribution of Sequences\")\nplt.xlabel(\"Sequence Id\")\nplt.ylabel(\"Frequency\")\nplt.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"num_boxes = []\nannotations_clean = []\nfor elem in train_clean.annotations:\n    ann = ast.literal_eval(elem)\n    num_boxes.append(len(ann))\n    annotations_clean.append(ann)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#每行添加num框，并将annotations列更改为适当的python可解析字典列表\ntrain_clean[\"num_boxes\"] = num_boxes\ntrain_clean[\"annotations\"] = annotations_clean","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_clean.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"#box Frequency\")\nprint(train_clean.num_boxes.value_counts())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#清洁训练集中的边界框数量\nprint(f\"Number of Bounding Boxes in the dataset: {train_clean.num_boxes.sum()}\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"box_count = train_clean.num_boxes.value_counts().to_frame()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(16, 9))\nsns.barplot(x=box_count.index, y=list(box_count.num_boxes), palette=\"Greens_d\")\nplt.title(\"Distribution of Num_boxes\")\nplt.xlabel(\"# of Boxes\")\nplt.ylabel(\"Frequency\")\nplt.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"list(train_clean[\"annotations\"])[0]","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"src = '../input/tensorflow-great-barrier-reef/train_images'\npaths = []\nfor row in train_clean.image_id:\n    vid_num = row.split('-')[0]\n    img_num = row.split('-')[1]\n    paths.append(os.path.join(src,f'video_{vid_num}',img_num+'.jpg'))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_clean['paths'] = paths","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def vis_boxes(img_path, bboxes):\n    coords = []\n    for box in bboxes:\n        x1 = box['x']\n        y1 = box['y']\n        x2 = x1 + box['width']\n        y2 = y1 + box['height']\n        coords.append([x1, y1, x2, y2])\n        \n    img = Image.open(img_path)\n    img1 = img.copy()\n    draw = ImageDraw.Draw(img1)\n    for elem in coords:\n        draw.rectangle(elem, outline='red', width=7)\n    \n    return img1","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_clean.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_clean.groupby('sequence').num_boxes.sum().to_frame()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(16, 9))\nn_images = 9\ncount = 0\nr,c = int(sqrt(n_images)), int(sqrt(n_images))\ntrain_plot = train_clean.sample(n = n_images)\n\nfor _, row in train_plot.iterrows():\n    img_path = row['paths']\n    bboxes = row['annotations']\n    plt.subplot(r, c, count + 1)\n    img_out = vis_boxes(img_path, bboxes)\n    plt.imshow(img_out)\n    count+=1\n\nplt.show()\nplt.tight_layout()","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}