File size: 2,435 Bytes
8f8ddfc dd65b38 a40070e 8f8ddfc a40070e 1e1f643 b429092 1e1f643 a40070e b2ed8f3 37b5b33 b2ed8f3 37b5b33 b2ed8f3 dd65b38 b2ed8f3 a40070e b2ed8f3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
import streamlit as st
from PIL import Image
import numpy as np
import pubchempy as pcp
from rdkit import Chem
from rdkit.Chem import Draw
import time
st.title("3D2SMILES")
st.markdown("""
This app generates SMILES strings from images of molecules ball-and-stick models.
[Version 1 Paper](https://chemrxiv.org/engage/chemrxiv/article-details/673a9d62f9980725cf89abe1) |
[Version 2 Paper]() |
[Synthetic Dataset](https://huggingface.co/datasets/weathon/3d2smiles_synthetic) |
[Real Dataset](https://huggingface.co/datasets/weathon/3d2smiles_real) |
[Author Github](https://github.com/weathon) |
[Feedback](mailto:wguo6358@gmail.com) |
[Deploy](https://huggingface.co/spaces/weathon/3d2smiles?docker=true)
""")
col1, col2 = st.columns(2)
gen_strategy = col1.selectbox("Select a generative strategy", ("Beam Search", "Sampling", "Greedy Search"))
temp = col2.slider("Temperature", 0.0, 2.0, 1.0)
uploaded_file = st.file_uploader("Upload an image", type=["png", "jpg", "jpeg", "webp", "heic"])
lib = st.columns(2)
lib[0].markdown("Do not have an image? You can select a molecule from the library below.")
from_library = lib[1].button("Select from Library")
col1, col2 = st.columns(2)
col1.checkbox("Contribute To Public Library", value=True, help="If checked, images will be included in the PUBLIC library, and the image will be reviewed by our team and used for model training. When checked, do not upload any sensitive or personal data.")
button = col2.button("Submit")
if button:
if uploaded_file:
start_time = time.time()
image = Image.open(uploaded_file)
options = ["CC(=O)OC1=CC=CC=C1C(=C)C(=O)O", "CC(=O)", "CC(=O)O", "CC(=O)C", "CC(=O)C1=CC=CC=C1"]
grid = [st.columns(2) for _ in range(len(options) // 3 + 1)]
cols = [col for row in grid for col in row]
for i, (smiles, col) in enumerate(zip(options, cols)):
cid = pcp.get_compounds(smiles, 'smiles')
name = cid[0].synonyms[0]
col.markdown("## Option {}: {}".format(i + 1, name))
m = Chem.MolFromSmiles(smiles)
img = Draw.MolToImage(m)
col.image(img, use_container_width=False)
pubchem_url = "https://pubchem.ncbi.nlm.nih.gov/compound/{}".format(cid[0].cid)
col.markdown("[PubChem]({})".format(pubchem_url))
st.markdown("---")
st.markdown("Taken {} seconds".format(round(time.time() - start_time, 2))) |