├── model
└── .gitkeep
├── Img2Mol.png
├── benchmark_data
├── STAKER_map.pkl
├── Img2Mol_map.pkl
└── README.md
├── examples
├── digital_example1.png
├── digital_example2.png
├── handwritten_example1.png
└── handwritten_example2.jpg
├── environment.yml
├── environment.local-cddd.yml
├── download_model.sh
├── img2mol
├── README.md
├── cddd_server.py
├── model.py
└── inference.py
├── setup.py
├── .gitignore
├── README.md
├── LICENSE
└── example_inference.ipynb
/model/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Img2Mol.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayer-science-for-a-better-life/Img2Mol/HEAD/Img2Mol.png
--------------------------------------------------------------------------------
/benchmark_data/STAKER_map.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayer-science-for-a-better-life/Img2Mol/HEAD/benchmark_data/STAKER_map.pkl
--------------------------------------------------------------------------------
/examples/digital_example1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayer-science-for-a-better-life/Img2Mol/HEAD/examples/digital_example1.png
--------------------------------------------------------------------------------
/examples/digital_example2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayer-science-for-a-better-life/Img2Mol/HEAD/examples/digital_example2.png
--------------------------------------------------------------------------------
/benchmark_data/Img2Mol_map.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayer-science-for-a-better-life/Img2Mol/HEAD/benchmark_data/Img2Mol_map.pkl
--------------------------------------------------------------------------------
/examples/handwritten_example1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayer-science-for-a-better-life/Img2Mol/HEAD/examples/handwritten_example1.png
--------------------------------------------------------------------------------
/examples/handwritten_example2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bayer-science-for-a-better-life/Img2Mol/HEAD/examples/handwritten_example2.jpg
--------------------------------------------------------------------------------
/environment.yml:
--------------------------------------------------------------------------------
1 | name: img2mol
2 |
3 | channels:
4 | - rdkit
5 | - pytorch
6 | - anaconda
7 | - conda-forge
8 | - defaults
9 | dependencies:
10 | - python=3.8.5
11 | - pip=20.2.4
12 | - notebook=6.4.2
13 | - pillow=8.0.1
14 | - numpy=1.19.2
15 | - rdkit=2020.03.1
16 | - cudatoolkit=11.0
17 | - torchvision=0.8.0
18 | - torchaudio=0.7.0
19 | - pytorch=1.7.0
20 | - pytorch-lightning=1.0.8
--------------------------------------------------------------------------------
/environment.local-cddd.yml:
--------------------------------------------------------------------------------
1 | name: img2mol
2 |
3 | channels:
4 | - rdkit
5 | - pytorch
6 | - anaconda
7 | - conda-forge
8 | - defaults
9 | dependencies:
10 | - python=3.6
11 | - pip=20.2.4
12 | - pandas<=1.0.3
13 | - notebook=6.4.2
14 | - pillow=8.0.1
15 | - scikit-learn
16 | - rdkit=2020.03.1
17 | - cudatoolkit=11.0
18 | - torchvision=0.8.0
19 | - torchaudio=0.7.0
20 | - pytorch=1.7.0
21 | - pytorch-lightning=1.0.8
22 | - pip:
23 | - https://github.com/jrwnter/cddd/archive/refs/tags/1.0.tar.gz
24 | - tensorflow==1.10.1
25 | - tensorboard==1.15
26 | - numpy==1.19.2
27 | - .
28 |
--------------------------------------------------------------------------------
/download_model.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | gURL=https://drive.google.com/file/d/1pk21r4Zzb9ZJkszJwP9SObTlfTaRMMtF/view?usp=sharing
4 | # match more than 26 word characters
5 | ggID=$(echo "$gURL" | egrep -o '(\w|-){26,}')
6 | # alternative, just hardcode the id
7 | ggID='1pk21r4Zzb9ZJkszJwP9SObTlfTaRMMtF'
8 | ggURL='https://drive.google.com/uc?export=download'
9 |
10 | curl -sc /tmp/gcokie "${ggURL}&id=${ggID}" >/dev/null
11 | getcode="$(awk '/_warning_/ {print $NF}' /tmp/gcokie)"
12 |
13 | FILE=/model/model.ckpt
14 | if test -f "$FILE"; then
15 | echo "$FILE exists."
16 | else
17 | echo "$FILE does not exist."
18 | echo -e "Downloading from "$gURL"...\n"
19 | cmd='curl --insecure -C - -LOJb /tmp/gcokie "${ggURL}&confirm=${getcode}&id=${ggID}"'
20 | eval $cmd
21 | mv 'model.ckpt' 'model/'
22 | fi
--------------------------------------------------------------------------------
/img2mol/README.md:
--------------------------------------------------------------------------------
1 | # `img2mol` module structure
2 | This directory consists of the necessary python scripts to perform inference tasks with the `img2mol` model.
3 | The list below summarizes each module:
4 |
5 |
6 | * `cddd_server.py`
7 | * class for utilizing th CDDD encoder-decoder described by [Winter et al. (2019)](https://pubs.rsc.org/en/content/articlelanding/2019/sc/c8sc04175j#!divAbstract)
8 | * note that the implemented model class is licensed under the CC BY-NC 4.0 license and only applicable in non-commercial setting
9 | * `model.py`
10 | * Model implementation of the `img2mol` as described in our paper. We use Pytorch Lightning for model training, but essentially, only using PyTorch is also possible
11 | * `inference.py`
12 | * inference class that can be used for predicting the SMILES representation based on an image representation. By default, the model weights are randomly initialized and when instantatiating the inference class, a model checkpoint can be used for loading trained weights.
13 | * The provided model weights are licensed under CC BY-NC 4.0 and only applicable for non-commercial usage
14 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | # Copyright 2021 Machine Learning Research @ Bayer AG
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Install script for setuptools."""
16 |
17 | from setuptools import setup
18 |
19 |
20 | setup(
21 | name='img2mol',
22 | version='0.1',
23 | packages=['img2mol'],
24 | url='https://github.com/bayer-science-for-a-better-life/Img2Mol',
25 | license='Apache License, Version 2.0',
26 | author='Djork-Arné Clevert, Tuan Le, Robin Winter and Floriane Montanari',
27 | author_email='djork-arne.clevert@bayer.com',
28 | description='Inferring molecules from images'
29 | )
30 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | model/*
2 | !model/.gitkeep
3 |
4 | # Editors
5 | .vscode/
6 | .idea/
7 |
8 | # Vagrant
9 | .vagrant/
10 |
11 | # Mac/OSX
12 | .DS_Store
13 |
14 | # Windows
15 | Thumbs.db
16 |
17 | # Source for the following rules: https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore
18 | # Byte-compiled / optimized / DLL files
19 | __pycache__/
20 | *.py[cod]
21 | *$py.class
22 |
23 | # C extensions
24 | *.so
25 |
26 | # Distribution / packaging
27 | .Python
28 | build/
29 | develop-eggs/
30 | dist/
31 | downloads/
32 | eggs/
33 | .eggs/
34 | lib/
35 | lib64/
36 | parts/
37 | sdist/
38 | var/
39 | wheels/
40 | *.egg-info/
41 | .installed.cfg
42 | *.egg
43 | MANIFEST
44 |
45 | # PyInstaller
46 | # Usually these files are written by a python script from a template
47 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
48 | *.manifest
49 | *.spec
50 |
51 | # Installer logs
52 | pip-log.txt
53 | pip-delete-this-directory.txt
54 |
55 | # Unit test / coverage reports
56 | htmlcov/
57 | .tox/
58 | .nox/
59 | .coverage
60 | .coverage.*
61 | .cache
62 | nosetests.xml
63 | coverage.xml
64 | *.cover
65 | .hypothesis/
66 | .pytest_cache/
67 |
68 | # Translations
69 | *.mo
70 | *.pot
71 |
72 | # Django stuff:
73 | *.log
74 | local_settings.py
75 | db.sqlite3
76 |
77 | # Flask stuff:
78 | instance/
79 | .webassets-cache
80 |
81 | # Scrapy stuff:
82 | .scrapy
83 |
84 | # Sphinx documentation
85 | docs/_build/
86 |
87 | # PyBuilder
88 | target/
89 |
90 | # Jupyter Notebook
91 | .ipynb_checkpoints
92 |
93 | # IPython
94 | profile_default/
95 | ipython_config.py
96 |
97 | # pyenv
98 | .python-version
99 |
100 | # celery beat schedule file
101 | celerybeat-schedule
102 |
103 | # SageMath parsed files
104 | *.sage.py
105 |
106 | # Environments
107 | .env
108 | .venv
109 | env/
110 | venv/
111 | ENV/
112 | env.bak/
113 | venv.bak/
114 |
115 | # Spyder project settings
116 | .spyderproject
117 | .spyproject
118 |
119 | # Rope project settings
120 | .ropeproject
121 |
122 | # mkdocs documentation
123 | /site
124 |
125 | # mypy
126 | .mypy_cache/
127 | .dmypy.json
128 | dmypy.json
129 |
--------------------------------------------------------------------------------
/img2mol/cddd_server.py:
--------------------------------------------------------------------------------
1 | # Copyright 2021 Machine Learning Research @ Bayer AG
2 | #
3 | # Licensed for non-commercial use only, under the terms of the
4 | # Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) license.
5 | # You can find details at: https://creativecommons.org/licenses/by-nc/4.0/legalcode
6 |
7 |
8 | import json
9 | import requests
10 | requests.packages.urllib3.disable_warnings()
11 |
12 | """
13 | CDDD Server to encode SMILES string to molecular embeddings and decode the molecular embeddings to SMILES string.
14 |
15 | For further details, please refer to:
16 | [1] R. Winter, F. Montanari, F. Noe and D. Clevert, Chem. Sci, 2019,
17 | https://pubs.rsc.org/en/content/articlelanding/2019/sc/c8sc04175j#!divAbstract
18 |
19 | and: https://github.com/jrwnter/cddd
20 | """
21 |
22 | # Note that the DEFAULT_HOST is accessing the AWS instance deployed by Machine Learning Research Group of Bayer.
23 | DEFAULT_HOST = "http://ec2-18-157-240-87.eu-central-1.compute.amazonaws.com"
24 |
25 | """
26 | The CDDD server is applicable for non-commercial use only, under the terms of the
27 | Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) license.
28 | You can find details at: https://creativecommons.org/licenses/by-nc/4.0/legalcode
29 | """
30 |
31 |
32 | class CDDDRequest:
33 | def __init__(self, host=DEFAULT_HOST, port=8892):
34 | self.host = host
35 | self.port = port
36 | self.headers = {'content-type': 'application/json'}
37 |
38 | def smiles_to_cddd(self, smiles):
39 | url = "{}:{}/smiles_to_cddd/".format(self.host, self.port)
40 | req = json.dumps({"smiles": smiles})
41 | response = requests.post(url, data=req, headers=self.headers, verify=False)
42 | return json.loads(response.content.decode("utf-8"))
43 |
44 | def seq_to_emb(self, smiles):
45 | return self.smiles_to_cddd(smiles)
46 |
47 | def cddd_to_smiles(self, embedding):
48 | url = "{}:{}/cddd_to_smiles/".format(self.host, self.port)
49 | req = json.dumps({"cddd": embedding})
50 | response = requests.post(url, data=req, headers=self.headers, verify=False)
51 | return json.loads(response.content.decode("utf-8"))
52 |
53 | def emb_to_seq(self, embedding):
54 | return self.cddd_to_smiles(embedding)
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Img2Mol: inferring molecules from pictures
2 | ==========================================
3 | 
4 | Welcome to Img2Mol! :wave:.
5 |
6 | :point_right: For the Img2Mol web app switch to the "deployment-example" branch.
7 |
8 | ## Overview
9 | Here we provide the implementation of the `img2mol` model using [PyTorch](https://github.com/pytorch/pytorch) and [PyTorch Lightning](https://github.com/PyTorchLightning/pytorch-lightning) for training and inference, along with an exemplary jupyter notebook.
10 |
11 | This repository is organized as follows:
12 | * `examples/`: contains example images to apply our proposed model on
13 | * `img2mol/`: contains necessary python modules for our proposed model
14 | * `model/`: stores the trained model weights as pickled files. The download-link will be provided in future soon
15 |
16 | ## Installation
17 | #### Requirements
18 | ```
19 | python=3.8.5
20 | pip=20.2.4
21 | notebook=6.4.2
22 | pillow=8.0.1
23 | numpy=1.19.2
24 | rdkit=2020.03.1
25 | cudatoolkit=11.0
26 | torchvision=0.8.0
27 | torchaudio=0.7.0
28 | pytorch=1.7.0
29 | pytorch-lightning=1.0.8
30 | ```
31 |
32 | #### Environment
33 | Create a new environment:
34 | ```bash
35 | git clone git@github.com:bayer-science-for-a-better-life/Img2Mol.git
36 | cd Img2Mol
37 | conda env create -f environment.yml
38 | conda activate img2mol
39 | pip install .
40 | ```
41 | *If you want to run Img2Mol as a standalone version with a locally loaded CDDD model instead of sending requests to our CDDD server, install the environment from `environment.local-cddd.yml` instead of `environment.yml`*
42 | ## Download Model Weights
43 | You can download the trained parameters for the default model (~2.4GB) as described in our paper using the following link:
44 | https://drive.google.com/file/d/1pk21r4Zzb9ZJkszJwP9SObTlfTaRMMtF/view .
45 | Please move the downloaded file `model.ckpt` into the `model/` directory.
46 |
47 | If you are working with the local CDDD installation, please * [download and unzip the CDDD model](https://drive.google.com/u/0/uc?id=1oyknOulq_j0w9kzOKKIHdTLo5HphT99h&export=download) and ove the directory *default_model* to `path/to/anaconda3/envs/img2mol/lib/python3.6/site-packages/cddd/data/`
48 |
49 | Alternatively, we provide a bash script that will download and move the file automatically.
50 | ```bash
51 | bash download_model.sh
52 | ```
53 | If you have problems downloading the file using the bash script, please manually download the file using the browser.
54 |
55 | ## Examples
56 | Check the example notebook `example_inference.ipynb` to see how the inference class can be used. A demonstration of the usage with the usage with the local CDDD model is demonstrated in `example_inference_local_cddd.ipynb`.
57 |
58 | ## Reference
59 | Please cite our manuscript if you use our model in your work.
60 |
61 | D.-A. Clevert, T. Le, R. Winter, F. Montanari, Chem. Sci., 2021, [DOI: 10.1039/D1SC01839F](https://doi.org/10.1039/D1SC01839F)
62 |
63 | ## Img2Mol Code License
64 | Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0.
65 |
66 | Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
67 |
68 | ## Model Parameters License
69 | The Img2Mol parameters are made available for non-commercial use only, under the terms of the Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) license. You can find details at: https://creativecommons.org/licenses/by-nc/4.0/legalcode
70 |
--------------------------------------------------------------------------------
/img2mol/model.py:
--------------------------------------------------------------------------------
1 | # Copyright 2021 Machine Learning Research @ Bayer AG
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | import torch
16 | from torch import nn
17 | import torch.nn.functional as F
18 | import pytorch_lightning as pl
19 | from typing import Union, List, Optional
20 |
21 |
22 | MODEL_CONFIGS: List = [[128, 7, 3, 4],
23 | [256, 5, 1, 1],
24 | [384, 5, 1, 1],
25 | 'M',
26 | [384, 3, 1, 1],
27 | [384, 3, 1, 1],
28 | 'M',
29 | [512, 3, 1, 1],
30 | [512, 3, 1, 1],
31 | [512, 3, 1, 1],
32 | 'M']
33 |
34 |
35 | def make_layers(cfg: Optional[List[Union[str, int]]] = None,
36 | batch_norm: bool = False) -> nn.Sequential:
37 | """
38 | Helper function to create the convolutional layers for the Img2Mol model to be passed into a nn.Sequential module.
39 | :param cfg: list populated with either a str or a list, where the str object refers to the pooling method and the
40 | list object will be unrolled to obtain the convolutional-filter parameters.
41 | Defaults to the `MODEL_CONFIGS` list.
42 | :param batch_norm: boolean of batch normalization should be used in-between conv2d and relu activation.
43 | Defaults to False
44 | :return: torch.nn.Sequential module as feature-extractor
45 | """
46 | if cfg is None:
47 | cfg = MODEL_CONFIGS
48 |
49 | layers: List[nn.Module] = []
50 |
51 | in_channels = 1
52 | for v in cfg:
53 | if v == 'A':
54 | layers += [nn.AvgPool2d(kernel_size=2, stride=2)]
55 | else:
56 | if v == 'M':
57 | layers += [nn.MaxPool2d(kernel_size=2, stride=2)]
58 | else:
59 | units, kern_size, stride, padding = v
60 | conv2d = nn.Conv2d(in_channels, units, kernel_size=kern_size, stride=stride, padding=padding)
61 | if batch_norm:
62 | layers += [conv2d, nn.BatchNorm2d(units), nn.ReLU(inplace=True)]
63 | else:
64 | layers += [conv2d, nn.ReLU(inplace=True)]
65 | in_channels = units
66 |
67 | model = nn.Sequential(*layers)
68 | return model
69 |
70 |
71 | class Img2MolPlModel(pl.LightningModule):
72 | """
73 | Wraps the Img2Mol model into pytorch lightning for easy training and inference
74 | """
75 | def __init__(self, learning_rate: float = 1e-4, batch_norm: bool = False):
76 | super().__init__()
77 | self.learning_rate = learning_rate
78 |
79 | # convolutional NN for feature extraction
80 | self.features = make_layers(cfg=MODEL_CONFIGS, batch_norm=batch_norm)
81 | # fully-connected network for classification based on CNN feature extractor
82 | self.classifier = nn.Sequential(
83 | nn.Linear(512 * 9 * 9, 4096),
84 | nn.ReLU(True),
85 | nn.Dropout(p=0.0),
86 | nn.Linear(4096, 4096),
87 | nn.ReLU(True),
88 | nn.Dropout(p=0.0),
89 | nn.Linear(4096, 512),
90 | nn.Tanh(),
91 | )
92 |
93 | self._initialize_weights()
94 |
95 | def forward(self, x: torch.Tensor) -> torch.Tensor:
96 | x = self.features(x)
97 | x = torch.flatten(x, 1)
98 | x = self.classifier(x)
99 | return x
100 |
101 | def _initialize_weights(self) -> None:
102 | for m in self.modules():
103 | if isinstance(m, nn.Conv2d):
104 | nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
105 | if m.bias is not None:
106 | nn.init.constant_(m.bias, 0)
107 | elif isinstance(m, nn.BatchNorm2d):
108 | nn.init.constant_(m.weight, 1)
109 | nn.init.constant_(m.bias, 0)
110 | elif isinstance(m, nn.Linear):
111 | nn.init.normal_(m.weight, 0, 0.01)
112 | nn.init.constant_(m.bias, 0)
113 |
114 | def training_step(self, batch, batch_idx):
115 | x, cddd = batch
116 | cddd_hat = self(x)
117 | loss = F.mse_loss(cddd_hat, cddd)
118 | self.log('train_loss', loss, on_epoch=True, prog_bar=True, logger=True)
119 | return loss
120 |
121 | def validation_step(self, batch, batch_idx):
122 | x, cddd = batch
123 | cddd_hat = self(x)
124 | loss = F.mse_loss(cddd_hat, cddd)
125 | self.log('valid_loss', loss, on_epoch=True, prog_bar=True, logger=True)
126 |
127 | def test_step(self, batch, batch_idx):
128 | x, cddd = batch
129 | cddd_hat = self(x)
130 | loss = F.mse_loss(cddd_hat, cddd)
131 | self.log('test_loss', loss)
132 |
133 | def configure_optimizers(self):
134 | return torch.optim.AdamW(self.parameters(), lr=self.learning_rate)
135 |
136 |
137 | if __name__ == "__main__":
138 | pl_model = Img2MolPlModel()
139 | print(pl_model)
140 |
--------------------------------------------------------------------------------
/benchmark_data/README.md:
--------------------------------------------------------------------------------
1 | Here we provide the benchmark datasets that was used to evaluate the performance of Img2Mol and compare it with that of state-of-the-art molecular recognition methods. The following benchmark datasets (all 8-bit grayscale images) were used.
2 | For the smaller benchmark datasets (USPTO, UoB, CLEF and JPO), we applied a slight input perturbation by adding rotation (randomly drawn from [−5°, 5°]) and shearing (xy-shearing factor randomly drawn from [−0.1, 0.1]). Every input image of those benchmarks is perturbed five times randomly. This is done in order to detect potential overfitting of the baseline methods to those small, well known datasets.
3 |
4 | #### Img2Mol
5 | Test set collection of 25,000 images and molecule descriptions. Images were generated as described in subsection 3.3 of the paper. The resolution of the images is 224 × 224 px. Only half of our original test set is used due to the computational time of the baseline methods. The data set consists of typical small molecules with an average size of 25 atoms, ranging between 6 and 44 atoms. Please load the pickled dataframe object to get the mapping images<>smiles.
6 |
7 | You can download the tgz-file (~114MB) of the images here:
8 | https://drive.google.com/file/d/1FZxjcncEQ-aK4Gl5obepNxAJCFOcEc8W/view
10 |
11 | #### STAKER
12 | The validation set collection of 30,000 images and molecule descriptions provided by Staker et al. The images are based on US Patent Office (USPTO) data. The image resolution is 256 × 256 px. Molecules are composed of 24 atoms on average, ranging from 7 at the minimum to 51 at the maximum. Please load the pickled dataframe object to get the mapping images<>smiles.
13 |
14 | You can download the tgz-file (~110MB) of the images here:
15 | https://drive.google.com/file/d/1rYPMSF6C7AbHubll8BZZJF2zvd7UYzp6/view.
16 | #### USPTO
17 | A collection of 4852 images and molecule descriptions based on US Patent Office (USPTO) data, obtained from Rajan et al. The average resolution of the images is 649 × 417 px. The dataset consists of molecules with an average size of 28 atoms, ranging between 10 and 96 atoms.
18 |
19 | You can download the tgz-file (~12MB) of the images here:
20 | https://drive.google.com/file/d/15h1c50AmcJ3jCuQOdLjkVhcFkqe7slLn/view.
22 | #### UoB
23 | 5716 images and molecule descriptions of chemical structures developed by the University of Birmingham, obtained from Rajan et al. The average resolution of the images is 762 × 412 px. The molecules in this data set are quite small, consisting on average of only 13 atoms, ranging between 4 and 34 atoms.
24 |
25 | You can download the tgz-file of the images (~124MB) here:
26 | https://drive.google.com/file/d/13Ul94f6hUEpDbUKLUP_e7xEfSRZIqFuy/view.
28 | #### CLEF
29 | A collection of 711 images and molecule descriptions based on the Conference and Labs of the Evaluation Forum (CLEF) test set, obtained from Rajan et al. The average resolution of the images is 1243 × 392 px. The dataset consists of molecules with an average size of 26 atoms, ranging between 4 and 42 atoms.
30 |
31 | You can download the tgz-file (~12MB) of the images here:
32 | https://drive.google.com/file/d/1fqMg0N582ti9ij71Pbntbq6vMw8z1BJI/view.
34 | #### JPO
35 | A collection of 365 images and molecule descriptions based on Japanese Patent Office (JPO) data, obtained from Rajan et al. Note that this data set contains many textual labels, including Japanese characters, and irregular features, including line thickness variations. In addition, some images are characterised by poor quality. The average resolution of the images is 607 × 373 px. Molecules are composed of 20 atoms on average, ranging from 5 at the minimum to 43 at the maximum.
36 |
37 | You can download the tgz-file (~12MB) of the images here:
38 | https://drive.google.com/file/d/11GxOLvQn_TanDAW8u7oCvSA_FJ-SXU4F/view.
40 |
41 |
42 | #### Influence of the depiction library
43 |
44 | To investigate how the rendering library (RDKit, OEChem TK, or Indigo) used to create input images affects the performance of chemical structure recognition models, we compiled the following benchmark dataset. A subset of 5000 compounds from the Img2Mol test set depicted each five times by each of the three libraries. Please use the Img2Mol mapping information to link images to the smiles.
45 |
46 | You can download the tgz-file (~1GB) of the images herere:
47 | https://drive.google.com/file/d/1ixGj51F5NnhRfHFydpuCBYvYKexfaX3E/view.
49 |
50 |
51 | #### Influence of the image resolution
52 |
53 | To investigate how the image resolution used to create input images affects the performance of chemical structure recognition models, we compiled the following benchmark dataset. A subset of 5000 compounds from the Img2Mol test set depicted each five times with 256, 512, 1024 and 2048 px resolution. Please use the Img2Mol mapping information to link images to the smiles.
54 |
55 | You can download the tgz-file (~2.5GB) of the images here:
56 | https://drive.google.com/file/d/1uMZ2FGNON4k6vxrldkEJZPRbyrISNR6K/view.
58 |
59 |
60 |
--------------------------------------------------------------------------------
/img2mol/inference.py:
--------------------------------------------------------------------------------
1 | # Copyright 2021 Machine Learning Research @ Bayer AG
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | import torch
16 | from torchvision import transforms
17 |
18 | from typing import Optional
19 | import random
20 | import numpy as np
21 | from PIL import Image, ImageOps, ImageEnhance
22 |
23 | from img2mol.model import Img2MolPlModel
24 | from img2mol.cddd_server import CDDDRequest
25 |
26 | from rdkit import Chem
27 |
28 | import warnings
29 | # CDDD import only works if the suitable environment has been installed
30 | try:
31 | with warnings.catch_warnings():
32 | warnings.simplefilter("ignore", FutureWarning)
33 | from cddd.inference import InferenceModel as CDDDInferenceModel
34 | except ImportError:
35 | print("Local CDDD installation has not been found.")
36 |
37 |
38 | """
39 | Inference Class for Img2Mol Model.
40 | By default, the class instantiation will not use any model checkpoint.
41 | The Img2Mol model parameters are made available for non-commercial use only, under the terms of the
42 | Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) license.
43 | You can find details at: https://creativecommons.org/licenses/by-nc/4.0/legalcode
44 | """
45 |
46 |
47 | class Img2MolInference(object):
48 | """
49 | Inference Class
50 | """
51 | def __init__(
52 | self,
53 | model_ckpt: Optional[str] = None,
54 | device: str = "cuda:0" if torch.cuda.is_available() else "cpu",
55 | local_cddd: bool = None
56 | ):
57 | super(Img2MolInference, self).__init__()
58 | if local_cddd:
59 | self.cddd_inference_model = CDDDInferenceModel()
60 | else:
61 | self.cddd_inference_model = None
62 | self.device = device
63 | print("Initializing Img2Mol Model with random weights.")
64 | self.model = Img2MolPlModel()
65 | if model_ckpt is not None:
66 | print(f"Loading checkpoint: {model_ckpt}")
67 | self.model = self.model.load_from_checkpoint(model_ckpt)
68 |
69 | print("Setting to `self.eval()`-mode.")
70 | self.model.eval()
71 | print(f"Sending model to `{self.device}` device.")
72 | self.model.to(self.device)
73 | print("Succesfully created Img2Mol Inference class.")
74 |
75 | """
76 | Class methods for image preprocessing
77 | """
78 | @classmethod
79 | def read_imagefile(cls, filepath: str) -> Image.Image:
80 | img = Image.open(filepath, "r")
81 |
82 | if img.mode == "RGBA":
83 | bg = Image.new('RGB', img.size, (255, 255, 255))
84 | # Paste image to background image
85 | bg.paste(img, (0, 0), img)
86 | return bg.convert('L')
87 | else:
88 | return img.convert('L')
89 |
90 | @classmethod
91 | def fit_image(cls, img: Image):
92 | old_size = img.size
93 | desired_size = 224
94 | ratio = float(desired_size) / max(old_size)
95 | new_size = tuple([int(x * ratio) for x in old_size])
96 | img = img.resize(new_size, Image.BICUBIC)
97 | new_img = Image.new("L", (desired_size, desired_size), "white")
98 | new_img.paste(img, ((desired_size - new_size[0]) // 2,
99 | (desired_size - new_size[1]) // 2))
100 |
101 | new_img = ImageOps.expand(new_img, int(np.random.randint(5, 25, size=1)), "white")
102 | return new_img
103 |
104 | @classmethod
105 | def transform_image(cls, image: Image):
106 | image = cls.fit_image(image)
107 | img_PIL = transforms.RandomRotation((-15, 15), resample=3, expand=True, center=None, fill=255)(image)
108 | img_PIL = transforms.ColorJitter(brightness=[0.75, 2.0], contrast=0, saturation=0, hue=0)(img_PIL)
109 | shear_value = np.random.uniform(0.1, 7.0)
110 | shear = random.choice([[0, 0, -shear_value, shear_value], [-shear_value, shear_value, 0, 0],
111 | [-shear_value, shear_value, -shear_value, shear_value]])
112 | img_PIL = transforms.RandomAffine(0, translate=None, scale=None,
113 | shear=shear, resample=3, fillcolor=255)(img_PIL)
114 | img_PIL = ImageEnhance.Contrast(ImageOps.autocontrast(img_PIL)).enhance(2.0)
115 | img_PIL = transforms.Resize((224, 224), interpolation=3)(img_PIL)
116 | img_PIL = ImageOps.autocontrast(img_PIL)
117 | img_PIL = transforms.ToTensor()(img_PIL)
118 | return img_PIL
119 |
120 | def read_image_to_tensor(self, filepath: str,
121 | repeats: int = 50):
122 | extension = filepath.split(".")[-1] in ("jpg", "jpeg", "png")
123 | if not extension:
124 | return "Image must be jpg or png format!"
125 | image = self.read_imagefile(filepath)
126 | images = torch.cat([torch.unsqueeze(self.transform_image(image), 0)
127 | for _ in range(repeats)], dim=0)
128 | images = images.to(self.device)
129 | return images
130 |
131 | def __call__(self,
132 | filepath: str,
133 | cddd_server: CDDDRequest = None,
134 | return_cddd: bool = False,
135 | ) -> dict:
136 | images = self.read_image_to_tensor(filepath, repeats=50)
137 | with torch.no_grad():
138 | cddd = self.model(images).detach().cpu().numpy()
139 |
140 | # take the median cddd prediction out of `repeats` predictions
141 | cddd = np.median(cddd, axis=0)
142 |
143 | if self.cddd_inference_model:
144 | smiles = self.cddd_inference_model.emb_to_seq(cddd)
145 | else:
146 | smiles = cddd_server.cddd_to_smiles(cddd.tolist())
147 | mol = Chem.MolFromSmiles(smiles, sanitize=True)
148 | # if the molecule is valid, i.e. can be parsed with the rdkit
149 | if mol:
150 | can_smiles = Chem.MolToSmiles(mol)
151 | can_mol = Chem.MolFromSmiles(can_smiles)
152 | else:
153 | print("Image translation failed.")
154 | can_smiles = None
155 | can_mol = None
156 |
157 | if not return_cddd:
158 | cddd = None
159 |
160 | return {"filepath": filepath,
161 | "cddd": cddd, "smiles": can_smiles, "mol": can_mol
162 | }
163 |
164 | def predict(self, filepath: str,
165 | cddd_server: CDDDRequest,
166 | return_cddd: bool = False) -> dict:
167 | return self.__call__(filepath, cddd_server, return_cddd)
168 |
169 |
170 | if __name__ == "__main__":
171 |
172 | device = "cuda:0" if torch.cuda.is_available() else "cpu"
173 | img2mol = Img2MolInference(model_ckpt=None,
174 | device=device)
175 | cddd_server = CDDDRequest(host="http://ec2-18-157-240-87.eu-central-1.compute.amazonaws.com")
176 |
177 | example = "examples/example1.png"
178 |
179 | res = img2mol(filepath=example, cddd_server=cddd_server)
180 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright 2021 Machine Learning Research @ Bayer AG
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/example_inference.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "Copyright 2021 Machine Learning Research @ Bayer AG\n",
8 | "\n",
9 | "Licensed for non-commercial use only, under the terms of the\n",
10 | "Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) license.\n",
11 | "\n",
12 | "You can find details at: https://creativecommons.org/licenses/by-nc/4.0/legalcode"
13 | ]
14 | },
15 | {
16 | "cell_type": "code",
17 | "execution_count": 1,
18 | "id": "b9b48452",
19 | "metadata": {},
20 | "outputs": [],
21 | "source": [
22 | "import torch\n",
23 | "from img2mol.inference import *"
24 | ]
25 | },
26 | {
27 | "cell_type": "code",
28 | "execution_count": 2,
29 | "id": "dca01497",
30 | "metadata": {},
31 | "outputs": [],
32 | "source": [
33 | "from IPython.display import display"
34 | ]
35 | },
36 | {
37 | "cell_type": "code",
38 | "execution_count": 3,
39 | "id": "30a2191a",
40 | "metadata": {},
41 | "outputs": [],
42 | "source": [
43 | "from PIL import Image"
44 | ]
45 | },
46 | {
47 | "cell_type": "code",
48 | "execution_count": 4,
49 | "id": "30d0b65b",
50 | "metadata": {},
51 | "outputs": [],
52 | "source": [
53 | "import os"
54 | ]
55 | },
56 | {
57 | "cell_type": "code",
58 | "execution_count": 5,
59 | "id": "2d9605c0",
60 | "metadata": {},
61 | "outputs": [
62 | {
63 | "data": {
64 | "text/plain": [
65 | "['.gitkeep', 'model.ckpt']"
66 | ]
67 | },
68 | "execution_count": 5,
69 | "metadata": {},
70 | "output_type": "execute_result"
71 | }
72 | ],
73 | "source": [
74 | "os.listdir(\"model/\")"
75 | ]
76 | },
77 | {
78 | "cell_type": "code",
79 | "execution_count": 6,
80 | "id": "99236cf4",
81 | "metadata": {},
82 | "outputs": [
83 | {
84 | "name": "stdout",
85 | "output_type": "stream",
86 | "text": [
87 | "Initializing Img2Mol Model with random weights.\n",
88 | "Loading checkpoint: model/model.ckpt\n",
89 | "Setting to `self.eval()`-mode.\n",
90 | "Sending model to `cuda:0` device.\n",
91 | "Succesfully created Img2Mol Inference class.\n"
92 | ]
93 | }
94 | ],
95 | "source": [
96 | "device = \"cuda:0\" if torch.cuda.is_available() else \"cpu\"\n",
97 | "img2mol = Img2MolInference(model_ckpt=\"model/model.ckpt\",\n",
98 | " device=device)\n",
99 | "cddd_server = CDDDRequest()"
100 | ]
101 | },
102 | {
103 | "cell_type": "code",
104 | "execution_count": 7,
105 | "id": "24a20cfa",
106 | "metadata": {},
107 | "outputs": [
108 | {
109 | "data": {
110 | "text/plain": [
111 | "['digital_example1.png',\n",
112 | " 'digital_example2.png',\n",
113 | " 'handwritten_example1.png',\n",
114 | " 'handwritten_example2.jpg']"
115 | ]
116 | },
117 | "execution_count": 7,
118 | "metadata": {},
119 | "output_type": "execute_result"
120 | }
121 | ],
122 | "source": [
123 | "os.listdir(\"examples/\")"
124 | ]
125 | },
126 | {
127 | "cell_type": "code",
128 | "execution_count": 8,
129 | "id": "902c1057",
130 | "metadata": {},
131 | "outputs": [],
132 | "source": [
133 | "res = img2mol(filepath=\"examples/digital_example1.png\", cddd_server=cddd_server)"
134 | ]
135 | },
136 | {
137 | "cell_type": "code",
138 | "execution_count": 9,
139 | "id": "bd748334",
140 | "metadata": {},
141 | "outputs": [
142 | {
143 | "data": {
144 | "text/plain": [
145 | "{'filepath': 'examples/digital_example1.png',\n",
146 | " 'cddd': None,\n",
147 | " 'smiles': 'Cn1c(=O)c2c(nc(Sc3ccccc3)n2C)n(C)c1=O',\n",
148 | " 'mol': }"
149 | ]
150 | },
151 | "execution_count": 9,
152 | "metadata": {},
153 | "output_type": "execute_result"
154 | }
155 | ],
156 | "source": [
157 | "res"
158 | ]
159 | },
160 | {
161 | "cell_type": "code",
162 | "execution_count": 10,
163 | "id": "af273a49",
164 | "metadata": {
165 | "scrolled": false
166 | },
167 | "outputs": [],
168 | "source": [
169 | "input_img = Image.open(res[\"filepath\"], \"r\")"
170 | ]
171 | },
172 | {
173 | "cell_type": "code",
174 | "execution_count": 11,
175 | "id": "2657ad09",
176 | "metadata": {
177 | "scrolled": false
178 | },
179 | "outputs": [
180 | {
181 | "data": {
182 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAI+CAYAAABKe4U0AAAK42lDQ1BJQ0MgUHJvZmlsZQAAeJyVlwdUU8kagOfe9JAQICECUkJvgnQCSAmhBVB6FZWQBBJKiAlBwYbK4gquCiIiWBZwUUTB1RWQtSAWrCg27AuyKCirWLChshd4hN1957133n/P3PnOf//5y5yZc/4LADmYK5GkwyoAZIizpOH+3ozYuHgGrh/gARaQAAPQuDyZhBUaGgwQmZr/Lu/vAGh8vmk17uvfv/9XUeMLZDwAoASEk/gyXgbCbch4yZNIswBAHUL0hkuyJON8C2GaFEkQ4YFxTpnkL+OcNMFolQmbyHA2wkYA4ElcrjQFAJINomdk81IQP6RQhG3EfJEY4TyEPXhCLh9hJC6YlZGROc5DCJsh9hIAyDSEmUl/8ZnyN/9JCv9cboqCJ+uaELyPSCZJ5+b8n1vzvyUjXT4VwwQZJKE0IByZ6cj+3U3LDFKwOGleyBSL+BP2EyyUB0RNMU/Gjp9iPtcnSLE2fV7wFCeL/DgKP1mcyCkWyHwjpliaGa6IlSxls6aYK52OK0+LUuiFAo7Cf64wMmaKs0XR86ZYlhYRNG3DVuil8nBF/gKxv/d0XD9F7Rmyv9Qr4ijWZgkjAxS1c6fzF4hZ0z5lsYrc+AIf32mbKIW9JMtbEUuSHqqwF6T7K/Sy7AjF2izkcE6vDVXsYSo3MHSKgQ/wBcHIwwBRwB7YAVvgAsIAyBIszRovhp0pyZGKUoRZDBZy4wQMjphnPYthZ2NnC8D4/Z08Em/DJ+4lRD85rcvcgxzl98idKZ7WJZUC0FwAgMb9aZ3RLgAo+QA0tfPk0uxJHXr8hQFEQAE0oAl0gSEwA1ZIdk7ADXghGQeCEBAJ4sBCwANCkAGkYAlYDlaDAlAENoOtoALsBjVgHzgIDoNmcBycBufBZXAd3AYPQA/oBy/AMHgPRiEIwkFkiAppQnqQMWQJ2UFMyAPyhYKhcCgOSoRSIDEkh5ZDa6EiqASqgKqgOuhn6Bh0GroIdUH3oF5oEHoDfYZRMAmmwTqwCTwbZsIsOAiOhBfAKfBiOBfOhzfC5XA1fABugk/Dl+HbcA/8Ah5BAZQSio7SR1mhmCg2KgQVj0pGSVErUYWoMlQ1qgHViupA3UT1oIZQn9BYNBXNQFuh3dAB6Cg0D70YvRK9AV2B3oduQp9F30T3oofR3zBkjDbGEuOK4WBiMSmYJZgCTBmmFnMUcw5zG9OPeY/FYulYU6wzNgAbh03FLsNuwO7ENmLbsF3YPuwIDofTxFni3HEhOC4uC1eA2447gDuFu4Hrx33EK+H18HZ4P3w8Xoxfgy/D78efxN/AP8OPElQIxgRXQgiBT8ghbCLsIbQSrhH6CaNEVaIp0Z0YSUwlriaWExuI54gPiW+VlJQMlFyUwpRESnlK5UqHlC4o9Sp9IqmRLEhsUgJJTtpI2ktqI90jvSWTySZkL3I8OYu8kVxHPkN+TP6oTFW2VuYo85VXKVcqNynfUH5JIVCMKSzKQkoupYxyhHKNMqRCUDFRYatwVVaqVKocU+lWGVGlqtqqhqhmqG5Q3a96UXVADadmouarxlfLV6tRO6PWR0VRDalsKo+6lrqHeo7aT8PSTGkcWiqtiHaQ1kkbVldTd1CPVl+qXql+Qr2HjqKb0Dn0dPom+mH6HfrnGTozWDMEM9bPaJhxY8YHjZkaXhoCjUKNRo3bGp81GZq+mmmaxZrNmo+00FoWWmFaS7R2aZ3TGppJm+k2kzezcObhmfe1YW0L7XDtZdo12le0R3R0dfx1JDrbdc7oDOnSdb10U3VLdU/qDupR9Tz0RHqleqf0njPUGSxGOqOccZYxrK+tH6Av16/S79QfNTA1iDJYY9Bo8MiQaMg0TDYsNWw3HDbSM5prtNyo3ui+McGYaSw03mbcYfzBxNQkxmSdSbPJgKmGKcc017Te9KEZ2czTbLFZtdktc6w50zzNfKf5dQvYwtFCaFFpcc0StnSyFFnutOyahZnlMks8q3pWtxXJimWVbVVv1WtNtw62XmPdbP1yttHs+NnFsztmf7NxtEm32WPzwFbNNtB2jW2r7Rs7CzueXaXdLXuyvZ/9KvsW+9cOlg4Ch10Odx2pjnMd1zm2O351cnaSOjU4DTobOSc673DuZtKYocwNzAsuGBdvl1Uux10+uTq5Zrkedn3lZuWW5rbfbWCO6RzBnD1z+twN3LnuVe49HgyPRI8fPXo89T25ntWeT7wMvfhetV7PWOasVNYB1ktvG2+p91HvD2xX9gp2mw/Kx9+n0KfTV803yrfC97GfgV+KX73fsL+j/zL/tgBMQFBAcUA3R4fD49RxhgOdA1cEng0iBUUEVQQ9CbYIlga3zoXnBs7dMvfhPON54nnNISCEE7Il5FGoaeji0F/DsGGhYZVhT8Ntw5eHd0RQIxZF7I94H+kduSnyQZRZlDyqPZoSnRBdF/0hxiemJKYndnbsitjLcVpxoriWeFx8dHxt/Mh83/lb5/cnOCYUJNxZYLpg6YKLC7UWpi88sYiyiLvoSCImMSZxf+IXbgi3mjuSxEnakTTMY/O28V7wvfil/EGBu6BE8CzZPbkkeSDFPWVLyqDQU1gmHBKxRRWi16kBqbtTP6SFpO1NG0uPSW/MwGckZhwTq4nTxGczdTOXZnZJLCUFkp7Frou3Lh6WBklrZZBsgawli4Y0SlfkZvLv5L3ZHtmV2R+XRC85slR1qXjplRyLnPU5z3L9cn9ahl7GW9a+XH/56uW9K1grqlZCK5NWtq8yXJW/qj/PP2/fauLqtNVX19isKVnzbm3M2tZ8nfy8/L7v/L+rL1AukBZ0r3Nbt/t79Pei7zvX26/fvv5bIb/wUpFNUVnRlw28DZd+sP2h/IexjckbOzc5bdq1GbtZvPlOsWfxvhLVktySvi1ztzSVMkoLS99tXbT1YplD2e5txG3ybT3lweUt2422b97+pUJYcbvSu7Jxh/aO9Ts+7OTvvLHLa1fDbp3dRbs//yj68W6Vf1VTtUl1WQ22Jrvm6Z7oPR0/MX+qq9WqLar9ule8t2df+L6zdc51dfu192+qh+vl9YMHEg5cP+hzsKXBqqGqkd5YdAgckh96/nPiz3cOBx1uP8I80vCL8S87jlKPFjZBTTlNw83C5p6WuJauY4HH2lvdWo/+av3r3uP6xytPqJ/YdJJ4Mv/k2KncUyNtkrah0ymn+9oXtT84E3vm1tmws53ngs5dOO93/kwHq+PUBfcLxy+6Xjx2iXmp+bLT5aYrjleOXnW8erTTqbPpmvO1lusu11u75nSdvOF54/RNn5vnb3FuXb4973bXnag7d7sTunvu8u8O3Eu/9/p+9v3RB3kPMQ8LH6k8Knus/bj6N/PfGnucek70+vReeRLx5EEfr+/F77Lfv/TnPyU/LXum96xuwG7g+KDf4PXn85/3v5C8GB0q+EP1jx0vzV7+8srr1ZXh2OH+19LXY282vNV8u/edw7v2kdCRx+8z3o9+KPyo+XHfJ+anjs8xn5+NLvmC+1L+1fxr67egbw/HMsbGJFwpd6IVQCEDTk4G4M1epD+OA4B6HQDi/Mn+ekKgyX+CCQL/iSd78AlxAqCmG4DIZQAEXwVgewXS0iL+Kch/QSgF0bsB2N5eMf4lsmR7u0lfJE+kNXk0NvbWDABcMQBfi8fGRmvGxr7WIMk+AKAtZ7KvHxeVAwBUGduwmcH3XtXmgX/IZM//lxr/OYPxDBzAP+c/AfC4HNT6FSbXAAAAimVYSWZNTQAqAAAACAAEARoABQAAAAEAAAA+ARsABQAAAAEAAABGASgAAwAAAAEAAgAAh2kABAAAAAEAAABOAAAAAAAAAJAAAAABAAAAkAAAAAEAA5KGAAcAAAASAAAAeKACAAQAAAABAAACTqADAAQAAAABAAACPgAAAABBU0NJSQAAAFNjcmVlbnNob3T5K8xFAABa3ElEQVR4nO3debxM9R/H8fe1r9m3IiLXFtmXQhIipRJalJSlnwolihkV5YqEEBEtikpakL0UIYnKluXKriJblnDvxff3xzFz3Swdd+bOOTPzej4eHnecufOdj7nLvH2+3/M9McYYIwAAAPglJSVd8Hi6ENcBAAAQtghOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCE8LHX39Ju3Y5XQUAIIoRnOBuO3ZIDz0kFSsmFSokXX21dMUVUpMm0ty5TlcHAIgyMcYY43QRwAX9/LPUrJnVaSpaVKpf3wpNP/5o3SdJAwZIffpI6fg/AAAgeJKSki54nOAEd9q/XypQwLr93HNS//5S5szJ93/+udS+vXT0qPTxx9K99zpSJgAgMl0sOPHfdLjTmDHWx7vvlgYNShmaJKllS2nYMOv2Cy9IZ86Etj4AQFSi4wR3KlZM2r1bWrtWuu66C3/OqVPSVVdZU3k7d1qPAQAgCOg4IXwkJFihSZLKlbv452XIIFWrZt3esSPt6wIARD2CE9xnzx7rY8mSUvr0l/7cK6+0Ph48mLY1AQAgghPcKF8+6+O+ff/9ub7OFNN0AIAQIDjBfXLkkAoWtM6Y++uvi39eQoL0/ffW7RIlQlIaACC6EZzgTg0bWh/Hjr3453z+uRWuGjSQ8uQJSVkAgOjGWXVwpw0bpPLlrdszZ0rNm6e8/5dfpJtusoLTd99J9eqFvkYAQMRiA0yEn7g4qW9f6/bdd0s1aljTeD//LL33nnV84EBr53AAAIKI4ITwNH++1KFD8iJwn6JFrWm8f3eiAAAIAoITwsOdd0qrVkmNG0sTJiQf37NHWrdOiomRKlVKvhzLv/XrJ2XKJDVqJNWsGYqKAQAR6GLBKUOI6wAuLTHR2gX839+whQtbf/7LkCHS8ePWWXkEJwBAkHFWHdwlIcH6+O9r04Xq8QAAXALBCe6SmGh9zJTp8h97+rT1J7WPBwDgPxCc4C6BdIx8j03t4wEA+A8EJ7hLIB0n32NT+3gAAP4DwQnuQscJAOBiBCe4Cx0nAICLEZzgLnScAAAuRnCCu9BxAgC4GMEJ7kLHCQDgYgQnuAsdJwCAi3HJFbgLHSc4rHfv3sqQIYNat26t66+/3ulyALgMwQnucW7woeMEh0ydOlVbt27Vvn37NG7cOKfLAeAyTNXBPc4NPnSc4ICFCxdq69atkqTWrVs7XA0ANyI4wT3oOMFhU6dOlSQVL15cjRo1crgaAG5EcIJ70HGCw3zBiW4TgIshOME9gtVxyphRSse3Ni7PjBkztG/fPklSq1atHK4GgFvx7gL3CFbHiWk6pIKv21SxYkXVqlXL4WoAuBXBCe4RrI4T03S4TAkJCf7gRLcJwKUQnOAedJzgkKlTpyrh7PcP65sAXArBCe5BxwkO8XWbbrjhBpUrV87hagC4GcEJ7kHHCQ7Yt2+fZsyYIYluE4D/RnCCe9BxggM+/fRT/22CE4D/QnCCewS6gSUdJ6SCb5quadOmuuqqqxyuBoDbEZzgHoFuYEnHCZdp69at+vbbbyXRbQJgD8EJ7uELPunSWZtYXi46TrhMvm5TTEwM2xAAsIXgBPfwBZ/UdozoOOEynXuJlSuuuMLhagCEA4IT3MMXfFLbMaLjhMuwatUq/fTTT5LY9BKAfQQnuEegHadAH4+o4us25cqVi/VNAGwjOME9Au04MVWHy8AlVgCkBsEJrvHngQNKLFlSp9Kl8tuSqTrY9N1332nz5s2SOJsOwOUhOME13syUSZm3blWl7NlT9fguBw7omcqV9UlMTJArQ6TxbXpZtGhR3XrrrQ5XAyCcEJzgGr6LrGZKZcdodebMGrZqlZbkyBHMshCBzj2bDgAuB8EJrpF4do1S5lSuUfIFr9Q+HtFh1qxZ2rNnjySCE4DLR3CCawTacfIFr9Q+HtHB120qX7686tSp43A1AMINwQmuEWjHiI4T/supU6eYpgMQEIITXCPQjhEdJ/yXqVOn6vjx45LYhgBA6hCc4BqscUJa83WbatWqpeuuu87hagCEI4ITXCPQ4EPHCZdy8OBBffHFF5KYpgOQegQnuEagi8PpOOFSfN0mieAEIPUITnAN1jghLfk2vWzcuLGuvvpqh6sBEK4yOF0A4BNIx+j06dNKSkpK9eMR2XbskNate0833TRVVaqkbmd6AJAITnCRQBaH+x4r0XHC+aZOlfbsuUp79jyls8ucACBVmKqDawSyxsn3WImOE87nW950zz1SnjzO1gIgvBGc4Bp0nJAW1q6VfvzRus3WTQACRXCCawTScTo3ONFxwrl83aYcOSROpgMQKIITXCOQjtO5U3V0nHCusyfTqVUrKX16Z2sBEP4ITnANOk4ItqVLpQ0brNt0mwAEA8EJrkHHCcHm6zYVKSLddpuztQCIDAQnuAYdJwSbb30T3SYAwUJwgmvQcUIwzZ0r/f67dZvgBCBYCE5whcTERBljJNFxQnD4uk1lykh16zpbC4DIQXCCKwQafOg44VzGME0HIG0QnOAKgQYfNsDEuaZOlY4etW6z6SWAYCI4wRWC2XFiqg6+blONGtL11ztbC4DIQnCCKwSr45QhQwalZ5fDqHb4cMpNLwEgmAhOcIVgdZzoNsHXbZJY3wQg+AhOcIVgdZxY3wRfcGrYULrmGmdrARB5wjo47dy50+kSECR0nBAMu3ZJ8+dbt+k2AUgLYRucli9frtjYWA0dOtTpUhAEdJwQDL61TRLBCUDaCNvg5PV6lZCQoJ49e6pOnTpasGCB0yUhAHScEAy+abq77pLy5XO0FAARKmyD05gxY9Tq7CkzP/zwgxo1aqQuXbrowIEDDleG1LDTcdqzZ49Wr159wfvoOGH9emnZMus23SYAaSVsg1NsbKymTp2qjz/+WNdee60kaezYsSpTpozGjRvncHW4XIUKFdKTTz6pzp07n9c1+uijj1SxYkU9++yzqlKlip5//vnzHp+QkKD06dPTcYpivm5T1qxsQwAg7cQY3wXCwtiZM2fk9Xo1aNAg/7FbbrlFcXFxqlWrloOVIRBff/214uLitHDhwvPuK1OmjOLi4nTPPfekOH769Gn2cYpS110n/fqr1K6dNHGi09UACHdJSUkXPB62HadzpUuXTq+88op++uknNW3aVJK0YMEC1a5dWz179kwxDQT3W7Vqldq0aaPGjRv7Q9ONN96oDz/8UB07dpQkbdq0Sa1atdJ9992nLVu2+B9LaIpOP/xghSaJbhOAtBURwcmnatWqmjNnjt5++20VLlxYkjR06FDFxsZq0qRJDleH//L777/riSeeUJUqVTT17LxLbGysJk6cqCVLluj+++/X+PHjNW/ePFWvXl2SNGXKFJUpU0aDBw92snQ4zDdNV6iQdMcdztYCILJFVHDyefTRRxUfH6+uXbtKsvZ7euihh3TnnXdq3bp1DleHf0tMTNSLL76oEiVKaMyYMZKkvHnz6rXXXtOmTZvUrl27FJ/fpEkTrVixQoMHD1aGDBl0+vRp9e7dW9WrV9e8efOc+CfAYb7gRLcJQFqLyOAkSTlz5tTIkSO1aNEi1atXT5I0Y8YMVaxYUf369XO2OPi98cYbKlGihF566SWdOnVKktS7d29t375dzzzzzCUf++yzz2rTpk267777JMk/VduxY0ft3bs3zWuHO8yfb218KXE2HYAQMFFixIgRJkeOHEaSkWTKly9vvvjiC6fLilofffSRqVixov/rIcl06NDBbNmyJVXjffbZZ6Zs2bL+sa644gozatSoIFcNN+rY0RjJmGuvdboSAJEkMTHxgn8ituP0b926dVN8fLweeeQRSdL69et19913q23bttq+fbuzxUWRBQsW6JZbbtH999+vtWvXSpLuvPNOLV++XBMmTFDJkiVTNW7Lli21YcMG/1YFR44cUdeuXdWgQQMtXbo0aPXDfXy7hdNtAhASTic6J8yePdtUqVLF353ImDGjefXVV50uK6KtXr3atGnTJkWH6YYbbjAzZ85Mk+e64447UjxX9+7dzbFjx4L+XHDWp59a3SbJmJ9/droaAJHkYh2niNjHKbVeeeUVeb1e+V6CGjVqaODAgWrUqJHDlUWOP/74QwMHDtTo0aP9x2JjY+XxePTwww+n6XO///778nq92r17tyTpyiuvVFxcnNq3b5+mz4vQOnzYWhx+dqcKAAiKi+3jFNXBSZI2b96svn376pNPPvEf69y5s+Li4pQ/f34HKwtvSUlJGjhwoOLi4vzffHny5JHH41HPnj1DVseJEyfk9Xo1fPhw/7HbbrtNcXFxqly5csjqAACEF4LTf5g6daq8Xq82b94syXqTj4uLU5cuXRyuLPyMHj1aAwcO1B9//OE/9txzz8nj8eiKK65wpKZly5bJ6/Xq22+/9R/zer0aMGCAI/UAANyN4GST1+vVwIED/X+/+eabFRcXpzp16jhYVXj45JNPFBcXpzVr1viPPfroo/J4PCpVqpSDlSV788035fV6dejQIUnWtGFcXJz/gtEAAEgEp8uyatUqeb1ezZ4923+sXbu1GjfuOmXJ4mBhLvXNN99o4MCBWrBggf9YixYt5PF4XHmtwH379snr9Wr8+PH+Y23atFFcXJz/gtEAgOgW0deqC7bKlStr1qxZevfdd3XllVeqQYMX9P771yk2VvrgA6erc481a9bq/vvv1y233OIPTXXq1NGXX36p6dOnuzI0SVKBAgX01ltvaf78+apRo4Ykq1sWGxurV155xeHqcK4uXaQKFaQnnrjw/V9/bd3//vuhrQtA9CI4XUL79u21adMmVarUX5K1O3G7dlKLFtLZLYii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rmnRIql7d2nz5iy66qp3NGTIkMCLRNBkz15H+fK1l2R1nZKS9jpbEKIawckh06ZNU82aNdWpUydt375dktS2bVv9+uuvGj58uAoUKOD/XN8GmLyJRo9oWqOUGh07SkeOWLcnTJACeZn+/jt508zCha11UnAf31qnM2dOsj0BHEVwCrGlS5eqefPmuvvuu/1rKW699VYtWrRIkyZNUvny5c97DN2H6MPX/OKefFJassS6PX68VKNGYON17Cj99lvyeFdfHdh4SBuZM5dWoULWfOxff43UiRO/OlwRohXBKUQ2bdqkhx9+WHXr1tXs2bMlSVWrVtWnn36quXPnXnJzPd+bKHs4RQ86Thf21lvS6NHW7a5dkztFqfXSS9Jnn1m3Bwyw9oCCexUp4lH69FdIYlNMOIfglMYOHjyonj17qmzZsnr//fclScWKFdPYsWP1008/6Z577vnPMXzB6fDhw2laK9yDjtP5li+XHnvMul2/vrWYOxDTp0svvmjdbtPG2m0c7pY+fR4VLuy7FMuHOnp0kcMVIRoRnNLQoEGDVKJECQ0dOlSSlDVrVr388svavn27HvO9A9jQvHlztWzZUrt371b9+vW1ePHitCoZLkHHKaUTJ5K7S7lyBb4YfNu25PHKlmVdUzgpXPg5Zc5cUhJdJziD4JQG3n77bZUqVUp9+vTR0aNHJUndu3fX9u3b1bdvX6VLd3kve4MGDXTq1ClJ0uLFi1W/fn1169bNPzYiDx2nlNaskWJirNsTJkilSwc2XqdO0v791u3x46UrrghsPISWr+t05Mh8HTr0mcPVINoQnIJo+vTpqlWrljp27KitW7dKkh544AGtW7dOr7/+ugoWLBjQ2B988IGuPrtyddSoUSpTpozefffdoNQOdzlw4IAk6eTJkw5X4g61akk//ig9/7zUqlVgY/XoIS1YYN1+4w2pbt3A60No5c/fQdmz15RE1wkOMAjY0qVLTfPmzY0k/5/GjRubhQsXBv25Tpw4YZ555pkUz9WsWTPz888/B/25EHpHjhwxffr0MZJMkSJFjCRTuXJlM2DAALNx40anywt7771njGT96dzZ6WoQiEOHppmVK2VWrpT566+xTpeDCJSYmHjBPzHGGONcbAtvmzdv1sCBA/Xee+/5j1WpUkUej0etAv1v8X/44Ycf5PV69c033/iP9enTR3FxcYrxzWkgrAwdOlQDBw7UwYMHJVnrm3xrnXzq1aunVq1aqVWrVrryyiudKDNs/fKLVLOmdOqUVLu2tGyZ0xUhUL/91lyHD89WpkxXq2LFbWISBcHk20PxPE4nunB08OBB07NnzxRdn6JFi5o333wz5LW8+eabJm/evP46rr32WjNlypSQ14HUe/fdd03p0qVTfD916dLF7Ny503z++efmgQceMBkzZkxxv852Gt9++21z5MgRp/8Jrnf6tDHVqlmdpqxZjVm71umKEAxHjy7xd53++GOA0+Ugwlys40RwukyDBw82uXLl8r95ZcmSxbz00kvm1KlTIXn+Y8eOGY/Hk+LY/v37zWOPPZbiTbV169Zm06ZNIakJqTNjxgxTp06dFF+3Nm3amF9++eW8zz1+/LiZOHGiueOOO84LUOnSpTNt2rQxn3zySej/EWHikUeSp+gmTXK6GgTTtm3tzMqVMj//nM0kJe11uhxEEIJTgD7+3/9MqVKlUrxhde3a1ezZsydkNQwbNszkz5/fSDJxcXHn3f/111+bWrVqpajxQp8HZy1dutTcfvvtKb5ODRs2NF9//bWtx+/du9eMHj3aNGjQ4LwQlStXLtOhQwczZ86cNP5XhI/XX08OTc8+63Q1CLYTJzb6u06jRjVzuhxEEIJTas2YYUzt2sZIplaFCkaSuf/++83aEPb6P/jgA1O2bNkUb5CPPfbYRT9/yJAhJlOmTP7PrVy5spk1a1bI6sWFbdy40Tz88MMpvo7XX399QFOrv/32mxk0aJCpVq3aeSHqqquuMt27dzdLliwJ4r8ivHzzTXJoatrU6WqQViZPvsfUq1fZSDK//vqr0+UgQhCcLteyZcbcfnvyb13JTK9Z03z77bchK2HOnDmmXr16Kd4M77nnHvPTTz/952O3b99u2rZtm+Kx7du3N7///nsIKse59u3bZ3r06HHemrgxY8YE9XlWrVplvF6viY2NPS9ElS1b1vTt29esWrUqqM/pZgcOGFOqlPXjW6SIMbt2OV0R0sr+/ftNjhw5jCTTtm1bp8tBhCA42bV5c8oFEZIx119vTAgXXK9cudK0bNkyxRtf/fr1zbx58y57rGnTppkKZztlkkyOHDnM66+/ngZV40Li4uL8v9AlmaxZs5qXX345zdfELV682HTr1s1ceeWV54WoGjVqmMGDB5stW7akaQ1Ou/vu5B/hmTOdrgZpbeDAgf7v8UWLFjldDiIAwem//P23tQDi3MB05ZXGjB4dshJ27NhhOnfunOJNrnz58mZSEFaz9uvXL8W4devW5ZdLGho7dqwpXrx4ite8e/fuZu/e0C9enT17tnnkkUdMzpw5zwtRN998sxkzZoz566+/Ql5XWurXL/nHeOBAp6tBqJQoUcJIMrfeeqvTpSACEJwu5dVXjcmdO/k3baZM1m/exMSQPP0///xjvF5vije0AgUKmOHDhwf1edatW2fuuuuuFM/z5JNPmsOHDwf1eaLZ1KlTTdWqVVO8xg8++KBZv36906WZM2fOmClTppjWrVufF6AkmRYtWpj333/fnDhxwulSA/L558k/yvfd53Q1CKW33nrL//382WefOV0OwhzB6ULefdeYa69N2WV64glj/vgjZCUMHz7cFChQwP/DHhMTY7xer/nnn3/S7DknTZqUohtSqFAhM2HChDR7vmjwzTffmMaNG6cIIs2aNTOLFy92urQLOnz4sJkwYYJp2rTpeQEqU6Zs5t57k8wXXzhd5eX77Tdj8uWzfpTLlTPm6FGnK0KoVa9e3Ugy1apVc7oUhDmC07m+/NKYOnVSBqZ77zVm9eqQlTBp0iRTvnz5FG9YnTt3Njt27AjJ8yckJJy3ieett95qVq5cGZLnjxRr1qwx9913X4rXsWbNmmbatGlOl2bb7t27zeuvv25uvPFGI8nccMNI/49F/vzG/O9/xtjcKcFxN9+c/CMdxScTRrXPP//c/7M4btw4p8tBGCM4GWPMDz8Y06JFysDUsKExCxaErIR58+aZ+vXrp3ijbdmypWOBZfny5aZRo0Yp6undu7dJTDztSD3h4vfffzdPPPFEitetVKlSYd+527Bhg7nvvl9NpUopf0wkY0qUMKZXL2OWL3e6ygt76qnkWoN8wiLCjK+TWqJECadLQRiL7uC0ZYsxjz6a8l2gUiVjPv44ZCX89NNP5p577knxRluvXj3XbFQ4duxY/+aa5cq1M6VKhfTlCRsnT540L7zwQopLoOTOndsMHjzY6dKC7scfrfMlrrnm/BBVsaIx/fsb45Ytc955J7m2//3P6WrgtO+++87/88kmwEit6AxOhw8b89xzKX/jFylizKhRISth586d510OpVy5cuaDDz4IWQ12HThwwPzvf/8z1art979c99xjzMaNTlfm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XhB+LoITACDidejQQTVr1pQkzrCzafbs2Zo4caIkqV+/fipXrpzDFbkDU3UAgKgwffp03XXXXZKksWPH6rHHHnO2IJerWrWqfvnlF1WoUCEqz0jkkisAgKjXvHlzzZ49WxkzZlTZsmWVKVMmZc6c+bI+puYxF3ts+vTpnX5JLmjQoEH+RfVffPGFP3BGE4ITACDqLV26VB988IEmTpyokydPOl2OMmTIEFAQC0ao+/ex33//XZUrV9aZM2eiegsHghMAAGf169dPiYmJSkhISPHxQsfsfDx16pTT/6SgS58+veLj41WyZEmnS3EEwQkAgDRy+vTpS4ar1AayQB/r+3i5nn/+eWXLlk29e/dOg1crPBCcAACIQsaYyw5kVatWVdGiRZ0u3VEEJwAAAJvYABMAACBABCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBNBCcAAACbCE4AAAA2EZwAAABsIjgBAADYRHACAACwieAEAABgE8EJAADAJoITAACATQQnAAAAmwhOAAAANhGcAAAAbCI4AQAA2ERwAgAAsIngBAAAYBPBCQAAwCaCEwAAgE0EJwAAAJsITgAAADYRnAAAAGwiOAEAANhEcAIAALCJ4AQAAGATwQkAAMAmghMAAIBN/wfvIR6aWjxuVwAAAABJRU5ErkJggg==\n",
183 | "text/plain": [
184 | ""
185 | ]
186 | },
187 | "metadata": {},
188 | "output_type": "display_data"
189 | }
190 | ],
191 | "source": [
192 | "display(input_img)"
193 | ]
194 | },
195 | {
196 | "cell_type": "markdown",
197 | "id": "80a91bd6",
198 | "metadata": {},
199 | "source": [
200 | "# show prediction"
201 | ]
202 | },
203 | {
204 | "cell_type": "code",
205 | "execution_count": 12,
206 | "id": "ebf67ab2",
207 | "metadata": {},
208 | "outputs": [
209 | {
210 | "name": "stdout",
211 | "output_type": "stream",
212 | "text": [
213 | "Cn1c(=O)c2c(nc(Sc3ccccc3)n2C)n(C)c1=O\n",
214 | "\n"
215 | ]
216 | },
217 | {
218 | "data": {
219 | "image/png": "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\n",
220 | "text/plain": [
221 | ""
222 | ]
223 | },
224 | "execution_count": 12,
225 | "metadata": {},
226 | "output_type": "execute_result"
227 | }
228 | ],
229 | "source": [
230 | "print(res[\"smiles\"])\n",
231 | "print()\n",
232 | "res[\"mol\"]"
233 | ]
234 | },
235 | {
236 | "cell_type": "markdown",
237 | "id": "e68f0281",
238 | "metadata": {},
239 | "source": [
240 | "# Different Example"
241 | ]
242 | },
243 | {
244 | "cell_type": "code",
245 | "execution_count": 13,
246 | "id": "9655bd18",
247 | "metadata": {},
248 | "outputs": [],
249 | "source": [
250 | "example = \"examples/example2.png\"\n",
251 | "res = img2mol(filepath=\"examples/digital_example2.png\", cddd_server=cddd_server)\n",
252 | "input_img = Image.open(res[\"filepath\"], \"r\")"
253 | ]
254 | },
255 | {
256 | "cell_type": "code",
257 | "execution_count": 14,
258 | "id": "4b294b23",
259 | "metadata": {},
260 | "outputs": [
261 | {
262 | "data": {
263 | "image/png": "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\n",
264 | "text/plain": [
265 | ""
266 | ]
267 | },
268 | "metadata": {},
269 | "output_type": "display_data"
270 | }
271 | ],
272 | "source": [
273 | "display(input_img)"
274 | ]
275 | },
276 | {
277 | "cell_type": "code",
278 | "execution_count": 15,
279 | "id": "9afc6ad8",
280 | "metadata": {},
281 | "outputs": [
282 | {
283 | "name": "stdout",
284 | "output_type": "stream",
285 | "text": [
286 | "CN(C)C(=O)COC(=O)Cc1ccc(OC(=O)c2ccc(N=C(N)N)cc2)cc1\n",
287 | "\n"
288 | ]
289 | },
290 | {
291 | "data": {
292 | "image/png": "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\n",
293 | "text/plain": [
294 | ""
295 | ]
296 | },
297 | "execution_count": 15,
298 | "metadata": {},
299 | "output_type": "execute_result"
300 | }
301 | ],
302 | "source": [
303 | "print(res[\"smiles\"])\n",
304 | "print()\n",
305 | "res[\"mol\"]"
306 | ]
307 | },
308 | {
309 | "cell_type": "markdown",
310 | "id": "f2274b9f",
311 | "metadata": {},
312 | "source": [
313 | "# Another example on a handwritten image"
314 | ]
315 | },
316 | {
317 | "cell_type": "code",
318 | "execution_count": 16,
319 | "id": "2d63aae9",
320 | "metadata": {},
321 | "outputs": [],
322 | "source": [
323 | "res = img2mol(filepath=\"examples/handwritten_example1.png\", cddd_server=cddd_server)\n",
324 | "input_img = Image.open(res[\"filepath\"], \"r\")"
325 | ]
326 | },
327 | {
328 | "cell_type": "code",
329 | "execution_count": 17,
330 | "id": "c5a2704f",
331 | "metadata": {},
332 | "outputs": [
333 | {
334 | "data": {
335 | "image/png": "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\n",
336 | "text/plain": [
337 | ""
338 | ]
339 | },
340 | "metadata": {},
341 | "output_type": "display_data"
342 | }
343 | ],
344 | "source": [
345 | "display(input_img)"
346 | ]
347 | },
348 | {
349 | "cell_type": "code",
350 | "execution_count": 18,
351 | "id": "76ec658c",
352 | "metadata": {},
353 | "outputs": [
354 | {
355 | "name": "stdout",
356 | "output_type": "stream",
357 | "text": [
358 | "CCOC(=O)c1[nH]c2c(S(=O)(=O)N3CCN(C)CC3)ccc(OCC)c2c1C1CCNCC1\n",
359 | "\n"
360 | ]
361 | },
362 | {
363 | "data": {
364 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deVxU5f4H8M8sLLKDbAoo7gmSqbgguICCoixXvZZZdq/cVMgyWxTNfFG5QXm7euPGT3+3umr+cilRBhBBSQQEbSY3RBQMkYuyiKzDOjPP749TZKYGM2ccGL7vV38MMOc7X17Fp+ec85znETDGQAghRF1CXTdACCE9G8UoIYRohGKUEEI0QjFKCCEaoRglhBCNUIySnurvf/+7RCLRdReEQEATnkhPlJaWFhAQYGxsfPz48enTp+u6HdKr0WiU9Ej+/v6rV69uaWkJDQ2VSqW6bof0ajQaJT0VYywsLOw///mPra1tRkaGm5ubrjsivRTFKOnB2tvb58+fn5iY6OTklJWV5erqquuOSG9EMUp6tubm5sDAwIyMjKFDh2ZmZjo6Ouq6I9LrUIySHq++vt7Pz08mk3l4eGRkZFhbW+u6I9K70C0m0uNZWFikpKSMHDnyypUrc+bMaWxs1HVHpHehGCX6wNbWNi0tzdXVNTc3d968ea2trbruiPQiFKNETzg5OaWlpTk6Op48efLFF19UKpW67oj0FhSjRH8MHTr0xIkT1tbW8fHxf/vb3+i6P3k6KEaJXnn22WeTkpJMTU337Nnz1ltv6bod0itQjBJ94+XlFR8fb2RktHPnzpiYGF23Q/QfTXgi+unAgQMvvfSShYXF9evX7e3tdd0O0Wc0GiX6adGiRd7e3iqVKicnR9e9ED1HMUr0k0qlunHjRn19/dChQ3XdC9FzFKNEP+Xk5FRUVAwZMsTd3V3XvRA9RzFK9FNCQgKA0NBQXTdC9B/FKNFPXIwGBwfruhGi/+hOPdFDRUVFw4YNs7GxqaioEIvFum6H6DkajRI9lJiQACAwMJAylDwF9B8Z0UOrEhOXjB1b/vzzum6E9Ap0Uk/0TnU1HB0hEqGyEhYWuu6G6D86qSd6RyKBQgFfX8pQ8nRQjBK9w21eT/foydNCJ/VEv7S2ws4OjY0oKYGLi667Ib0CjUaJfjl1Cg0NGDuWMpQ8NRSjRL8kJAB0Rk+eKprwRPTL66/DyQkLFui6D9KLUIwSfVFbi7ffhokJLCzg5qbrbkgvQif1RF/ExeHttxEbi/79kZur625IL0IxSvRFURG4NfE8PHDjhq67Ib0IxSjRF4MG4do1AMjLw7Bhuu6G9CI0b5Toi5oavPsuzMxgYoLNm3HgAF56Sdc9kV6BYpToo1dewb59WL8eW7fquhWi/+iknuijJUtgaIht2/Dxx7puheg/ilGij/z98dVXEAqxbh1279Z1N0TPUYwSPbV4MWJjwRgiInDwoK67IfqMYpTor4gIbN4MlQqvvFKWnt61Y9vbce4c/vEP3L6tneaI/qCnmIhe27ABdXU7z53bEBJy/PjxKVOmPOnNDQ04dw5ZWZDJkJmJujoAsLDAggW/Ph9F96zI79CdeqLnGGPLli374osvrKysTp8+PXr06Ad/+tNPP2VnZ2dnZ0+prn7pyBGoVD//QCDAyJGYPBl/+QsyMxEcjFGjEBsLT09MmqSDX4N0YzQaJXpOIBDs2rWroaHh0KFD/v7+mZmZtbW1Z8+ezc7OPnv27N27d7m3XXNxeUkkwpgx8PaGjw98fWFrCwAqFb766jfPR1GMkt+iGCX6TyQS7du3r6Gh4fjx4/7+/iqVqqysjPuRg4ODl5eXj4/P5MmTMW4cDA0BQC7HhQvIzkZWFs6exfLluHYNbm7Iy8PYsbr8TUi3RCf1pLeQy+X+/v45OTm2traBgYEzZsyYPHnysF8eGy0rKzM4f97+9GlkZ+PSJSgUvx55+DCOH//5+aht23TTPenGKEZJL1JXV+fp6SkWi5OTkwcMGFBQUCCTybKzs7OysvLz849OmxaakQEAYjGGD4ePD7y9MW0aBg7UdeOkW6OTetKLWFpaDhky5MSJE8HBwaWlpfX19R0/srKyujZoUKi/P3x8MH48TEx02CfpWWg0SnqR5uZmW1vblpYWMzOz+vr6fv36+fj4eHt7+/j4jBkzRiikadREHTQaJb1IampqU1PTpEmTPv7442HDhjk6Ouq6I6IPKEZJL5KQkAAgODj4D+bhE9IVdFJPeguVSuXk5FReXp6Xl+fOzQMlhA90MYj0Frm5ueXl5YMHD6YMJfyiGCW9BXdGHxoaqutGiL6hGCW9BRejISEhum6E6Bu6Nkp6haKiomHDhtnY2FRUVIjFdGeV8IlGo6RXOHr0KIA5c+ZQhhLeUYySXkEikYDO6Il20Ek90X/V1dWOjo5CobCqqsrCwkLX7RB9Q6NRov8SExMVCoWvry9lKNEGilGi/+iMnmgVndQTPdfa2mpnZ9fQ0HDr1q2BT2XJu8bGxldffbW6ulqlUtVxGzoBCoWioaGho6WmpibudXNzc0tLC/f6yy+/nDZt2uDBg59Ck4RHFKNEzyUnJ8+dO3fs2LEymewpfFx+fv7kyZMBdARo5wmFwtmzZyclJWmhL6JFNPmD6K3S0tIjR47885//NDAwGPu0Nv9Ys2ZNXV3dggULwsPDhUKhpaUl932xWGxubs69NjQ0NDU15V4bGxv36dMHQHV19YgRI5KTk48dO0aPWvUsNBol+ubu3buHDx8+cOBAbm4u95+3SCRydHS8ePGiLbdLndZ8//33fn5+5ubmhYWFDg4OXT08Njb2jTfeGDBgQH5+fkfOkh6AEX1XV1en6xaehnv32N69d319fTtWXzYzM1u8ePGRI0e4s+zAwEClUqm9BpRK5bhx4wBs27ZN7Qrjx48HsHHjRn57I1pFMarPSkpK5s6d6+fnN3DgwOXLlyckJLS2tuq6KZ7J5ezQIRYUxAwNmYkJMzV1MDIyCgoK2rNnT0NDA/ee0tJSbhwaHR2tvU6++uorAM7OznK5XO0i58+fFwqFRkZG169f57E3olUUo3qroKDAxcUFwIOnh1ZWVi+++OKBAwdqa2t13aBGmprYoUNs/nxmbMwABjADAxYYyA4ePPfQ6LuqqkqlUiUnJwuFQrFYfObMGe300zRgwAAA+/bt07DU0qVLAbzwwl95aYw8BRSj+kkmk9nb2wOYOHFiVVWVVCqNioriTjk5IpHI29s7Ojq6O4964uLYhQuMMbZixc9f/u1vjDG2ciXbvPnn9BQK2fTp7H/+h92794gKJ0+etLe3/8c//sEYW79+PQBHR8e7d+/y3urmzZsBPPfcc5pfN6isrJw9e6OpaWN8PC+tEa2jGNVDZ86c4W4Qz5gxo+PEllNcXLxr166goCADA4OOSHVzc4uMjMzMzFSpVLrq+ZF+H6MvvMBKS9nKlez6dTZpEtuxg5WVPamCRCIRCAQGBgbZ2dkKhWLGjBkA/Pz8FAoFj31WVlZyz0edPHmSl4KxsQxgAwawxkZe6hHtohjVN0lJSdwEmkWLFrW1tT3ubffv3z906NCSJUs6ZuQAsLe3X7JkSUJCQktLy9Ps+XHi4tif/8xWrGDjxv385fffs/ffZytXdqHIW2+9BcDFxeXevXvl5eXcNnabN2/msc+IiAgAISEhfBVUKtmECQxgdKupR6AY1SvffMP8/KQAVqxY0cmzy5aWlpSUlIiICGdn5448nT9//kPDWJ34/Wj0yhW2bh1bvLgLRdra2ry9vQHMnTtXpVKlp6eLRCKhUJiWlsZLkwUFBQYGBiKRKC8vj5eCnPPnmVDIDA1ZQQGPVYlWUIx2CwqFor29XcMicXFMKGQA+/hjqXqn53l5edHR0e7u7ubm5ou7lFXa8fsYPXWKZWSwfv26Vuf27dvcnfrt27czxjZu3AjAwcHhzp07mjcZHBwM4LXXXtO81EPCwhjAAgJ4L0x4RjHaLZw4ccLa2nrhwoV79uypqalRo0J0NBMImEDAYmI0bSYvLw/AwIEDNS2kBVOnMoBlZHT5wKSkJIFAIBaLs7KylErlzJkzAfj6+mp4kfT06dMAzM3NtXHb6t491rcvA9iRI7zXJnyiGO0WPvzww44TakNDQ39//9jY2JKSks4cq1KxtWsZwEQitns3D82oVCobGxsApaWlPJTj1YwZDGDq3chZs2YNN6+zqqqqvLy8X79+AD744AO1m1GpVJ6engC2bNmidpEn+/xz9uKLf3AbjegcxWh3UVhYuH379mnTpolEoo5IDQ29EBXFZDL2uHN0hYItW8YAZmjIDh7krZk5c+YAOMhjRZ7MmsUAlpKizrHt7e0+Pj4A5syZo1Kpvv/+e+4iaWpqqnrN7N27F4CTk5Mm8+2JHqAY7Xaqq6u5e+iDBw8TCpXc7Eh7e7ZkCUtIYA/dQpfL2aRJzNSUnTjBZw9btmwBsGrVKh5q1dSwpUvZypVs/XrNiwUFMYBJJGoe3vE4U0xMDGPsgw8+4OYnlHV9vNfc3Mwtu7dnzx41u+mcB2fLst9dLybdAa3w1O3Y2NgsXLhw4cKFra3s++8Fx45BIkFZGfbtw759MDfHjBno2xf//jdefx2xsUhKws2bGD+ezx64W9vZ2dk81IqLw9tvY9QoxMYiNxeTJmlSjNuPTqFQ83BnZ+e9e/cGBQVt2LBh+vTpGzduzMrKOnny5PTp0319fbn3NDY2tre3c6/r6+uVSiX3mnvuCwC3iqhcLq+srHR3d3/55Zc1+Y06o7ER//2vtj+EqI9itPsyMhLMno3ZsxEXh6tXkZgIiQRnz8LE5Dd/VzY2sLHh+aMnTJhgaGh46dKlxsZGMzMzjWoVFcHdHQA8PHDjhoYxyj008EvKqSMwMHDt2rVlZWUeHh5CofCTTz6ZOHFiY2Pj7t27u1rKzMzM3Ny8YyUU7QkPx65dv365ZQv69oVUqu2PJZ1FMdozuLvD3R2RkSgpwZEjGDPmN39XvOvTp88LL2wtKnL54QfRL6O0rmtrg6EhBg3CtWtwc0NeHjRe9FPD0Shn69atAoEAgEqleuedd9ra2pydnbkTfACmpqaGhobcawsLi45L1VZWVtxRAoHAysqqtrY2ICAgNzc3Pj5+3rx5GjX0R2xtoVCgpubnLzdswHPPITxcq59JuoBitIcZOBB9+jz8d6UNtrbv7NuHzEyoH6PvvIO0NGzZgr//HaamMDXFypUaduXi8p8pU3JEor8CXmoX4dIQwKeffpqenm5vby+RSNRYHnTTpk2vvfbam2++GRAQoKXlQU+fxs6dsLPDihXw9tbGJxA+6PriLOky7mGe4mLWvz97/NOemvr2W43nfru6MoCdP8/u3GH29oyPCephYWEAvvjiC81L5eXlGRsbCwQCibp3rJRK5YQJEwBs2LBB834eVZ+NG8cAprX5VIQftDNozxMejlGj0NAAS0sEBGjrU3x8ACA3F7/cYumiCxdw6xb69YOnJxISUFmJsjLNuxKLxQAUGp7VA62trYsXL25paQkPDw8KClKviFAo/Ne//sVdYL1+/bqGLf3e119DJoOTE1av5r024RPFaE/l7Izr13HuHNratFLfwQGDB6O+Hnl5ah2fkAAAISEQCCCRAEBwsOZdcQtTtWtyjwkAsH79+suXLw8ZMuTjjz/WpI6np2dYWFhbW9sbb7yhYUsPaWnBxo0AsHUrTEz4rU14RjHaU1lb45ln0NyMixe19RHcxTg1Zz11xKhcjlOnIBRi7lzNW+JlNHrmzJmdO3eKxeL9+/drOg8BiImJsbW1TUtLO3LkiIalHvTpp7h9G6NHQ/vzqYimKEZ7MI1iTpv1FU1lCksBrK3h54fUVLS0YNIkODpq3hIXo5qMRmtra5csWaJSqaKioiZOnKh5SzY2Nh999BGA1atXy+VyzQsCqKoCN0revh3an09FNEX/inowbceojw9GjcLQoV0+sEaecOkT2a2zM2Fs3Fp6DlaWUPf640O4k3pNRqMRERG3b9/28vLiFsPnxYoVKyZMmFBaWrp161ZeCn7++VmAzZ2LmTN5qUe0TNf3uIj6CgsZwBwcdN3H79y4MUsqxb17/1GpFBcv2v14zqC1+iovlWfNmgXAyckpKirq6tUu19y3bx8AU1PTGzdu8NJPhx9++EEoFBoaGhZovD4ot4Cpnd3I/Hxa+75noBjt2RwdGcBu3tRK8Yee5u4kpbJBJjOSyUTt7VUNDZlSKa5cGaJ5MyqVat26dQAevJo5YsSItWvXZmVldWa9u9LSUmtra/A0X+r3Xn31VQD+/v4a1gkJCQEQHh7OS1fkKaAY7dneeOPM1Kkrv/kmURvFH9z7iDF26hQrLv7jo+7fPySVoqBgCmOstHSNVIrS0nc07ESlUr355psAxGLx7t27ExISli9f/uCE+b59+3KrtT60LWgHpVLJPTUfGhqqYTOPU11dza178u2336pdJCMjg/tfhTYWMCVaQjHas23fvh3ACu2s9vPg3kcqFXNyYgBzc2ORkSwz87Fr9/3008tSKcrLP2GM5eWNkErR0ND1ZZYf0N7e/pe//AWAkZFR/AO7ZSoUiszMzMjIyJEjR3bkqbGx8cyZM3fs2PHf//73wSIxMTEA7O3ty8vLNWnmyeLi4gC4uLg0qrUXnUqlGj9+PIBNmzbx3hvRHorRni0nJweAu7s7v2UbG1lc3G/2PqqpYc8/zywsft7WGGBOTmzLlura2mSV6jeL99XVHS8uXtrScqO5+ZpUiosXbVQq9fdHkcvlgYGB3ACN23fzkbsD3Lx5c8eOHTNnzuRu5XPc3NyioqKkUumVK1e4B5YSE7UybO+gVCq5u//vvfeeGod//fXX3JVf9VKY6IqAMaaFG1fkKWlvb7eysmpubr53754NTws91dRg7lzk5GDePHz0EczM4O398yNISiVycnD4MOLjUVqKNWvSX3hhhlBoYm7uZ2UVbGkZYmDw66ymtrbSqqpYgcCgf//N6nVSV1cXFBSUlZVlY2OTnJw8ceLEmJiY2NjYzMxMV1fXRx5SUVEhkUgkEklaWlpzczP3zT59+jQ3N0dERHz++efqddJ5MplswoQJIpEoJiam40F7pVJZX1/PvW5vb29sbORet7a2NjU1ca/lcnlSUlJtbe2XX365dOlSbfdJ+KTrHCeamjJlCoCkpCReqpWXs9GjGcAGDmTXrz/pnTIZu3Tp//Lzx0il4P6RyUQFBVPv3/+2qGh+SUl4c/MTj/8jFRUVY8aMAdCvX78rV64olcrXX38dgFgs7szFx6amprS0tFWrVvXr18/W1tbOzu6prVG/bNkyNzc3Nf4YR48evXz58k5u6Uq6DxqN9njr16+Pjo5+7733uCXrNVFSAn9/FBbimWeQmgoXl04dpVBU1tWl1NQcrq9PE4ttra3/7ODwrqGhM4Dm5qt9+oxUY3ry7du3AwICrl+/Pnjw4LS0tIEDBy5btuyrr74yMjLav3//ggULOl9KqVQ6ODhUV1cXFxc/bgzLr5aWlh9//HHHjh3cxAAAQqHQ0tKSe21gYNAx2cDIyMjklyc9+/Tp079//xkzZjyFDgnPdJ3jRFMSiQSAj4+PhnXy85mzMwPYuHGsslKdCgpFnVwua229dfv2G8XFf21uLpDJDC9e7FtcvOT+/UMKRX0n61y7ds3FxQXAmDFjKioqWlpa5s+fD8DU1FS9fZO4KURff/21GscS8ocoRnu86urq/v37m5iYuLm5RUZGZmZmqrFJ/fnz5318sgE2fTqr72zcPUlj4/nS0reuXBnSccr/4499CguDq6p2t7U9aSqPTCazs7MDMGXKlNra2oaGBn9/fwDW1tZnz57tfAMqlSovL2/v3r3sl9v0ERERmv5WhDwKxag+KC4uNjc37zjDcHZ2Dg8PP378eMtDG+A9Rnp6urm5uaWlVVjY9eZm9du4fXtVRcU/q6p2lZSsLCqa39R0iTHW0nKzomJHQYG3VCrk8jQnZ1zHPfSHKmRkZHAnv3PmzJHL5dXV1ZMmTQLg6Oh4+fLlLjWjVCq5c+rS0tKsrCwAzz77rPq/GyGPRzGqJ9rb2zMzM1etWuXywBVNExOToKCgXbt2PWEut0Qi6dOnD4DFixe3abAKdHt7hVQq/PHHPkplY0PDmbKy95uarjz4hra2u1VVuwsLgz77zK+jwyFDhrz11lvp6ent7e2JiYlcJ4sWLWpra7tz546HhweAQYMGFRYWqtHS7NmzARw6dKilpcXY2FgoFHLb0hHCL4pRPZSXlxcdHe3t7d2xW4ZIJBo3blxUVFR+fv6D79y/fz+32EdERISGN4irqv5XKkVhYRBj7NatZVIp7tz56JHvlMvl8fHxYWFh9vb2HXlqaWnJ7XoUHh6uVCp/+umnIUOGAHBzc3toIn3nbdq0CcCbb77JGJs8eTKAFPV2uCfkiShG9VlJScmuXbuCgoKMjIw6Amvw4MGrVq1KS0v77LPPuF0tIyMjNf+swsJgqRRVVbsZU1265CSVoqnp4pMPUSqVUqk0Kipq3LhxAPr167dw4ULuwm5AQAAALy+v+/fvq91Seno6AE9PT8bYmjVrAGzcuFHtaoQ8DsVor1BXV3fw4MHFixd3TMEBYGBgIBAIPv30U83rK5VNP/5oIpUK29ruNDbmSqW4fHkAY12407Vy5UoAa9as4b4sLy9fvny5hg/zyOVyAwMDsVjc0NBw9OhRAH5+fpoUJOSRaN5o76JUKnNychITE48ePRoeHm5pacnLAzP1lYmFpcGmphOeeebcnTvv3727xd7+DReXf3a+wokTJ2bPnj158uRsXtdPHT9+vFQqTU9P9/DwsLe3NzExqa2tffCBUUI0R8s29y4ikcjHxyc6OrqgoGD16tV8PXRo8d7RsYtcXW8uAVBXkwTA0rJrOy95eXmJRCKZTNbS0sJLSxxvb28A2dnZtra2w4cPl8vlly5d4rE+IaAYJTxQqZCUJCi6ZTxwOoqLR/qWuu+aaW4+rUs1LCws3N3dW1tbZTIZj611xOhDrwnhEcUo0VhuLsrL4eqKUaNw7Biqqo0bbAUCw66W0UbMcTXPnj2rVCopRomWUIwSjXH7J//pT7++VmsvZW3EXP/+/V1dXevr6/Pz87n63FR8QnhEMUo01rGXcm0tMjNhYIDAQDXKdIwc+b3t2ZHOw4cPt7Ozu3PnTklJCY/1CaEYJZppaoKTE+zt4eODpCS0t2PqVDwwrarzXF1dnZ2d7927d+PGDR4b5GL0woULAoHAy8sLdF5P+EYxSjRjYoLUVJSWwsAANTWwtlbvjJ7DPWvEb8w9//zzBQUFu3btAt1lItpBMUo0U1uLsDC8/Tbeew+vv47KSixbpnYxbcRc3759R4wY0fFaJBLt3bv3+eef37t3b8eK9IRogqbfE81s24bgYIwahdhYeHpi0iRNislkMk9PzxEjRhQUFPDVYIczZ84EBwc/GJ3GxsZ+fn4hISHBwcH9+/fn/RNJL0GjUaKZoiK4uwOAhwc0vqY5evRoMzOzGzduVFVV8dDbA5KSkmbPnl1fX79o0aLLly9HR0dPnjy5ra0tOTk5PDzc2dn55CuvYMsWXL7M7+eS3oBilGhm0CBcuwYAeXkYNkzDYmKxeMKECeyXHU/58s0338ybN6+5uTk8PHz//v0eHh6RkZHZ2dmVlZV79uxZuHChmZmZl0yG99/H6NFwdcWKFZBI0NbGYw9En+n2kX7S492/z8LC2KpVbN06Xupt3LgRwNq1azu+s3379rS0NLXXQo2Li+tYyOpx+wI0NTWpEhLYq68yB4dft5C2tmZhYaymhi1dylauZOvXq9cA0XsUo6R7SUlJAeDt7c19WVFRwYWgqalpUFDQnj17HrlP/eNER0cDEAgEMTExnTpAqWRSKYuKYuPGMYAFB7OtW9mVK4wx9tlnLCeny78P6QXoFhPpXurr621sbMRicW1trbGxcWVl5c6dOyUSyZUrV7g3GBgYTJ06NSQkJCQk5Ak7fTLGIiMjP/nkE5FIFBcXt0yN+QM3b6KpCTt24N//hkCAjAyUlOCVV9T9zYj+0nWOE/KwZ5991tjY2MvLa8eOHR1L3xcXF3NLUBsa/vq0PrcE9e938VMoFFxuGhoaHjx4UKNuNm1iV68yxlhsLOvKnnqk96DRKOl2Kioq/Pz88vPzAQiFQk9Pz9DQ0ODgYG5rppqamuPHjx87diwlJaVj9lJ6erqvry/3uq2t7eWXXz58+LCJicl3333H7cikvpoavPsuzMxgYoJt2zQqRfQUxSjpju7du5ecnJyYmJiSktLQ0MB909XVNSAgICgoaNasWYaGhm1tbadPn05ISMjMzJRKpdymUk1NTQsWLEhJSbGyskpMTOTm82tKpcILL0AqRUEBHtiOhRAOxSjp1pqbm7OzsyUSybfffnvnzh3um9bW1jNnzgwKCgoNDeU2ZObU1tYGBQVlZ2c7ODikpKQ899xzvPXh4YG8PJw9Cy8v3moSfUExSnoGlUp14cIFiUSSmJjYsbSzSCSaNGlScHDw/PnzLSwsZs2adenSpYEDB6ampg4fPpzPjw8Px65d+OQTvPsun2WJXqAYJT1PUVHRsWPHJBJJVlaWUqnkvmltbV1TUzNy5MjU1FRnZ2eeP3LfPrzyCv70J8TH81yZ9HwUo6QHu3///qlTpyQSSUJCwuzZsysrKw8dOmRra8v/J/30E4YMga0tKishEPBfn/RkFKNEH7S2tsrlchsbGy1+hrMzyspw44bmz7wSPUPP1BN9YGRkpN0MBX6+uUR7kJDfoQ27CemUcj+/bysrjQoL1V9OlegpOqknpFN++OGHCRMmPPPMM9e4Fa0I+QXFKCGdolAorK2t5XJ5RUWFnZ2drtsh3QhdGyWkU8RisaenJ2MsNzdX172Q7oVilJDOoh3xyCNRjBLSWRSj5JHo2ighnVVXV2djY2NgYFBXV2dEa5SQX9BolJDOsrS0HDVqlImJiYeHx7p167KysmgUQkCjUUK6pLW11cPDo7CwkPvS1dWVW4d/6tSp3Ep9pBeiGCWka1paWrKysiQSyXfffVdWVsZ909TU1NfXd+HChSEhITx2rBsAAAC2SURBVFZWVrrtkDxlFKOEqO/q1auHDx9+5Np98+bN43mxPtJdUYwSwoNbt26lpqZKJJITJ060t7dz33RzcwsODg4KCvL29hbQulD6i2KUED7dv38/OTk5ISHhwe1P/P39U1NTddsY0R6KUUK0QqlU5uTkHD58OD4+funSpR9++KGuOyLaQjFKiHYxxlpbW42NjXXdCNEWilFCCNEITb8nhBCNUIwSQohGKEYJIUQjFKOEEKKR/wcVhiLI8Nv2HgAAAABJRU5ErkJggg==\n",
365 | "text/plain": [
366 | ""
367 | ]
368 | },
369 | "execution_count": 18,
370 | "metadata": {},
371 | "output_type": "execute_result"
372 | }
373 | ],
374 | "source": [
375 | "print(res[\"smiles\"])\n",
376 | "print()\n",
377 | "res[\"mol\"]"
378 | ]
379 | },
380 | {
381 | "cell_type": "markdown",
382 | "metadata": {},
383 | "source": [
384 | "# Next example "
385 | ]
386 | },
387 | {
388 | "cell_type": "code",
389 | "execution_count": 20,
390 | "metadata": {},
391 | "outputs": [],
392 | "source": [
393 | "res = img2mol(filepath=\"examples/handwritten_example2.jpg\", cddd_server=cddd_server)\n",
394 | "input_img = Image.open(res[\"filepath\"], \"r\")"
395 | ]
396 | },
397 | {
398 | "cell_type": "code",
399 | "execution_count": 21,
400 | "metadata": {},
401 | "outputs": [
402 | {
403 | "data": {
404 | "image/png": "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\n",
405 | "text/plain": [
406 | ""
407 | ]
408 | },
409 | "metadata": {},
410 | "output_type": "display_data"
411 | }
412 | ],
413 | "source": [
414 | "display(input_img)"
415 | ]
416 | },
417 | {
418 | "cell_type": "code",
419 | "execution_count": 22,
420 | "metadata": {},
421 | "outputs": [
422 | {
423 | "name": "stdout",
424 | "output_type": "stream",
425 | "text": [
426 | "O=C1C(=C2Nc3ccccc3C2=O)Nc2ccccc21\n",
427 | "\n"
428 | ]
429 | },
430 | {
431 | "data": {
432 | "image/png": "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\n",
433 | "text/plain": [
434 | ""
435 | ]
436 | },
437 | "execution_count": 22,
438 | "metadata": {},
439 | "output_type": "execute_result"
440 | }
441 | ],
442 | "source": [
443 | "print(res[\"smiles\"])\n",
444 | "print()\n",
445 | "res[\"mol\"]"
446 | ]
447 | },
448 | {
449 | "cell_type": "code",
450 | "execution_count": null,
451 | "metadata": {},
452 | "outputs": [],
453 | "source": []
454 | }
455 | ],
456 | "metadata": {
457 | "kernelspec": {
458 | "display_name": "Python 3",
459 | "language": "python",
460 | "name": "python3"
461 | },
462 | "language_info": {
463 | "codemirror_mode": {
464 | "name": "ipython",
465 | "version": 3
466 | },
467 | "file_extension": ".py",
468 | "mimetype": "text/x-python",
469 | "name": "python",
470 | "nbconvert_exporter": "python",
471 | "pygments_lexer": "ipython3",
472 | "version": "3.8.5"
473 | }
474 | },
475 | "nbformat": 4,
476 | "nbformat_minor": 5
477 | }
478 |
--------------------------------------------------------------------------------