├── 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 | ![Img2Mol](Img2Mol.png) 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": "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zzzzzCUf++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": "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\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 | --------------------------------------------------------------------------------