12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- 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/road", use_gpu=True)
- def road_extract(image1,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)
- # 第三步:解析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:\road_data\MassRoad_DeepGlobe_CHN6-CUG\seg\val\input\timg-3.png','E:/PaddleRS/predict/output/')
|