149 lines
8.9 KiB
Python
Raw Normal View History

2025-07-17 08:39:15 +08:00
import numpy as np
import pandas as pd
from MIC2 import search_medicine_name, search_MIC_position, search_MIC, show_MIC, explain_MIC, \
translation_medicine_name, search_interpretation_criteria, update_location
def main_function(excel_drag, excel_standard, excel_ecv, input_image_path, output_image_path, fungus, bacteria,
crop_x=200, crop_y=240, crop_width=500, crop_height=330, draw_width=260, draw_height=260):
"""
:param excel_drag: 路径药敏板分布的 excel表格
:param excel_standard: 路径判断标准的 excel表格
:param excel_ecv: 路径折点信息的 excel表格
:param input_image_path: 路径待检验的药敏板图片
:param output_image_path: 路径初次标注后的药敏板图片
:param fungus: string菌属珠菌属隐球菌属表示曲霉属
:param bacteria: string菌种中文名
:param crop_x: int裁剪图片的 x值
:param crop_y: int裁剪图片的 y值
:param crop_width: int裁剪图片的宽度为 (图片的宽度 - crop_width)
:param crop_height: int裁剪图片的高度为 (图片的高度 - crop_height)
:param draw_width: int画框的宽度
:param draw_height: int画框的高度
:return: medicine_name_list_chinese 药物的中文名字 [str, str, ..., str]
medicine_name_list_english 药物的英文名字 [str, str, ..., str]
show_MIC_list 展示的MIC信息 [str, str, ..., str]
final_explain MIC对应的解释信息 [str, str, ..., str]
MIC_position_list 初次拍照画框的位置 [(int, int), (int, int), ..., (int, int)]
"""
# --读取药敏板药品信息--
drug_sensitivity_plate = pd.read_excel(excel_drag)
drug_sensitivity_plate.drop(drug_sensitivity_plate.index[0], axis=0, inplace=True) # 删除第一行标题
drug_sensitivity_plate.drop(drug_sensitivity_plate.columns[0], axis=1, inplace=True) # 删除第一列序号
medicine_concentration = drug_sensitivity_plate.iloc[0:8, 0:12] # 得到 药品信息 + 浓度对应表
medicine_information = drug_sensitivity_plate.iloc[:, 13:16] # 得到 药品名称 缩写 + 英文 + 中文 对应表
# --找到药敏板中每一种药的名字(缩写)--
medicine_name_list = search_medicine_name(medicine_concentration)
# --找到药敏板药品对应的中文名字、英文名字--
medicine_name_list_chinese, medicine_name_list_english = translation_medicine_name(medicine_information,
medicine_name_list)
# --找到菌属 + 药品对应的判读方法--
interpretation_criteria = pd.read_excel(excel_standard)
judge_standard = search_interpretation_criteria(interpretation_criteria, medicine_name_list_chinese, fungus)
# --对应输入图片,根据不同菌属的判读方法,找到满足颜色需求的微孔,标记出来,保存下标记后的图片,并记下标记坐标--
MIC_position_list = search_MIC_position(input_image_path, output_image_path, judge_standard,
crop_x, crop_y, crop_width, crop_height,
draw_width, draw_height)
# --对应药敏板信息,找到对应药品的 MIC值--
medicine_MIC_list = search_MIC(medicine_concentration, MIC_position_list)
#--对应规则找到最后展示出来的 MIC信息--
show_MIC_list = show_MIC(medicine_MIC_list, MIC_position_list)
#--对应折点信息表,找到药品对应的 MIC解释信息如果没有解释信息返回"-1",最后不解释--
vertices_ecv = pd.read_excel(excel_ecv)
final_explain = explain_MIC(vertices_ecv, fungus, bacteria, medicine_name_list_chinese, medicine_MIC_list)
return medicine_name_list_chinese, medicine_name_list_english, show_MIC_list, final_explain, MIC_position_list
# Todo: 输入像素位置,找到对应的组,然后替换掉坐标位置,加框,按照新的坐标重新找 MIC最终显示的 MIC解释信息
def add_position(excel_drag, excel_ecv, input_image_path, output_image_path,
location, location_list, fungus, bacteria,
crop_x=200, crop_y=240, crop_width=500, crop_height=330, draw_width=260, draw_height=260):
"""
:param excel_drag: 路径药敏板分布的 excel表格
:param excel_ecv: 路径折点信息的 excel表格
:param input_image_path: 图片路径已经经过标记过的图像
:param output_image_path: 图片路径手动点击添加框后的图像
:param location: tuple(height, width)新加点的位置
:param location_list: list, 原画框列表位置
:param fungus: str, 菌属
:param bacteria: str, 菌种
:param crop_x: int裁剪图片的 x值
:param crop_y: int裁剪图片的 y值
:param crop_width: int裁剪图片的宽度为 (图片的宽度 - crop_width)
:param crop_height: int裁剪图片的高度为 (图片的高度 - crop_height)
:param draw_width: int画框的宽度
:param draw_height: int画框的高度
:return: medicine_name_list_chinese 药物的中文名字 [str, str, ..., str]
medicine_name_list_english 药物的英文名字 [str, str, ..., str]
show_MIC_list 新的展示的MIC信息 [str, str, ..., str]
final_explain 新的MIC对应的解释信息 [str, str, ..., str]
new_location_list 新的画框位置同一组药品内计入新画框的位置
"""
# --读取药敏板药品信息--
drug_sensitivity_plate = pd.read_excel(excel_drag)
drug_sensitivity_plate.drop(drug_sensitivity_plate.index[0], axis=0, inplace=True) # 删除第一行标题
drug_sensitivity_plate.drop(drug_sensitivity_plate.columns[0], axis=1, inplace=True) # 删除第一列序号
medicine_concentration = drug_sensitivity_plate.iloc[0:8, 0:12] # 得到 药品信息 + 浓度对应表
medicine_information = drug_sensitivity_plate.iloc[:, 13:16] # 得到 药品名称 缩写 + 英文 + 中文 对应表
# --找到药敏板中每一种药的名字(缩写)--
medicine_name_list = search_medicine_name(drug_sensitivity_plate)
# --找到药敏板药品对应的中文名字、英文名字--
medicine_name_list_chinese, medicine_name_list_english = translation_medicine_name(medicine_information,
medicine_name_list)
#--更新位置--
new_location_list = update_location(input_image_path, output_image_path, location, location_list,
crop_x, crop_y, crop_width, crop_height, draw_width, draw_height)
# --对应药敏板信息,找到对应药品的 MIC值--
medicine_MIC_list = search_MIC(medicine_concentration, new_location_list)
#--对应规则找到最后展示出来的 MIC信息--
show_MIC_list = show_MIC(medicine_MIC_list, new_location_list)
#--对应折点信息表,找到药品对应的 MIC解释信息如果没有解释信息返回"-1",最后不解释--
vertices_ecv = pd.read_excel(excel_ecv)
final_explain = explain_MIC(vertices_ecv, fungus, bacteria, medicine_name_list_chinese, medicine_MIC_list)
return medicine_name_list_chinese, medicine_name_list_english, show_MIC_list, final_explain, new_location_list
if __name__ == '__main__':
chinese_name, english_name, mic, explain, pos_li = main_function(
"C:\\Users\\Liao\\Desktop\\MXK\\丹娜\\MIC\\药敏板药物信息示例\\药敏板药物信息示例.xlsx",
"C:\\Users\\Liao\\Desktop\\MXK\\丹娜\\MIC\\药敏板药物信息示例\\药敏板药品判读规则表格.xlsx",
"C:\\Users\\Liao\\Desktop\\MXK\\丹娜\\MIC\\药敏板药物信息示例\\MIC解释标准及ECV值.xlsx",
"./data/念珠结果判读/2.jpg",
"./data/res/test2_0.jpg",
"隐球菌属",
"新生隐球菌VN")
print(chinese_name)
print(english_name)
print(mic)
print(explain)
print(pos_li)
print("------新增框------")
# 按照目前图片进行裁剪,可根据如下范围设定新加的孔在哪里
# [200, 558, 916, 1274, 1632, 1990, 2348, 2706, 3064]
# [240, 598, 956, 1314, 1672, 2030, 2388, 2746, 3104, 3462, 3820, 4178, 4536]
# 比如(210, 250)就应该对应的是(1, 1)这个位置,(2780, 3900)对应的就是(8, 11)这个位置
chinese_name_new, english_name_new, mic_new, explain_new, pos_new = add_position(
"C:\\Users\\Liao\\Desktop\\MXK\\丹娜\\MIC\\药敏板药物信息示例\\药敏板药物信息示例.xlsx",
"C:\\Users\\Liao\\Desktop\\MXK\\丹娜\\MIC\\药敏板药物信息示例\\MIC解释标准及ECV值.xlsx",
"./data/res/test2_0.jpg",
"./data/res/add_test2_0.jpg",
(1500, 2500), pos_li,
"隐球菌属",
"新生隐球菌VN"
)
print(chinese_name_new)
print(english_name_new)
print(mic_new)
print(explain_new)
print(pos_new)