{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Importing Libraries"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import os\nimport re\nfrom sklearn.model_selection import StratifiedKFold\nimport cv2\nimport pandas as pd\nimport numpy as np\nimport tensorflow as tf\nimport shutil\nfrom functools import partial\nfrom matplotlib import pyplot as plt\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.utils import class_weight\nfrom kaggle_datasets import KaggleDatasets","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Reading Old Data"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Old Data \n# Making a df of all he images\nos.listdir('../input/cassavaold/train/train/cbb')\n\ndf = pd.DataFrame(columns = ['image_id', 'label'])\n\ndf = pd.concat([pd.DataFrame({'image_id': '../input/cassavaold/train/train/cbb/'+pd.Series(os.listdir('../input/cassavaold/train/train/cbb')),\n                             'label':0}),\n                pd.DataFrame({'image_id': '../input/cassavaold/train/train/cbsd/'+pd.Series(os.listdir('../input/cassavaold/train/train/cbsd')),\n                             'label':1}),\n               pd.DataFrame({'image_id': '../input/cassavaold/train/train/cgm/'+pd.Series(os.listdir('../input/cassavaold/train/train/cgm')),\n                             'label':2}),\n               pd.DataFrame({'image_id': '../input/cassavaold/train/train/cmd/'+pd.Series(os.listdir('../input/cassavaold/train/train/cmd')),\n                             'label':3}),\n               pd.DataFrame({'image_id': '../input/cassavaold/train/train/healthy/'+pd.Series(os.listdir('../input/cassavaold/train/train/healthy')),\n                             'label':4})]\n                           , axis=0, ignore_index=True)\ndisplay(df.head())\nprint(df.shape)\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Reading New Cassava Data"},{"metadata":{"trusted":true},"cell_type":"code","source":"df2 = pd.read_csv('../input/cassava-leaf-disease-classification/train.csv')\ndf2['image_id'] = \"../input/cassava-leaf-disease-classification/train_images/\"+df2['image_id']\ndf2.shape","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Merging Both"},{"metadata":{"trusted":true},"cell_type":"code","source":"df_merged = pd.concat([df,df2], axis=0, ignore_index=True)\ndf_merged.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(10,10), dpi=80)\nfor img, label in zip(df_merged['image_id'], df_merged['label']): \n        display(label)\n        display(tf.keras.preprocessing.image.load_img(img))\n        break","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Code For Writing TFRecord"},{"metadata":{"trusted":true},"cell_type":"code","source":"def _bytes_feature(value):\n  \"\"\"Returns a bytes_list from a string / byte.\"\"\"\n  if isinstance(value, type(tf.constant(0))):\n    value = value.numpy() # BytesList won't unpack a string from an EagerTensor.\n  return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))\n\ndef _float_feature(value):\n  \"\"\"Returns a float_list from a float / double.\"\"\"\n  return tf.train.Feature(float_list=tf.train.FloatList(value=[value]))\n\ndef _int64_feature(value):\n  \"\"\"Returns an int64_list from a bool / enum / int / uint.\"\"\"\n  return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def serialize_example(feature0, feature1, feature2):\n  feature = {\n      'image': _bytes_feature(feature0),\n      'image_name': _bytes_feature(feature1),\n      'label': _int64_feature(feature2)\n  }\n  example_proto = tf.train.Example(features=tf.train.Features(feature=feature))\n  return example_proto.SerializeToString()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"database_base_path = '/kaggle/input/cassava-leaf-disease-classification/'\nPATH = f'{database_base_path}train_images/'\nIMGS = df_merged['image_id'].tolist()\nN_FILES = 15\nHEIGHT, WIDTH = (512, 512)\nIMG_QUALITY = 100\nprint('No of Images - ', len(IMGS))\ntrain = df_merged.copy()\ndisplay(train.head())\n\n\nfolds = StratifiedKFold(n_splits=N_FILES, shuffle=True, random_state=123)\ntrain['file'] = -1\n\nfor fold_n, (train_idx, val_idx) in enumerate(folds.split(train, train['label'])):\n    print('File: %s has %s samples' % (fold_n+1, len(val_idx)))\n    train['file'].loc[val_idx] = fold_n\n    \ntrain.to_csv('train.csv', index=False)\n\n# Writing to TFRecords\nfor tfrec_num in range(N_FILES):\n    print('\\nWriting TFRecord %i of %i...'%(tfrec_num, N_FILES))\n    samples = train[train['file'] == tfrec_num]\n    n_samples = len(samples)\n    print(f'{n_samples} samples')\n    \n    with tf.io.TFRecordWriter('Id_train%.2i-%i.tfrec'%(tfrec_num, n_samples)) as writer:\n        for row in samples.itertuples():\n            label = row.label\n            image_name = row.image_id\n            img_path = image_name\n            \n            img = cv2.imread(img_path)\n            img = cv2.resize(img, (HEIGHT, WIDTH))\n            img = cv2.imencode('.jpg', img, (cv2.IMWRITE_JPEG_QUALITY, IMG_QUALITY))[1].tostring()\n            \n            example = serialize_example(img, str.encode(image_name), label)\n            writer.write(example)","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}