Android también puede realizar aprendizaje automático, comenzando con el aprendizaje automático de Android

Android también puede realizar aprendizaje automático, comenzando con el aprendizaje automático de Android

Recientemente, el tema de la inteligencia artificial se ha vuelto extremadamente popular. Todas las grandes empresas de Internet están acercando sus productos a la dirección de la inteligencia artificial. Parece que si no seguimos la tendencia de la IA, nos quedaremos atrás. Sin embargo, como desarrollador de clientes, o para ser más precisos, desarrollador de Android, parece que la IA está muy lejos de nosotros. De hecho, no es así. La IA no es sólo el trabajo del algoritmo. Los Android también podemos participar. en inteligencia artificial y aprendizaje automático Siguiente Escúchame despacio.

1. ¿Qué es el aprendizaje automático?

El aprendizaje automático, una rama de la inteligencia artificial, es la ciencia que permite a las computadoras aprender sin estar programadas explícitamente. Suena muy sofisticado, hablar el lenguaje humano es dejar que la computadora tome decisiones aprendiendo datos como un humano. La clave aquí es cómo hacer que las computadoras tengan capacidades de toma de decisiones como los humanos, lo que requiere que las computadoras recopilen continuamente nuevos datos, ajusten modelos, evalúen el rendimiento y se entrenen para predecir nuevos datos.

2. ¿Cuáles son los principales marcos de aprendizaje automático en Android?

1.TensorFlow Lite: este es un marco liviano de aprendizaje automático desarrollado por Google y diseñado para dispositivos móviles e integrados. Permite a los desarrolladores incorporar modelos de aprendizaje automático en aplicaciones de Android.

2. ML Kit: este es un kit de aprendizaje automático desarrollado por Google para Firebase que proporciona una serie de API y SDK para que los desarrolladores puedan utilizar fácilmente funciones de aprendizaje automático en aplicaciones de Android e iOS.

3. PyTorch Mobile: este es un marco de aprendizaje profundo desarrollado por Facebook que proporciona una serie de herramientas y bibliotecas que permiten a los desarrolladores ejecutar modelos de PyTorch en dispositivos móviles.

4.Caffe2: Caffe2 es otro marco de aprendizaje automático de código abierto de Facebook, está optimizado para dispositivos móviles y puede ejecutar modelos de aprendizaje automático en dispositivos Android.

5. MNN: MNN es el motor informático de redes neuronales móviles de código abierto de Alibaba, que proporciona un marco informático de redes neuronales completo, que incluye herramientas de conversión de modelos, motores de inferencia eficientes y livianos e interfaces frontales convenientes y fáciles de usar, que pueden ayuda Los desarrolladores pueden calcular fácilmente modelos de redes neuronales en dispositivos móviles.

6.NCNN: NCNN es una biblioteca informática de redes neuronales móviles optimizada para teléfonos móviles de código abierto de Tencent Youtu Lab. NCNN se ha aplicado a muchos productos, incluido WeChat, que es utilizado por todos.

También hay muchos tipos de marcos de aprendizaje automático en el lado de Android, como MACE de Xiaomi, KwaiNN de Kuaishou, ByteN de Byte, etc. Se puede ver que todavía tenemos muchos marcos de aprendizaje automático para usar en el lado de Android.

3. ¿Qué puede hacer nuestro lado de Android en el aprendizaje automático?

Android todavía tiene una amplia gama de escenarios de aplicación en aprendizaje automático, que incluyen, entre otros:

1. Reconocimiento de objetos: puede detectar y rastrear objetos en imágenes o cámaras.

2. Reconocimiento facial: obtenga las coordenadas de los ojos, oídos, mejillas, nariz y boca del rostro detectado como identificación del usuario.

3. Reconocimiento de texto: puede reconocer texto en diferentes idiomas nacionales, reconocimiento de texto con imágenes, etc.

4. Reconocimiento de voz y síntesis de voz: se puede utilizar para desarrollar asistentes de voz, realizar entrada y salida de voz y proporcionar un método de interacción más natural.

5. Sistema de recomendación: al conocer el comportamiento y las preferencias del usuario, puede recomendar contenido que pueda interesarle. Por ejemplo, la aplicación de sistemas de recomendación se puede ver en música, películas, compras y otras aplicaciones.

6. Reconocimiento de comportamiento: al conocer el patrón de comportamiento del usuario, se pueden identificar las actividades del usuario, como caminar, correr, andar en bicicleta, etc. Esto se puede utilizar para aplicaciones de salud y fitness.

7. Modelo de predicción: Mediante el aprendizaje automático se pueden establecer modelos de predicción, como la predicción de precios de acciones, clima, etc.

