image_analysis / app.py
tianchi007's picture
Upload 2 files
94e928d verified
import gradio as gr
from image_debug import analysis_image, compare
import numpy as np
import base64
from PIL import Image
import io
def numpy_to_base64(img_array):
# 将 numpy array 转换为 PIL Image
img_pil = Image.fromarray(img_array)
# 创建一个字节流
buffer = io.BytesIO()
# 将图片保存到字节流
img_pil.save(buffer, format="PNG")
# 获取 base64 字符串
img_str = base64.b64encode(buffer.getvalue()).decode()
return img_str
def combine_analysis(result1, result2):
if not result1 or not result2:
return "请先完成两张图片的分析"
result = compare(result1, result2)
return result
def process_image1(image1):
if image1 is None:
return "请上传图片1"
image1 = numpy_to_base64(image1)
return analysis_image(image1)
def process_image2(image2):
if image2 is None:
return "请上传图片2"
image2 = numpy_to_base64(image2)
return analysis_image(image2)
with gr.Blocks(title="图片分析演示") as demo:
gr.Markdown("# 双图片分析系统")
with gr.Row():
with gr.Column():
image1_input = gr.Image(label="第一张图片")
result1 = gr.Markdown(label="第一张图片分析结果")
# 删除 btn1
with gr.Column():
image2_input = gr.Image(label="第二张图片")
result2 = gr.Markdown(label="第二张图片分析结果")
# 删除 btn2
with gr.Row():
combine_btn = gr.Button("综合分析", variant="primary")
with gr.Row():
final_result = gr.Markdown(label="综合分析结果")
# 替换 btn1.click 为 image1_input.change
image1_input.change(
fn=process_image1,
inputs=image1_input,
outputs=result1
)
# 替换 btn2.click 为 image2_input.change
image2_input.change(
fn=process_image2,
inputs=image2_input,
outputs=result2
)
combine_btn.click(
fn=combine_analysis,
inputs=[result1, result2],
outputs=final_result
)
if __name__ == "__main__":
demo.launch()