标题: 角蜂鸟python sdk [打印本页]

作者: aacbwangke    时间: 2018-11-20 10:06
标题: 角蜂鸟python sdk
开发指南[color=var(--MAIN-ANCHOR-color)][size=0.5em]
hsapi 的包结构如下:
hsapi├── __init__.py├── core│   ├── __init__.py│   ├── base.py│   ├── device.py│   └── graph.py├── high│   ├── __init__.py│   ├── net.py│   └── task.py└── easy    ├── __init__.py    └── prefab.py底层接口[color=var(--MAIN-ANCHOR-color)][size=0.5em]管理设备 Device实例[color=var(--MAIN-ANCHOR-color)][size=0.5em]import numpyimport hsapi as hs # 导入 hsapi 模块, 注意导入路径# 获取角蜂鸟设备device_list = hs.EnumerateDevices() # 获取所有已连接的角蜂鸟device = hs.Device(device_list[0])# 打开角蜂鸟设备device.OpenDevice()"""# [可选,根据业务需要]# 读取角蜂鸟设备自带的摄像头的图像 image = device.GetImage(zoomMode=True) # zoomMode: True(640x360) False(1920x1080)"""# 操作神经网络资源、处理数据、业务逻辑等...# 关闭设备,角蜂鸟设备将会自动重置device.CloseDevice()管理神经网络资源 Graph实例[color=var(--MAIN-ANCHOR-color)][size=0.5em]
# 加载Graph文件, 获取Graph实例with open('Graph文件路径', mode='rb') as f:    data = f.read()graph = device.AllocateGraph(data, scale, mean) # scale、mean 图像预处理参数# 神经网络的图像输入,这里有两种方式 [2选1]# 1. 加载外部图像,这里以读取USB摄像头为例"""import cv2capture = cv2.VideoCapture(0)_, image = capture.read()image = image_preprocess(image) # 把图像预处理,处理成神经网络需要的格式和大小graph.LoadTensor(image.astype(numpy.float16), None) # 加载图像作为神经网络的输入"""# 2. 使用角蜂鸟自带的摄像头作为输入# 使用自带的摄像头作为输入, 返回图像image = graph.GetImage(True)  # zoomMode: True(640x360) False(1920x1080)# 读取神经网络输出output, _ = graph.GetResult()# 解析神经网络输出,实现业务逻辑...# 释放神经网络资源graph.DeallocateGraph()简单的接口调用流程[color=var(--MAIN-ANCHOR-color)][size=0.5em]# 单角蜂鸟单模型import cv2, numpyimport hsapi as hs # 导入 hsapi 模块, 注意导入路径scale = 0.007843 # 图像预处理参数mean = -1.0 # 图像预处理参数device_list = hs.EnumerateDevices() # 获取所有已连接的角蜂鸟device = hs.Device(device_list[0]) # 获取Device实例device.OpenDevice() # 打开角蜂鸟设备with open('Graph文件路径', mode='rb') as f:    data = f.read()graph = device.AllocateGraph(data, scale, mean) # 获取Graph实例try:    while True:        # 使用自带摄像头作为输入        image = graph.GetImage(True) # 用角蜂鸟设备图像作为神经网络输入        output, _ = graph.GetResult() # 获取神经网络输出结果        print(output)        cv2.imshow("horned-sungem", image)        cv2.waitKey(1)finally:    graph.DeallocateGraph() # 释放神经网络资源    device.CloseDevice() # 关闭角蜂鸟设备高层接口[color=var(--MAIN-ANCHOR-color)][size=0.5em]
[color=var(--MAIN-LINK-color)]Net 是个抽象类,封装了部分简单的设备操作。
基于该类可实现一个自己的神经网络类,可参考 easy.prefab 模块中预置的模型类。
预置模型 - 人脸检测[color=var(--MAIN-ANCHOR-color)][size=0.5em]# 单角蜂鸟单模型import cv2, numpy from hsapi import FaceDetector # 导入模块# 可通过graphPath属性来指定模型路径,默认路径在examples/graphs下net = FaceDetector(graphPath="./graph_face_SSD", zoom = True, thresh=0.55) # 创建人脸检测网络try:    while True:        # 使用自带摄像头作为输入        result = net.run(image=None) # 使用角蜂鸟自带设备作为输入,获取网络输出        image = net.plot(result) # 根据输出结果绘制图像        cv2.imshow("FaceDetector", image)        cv2.waitKey(1)finally:    net.quit() # 退出神经网络,释放资源,重置设备预置模型 - 人脸检测 + 物体检测[color=var(--MAIN-ANCHOR-color)][size=0.5em]# 单角蜂鸟多模型import cv2import hsapi as hsdevice_list = hs.EnumerateDevices() # 获取所有已连接的角蜂鸟device = hs.Device(device_list[0]) # 获取Device实例face_net = hs.FaceDetector(device=device, zoom = True, thresh=0.55) # 创建人脸检测网络obj_net = hs.ObjectDetector(device=device, zoom = True, thresh=0.55) # 创建物体检测网络"""多角蜂鸟多模型: 初始化 Net 时使用不同的 Device 实例即可"""capture = cv2.VideoCapture(0) # 获取USB摄像头try:    while True:        # 使用USB摄像头作为输入        _, image = capture.read() # 读取USB摄像头图像数据        face_result = face_net.run(image) # 将图像输入到人脸检测网络中        obj_result = obj_net.run(image) # 将图像输入到物体检测网络中        image = face_net.overlay(image, face_result[1]) # 根据人脸检测网络的识别结果在图像上进行绘制        image = obj_net.overlay(image, obj_result[1]) # 根据物体检测网络的识别结果在图像上进行绘制        cv2.imshow("Face/Obj Detector", image)        cv2.waitKey(1)finally:    face_net.quit() # 重置设备,同一个设备退出一个网络即可关于预处理参数 (scale & mean)[color=var(--MAIN-ANCHOR-color)][size=0.5em]
神经网络的输入,根据网络的需要,需要对图像进行预处理操作。
当使用角蜂鸟自带摄像头作为神经网路输入时,目前仅支持对图像的RGB通道进行统一的预处理操作。
这里 角蜂鸟设备内部Python API 都使用 乘加 运算对图像进行预处理操作。
image *= scaleimage += mean
若需要图像3通道统一处理,或者对预处理要求不严格,可对mean取均值作为参数输入。
mean = -1.0 # [-1.0, -1.0, -1.0]scale = 0.007843graph = device.AllocateGraph(data, scale, mean) # scale & meanimage = graph.GetImage(True) # 自带的设备图像已经过预处理后加载到神经网络中,返回的图像是未处理的原始图像output, _ = graph.GetResult() # 读取神经网络输出结果
若需要灰度图输入,或者需要对不同的通道进行不同的预处理操作,可对图像自行处理后加载到角蜂鸟中。
image = preprocess(image) # 自行预处理graph.LoadTensor(image.astype(numpy.float16), None)API文档[color=var(--MAIN-ANCHOR-color)][size=0.5em]





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1