File size: 2,852 Bytes
d174fa9 a21a305 4215475 e4d24f7 4215475 e0f1a63 4215475 16d7d74 e4d24f7 9ef87fa e4d24f7 24c7d9f 3635d67 865684e e4d24f7 865684e e4d24f7 16d7d74 865684e 5fd743a e4d24f7 4cbc041 9ef87fa 24c7d9f e4d24f7 16d7d74 9ef87fa 16d7d74 e4d24f7 16d7d74 3635d67 16d7d74 3635d67 e4d24f7 3635d67 24c7d9f 9ef87fa 24c7d9f 9ef87fa 24c7d9f 3635d67 e4d24f7 |
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
import sys, os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
import gradio as gr
from rdkit import Chem
from rdkit.Chem import Draw
from ONNX0630 import main as predict_smiles
import tempfile
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def visualize_molecule(smiles):
try:
mol = Chem.MolFromSmiles(smiles)
if mol is None:
return None
img = Draw.MolToImage(mol)
return img
except:
return None
def predict(image):
try:
if image is None:
logger.error("上传的图片为空")
return "错误: 请上传有效的图片文件"
# 验证工作目录
work_dir = "/home/user/app"
if not os.path.isdir(work_dir):
logger.error(f"工作目录不存在或不是目录: {work_dir}")
return f"错误: 工作目录无效 - {work_dir}"
with tempfile.NamedTemporaryFile(suffix=".png", dir=work_dir, delete=False) as temp_file:
temp_path = os.path.abspath(temp_file.name)
logger.info(f"保存图片到: {temp_path}, 类型: {type(temp_path)}")
image.save(temp_path)
if not os.path.exists(temp_path):
logger.error(f"图片文件未正确保存: {temp_path}")
return f"错误: 图片文件未正确保存 - {temp_path}"
logger.info(f"传递给 main 的路径: {temp_path}")
smiles = predict_smiles([temp_path])
mol_image = visualize_molecule(smiles)
try:
os.remove(temp_path)
logger.info(f"已删除临时文件: {temp_path}")
except Exception as e:
logger.warning(f"删除临时文件失败: {e}")
if mol_image is None:
return None, smiles
return mol_image, smiles
except FileNotFoundError as e:
logger.error(f"文件路径错误: {e}")
return f"错误: 文件路径问题 - {str(e)}"
except IsADirectoryError as e:
logger.error(f"路径是目录: {e}")
return f"错误: 路径是目录 - {str(e)}"
except PermissionError as e:
logger.error(f"权限错误: {e}")
return f"错误: 文件权限问题 - {str(e)}"
except Exception as e:
logger.error(f"处理错误: {e}")
return f"错误: {str(e)}"
# 定义 Gradio 界面
iface = gr.Interface(
fn=predict,
inputs=gr.Image(label="Upload molecular image", type="pil"),
outputs=[
gr.Image(label="Mol Image"),
gr.Text(label="SMILES"),
],
title="Optical Chemical Structure Recognition",
description="Convert a molecular image into SMILES.<br> ",
examples=[
["example.png"]
]
)
if __name__ == "__main__":
iface.launch(server_name="0.0.0.0", server_port=7860, share=False) |