8. Protección de seguridad: por ejemplo, al aprender los comportamientos normales del sistema, se pueden identificar y bloquear comportamientos maliciosos, mejorar la seguridad de las aplicaciones, etc.

4. Implementar el aprendizaje automático en Android

Lo anterior ha introducido mucho conocimiento relacionado con el aprendizaje automático. ¿Ya te estás preparando para hacer un gran trabajo en el desarrollo del aprendizaje automático de Android? ¿Suena demasiado difícil? No, no, es demasiado simple implementar una aplicación de aprendizaje automático en Android, porque tenemos muchos marcos de aprendizaje automático para usar. Los marcos de aprendizaje automático TensorFlow Lite y ML Kit desarrollados por Google son muy adecuados para que los obtengamos. comenzó. .

Si queremos implementar rápidamente una aplicación de aprendizaje automático en Android, podemos elegir ML Kit, porque ML Kit proporciona una serie de modelos de aprendizaje automático previamente entrenados y muchas funciones de aprendizaje automático de uso común, como reconocimiento de texto, reconocimiento facial e imágenes. etiquetado, identificación, escaneo de códigos de barras, etc. El objetivo de ML Kit es hacer que el aprendizaje automático sea más fácil de usar y más accesible. De hecho, es lo mismo. Así que sin más preámbulos, revisemos brevemente ML Kit a través del código.

Primer paso: debemos agregar las dependencias de la versión de Android de ML Kit de la biblioteca del kit de aprendizaje automático al archivo Gradle a nivel de aplicación del módulo.

Esta vez planeamos implementar la función de reconocimiento de etiquetas de imágenes, por lo que elegimos una biblioteca para el reconocimiento de etiquetas de imágenes.

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

Paso 2: dado que queremos implementar el reconocimiento de etiquetas de imágenes, debemos preparar imágenes para ML Kit y generar los datos correspondientes.

Se divide aproximadamente en tres pasos en el siguiente código: obtener el mapa de bits de la imagen, obtener el ángulo de rotación de la imagen y finalmente asignarlo a InputImage del ML Kit:

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

Obtenga el mapa de bits de la imagen. Este método no lo proporciona ML Kit y debe implementarlo usted mismo. También puede utilizar nuestro método directamente.

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;
    }

Obtenga el ángulo de rotación de la imagen. Este método no lo proporciona ML Kit. Debe implementarlo usted mismo. También puede utilizar nuestro método directamente.

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;
    }

Por supuesto, además de usar Bitmap para transferir datos de imágenes a ML Kit, también podemos usar la biblioteca CameraX, ByteBuffer o ByteArray, etc., que se enumeran aquí una por una.

Paso 3. Ahora que tenemos los datos de la imagen, podemos usar el reconocimiento de etiquetas de imagen del kit ML.

Aquí primero necesitamos obtener una instancia de 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) {
                // 识别失败
            }
        });

El formato de contenido de List imageLabels que se nos devuelve después de que ML Kit procesa correctamente la información de la imagen es el siguiente:

[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);
            }
        });


    }

El efecto es el siguiente:

d94887551d47bb1c0ecdc7d107b46c5c.jpeg

Podemos ver que ML Kit nos identifica con precisión la etiqueta de la imagen como Vehículo. Incluso podemos hacer algo más interesante e identificar emoticones:

0d54e6ba75b085a02b59b4742f485cb5.jpeg

5. Conclusión

¿Qué tal usar el aprendizaje automático en Android? ¿No es muy sencillo? Si no desea utilizar el modelo previamente entrenado de ML Kit y desea entrenar su propio modelo de aprendizaje automático, también puede utilizar TensorFlow Lite, que permite a los desarrolladores Transformar modelos de aprendizaje automático en un formato más pequeño, más rápido y más eficiente le permite ejecutarse en dispositivos. Para los desarrolladores que tienen necesidades detalladas de personalización de modelos, TensorFlow Lite es una buena opción. El espacio es limitado, por lo que no entraré en detalles aquí, excepto Además, si desea obtener más información sobre otras funciones de aprendizaje automático de ML Kit, puede ir al sitio web oficial de ML Kit para obtener más información: https://developers.google.cn/ml-kit? hl=zh-cn


Autor: Enlace del equipo del cliente móvil de 37 juegos móviles : https://juejin.cn/post/7283152332622446652

Sígueme para obtener más conocimientos o contribuir con artículos.

a091dbbf2d2b4ca41276d500ba181be1.jpeg

4ef7a8eb24438f847f0ef01d56540ce2.jpeg

Supongo que te gusta

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