O Android também pode fazer aprendizado de máquina, começando com o aprendizado de máquina Android

O Android também pode fazer aprendizado de máquina, começando com o aprendizado de máquina Android

Recentemente, o tema da inteligência artificial tornou-se extremamente popular. Todas as grandes empresas de Internet estão aproximando seus produtos da direção da inteligência artificial. Parece que se não acompanharmos a tendência da IA, ficaremos para trás. No entanto, como desenvolvedor cliente, ou para ser mais preciso, desenvolvedor Android, parece que a IA está longe de nós. Na verdade, não é o caso. A IA não é apenas o trabalho do algoritmo. Nós, Androids, também podemos nos envolver em inteligência artificial e aprendizado de máquina. Próximo Ouça-me devagar.

1. O que é aprendizado de máquina?

O aprendizado de máquina, um ramo da inteligência artificial, é a ciência que dá aos computadores a capacidade de aprender sem serem explicitamente programados. Parece muito sofisticado, falar a linguagem humana é deixar o computador tomar decisões aprendendo dados como um ser humano. A chave aqui é como fazer com que os computadores tenham capacidades de tomada de decisão como os humanos, o que exige que os computadores coletem continuamente novos dados, ajustem modelos, avaliem o desempenho e treinem para prever novos dados.

2. Quais são as principais estruturas de aprendizado de máquina no Android?

1.TensorFlow Lite: Esta é uma estrutura leve de aprendizado de máquina desenvolvida pelo Google e projetada para dispositivos móveis e incorporados. Ele permite que os desenvolvedores incorporem modelos de aprendizado de máquina em aplicativos Android.

2. Kit de ML: Este é um kit de aprendizado de máquina desenvolvido pelo Google para Firebase e fornece uma série de APIs e SDKs para que os desenvolvedores possam usar facilmente as funções de aprendizado de máquina em aplicativos Android e iOS.

3. PyTorch Mobile: Esta é uma estrutura de aprendizado profundo desenvolvida pelo Facebook que fornece uma série de ferramentas e bibliotecas que permitem aos desenvolvedores executar modelos PyTorch em dispositivos móveis.

4.Caffe2: Caffe2 é outra estrutura de aprendizado de máquina de código aberto do Facebook, otimizada para dispositivos móveis e pode executar modelos de aprendizado de máquina em dispositivos Android.

5. MNN: MNN é o mecanismo de computação de rede neural móvel de código aberto do Alibaba, que fornece uma estrutura completa de computação de rede neural, incluindo ferramentas de conversão de modelo, mecanismos de inferência leves e eficientes e interfaces front-end convenientes e fáceis de usar, que podem ajuda Os desenvolvedores podem calcular facilmente modelos de redes neurais em dispositivos móveis.

6.NCNN: NCNN é uma biblioteca de computação de rede neural móvel otimizada para telefones celulares, de código aberto do Tencent Youtu Lab. NCNN foi aplicada a muitos produtos, incluindo o WeChat, que é usado por todos.

Existem também muitos tipos de frameworks de aprendizado de máquina no lado Android, como MACE da Xiaomi, Kuaishou KwaiNN, ByteN da Byte, etc. Pode-se ver que ainda temos muitos frameworks de aprendizado de máquina para usar no lado Android.

3. O que nosso lado Android pode fazer no aprendizado de máquina?

O Android ainda possui uma ampla variedade de cenários de aplicação em aprendizado de máquina, incluindo, entre outros:

1. Reconhecimento de objetos: pode detectar e rastrear objetos em fotos ou câmeras

2. Reconhecimento facial: Obtenha as coordenadas dos olhos, orelhas, bochechas, nariz e boca do rosto detectado como ID do usuário

3. Reconhecimento de texto: pode reconhecer texto em diferentes idiomas nacionais, reconhecimento de texto de imagem, etc.

4. Reconhecimento de fala e síntese de fala: pode ser usado para desenvolver assistentes de voz, realizar entrada e saída de voz e fornecer um método de interação mais natural.

5. Sistema de recomendação: Ao aprender o comportamento e as preferências do usuário, ele pode recomendar conteúdo que possa interessar ao usuário. Por exemplo, a aplicação de sistemas de recomendação pode ser vista em músicas, filmes, compras e outras aplicações.

6. Reconhecimento de comportamento: Ao aprender o padrão de comportamento do usuário, as atividades do usuário podem ser identificadas, como caminhar, correr, andar de bicicleta, etc. Isso pode ser usado para aplicações de saúde e condicionamento físico.

7. Modelo de previsão: por meio do aprendizado de máquina, modelos de previsão podem ser estabelecidos, como previsão de preços de ações, clima, etc.

