Xianfish9 commited on
Commit
2fe0b5a
·
verified ·
1 Parent(s): f808770

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -15
app.py CHANGED
@@ -5,7 +5,6 @@ import os
5
 
6
  # --- 依赖导入 ---
7
  from model import CAFN
8
- # --- 修改点 1: 导入 load_precomputed_fr_matrix 而不是 initialize_fr_matrix ---
9
  from Feature_extraction_algorithms.PSTAAP import PSTAAP_feature, load_precomputed_fr_matrix
10
  from Feature_extraction_algorithms.Physicochemical import PC_feature
11
 
@@ -26,26 +25,40 @@ def load_model(model_path):
26
 
27
  model = load_model(MODEL_PATH)
28
 
29
- # --- 修改点 2: PSTAAP 初始化方式改变 ---
30
- # 直接加载预计算的 .mat 文件,高效且无需原始数据
31
  try:
32
- # --- 请将 'Fr_train.mat' 放在与 app.py 相同的目录下,或者提供完整路径 ---
33
  FR_MATRIX_PATH = 'Fr_train.mat'
34
-
35
  if not os.path.exists(FR_MATRIX_PATH):
36
  raise FileNotFoundError(f"PSTAAP初始化失败:找不到矩阵文件 {FR_MATRIX_PATH}")
37
-
38
- # 调用新的加载函数
39
  load_precomputed_fr_matrix(FR_MATRIX_PATH)
40
-
41
  except Exception as e:
42
  print(f"PSTAAP 初始化过程中发生严重错误: {e}")
43
  model = None
44
 
45
- # --- 3. 核心预测函数 (也需要微调) ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  def predict(sequence_input):
47
  if model is None:
48
- return {"错误": "模型未能加载,请检查后台日志"}
49
 
50
  if not sequence_input or not isinstance(sequence_input, str):
51
  return {"错误": "请输入有效的生物序列"}
@@ -54,14 +67,12 @@ def predict(sequence_input):
54
  sequence_list = [cleaned_sequence]
55
 
56
  try:
57
- # --- 相应的调用也需要修改 ---
58
- # 不再传递 test_PSTAAP=True
59
  x1_np, x2_np = extract_features_from_seq(sequence_list)
60
  except Exception as e:
61
- # 这里的错误处理机制让您能看到底层的 Python 错误,非常好!
62
  return {f"特征提取失败": str(e)}
63
 
64
- # ... (函数的其余部分保持不变)
65
  tensor_x1 = torch.tensor(x1_np).to(device)
66
  tensor_x2 = torch.tensor(x2_np).to(device)
67
 
@@ -75,7 +86,7 @@ def predict(sequence_input):
75
 
76
  return result
77
 
78
- # --- 4. 创建并启动 Gradio 界面 ---
79
  demo = gr.Interface(
80
  fn=predict,
81
  inputs=gr.Textbox(
 
5
 
6
  # --- 依赖导入 ---
7
  from model import CAFN
 
8
  from Feature_extraction_algorithms.PSTAAP import PSTAAP_feature, load_precomputed_fr_matrix
9
  from Feature_extraction_algorithms.Physicochemical import PC_feature
10
 
 
25
 
26
  model = load_model(MODEL_PATH)
27
 
28
+ # --- 2. PSTAAP 特征提取器初始化 ---
 
29
  try:
 
30
  FR_MATRIX_PATH = 'Fr_train.mat'
 
31
  if not os.path.exists(FR_MATRIX_PATH):
32
  raise FileNotFoundError(f"PSTAAP初始化失败:找不到矩阵文件 {FR_MATRIX_PATH}")
 
 
33
  load_precomputed_fr_matrix(FR_MATRIX_PATH)
 
34
  except Exception as e:
35
  print(f"PSTAAP 初始化过程中发生严重错误: {e}")
36
  model = None
37
 
38
+
39
+ # --- 3. 特征提取函数 (这是关键!) ---
40
+ # !!! 确保这个函数定义存在,并且没有被注释或错误缩进 !!!
41
+ def extract_features_from_seq(sequence_list):
42
+ """
43
+ 接收一个包含序列的列表,返回模型所需的两个特征张量 x1 和 x2。
44
+ """
45
+ # 提取 PC_feature (对应 x2)
46
+ data2 = PC_feature(sequence_list)
47
+
48
+ # 提取 PSTAAP_feature (对应 x1)
49
+ N = len(sequence_list)
50
+ empty_list_array = [[] for _ in range(N)]
51
+ data = np.array(empty_list_array, dtype=object)
52
+ feature = PSTAAP_feature(sequence_list)
53
+ data = np.hstack((data, feature))
54
+
55
+ return data.astype(np.float32), data2.astype(np.float32)
56
+
57
+
58
+ # --- 4. 核心预测函数 ---
59
  def predict(sequence_input):
60
  if model is None:
61
+ return {"错误": "模型未能加载或初始化失败,请检查后台日志"}
62
 
63
  if not sequence_input or not isinstance(sequence_input, str):
64
  return {"错误": "请输入有效的生物序列"}
 
67
  sequence_list = [cleaned_sequence]
68
 
69
  try:
70
+ # !!! 在这里调用了上面的函数 !!!
 
71
  x1_np, x2_np = extract_features_from_seq(sequence_list)
72
  except Exception as e:
73
+ # 如果特征提取失败(包括 NameError),会在这里捕获
74
  return {f"特征提取失败": str(e)}
75
 
 
76
  tensor_x1 = torch.tensor(x1_np).to(device)
77
  tensor_x2 = torch.tensor(x2_np).to(device)
78
 
 
86
 
87
  return result
88
 
89
+ # --- 5. 创建并启动 Gradio 界面 ---
90
  demo = gr.Interface(
91
  fn=predict,
92
  inputs=gr.Textbox(