昇腾社区首页
中文
注册

Python样例

样例一

Python 版 MxTools.MxpiVisionLists使用样例(MxpiVisionList.py)。

函数原型:

def SendProtobuf(streamName: bytes, inPluginId: int, protobufVec: list) -> int:
# -*- coding:utf-8 -*-
import json
# import StreamManagerApi.py
from StreamManagerApi import *
import MxpiDataType_pb2 as MxpiDataType
if __name__ == '__main__':
    # init stream manager
    streamManagerApi = StreamManagerApi()
    ret = streamManagerApi.InitManager()
    if ret != 0:
        print("Failed to init Stream manager, ret=%s" % str(ret))
        exit()

    # create streams by pipeline config file
    pipeline = {
        "classification+detection": {
            "appsrc0": {
                "props": {
                    "blocksize": "409600"
                },
                "factory": "appsrc",
                "next": "appsink0"
             },
            "appsink0": {
                "factory": "appsink"
            }
        }
    }
    pipelineStr = json.dumps(pipeline).encode()
    ret = streamManagerApi.CreateMultipleStreams(pipelineStr)
    if ret != 0:
        print("Failed to create Stream, ret=%s" % str(ret))
        exit()

    # Construct the input of the stream
    dataInput = MxDataInput()
    with open("test.jpg", 'rb') as f:
        dataInput.data = f.read()
    # Inputs data to a specified stream based on streamName.
    streamName = b'classification+detection'
    inPluginId = 0
    key = b'mxpi_modelinfer2'
    visionList =  MxpiDataType.MxpiVisionList()
    visionVec = visionList.visionVec.add()
    visionVec.visionData.deviceId = 0
    visionVec.visionData.memType = 0
    visionVec.visionData.dataStr = dataInput.data
    protobuf = MxProtobufIn()
    protobuf.key = key
    protobuf.type = b'MxTools.MxpiVisionList'
    protobuf.protobuf = visionList.SerializeToString()
    # print(protobuf.key)
    # print(protobuf.protobuf)

    protobufVec = InProtobufVector()
    protobufVec.push_back(protobuf)
    # print(streamName)
    errorCode = streamManagerApi.SendProtobuf(streamName, inPluginId, protobufVec)
    if errorCode < 0:
        print("Failed to send data to stream.")
        exit()
    keyVec = StringVector()
    keyVec.push_back(key)
    inferResult = streamManagerApi.GetProtobuf(streamName, inPluginId, keyVec)
    if inferResult.size() == 0:
        print("inferResult is null")
        exit()
    if inferResult[0].errorCode != 0:
        print("GetResultWithUniqueId error. errorCode=%d" % (
        inferResult[0].errorCode))
        exit()
    #print the infer result
    print("GetProtobuf errorCode=%d" % (inferResult[0].errorCode))
    print("key:"+str(inferResult[0].messageName))
    result =  MxpiDataType.MxpiVisionList()
    result.ParseFromString(inferResult[0].messageBuf)
    fo = open("result.jpg", "wb")
    fo.write(result.visionVec[0].visionData.dataStr)
    # print(result.visionVec[0].visionData.dataSize)
    # print(result.visionVec[0].visionData.dataStr)
    # destroy streams
    streamManagerApi.DestroyAllStreams()

样例二

函数原型:

def SendProtobuf(streamName: bytes, elementName: bytes, protobufVec: list) -> int:
ELEMENT_NAME = b'appsrc0'
KEY = b'appsrc0'
protobuf_vec = prepare_data()
error_code = stream_manager_api.SendProtobuf(STREAM_NAME, ELEMENT_NAME, protobuf_vec)
if error_code < 0:
    print("Failed to send data to stream.")
    exit()

key_vec_sample = StringVector()
key_vec_sample.push_back(key)
infer_result_sample = stream_manager_api.GetProtobuf(STREAM_NAME, inplugin_id, key_vec_sample)
if infer_result_sample.size() == 0:
    print("infer_result is null")
    exit()

result_sample = MxpiDataType.MxpiVisionList()
result_sample.ParseFromString(infer_result_sample[0].messageBuf)
print("result: {}".format(result_sample.visionVec[0].visionData.dataStr))