Created
September 26, 2016 13:48
-
-
Save patricksnape/656af6166c0e2f74678f18b3e6ad0ac9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"metadata": { | |
"collapsed": true, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "%matplotlib qt\nimport pickle\nimport os.path as op\nfrom mayavi import mlab\nfrom scipy.io import loadmat\nfrom scipy.spatial import KDTree\nfrom pathlib import Path\nfrom tqdm import tqdm_notebook, tnrange\n\nimport menpo.io as mio\nimport menpo3d.io as m3dio\nimport numpy as np\nfrom menpo.shape import PointCloud, TriMesh\nfrom menpo.model import PCAModel\n\nnp.set_printoptions(suppress=True, precision=3, linewidth=1000)", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "surrey_model = mio.import_pickle('/vol/construct3dmm/experiments/src/static/other_models/surrey/shape_model.pkl', \n encoding='latin1')", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "tddfa_expression = loadmat(op.expanduser('~/Dropbox/phd/3ddfa/Matlab/Model_Expression.mat'))\ntddfa_identity = loadmat(op.expanduser('~/Dropbox/phd/3ddfa/Matlab/ModelGeneration/Model_Shape.mat'))", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "tddfa_identity_mean = np.ascontiguousarray(tddfa_identity['mu_shape'].reshape(-1, 3))\ntddfa_identity_basis = np.ascontiguousarray(tddfa_identity['w'].T)\ntddfa_identity_eigenvalues = np.ascontiguousarray(tddfa_identity['sigma'].ravel()) ** 2\ntddfa_landmark_indices = np.ascontiguousarray(tddfa_identity['keypoints'].ravel()) - 1\ntddfa_trilist = np.ascontiguousarray(tddfa_identity['tri'].T) - 1\n\ntddfa_identity_template = TriMesh(tddfa_identity_mean, trilist=tddfa_trilist, copy=False)\ntddfa_identity_template.landmarks['gt'] = PointCloud(tddfa_identity_mean[tddfa_landmark_indices])\n\n\ntddfa_expression_mean = np.ascontiguousarray(tddfa_expression['mu_exp'].reshape(-1, 3))\ntddfa_expression_basis = np.ascontiguousarray(tddfa_expression['w_exp'].T)\ntddfa_expression_eigenvalues = np.ascontiguousarray(tddfa_expression['sigma_exp'].ravel())\ntddfa_expression_template = TriMesh(tddfa_expression_mean, trilist=tddfa_trilist, copy=False)", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "map_tddfa_to_basel = loadmat(op.expanduser('~/Dropbox/phd/3ddfa/Matlab/ModelGeneration/model_info.mat'))['trimIndex'].ravel() - 1", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "tddfa_identity_model = PCAModel.init_from_components(tddfa_identity_basis, \n tddfa_identity_eigenvalues, \n tddfa_identity_template,\n tddfa_identity_eigenvalues.shape[0] + 1, \n True)\n\ntddfa_expression_model = PCAModel.init_from_components(tddfa_expression_basis, \n tddfa_expression_eigenvalues, \n tddfa_expression_template,\n tddfa_expression_eigenvalues.shape[0] + 1, \n True)", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "# Load the basel model" | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "basel_model_matlab = loadmat(op.expanduser('~/Dropbox/phd/face_flow/01_MorphableModel.mat'))\nbasel_mean = basel_model_matlab['shapeMU']\nbasel_trilist = basel_model_matlab['tl'] - 1\n\nbasel_template = TriMesh(basel_mean.reshape(-1, 3), trilist=basel_trilist)\n\ndel basel_model_matlab", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "# Load the MeIn3D Model" | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "with Path('~/Dropbox/phd/mein3d_all_200.pkl').expanduser().open(mode='rb') as f:\n mein3d_model = pickle.load(f, encoding='latin1')['model']", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "james_original_template = m3dio.import_mesh('~/Dropbox/phd/face_flow/original_james_template.obj')\nwith Path('~/Dropbox/phd/face_flow/broken_james_template.pkl').expanduser().open(mode='rb') as f:\n screwed_james_original_template = pickle.load(f, encoding='latin1')\n# masked_template_mask = mio.import_pickle('/Users/pts08/Downloads/template_cropped_mask.pkl')", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "# Fix the MeIn3D Model" | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false, | |
"scrolled": true | |
}, | |
"cell_type": "code", | |
"source": "print('Basel:', basel_template.n_points)\nprint('MeIn3D:', mein3d_model.mean().n_points)\nprint('JamesTemplate:', screwed_james_original_template.n_points)\nprint('3DDFA:', tddfa_identity_model.mean().n_points)", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "# Find correspondances from MeIn3D to Basel\ntree = KDTree(screwed_james_original_template.points)", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "distances, map_basel_to_mein3d = tree.query(basel_template.points)\nbroken_distance_map = distances > 1\nmap_basel_to_mein3d[broken_distance_map] = -1", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": true, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "map_tddfa_to_mein3d = map_basel_to_mein3d[map_tddfa_to_basel]", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "(map_tddfa_to_mein3d == -1).sum()", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "fixed_mein3d_model = mein3d_model.copy()\nfixed_mein3d_model.__dict__['_mean'] = fixed_mein3d_model.__dict__['_mean'].reshape(-1, 3)[map_tddfa_to_mein3d].ravel()\nfixed_mein3d_model.__dict__['_components'] = fixed_mein3d_model.__dict__['_components'].reshape(200, -1, 3)[:, map_tddfa_to_mein3d, :].reshape(200, -1)\nfixed_mein3d_model.__dict__['template_instance'] = TriMesh(fixed_mein3d_model.__dict__['_mean'].reshape(-1, 3),\n trilist=tddfa_trilist)", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "print('Fixed MeIn3D:', fixed_mein3d_model.n_features // 3)", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "# Save Models" | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "mio.export_pickle(fixed_mein3d_model, '~/Dropbox/phd/mein3d_fw_correspond_all_200.pkl.gz', overwrite=True)\nmio.export_pickle(tddfa_expression_model, '~/Dropbox/phd/3ddfa_fw_29.pkl.gz', overwrite=True)\nmio.export_pickle(tddfa_identity_model, '~/Dropbox/phd/3ddfa_basel_200.pkl.gz', overwrite=True)", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "# Save correspondance info" | |
}, | |
{ | |
"metadata": { | |
"collapsed": true, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "mio.export_pickle({'map_tddfa_to_basel': map_tddfa_to_basel,\n 'map_basel_to_mein3d': map_basel_to_mein3d,\n 'tddfa_trilist': tddfa_trilist},\n '~/Dropbox/phd/mapping_mein3d_to_tddfa.pkl.gz')", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": {}, | |
"cell_type": "markdown", | |
"source": "# Visualize Video" | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "f = mlab.figure(figure='test', bgcolor=(1.0, 1.0, 1.0), size=(640, 480))", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "fixed_mein3d_model.mean().view(figure_id=f.name)\nmesh = f.children[0]\npolydata = mesh.children[0]", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": true, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "surrey_model.mean().view(figure_id=f.name)\nmesh = f.children[0]\npolydata = mesh.children[0]", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "# ID only\nout_path = Path('~/Downloads/models_rendering/identity').expanduser()\nfname_gen = lambda j, k, i: '{:03d}_{:03d}_{:.2f}'.format(j, k, i).replace('-', 'm').replace('.', '_')\nfname_gen = lambda i: '{:05d}'.format(i)\nn_steps = 6\nid_range = (-3, 3)\n\nid_linspace_neg = np.linspace(0, id_range[0], num=n_steps)\nid_linspace_plus = np.linspace(0, id_range[1], num=n_steps)\nid_linspace = np.concatenate(\n [id_linspace_neg, np.flipud(id_linspace_neg),\n id_linspace_plus, np.flipud(id_linspace_plus)], axis=0)\n\nn_identities = 10\nlinear_index = 0\n\nfor j in tnrange(n_identities, desc='n_identities'):\n identity_w = np.zeros(n_identities)\n for i in tqdm_notebook(id_linspace, desc='weights', leave=False, total=id_linspace.shape[0]):\n identity_w[j % n_identities] = i\n id_instance = surrey_model.instance(identity_w, \n normalized_weights=True)\n polydata.mlab_source.points = id_instance.points\n f.scene.save_jpg(str(out_path / (fname_gen(linear_index) + '.jpg')), \n quality=100, progressive=False)\n linear_index += 1", | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"collapsed": false, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "# Mixed\nout_path = Path('/Users/pts08/Downloads/models_rendering/expression')\nfname_gen = lambda j, k, i, e: '{:03d}_{:03d}_{:.2f}_{:.2f}'.format(j, k, i, e).replace('-', 'm').replace('.', '_')\nfname_gen = lambda i: '{:05d}'.format(i)\nn_steps = 6\nid_range = (-3, 3)\nexp_range = (-0.3, 0.3)\n\nid_linspace_neg = np.linspace(0, id_range[0], num=n_steps)\nid_linspace_plus = np.linspace(0, id_range[1], num=n_steps)\nid_linspace = np.concatenate(\n [id_linspace_neg, np.flipud(id_linspace_neg),\n id_linspace_plus, np.flipud(id_linspace_plus)], axis=0)\n\nexp_linspace_neg = np.linspace(0, exp_range[0], num=n_steps)\nexp_linspace_plus = np.linspace(0, exp_range[1], num=n_steps)\nexp_linspace = np.concatenate(\n [exp_linspace_neg, np.flipud(exp_linspace_neg),\n exp_linspace_plus, np.flipud(exp_linspace_plus)], axis=0)\n\nn_identities = 29\nn_exp = 29\nlinear_index = 0\nfor j in tnrange(n_exp, desc='n_expressions'):\n identity_w = np.zeros(n_identities)\n exp_w = np.zeros(n_exp)\n for i, e in tqdm_notebook(zip(id_linspace, exp_linspace), desc='weights', leave=False, total=id_linspace.shape[0]):\n identity_w[j % n_identities] = i\n exp_w[j] = e\n id_instance = tddfa_identity_model.instance([0], \n normalized_weights=True)\n exp_instance = tddfa_expression_model.instance(exp_w,\n normalized_weights=True)\n polydata.mlab_source.points = id_instance.points + exp_instance.points\n f.scene.save_jpg(str(out_path / (fname_gen(linear_index) + '.jpg')), \n quality=100, progressive=False)\n linear_index += 1", | |
"execution_count": null, | |
"outputs": [] | |
} | |
], | |
"metadata": { | |
"language_info": { | |
"file_extension": ".py", | |
"name": "python", | |
"version": "3.5.1", | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"mimetype": "text/x-python" | |
}, | |
"widgets": { | |
"state": { | |
"38d8f05ec6154673b8d0104171e1cf3b": { | |
"views": [] | |
}, | |
"ad834260118342688bff5fc69766338b": { | |
"views": [] | |
}, | |
"e5b2a7f8338a4f5b85169777e9233bbc": { | |
"views": [] | |
}, | |
"adc0063ebb24490d900a7c173e7ebc9c": { | |
"views": [] | |
}, | |
"7d7814e79eba45349d090dfb7714674e": { | |
"views": [] | |
}, | |
"0df18951044f41e9a58680b0c18c1a78": { | |
"views": [] | |
}, | |
"7ac6d058f121498aa8800f254d9c6732": { | |
"views": [ | |
{ | |
"cell_index": 27 | |
} | |
] | |
}, | |
"8cc850d595c44b4eaa59c193bdee20c1": { | |
"views": [] | |
}, | |
"032d172450a942e5a5e4f5837ed94963": { | |
"views": [] | |
}, | |
"d4245e01a95b4aeca9d5c342e26dad7f": { | |
"views": [] | |
}, | |
"ca5781334afc4e2eb1b938ffd3b40863": { | |
"views": [] | |
}, | |
"1a60cdbab7084d549aad10db6f77bf74": { | |
"views": [] | |
}, | |
"79036eabf66647a2a367134b07194c04": { | |
"views": [] | |
}, | |
"9584c0fb8ea84d30b998e0a0494c753c": { | |
"views": [] | |
}, | |
"4d735a028b4c4d9f88432312cd5aa656": { | |
"views": [] | |
}, | |
"be4317cc37144c05b7f293d416186742": { | |
"views": [] | |
}, | |
"d8bf4a1f3dd14fc3a6f67401bef51579": { | |
"views": [] | |
}, | |
"a1b53d84e16a4dbba10bd8dfa643f2b0": { | |
"views": [] | |
}, | |
"1a604fac05a844d89b478a7190fbe2c7": { | |
"views": [] | |
}, | |
"10b26c794a634818b20781a0b65e03c6": { | |
"views": [] | |
}, | |
"7d2b4330a8f2402ab2aa68e390deac98": { | |
"views": [] | |
}, | |
"7ccce63364fd4524b0e07d0d89991046": { | |
"views": [] | |
}, | |
"ada2ee736d394c528fdb74ede0f9847c": { | |
"views": [ | |
{ | |
"cell_index": 27 | |
} | |
] | |
}, | |
"69524c3994ae4feebecfdc6f17584a9f": { | |
"views": [] | |
}, | |
"fa552310e2e84cbdba550e78c1ee57ba": { | |
"views": [] | |
}, | |
"0ddbcfb4e9974478a886265256c970f1": { | |
"views": [] | |
}, | |
"c87dbecc892f407ebf1a2350bcee6833": { | |
"views": [] | |
}, | |
"aa90f151afe44383b5eda7e780fb3f6d": { | |
"views": [] | |
}, | |
"7c1c35d9f13b4ddf863c1d990b821029": { | |
"views": [] | |
}, | |
"7ceedc58a0974a66becacfffde4cd00a": { | |
"views": [ | |
{ | |
"cell_index": 27 | |
} | |
] | |
}, | |
"2393c12d5022471e9fa0a7a0d7a7c7d6": { | |
"views": [] | |
}, | |
"bfb456b17eaa4098b1994a20cf67aecc": { | |
"views": [] | |
}, | |
"482cb945dc354991a78d05608ab21eb0": { | |
"views": [] | |
}, | |
"8c9d5e942bac405e93d50b5052c41839": { | |
"views": [ | |
{ | |
"cell_index": 27 | |
} | |
] | |
}, | |
"22eb742747ec4270ab184d76c1c8bda8": { | |
"views": [] | |
}, | |
"5731334382784b91ac5c6dac62d86891": { | |
"views": [] | |
}, | |
"e95bf1c8b02b4737996dc953ebcf930c": { | |
"views": [] | |
}, | |
"684f0d553b314c3fa26e5b3e1453ada2": { | |
"views": [] | |
}, | |
"618a2ac970a647eeaebce4b3869788f5": { | |
"views": [] | |
}, | |
"63c70ef8a165468eb71361033de69cc8": { | |
"views": [] | |
}, | |
"30b73f2a70c4424b869ce563dce879f0": { | |
"views": [] | |
}, | |
"8d82693026cc482fab48c4123b2feb5d": { | |
"views": [] | |
}, | |
"f955e84aa7e74ccb8edcd3ebbbbd0ad1": { | |
"views": [] | |
}, | |
"2e2c048da6bf4b96a32c4d0acbb18cdd": { | |
"views": [] | |
}, | |
"661b4f6a3bdc4b1f91c3d8c05f7cee5b": { | |
"views": [] | |
}, | |
"4b62179cda2143be84db670422e235c8": { | |
"views": [] | |
}, | |
"2908fc38a9b5415ea00686308aec6c22": { | |
"views": [] | |
}, | |
"2ff8362fa69d478caaf4d06b72c1c941": { | |
"views": [] | |
}, | |
"b7862cc818854b5aa9588bb2a74d022b": { | |
"views": [] | |
}, | |
"0f528894c00e44cd9836aa5be238dc75": { | |
"views": [] | |
}, | |
"7dcff8b0070041b0bc81c9edbd68fa4c": { | |
"views": [] | |
}, | |
"ae6e4f40925c400e85830b20de392c2c": { | |
"views": [] | |
}, | |
"1737fe6f0fd04bf598b30e5efba60147": { | |
"views": [] | |
}, | |
"aff3e1f2502348ebb6ca6c508bd05eab": { | |
"views": [] | |
}, | |
"7c90c5f9218c4ef89c062c06198b75ce": { | |
"views": [] | |
}, | |
"55f836655e424d7da571659c4e420dd3": { | |
"views": [] | |
}, | |
"bab2730e1f3d4db98d1fe0b44f2d481c": { | |
"views": [] | |
}, | |
"082fcc59103a49debb02fb22a6d597d1": { | |
"views": [] | |
}, | |
"437f3de487e84f21bd52b5144aa558dd": { | |
"views": [] | |
}, | |
"50e89eccb50d4551b59df43c09d7b23a": { | |
"views": [] | |
}, | |
"c14c119acffd4ec4b634535e75a69a51": { | |
"views": [] | |
}, | |
"48054860f72c479c8eda3caf0a737387": { | |
"views": [] | |
}, | |
"91f25eea7c174a96bb7a604733735633": { | |
"views": [ | |
{ | |
"cell_index": 27 | |
} | |
] | |
}, | |
"e454ca964cbd49c38bf714e6b08e9bd6": { | |
"views": [] | |
}, | |
"a740d6ae28cc4550b9b3a1640b5424c0": { | |
"views": [] | |
}, | |
"8cec1ca2de994e8dbc8f47f5f72fe411": { | |
"views": [] | |
}, | |
"c8a8abbf1c7c4e96a0e7bb952bee533f": { | |
"views": [] | |
}, | |
"0672179969c34c7bb5a5ecf59318ca5b": { | |
"views": [] | |
}, | |
"bb5ecdcf65e241949cc6f4fbc54050d8": { | |
"views": [] | |
}, | |
"20a54e4e172e43b4a6fee5fb48166f0a": { | |
"views": [] | |
}, | |
"c984ab5c311840aa9a745da6951ceec7": { | |
"views": [] | |
}, | |
"859789e9dac04734a4daa82f7623df71": { | |
"views": [] | |
}, | |
"5bfe1c0b895e44aa8f9d7c3200c8566a": { | |
"views": [] | |
}, | |
"a858b2fb240547d3aa5487bb60ca9cff": { | |
"views": [] | |
}, | |
"eb8928dba4b34a02917f96a3e37efa69": { | |
"views": [] | |
}, | |
"7ee3df50841d4ed48178b3c800e54144": { | |
"views": [ | |
{ | |
"cell_index": 27 | |
} | |
] | |
}, | |
"34d66d780fd6470db4fcf4bdaa3d5fcd": { | |
"views": [] | |
}, | |
"418710500b6e465aac7e3a9a7364a2b9": { | |
"views": [] | |
}, | |
"4e159c60c66e45d9a2940df2edd0af47": { | |
"views": [] | |
}, | |
"5c5e324e816049dc823c86fb7495ff67": { | |
"views": [] | |
}, | |
"c5d0f9214bb34a78963e833aa7e6679a": { | |
"views": [] | |
}, | |
"987f3872b726420fa5b120ccf5a9f181": { | |
"views": [] | |
}, | |
"40c1b309117446a09524fdb2157bb6e8": { | |
"views": [] | |
}, | |
"b957dd7acafb437ea96b901dbba0f389": { | |
"views": [] | |
}, | |
"24a5afbbf49b4ea78b02b471231a2911": { | |
"views": [] | |
}, | |
"3e87a6b9999e4e21b782103ae1c29e39": { | |
"views": [] | |
}, | |
"14d524f8ef8e4f6e9c0e9c514a638b29": { | |
"views": [] | |
}, | |
"cf5d222ebc114deb82cd3a9bb80a673a": { | |
"views": [] | |
}, | |
"5702857d06684b91834dbcaaa2cba585": { | |
"views": [] | |
}, | |
"a23871a076dc4affbf2b713c2bcecdc4": { | |
"views": [] | |
}, | |
"f058f8224bf240b6951895c5ba66d15b": { | |
"views": [] | |
}, | |
"3bfd6bfb6e9347ac80623ac20b6534e9": { | |
"views": [] | |
}, | |
"a833e6bcb0ba4d42ba1b3d2893e64851": { | |
"views": [] | |
}, | |
"6bcf1cc333494fe2ba6d9e99d697d3aa": { | |
"views": [] | |
}, | |
"63955c19aedc4a00af6ca71ae3ddbf31": { | |
"views": [] | |
}, | |
"7903bf3128444decbc62610c26d859c7": { | |
"views": [] | |
}, | |
"ea625f99d00a44a5b8279a077f573c5a": { | |
"views": [] | |
}, | |
"bba0f88db0a84d00bb95ce4be8ef70c1": { | |
"views": [ | |
{ | |
"cell_index": 27 | |
} | |
] | |
}, | |
"f58960f6a80646ec9d7cdb4fbd4275ff": { | |
"views": [] | |
}, | |
"1f688f0287534f4fbe9cbba64ce32c1c": { | |
"views": [] | |
}, | |
"2b6e67fda7cf421b88430877003180ad": { | |
"views": [] | |
}, | |
"6a1034f7443347cfa7320f88203f45b4": { | |
"views": [] | |
}, | |
"6b08b4a252a049cab2072dd086bc0a1e": { | |
"views": [] | |
}, | |
"367ade6d74b04dca8749904434f048f1": { | |
"views": [] | |
}, | |
"0ad416375e144649a20fa9416d6ae5ff": { | |
"views": [] | |
}, | |
"f2584ff464944f7f9d5f269447b9a107": { | |
"views": [] | |
}, | |
"fe3b74b4073d488094fa01012f655183": { | |
"views": [] | |
}, | |
"e534223268ce42928be96dbfb4db39ea": { | |
"views": [] | |
}, | |
"0d84bc59facc46039b37066c60e6ba82": { | |
"views": [] | |
}, | |
"b49f0ac6326c4b68bd90aceff86e1773": { | |
"views": [] | |
}, | |
"9bc0527da569469bb92fb811b4a114bf": { | |
"views": [] | |
}, | |
"389be3ac195847c487769ccf8db5efa8": { | |
"views": [] | |
}, | |
"577dc53dd0b94415861a329f888f3e8d": { | |
"views": [] | |
}, | |
"2e0f87e9dfa0491f9437d22207ff9ea9": { | |
"views": [] | |
}, | |
"52bf7d1c16b14254b5e228176282b337": { | |
"views": [] | |
}, | |
"f3a9d33cca294a15a45c896faa9afc2d": { | |
"views": [] | |
}, | |
"359d636006fb4545a3a3a837b9af5e31": { | |
"views": [] | |
}, | |
"c15d79976c59473ea64b7ec56af3c4d7": { | |
"views": [] | |
}, | |
"fe704b846b504b50b4dd72fb84697e8f": { | |
"views": [] | |
}, | |
"3578fd3a968246b0b36ff1a3a2f20404": { | |
"views": [] | |
}, | |
"311e4c31fc584a96888f536c89f8ab52": { | |
"views": [] | |
}, | |
"c34cac6281ff481783f74787d3c28f5b": { | |
"views": [ | |
{ | |
"cell_index": 27 | |
} | |
] | |
}, | |
"54d6d607a9c849509c8d215887714114": { | |
"views": [] | |
}, | |
"f7f8c1678d6b47f08b2af4cf576baf2a": { | |
"views": [] | |
}, | |
"f982545b52544966ba98da8746983b36": { | |
"views": [] | |
}, | |
"7bc6e9a99dd54119acc70bbcdd260721": { | |
"views": [] | |
}, | |
"523877ce877140fc9eadb9920d3acc27": { | |
"views": [] | |
}, | |
"ac04ce827cb04dcbad7e5610b4839efe": { | |
"views": [] | |
}, | |
"e211b1ef5cfc4845ac4043c667ec788f": { | |
"views": [] | |
}, | |
"1bd62080a70e42c997c5772ecd3d3dd8": { | |
"views": [] | |
}, | |
"a11db9a59ae840bba880cde6003863c2": { | |
"views": [] | |
}, | |
"5434a66de02441e19a782460ef863bbe": { | |
"views": [] | |
}, | |
"f3e0f1694ea94cad867d2f1ddd08b829": { | |
"views": [] | |
}, | |
"a096f2c789664c2d9a86c4987e1723f9": { | |
"views": [] | |
}, | |
"8a4236b3dee74b228d07d8ecada5fb24": { | |
"views": [] | |
}, | |
"2a4e4b68d833462f9caabb71257c8dd1": { | |
"views": [] | |
}, | |
"e7286cbfd46a43ce96b9d918fc6d5332": { | |
"views": [] | |
}, | |
"5e4769550d1e4f31a352cfb22c1b2da9": { | |
"views": [ | |
{ | |
"cell_index": 27 | |
} | |
] | |
}, | |
"09eb28174c55431b887d4059ed6bb1b0": { | |
"views": [] | |
}, | |
"b09906002729454bb4c4842f6b436604": { | |
"views": [] | |
}, | |
"906f7d17103b4d61ba3dbdce43c31ff9": { | |
"views": [] | |
}, | |
"469fd6e588c74496b5b5f6861f5de59f": { | |
"views": [] | |
}, | |
"f682b8b6735f4cc998582a7e9500d3f3": { | |
"views": [] | |
}, | |
"5278602b0719417f98d1cf0264352965": { | |
"views": [] | |
}, | |
"aeb31cccadd34d4aac42b11f84f8be02": { | |
"views": [] | |
}, | |
"a71e057befb94ad1aef2635a8206f0c6": { | |
"views": [] | |
}, | |
"869b068ab0c44175a2de2c6036fc1a7e": { | |
"views": [] | |
}, | |
"9e2ac96adbd74d448b0b03defa5f0004": { | |
"views": [] | |
}, | |
"59259e0d981d4140b3b3d173c88485dc": { | |
"views": [ | |
{ | |
"cell_index": 27 | |
} | |
] | |
}, | |
"946f33352f164f1d87a6386852141fa2": { | |
"views": [] | |
}, | |
"a3de48d5750a4018bebfa2024efdae8b": { | |
"views": [] | |
}, | |
"d543950fcadd44789a2ba2b0d61c1f5c": { | |
"views": [] | |
}, | |
"911321590e5d4c5ab9ee1b435638d478": { | |
"views": [] | |
}, | |
"d4fd37894c25466d9680f27f8c242a11": { | |
"views": [] | |
}, | |
"b9490fb3765445279fa5ba95bac550e3": { | |
"views": [] | |
}, | |
"7e86ba3010e442e59312c7be7edead01": { | |
"views": [] | |
}, | |
"8f141eb26313432e9731d956a02cb8f4": { | |
"views": [] | |
}, | |
"fca313ecd3f2484ca8ab412b3a1b48a4": { | |
"views": [] | |
}, | |
"a434f08ed32e44859e450fec8793fb91": { | |
"views": [] | |
}, | |
"763b3067b9be4a72a1237dfb7ab7d3b7": { | |
"views": [] | |
}, | |
"82ad88e306ab40588eba7a612370bfb4": { | |
"views": [ | |
{ | |
"cell_index": 27 | |
} | |
] | |
}, | |
"feef85a8006640f9aeef36907a05c3de": { | |
"views": [] | |
} | |
}, | |
"version": "1.1.2" | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3", | |
"language": "python" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment