from paddlers.deploy import Predictor # import matplotlib.pyplot as plt import numpy as np from PIL import Image import uuid # 第一步:构建Predictor。该类接受的构造参数如下: # model_dir: 模型路径(必须是导出的部署或量化模型)。 # use_gpu: 是否使用GPU,默认为False。 # gpu_id: 使用GPU的ID,默认为0。 # cpu_thread_num:使用CPU进行预测时的线程数,默认为1。 # use_mkl: 是否使用MKL-DNN计算库,CPU情况下使用,默认为False。 # mkl_thread_num: MKL-DNN计算线程数,默认为4。 # use_trt: 是否使用TensorRT,默认为False。 # use_glog: 是否启用glog日志, 默认为False。 # memory_optimize: 是否启动内存优化,默认为True。 # max_trt_batch_size: 在使用TensorRT时配置的最大batch size,默认为1。 # trt_precision_mode:在使用TensorRT时采用的精度,可选值['float32', 'float16']。默认为'float32'。 # # 下面的语句构建的Predictor对象依赖static_models/目录中存储的部署格式模型,并使用GPU进行推理。 predictor = Predictor("inference_model/change", use_gpu=True) def change_detect(image1,image2,outputPath): # 第二步:调用Predictor的predict()方法执行推理。该方法接受的输入参数如下: # img_file: 对于场景分类、图像复原、目标检测和图像分割任务来说,该参数可为单一图像路径,或是解码后的、排列格式为(H, W, C) # 且具有float32类型的图像数据(表示为numpy的ndarray形式),或者是一组图像路径或np.ndarray对象构成的列表;对于变化检测 # 任务来说,该参数可以为图像路径二元组(分别表示前后两个时相影像路径),或是两幅图像组成的二元组,或者是上述两种二元组 # 之一构成的列表。 # topk: 场景分类模型预测时使用,表示选取模型输出概率大小排名前`topk`的类别作为最终结果。默认值为1。 # transforms: 对输入数据应用的数据变换算子。若为None,则使用从`model.yml`中读取的算子。默认值为None。 # warmup_iters: 预热轮数,用于评估模型推理以及前后处理速度。若大于1,会预先重复执行`warmup_iters`次推理,而后才开始正式的预测及其速度评估。默认值为0。 # repeats: 重复次数,用于评估模型推理以及前后处理速度。若大于1,会执行`repeats`次预测并取时间平均值。默认值为1。 # # 下面的语句传入两幅输入影像的路径 res = predictor.predict((image1, image2)) # 第三步:解析predict()方法返回的结果。 # 对于图像分割和变化检测任务而言,predict()方法返回的结果为一个字典或字典构成的列表。字典中的`label_map`键对应的值为类别标签图,对于二值变化检测 # 任务而言只有0(不变类)或者1(变化类)两种取值;`score_map`键对应的值为类别概率图,对于二值变化检测任务来说一般包含两个通道,第0个通道表示不发生 # 变化的概率,第1个通道表示发生变化的概率。如果返回的结果是由字典构成的列表,则列表中的第n项与输入的img_file中的第n项对应。 # # 下面的语句从res中解析二值变化图(binary change map) cm = res['label_map'] # 将标签图(cm)转换为图像格式 change_map_image = Image.fromarray(np.uint8(cm * 255), 'L') # # 展示变化图 # plt.imshow(change_map_image, cmap='gray') # plt.axis('off') # 不显示坐标轴 # plt.show() # TODO: 保存变化图 savePath = outputPath+str(uuid.uuid4())+'.png' # 保存变化图 change_map_image.save(savePath) # import paddlers as pdrs # predictor = pdrs.deploy.Predictor('./inference_model') # result = predictor.predict(img_file='test.jpg', # warmup_iters=100, # repeats=100) return savePath start(r'E:\big_model\tuban\ceshi\A\1001.tif',r'E:\big_model\tuban\ceshi\B\1001.tif','E:/PaddleRS/predict/output/')