8. Proteção de segurança: por exemplo, ao aprender comportamentos normais do sistema, comportamentos maliciosos podem ser identificados e bloqueados, a segurança dos aplicativos pode ser melhorada e assim por diante.

4. Implemente aprendizado de máquina no Android

O texto acima introduziu muito conhecimento relacionado ao aprendizado de máquina. Você já está se preparando para fazer um grande trabalho no desenvolvimento de aprendizado de máquina Android? Parece muito difícil? Não, não, é muito simples implementar um aplicativo de aprendizado de máquina no Android, porque temos muitos frameworks de aprendizado de máquina para usarmos. Os frameworks de aprendizado de máquina TensorFlow Lite e ML Kit desenvolvidos pelo Google são muito adequados para obtermos começou. .

Se quisermos implementar rapidamente um aplicativo de aprendizado de máquina no Android, podemos escolher o ML Kit, porque o ML Kit fornece uma série de modelos de aprendizado de máquina pré-treinados e muitas funções de aprendizado de máquina comumente usadas, como reconhecimento de texto, reconhecimento facial e imagem. rotulagem, identificação, leitura de código de barras, etc. O objetivo do ML Kit é tornar o aprendizado de máquina mais fácil de usar e mais acessível. Na verdade, é a mesma coisa. Então, sem mais delongas, vamos apenas verificar brevemente o ML Kit por meio do código.

Primeira etapa: precisamos adicionar as dependências da versão Android do ML Kit da biblioteca do kit de aprendizado de máquina ao arquivo Gradle no nível do aplicativo do módulo.

Desta vez planejamos implementar a função de reconhecimento de tags de imagem, então escolhemos uma biblioteca para reconhecimento de tags de imagem

dependencies {
    //图像标签识别
    implementation 'com.google.mlkit:image-labeling:17.0.7'
}

Etapa 2: como queremos implementar o reconhecimento de tags de imagem, precisamos preparar imagens para o kit de ML e gerar os dados correspondentes.

Ele é dividido aproximadamente em três etapas no código a seguir: obter o bitmap da imagem, obter o ângulo de rotação da imagem e, finalmente, atribuí-lo ao InputImage do Kit de ML:

private void initImage() {
        //1.获取图片的bitmap
        Bitmap bitmap = getBitmap();
        //2.获取图片的旋转角度
        int rotate = getRotate(bitmap);
        //3.赋值给ML Kit的InputImage
        InputImage image = InputImage.fromBitmap(bitmap, rotate);
    }

Obtenha o bitmap da imagem. Este método não é fornecido pelo ML Kit e precisa ser implementado por você. Você também pode usar nosso método diretamente.

