当前位置: 首页 > 知识库问答 >
问题:

如何在android中向tflite模型传递图像

帅博简
2023-03-14

我已经将一个Yolo模型转换为.tflite,以便在Android中使用。在python中就是这样使用的--

net = cv2.dnn.readNet("yolov2.weights", "yolov2.cfg")
classes = []
with open("yolov3.txt", "r") as f:
    classes = [line.strip() for line in f.readlines()]
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
colors = np.random.uniform(0, 255, size=(len(classes), 3))

cap= cv2.VideoCapture(0)


while True:
    _,frame= cap.read()
    height,width,channel= frame.shape
    blob = cv2.dnn.blobFromImage(frame, 0.00392, (320, 320), (0, 0, 0), True, crop=False)
    net.setInput(blob)
    outs = net.forward(output_layers)
    for out in outs:
        for detection in out:
            scores = detection[5:]
            class_id = np.argmax(scores)
            confidence = scores[class_id]
            if confidence > 0.2:
            # Object detected
                center_x = int(detection[0] * width)
                center_y = int(detection[1] * height)
                w = int(detection[2] * width)
                h = int(detection[3] * height)
                # Rectangle coordinates
                x = int(center_x - w / 2)
                y = int(center_y - h / 2)

我使用netron https://github.com/lutzroeder/netron可视化模型。输入描述为name:inputs,类型:float32[1,416,416,3],quantization:0≤q≤255,位置:399,输出描述为name:output_boxs,类型:float32[1,106 47,8],位置:400。

共有1个答案

彭畅
2023-03-14

您需要调整输入图像的大小,使其与TensorFlow-Lite模型的输入大小相匹配,然后将其转换为RGB格式以馈送到模型。

通过使用TensorFlow-Lite支持库中的ImageProcessor,您可以轻松地进行图像大小调整和转换。

ImageProcessor imageProcessor =
        new ImageProcessor.Builder()
            .add(new ResizeWithCropOrPadOp(cropSize, cropSize))
            .add(new ResizeOp(imageSizeX, imageSizeY, ResizeMethod.NEAREST_NEIGHBOR))
            .add(new Rot90Op(numRoration))
            .add(getPreprocessNormalizeOp())
            .build();
return imageProcessor.process(inputImageBuffer);

接下来使用解释器运行推断,您将预处理后的图像提供给TensorFlow-Lite解释器:

tflite.run(inputImageBuffer.getBuffer(), outputProbabilityBuffer.getBuffer().rewind());

请参考这个官方示例了解更多详细信息,此外,您也可以参考这个示例。

 类似资料:
  • 你好,我正在使用改型上传图像文件。有人知道怎么进去吗

  • 我有一个保存的tflite模型,其输入和输出详细信息如下: > 输入:[{“name”:“dense_4_Input”,“index”:0,“shape”:数组([1100],dtype=int32),“shape_signature':数组([1],100],dtype=int 32),'dtype':,'量化':(0.0,0),'量化_parameters”:{“scales”:数组] 输出

  • 问题内容: 假设我有一个模型Car,该模型在 ViewModel1中 实例化为以下初始属性: ViewModel1 然后,我需要在下一个视图控制器中完成汽车的其他信息。遵循MVVM时,在视图控制器之间传递模型的 正确 方法是什么? 使用MVC,操作很简单,因为视图可以引用模型: 以下是对该问题的伪尝试,但是我给人的印象是视图模型应该是私有的,并且只能由单个视图控制器访问。因此,以下尝试对我来说似乎

  • 我想在Tensorflow中将整数量化的tflite模型转换为冻结图(.pb)。我通读并尝试了许多有关StackOverflow的解决方案,但没有一个有效。具体来说,toco不起作用(输出格式不能是TENSORFLOW\u GRAPHDEF)。 我的最终目标是通过tf2onnx获得量化的ONNX模型,但tf2onnx不支持tflite作为输入(只支持保存的_模型、检查点和图形_定义)。但是,在使用

  • 我已经使用tensorflow后端训练了一个DNN,我想在FireBase中托管它。训练好的模型被保存为.meta文件,我尝试使用下面的代码将模型转换为tflite,但我遇到了一些错误。那么我如何将这个模型转换成Tensorflow Lite呢?

  • 我按照TensorFlow lite的指示在Android上创建了一个对象检测应用程序,我的tflite模型在笔记本电脑上测试时成功运行。但是,当我用我的tflite模型替换示例应用程序中的tflite模型时,它无法检测到任何东西。 还有什么我需要做的吗?请帮帮我,我已经陷入这种情况一个星期了。