Python Windows 代码示例
您可以使用我们给的 Python示例代码 里面包含了图片的读取,模型的读取,以及模型的预测和输出。
您也可以查看我们的 GitHub repo,其中包含 C++、C# 和 Python 的示例项目,方便用户快速上手和参考。
链接: DaoAI World SDK Desktop Demo
您需要有效的DaoAI 许可证才可以运行,如果您没有许可证,请参考 软件许可证 。
然后运行以下命令就可以运行python脚本
python example.py
您可以通过更改example.py中的文件读取路径来使用不同的图片和深度学习模型。
model_path = "./model.dwm"
image_path = "./image.png"
引入库
您也可以从一个新的python文件开始,那么首先需要导入 dlsdk 库,也就是我们的DaoAI World Python Windows SDK
import os
import sys
import dlsdk.dlsdk as dlsdk
以下的库可能也会对您有帮助
import cv2
import numpy as np
import matplotlib.pyplot as plt
加载深度学习模型
备注
在第一次运行时,需要加载模型等数据到内存,这通常需要更久的时间。在程序的后续运行中,也就是从第二次图片加载,推理时,运行时间就会稳定在更快速的时间。
#初始化模型
dlsdk.initialize()
model_path = "./model.dwm"
model = dlsdk.KeypointDetection(model_path, device=dlsdk.DeviceType.GPU)
注意,这里每一个检测任务都有对应的对象:
#实例分割
model = dlsdk.InstanceSegmentation(model_path, device=dlsdk.DeviceType.GPU)
#关键点检测
model = dlsdk.KeypointDetection(model_path, device=dlsdk.DeviceType.GPU)
#图像分类
model = dlsdk.Classification(model_path, device=dlsdk.DeviceType.GPU)
#目标检测
model = dlsdk.ObjectDetection(model_path, device=dlsdk.DeviceType.GPU)
#非监督缺陷检测 需要用 DaoAI 非监督 SDK
#监督缺陷检测
model = dlsdk.SupervisedDefectSegmentation(model_path, device=dlsdk.DeviceType.GPU)
#OCR
model = dlsdk.OCR(model_path, device=dlsdk.DeviceType.GPU)
#定位模型 (只在工业版支持)
model = dlsdk.Positioning(model_path, device=dlsdk.DeviceType.GPU)
#漏错装检测 (只在工业版支持)
model = dlsdk.PresenceChecking(model_path, device=dlsdk.DeviceType.GPU)
读取图片
读取图片,这一步可以使用 opencv 来读取, 如果您没有 安装,您可以运行 pip install python-opencv
来进行安装
image_path = "./kp1.png" #读取的图片路径
img = cv2.imread(image_path)
daoai_image = dlsdk.Image.from_numpy(img, dlsdk.Image.Type.BGR) #创建 DaoAI Image
使用深度学习模型进行预测
模型预测,并输出结果为Json文件
assert isinstance(daoai_image, dlsdk.Image)
prediction = model.inference(daoai_image,{dlsdk.PostProcessType.CONFIDENCE_THRESHOLD: 0.95})
with open("output.json", "w") as f:
f.write(prediction.toJSONString()) #输出常规json结果
with open("outputAnnotation.json", "w") as f:
f.write(prediction.toAnnotationJSONString()) #输出标注格式的json结果
后处理
模型的预测 可以接受后处理参数:
model.setConfidenceThreshold()
置信度阈值,会过滤掉结果中置信度低于设定值的结果
model.setIOUThreshold()
IOU阈值,会过滤掉结果中IOU低于设定值的结果
model.setConfidenceThreshold(0.5)
prediction = model.inference(daoai_image)
您也可以通过其它方法来获取结果信息
print(prediction.boxes)
print(prediction.class_ids)
print(prediction.class_labels)
获取预测结果
Box 是模型预测结果中的边界框,可通过以下方式获取:
prediction = model.inference(daoai_image)
prediction.boxes[0].x1(); // 左上角 x 坐标
prediction.boxes[0].y1(); // 左上角 y 坐标
prediction.boxes[0].x2(); // 右下角 x 坐标
prediction.boxes[0].y2(); // 右下角 y 坐标
Mask 是预测结果中目标物体的外轮廓信息,可以通过以下方式提取多边形区域的顶点:
prediction = model.inference(daoai_image)
prediction.masks[0].toPolygons()[0].points[0].x // 顶点的 X 坐标
prediction.masks[0].toPolygons()[0].points[0].y // 顶点的 Y 坐标
`masks[0]`:提取第一个目标物体的掩码。
`toPolygons()`:将掩码转换为多边形外轮廓。
`points[0]`:获取多边形的第一个顶点坐标。
通过顺序连接多边形的所有顶点,可以形成完整的轮廓区域,用于目标检测、区域分析等应用场景。
可视化输出
生成并保存预测结果与原图叠加的可视化图像:
result = dlsdk.visualize(daoai_image, prediction)
result.save("output.png")