private Bitmap getBitmap(){
        Bitmap bitmap = null;
        try {
            // 获取 assets 目录下的图片
            AssetManager assetManager = getAssets();
            InputStream inputStream = assetManager.open("车.png");
            bitmap = BitmapFactory.decodeStream(inputStream);


            // 显示图片
            ImageView imageView = (ImageView) findViewById(R.id.iv_ai_image);
            imageView.setImageBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    }

Obtenha o ângulo de rotação da imagem. Este método não é fornecido pelo ML Kit. Você precisa implementá-lo sozinho. Você também pode usar nosso método diretamente.

private int getRotate(Bitmap bitmap){
        //接下来获取图片旋转角度
        FileOutputStream out = null;
        File file = new File(getExternalFilesDir(null), "temp.jpg");  // 创建临时文件
        try {
            out = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);  // 将Bitmap保存为.png格式的图片
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        int rotate = 0;
        ExifInterface exif = null;
        try {
            exif = new ExifInterface(file.getAbsolutePath());
            int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
            switch (orientation) {
                case ExifInterface.ORIENTATION_ROTATE_270:
                    rotate = 270;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                    rotate = 180;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_90:
                    rotate = 90;
                    break;
            }
            System.out.println("Rotation: " + rotate);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return rotate;
    }

Claro, além de usar Bitmap para transferir dados de imagem para o ML Kit, também podemos usar a biblioteca CameraX, ByteBuffer ou ByteArray, etc., que estão listadas aqui uma por uma.

Etapa 3. Agora que temos os dados da imagem, podemos usar o reconhecimento de tags de imagem do ML Kit.

Aqui precisamos primeiro obter uma instância do ImageLabeler:

ImageLabeler labeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS);
然后就可以将图片信息传给process()方法:
labeler.process(image)
        .addOnSuccessListener(new OnSuccessListener<List<ImageLabel>>() {
            @Override
            public void onSuccess(List<ImageLabel> imageLabels) {
                // 识别成功
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // 识别失败
            }
        });

O formato do conteúdo de List imageLabels retornado para nós depois que o ML Kit processa com êxito as informações da imagem é o seguinte:

[ImageLabel{text=Vehicle, confidence=0.9583442, index=316, mid=/m/07yv9}, ImageLabel{text=Car, confidence=0.8914178, index=423, mid=/m/0k4j}, ImageLabel{text=Bird, confidence=0.77239835, index=20, mid=/m/015p6}, ImageLabel{text=Bumper, confidence=0.7642555, index=172, mid=/m/02mnkq}, ImageLabel{text=Wheel, confidence=0.72052723, index=322, mid=/m/083wq}, ImageLabel{text=Windshield, confidence=0.533966, index=87, mid=/m/01lrnl}, ImageLabel{text=Metal, confidence=0.5333236, index=253, mid=/m/04t7l}]
其中value为“text”指的就是图片识别的标签,value为“confidence”指的就是置信水平啦(可以理解为可能性,越接1则可能性越大)
我们还可以对这些数据进行一下处理加工,让我们看得更直观,代码如下:
public void setLabelerDetector() {
        if (image == null) {
            Toast.makeText(AIActivity.this,"image为空",Toast.LENGTH_SHORT).show();
            return;
        }
        ImageLabeler labeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS);
        final ImageLabel[] imageLabel = {null};
        StringBuffer stringBuffer = new StringBuffer();
        labeler.process(image).addOnSuccessListener(new OnSuccessListener<List<ImageLabel>>() {
            @Override
            public void onSuccess(List<ImageLabel> imageLabels) {
                Toast.makeText(AIActivity.this,"图片识别成功",Toast.LENGTH_SHORT).show();
                Log.d("ML_Kit", String.valueOf(imageLabels));
                int len = imageLabels.size();
                if (len > 0){
                    for (int i = 0; i < len; i++) {
                        Log.d("ML_Kit", String.valueOf(imageLabels.get(i)));
                        ImageLabel label = imageLabels.get(i);
                        if (i != 0) {
                            float last_confidence = imageLabel[0].getConfidence();
                            float next_confidence = label.getConfidence();
                            if (last_confidence < next_confidence) {
                                imageLabel[0] = label;
                            }
                        } else {
                            imageLabel[0] = label;
                        }
                        String text = label.getText();
                        float confidence = label.getConfidence();
                        stringBuffer.append("图片内容可能为"+text+",置信水平为"+confidence+"\n");
                    }
                    String result = "图片内容最有可能为" + imageLabel[0].getText();
                    stringBuffer.append(result);
                    Toast.makeText(AIActivity.this,result,Toast.LENGTH_SHORT).show();
                    mAi.setText(stringBuffer);//TextView,可以自己实现
                }else {
                    mAi.setText("未能识别到对象");//TextView,可以自己实现
                }


            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(AIActivity.this,"图标标签识别失败",Toast.LENGTH_SHORT).show();
                Log.e("ML_Kit", "图标标签识别失败,e-->" + e);
            }
        });


    }

O efeito é o seguinte:

d94887551d47bb1c0ecdc7d107b46c5c.jpeg

Podemos ver que o ML Kit identifica com precisão o rótulo da imagem como Veículo para nós, podemos até fazer algo mais legal e identificar emoticons:

0d54e6ba75b085a02b59b4742f485cb5.jpeg

5. Conclusão

Que tal usar o aprendizado de máquina no Android? Não é muito simples? Se você não quiser usar o modelo pré-treinado do ML Kit e quiser treinar seu próprio modelo de aprendizado de máquina, você também pode usar o TensorFlow Lite, que permite aos desenvolvedores transformar modelos de aprendizado de máquina em um formato mais pequeno, mais rápido e mais eficiente permite que ele seja executado em dispositivos. Para desenvolvedores que têm necessidades detalhadas de personalização de modelos, o TensorFlow Lite é uma boa escolha. O espaço é limitado, por isso não vou entrar em detalhes detalhes aqui, exceto Além disso, se quiser saber mais sobre outras funções de aprendizado de máquina do ML Kit, você pode acessar o site oficial do ML Kit para saber mais: https://developers.google.cn/ml-kit? hl=zh-cn

Autor:
Link da equipe do cliente móvel de 37 jogos para celular: https://juejin.cn/post/7283152332622446652

Siga-me para obter mais conhecimento ou contribuir com artigos

a091dbbf2d2b4ca41276d500ba181be1.jpeg

4ef7a8eb24438f847f0ef01d56540ce2.jpeg

Acho que você gosta

Origin blog.csdn.net/c6E5UlI1N/article/details/133396788
Recomendado
Clasificación