|
@@ -1,7 +1,8 @@
|
|
|
from paddlers.deploy import Predictor
|
|
|
-import matplotlib.pyplot as plt
|
|
|
+# import matplotlib.pyplot as plt
|
|
|
import numpy as np
|
|
|
from PIL import Image
|
|
|
+import uuid
|
|
|
|
|
|
# 第一步:构建Predictor。该类接受的构造参数如下:
|
|
|
# model_dir: 模型路径(必须是导出的部署或量化模型)。
|
|
@@ -17,42 +18,45 @@ from PIL import Image
|
|
|
# trt_precision_mode:在使用TensorRT时采用的精度,可选值['float32', 'float16']。默认为'float32'。
|
|
|
#
|
|
|
# 下面的语句构建的Predictor对象依赖static_models/目录中存储的部署格式模型,并使用GPU进行推理。
|
|
|
-predictor = Predictor("E:\PaddleRS\inference_model", use_gpu=True)
|
|
|
+predictor = Predictor("inference_model_change", use_gpu=True)
|
|
|
|
|
|
-# 第二步:调用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(("E:/PaddleRS/data/levircd/test/A/test_1.png", "E:/PaddleRS/data/levircd/test/B/test_1.png"))
|
|
|
-
|
|
|
-# 第三步:解析predict()方法返回的结果。
|
|
|
-# 对于图像分割和变化检测任务而言,predict()方法返回的结果为一个字典或字典构成的列表。字典中的`label_map`键对应的值为类别标签图,对于二值变化检测
|
|
|
-# 任务而言只有0(不变类)或者1(变化类)两种取值;`score_map`键对应的值为类别概率图,对于二值变化检测任务来说一般包含两个通道,第0个通道表示不发生
|
|
|
-# 变化的概率,第1个通道表示发生变化的概率。如果返回的结果是由字典构成的列表,则列表中的第n项与输入的img_file中的第n项对应。
|
|
|
-#
|
|
|
-# 下面的语句从res中解析二值变化图(binary change map)
|
|
|
-cm_1024x1024 = res['label_map']
|
|
|
-# 将标签图(cm_1024x1024)转换为图像格式
|
|
|
-change_map_image = Image.fromarray(np.uint8(cm_1024x1024 * 255), 'L')
|
|
|
+def start(image1,image2):
|
|
|
+ # 第二步:调用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))
|
|
|
|
|
|
-# 展示变化图
|
|
|
-plt.imshow(change_map_image, cmap='gray')
|
|
|
-plt.axis('off') # 不显示坐标轴
|
|
|
-plt.show()
|
|
|
+ # 第三步:解析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')
|
|
|
|
|
|
-# 保存变化图
|
|
|
-change_map_image.save("E:\PaddleRS\predict\change_map.png")
|
|
|
+ # # 展示变化图
|
|
|
+ # plt.imshow(change_map_image, cmap='gray')
|
|
|
+ # plt.axis('off') # 不显示坐标轴
|
|
|
+ # plt.show()
|
|
|
+ # TODO: 保存变化图
|
|
|
+ savePath = 'predict/'+str(uuid.uuid4())+'.png'
|
|
|
+ # 保存变化图
|
|
|
+ change_map_image.save(savePath)
|
|
|
|
|
|
-# import paddlers as pdrs
|
|
|
+ # import paddlers as pdrs
|
|
|
|
|
|
-# predictor = pdrs.deploy.Predictor('./inference_model')
|
|
|
-# result = predictor.predict(img_file='test.jpg',
|
|
|
-# warmup_iters=100,
|
|
|
-# repeats=100)
|
|
|
+ # predictor = pdrs.deploy.Predictor('./inference_model')
|
|
|
+ # result = predictor.predict(img_file='test.jpg',
|
|
|
+ # warmup_iters=100,
|
|
|
+ # repeats=100)
|
|
|
+ return savePath
|