首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用具有uint8输入输出数据类型的TFLite模型进行Firebase图像标注

如何使用具有uint8输入输出数据类型的TFLite模型进行Firebase图像标注
EN

Stack Overflow用户
提问于 2019-07-31 21:06:38
回答 1查看 526关注 0票数 1

我在firebase中使用AutoML创建了一个图像分类器模型,输入和输出如下

代码语言:javascript
运行
复制
[  1 224 224   3]
<class 'numpy.uint8'>
[ 1 11]
<class 'numpy.uint8'>

但是FirebaseModelDataType没有uint8数据类型。我该怎么办?仅支持INT32、FLOAT32、BYTE和LONG

代码语言:javascript
运行
复制
interpreter = FirebaseModelInterpreter.getInstance(options);
        inputOutputOptions = new FirebaseModelInputOutputOptions.Builder()
                .setInputFormat(0, FirebaseModelDataType.FLOAT32, new int[]{1, 224, 224, 3})
                .setOutputFormat(0, FirebaseModelDataType.FLOAT32, new int[]{1, 11})
                .build();

此代码不会运行,因为模型输入和输出为uint8

EN

回答 1

Stack Overflow用户

发布于 2019-08-01 13:54:11

我终于让它工作了。事实证明,这里使用AutoML模型的方式与使用AutoML模型的方式不同

代码语言:javascript
运行
复制
private void startLabel() {
    FirebaseLocalModel localModel = new FirebaseLocalModel.Builder("my_local_model")
            .setAssetFilePath("manifest.json")
            .build();

    FirebaseModelManager.getInstance().registerLocalModel(localModel);
    timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(textureView.getBitmap());
            FirebaseVisionOnDeviceAutoMLImageLabelerOptions labelerOptions = new FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder()
                    .setLocalModelName("my_local_model")
                    .setConfidenceThreshold(0.55f)
                    .build();
            try {

                FirebaseVisionImageLabeler labeler = FirebaseVision.getInstance().getOnDeviceAutoMLImageLabeler(labelerOptions);
                labeler.processImage(image)
                        .addOnSuccessListener(new OnSuccessListener<List<FirebaseVisionImageLabel>>() {
                            @Override
                            public void onSuccess(List<FirebaseVisionImageLabel> firebaseVisionImageLabels) {
                                if(!firebaseVisionImageLabels.isEmpty()){
                                    MoneyReader.this.result.setText(firebaseVisionImageLabels.get(0).getText());
                                    if(isTTSReady){
                                        tts.speak(firebaseVisionImageLabels.get(0).getText(), TextToSpeech.QUEUE_ADD, null, "DEFAULT");
                                    }
                                }else{
                                    status.setText("Nothing Recognized");
                                }
                            }
                        })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Toast.makeText(MoneyReader.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                            }
                        });
            } catch (FirebaseMLException e) {
                Toast.makeText(MoneyReader.this, e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        }
    }, 0, 2000);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57291470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档