{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Extraction each character"},{"metadata":{},"cell_type":"markdown","source":"Hello, kagglers.\n\nI've just prepared starter code to extract each character as training images. Those extracted images may be required to build CNN or something."},{"metadata":{},"cell_type":"markdown","source":"## preparation"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport os\nimport time\nimport cv2\nimport matplotlib.pyplot as plt\n\nprint(os.listdir(\"../input\"))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"FOLDER = '../input/'\nIMAGES = FOLDER + 'train_images/'\nlen(os.listdir(IMAGES))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train = pd.read_csv(FOLDER + 'train.csv')\n# df_sub = pd.read_csv(FOLDER + 'sample_submission.csv')\nunicode_map = {codepoint: char for codepoint, char in pd.read_csv(FOLDER + 'unicode_translation.csv').values}","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"setting index can help us for fast finding data."},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train_idx = df_train.set_index(\"image_id\")\nidx_train = df_train['image_id']","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Labels are configured as [unicode, x, y, w, h]. Pandas DataFrame is more useful to operate analysis."},{"metadata":{"trusted":true},"cell_type":"code","source":"df_char_train = pd.DataFrame()\nstart = time.time()\n\n# for idx in idx_train: \nfor idx in idx_train[:100]: # for displaying only\n    label = df_train_idx.loc[idx]\n    try:\n        label_arr = np.array(label['labels'].split(' ')).reshape(-1, 5) # labels are configured as [unicode, x, y, w, h]\n    except:\n        continue\n    df_char = pd.DataFrame(label_arr, columns=['unicode', 'x', 'y', 'w', 'h'])\n    df_char['image_id'] = idx\n    df_char_train = pd.concat([df_char_train, df_char], axis=0)\nelapsed_time = time.time() - start\nprint (\"elapsed_time:{0}\".format(elapsed_time) + \"[sec]\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"If iteration is carried out fully, we get all extracted characters from training images. However, whole data is huge. Here, execution is tried partially."},{"metadata":{"trusted":true},"cell_type":"code","source":"unicode_arr = df_char_train['unicode'].unique()\nunicode = unicode_arr[0]\n\nprint('-'*10, unicode, ' : ',  unicode_map[unicode], '-'*10)\n\ndf_code_char0 = df_char_train.query('unicode == \"{}\"'.format(unicode))\nimages_char0 = df_code_char0['image_id'].unique()\n\ncnt = 0\n\nnum = len(images_char0)\n# for n in range(num):\nfor n in range(3):\n    \n    fname = images_char0[n]\n    print('-'*10, fname, '-'*10)\n\n    image_path = IMAGES + fname + '.jpg'\n    im_original = cv2.imread(image_path)\n    im_original = cv2.cvtColor(im_original, cv2.COLOR_BGR2RGB)\n    positions = df_code_char0.query('image_id == \"{}\"'.format(fname))[['x', 'y', 'w', 'h']].values.astype('int')\n\n    for pos in positions:\n        x, y, w, h = pos\n        im = im_original[y:y+h, x:x+w]\n        plt.imshow(im) # to be canceled for saving images\n        \n#         cv2.imwrite(\"{}_{}.jpg\".format(unicode, cnt), im)\n#         cnt += 1\n        \n        plt.show() # to be canceled for saving images","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"to get extracted data fully, below code is executed."},{"metadata":{"trusted":true},"cell_type":"code","source":"# unicode_arr = df_char_train['unicode'].unique()\n# for unicode in unicode_arr:\n#     print('-'*10, unicode, ' : ',  unicode_map[unicode], '-'*10)\n\n#     df_code_char0 = df_char_train.query('unicode == \"{}\"'.format(unicode))\n#     images_char0 = df_code_char0['image_id'].unique()\n\n#     cnt = 0\n#     num = len(images_char0)\n#     for n in range(num):\n#         fname = images_char0[n]\n#         print('-'*10, fname, '-'*10)\n\n#         image_path = IMAGES + fname + '.jpg'\n#         im_original = cv2.imread(image_path)\n#         im_original = cv2.cvtColor(im_original, cv2.COLOR_BGR2RGB)\n#         positions = df_code_char0.query('image_id == \"{}\"'.format(fname))[['x', 'y', 'w', 'h']].values.astype('int')\n\n#         for pos in positions:\n#             x, y, w, h = pos\n#             im = im_original[y:y+h, x:x+w]  \n#             cv2.imwrite(PROCESSED_DATA + \"{}_{}.jpg\".format(unicode, cnt), im)\n#             cnt += 1\n","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}