Машинное обучение — это мощная технология, которая позволяет приложениям принимать разумные решения на основе данных. С React Native мы можем легко интегрировать машинное обучение в наши приложения, используя популярные библиотеки машинного обучения, такие как TensorFlow.js и ml5.js. В этой статье мы рассмотрим, как мы можем интегрировать машинное обучение в приложения React Native, на примерах.

Что такое машинное обучение?

Машинное обучение — это тип искусственного интеллекта (ИИ), который позволяет компьютерам учиться и принимать решения на основе данных. Он включает в себя создание алгоритмов, которые могут идентифицировать закономерности в данных и использовать их для прогнозирования или принятия решений. Машинное обучение используется в широком спектре приложений, включая распознавание изображений, распознавание речи, обработку естественного языка и рекомендательные системы.

Интеграция машинного обучения в приложения React Native

React Native предоставляет мощную платформу для создания мобильных приложений, которые могут использовать машинное обучение. Мы можем интегрировать машинное обучение в наши приложения React Native, используя популярные библиотеки машинного обучения, такие как TensorFlow.js и ml5.js.

TensorFlow.js

TensorFlow.js — это библиотека с открытым исходным кодом для машинного обучения на JavaScript. Это позволяет нам обучать и запускать модели машинного обучения прямо в браузере или на сервере с помощью Node.js. TensorFlow.js предоставляет высокоуровневый API для создания и обучения моделей машинного обучения, а также низкоуровневый API для настройки и оптимизации моделей.

Чтобы использовать TensorFlow.js в нашем приложении React Native, мы можем просто импортировать библиотеку и использовать ее так же, как в среде браузера. Вот пример использования TensorFlow.js для создания простого классификатора изображений в приложении React Native:

import React, { useState } from 'react';
import { View, Text, Button, Image } from 'react-native';
import * as tf from '@tensorflow/tfjs';
import * as mobilenet from '@tensorflow-models/mobilenet';

const ImageClassifier = () => {
  const [predictions, setPredictions] = useState([]);

  const classifyImage = async () => {
    const image = Image.resolveAssetSource(require('./assets/cat.jpg'));
    const model = await mobilenet.load();
    const tensor = tf.browser.fromPixels(image).resizeNearestNeighbor([224, 224]).toFloat();
    const predictions = await model.classify(tensor);
    setPredictions(predictions);
  };

  return (
    <View>
      <Image source={require('./assets/cat.jpg')} style={{ width: 200, height: 200 }} />
      <Button title="Classify Image" onPress={classifyImage} />
      {predictions.map((prediction, index) => (
        <Text key={index}>{prediction.className}: {prediction.probability.toFixed(3)}</Text>
      ))}
    </View>
  );
};

export default ImageClassifier;

В этом примере мы используем пакеты @tensorflow/tfjs и @tensorflow-models/mobilenet для загрузки и запуска предварительно обученной модели классификации изображений MobileNet. Затем мы используем компонент Image из React Native для отображения изображения и компонент Button для запуска классификации. Когда кнопка нажата, мы загружаем изображение, изменяем его размер до ожидаемого входного размера модели и запускаем модель, чтобы получить прогнозы. Затем мы отображаем прогнозы в виде списка имен классов и вероятностей.

ml5.js

ml5.js — удобная и простая в использовании библиотека машинного обучения для JavaScript. Он предоставляет набор предварительно обученных моделей для таких задач, как классификация изображений, обнаружение объектов и перенос стиля, а также инструменты для обучения пользовательских моделей. ml5.js построен поверх TensorFlow.js, поэтому его можно использовать в приложениях React Native таким же образом.

Вот пример использования ml5.js для создания простого классификатора изображений в приложении React Native:

Ограничения машинного обучения в React Native

Хотя интеграция машинного обучения в приложения React Native возможна и эффективна, необходимо учитывать некоторые ограничения. Во-первых, модели машинного обучения могут быть ресурсоемкими и требовать большой вычислительной мощности и памяти, особенно для больших моделей или сложных задач. Это может повлиять на производительность приложения и привести к его замедлению или зависанию.

Во-вторых, модели машинного обучения обычно обучаются на больших наборах данных и могут не подходить для всех случаев использования. Например, предварительно обученная модель классификации изображений может быть не в состоянии точно классифицировать изображения редких или уникальных объектов или изображения с плохим освещением или композицией. В этих случаях может потребоваться индивидуальная модель, которая может занять много времени и может потребовать специальных знаний.

Модели машинного обучения могут не подходить для всех типов приложений или пользователей. У некоторых пользователей могут быть проблемы с конфиденциальностью в связи с тем, что их данные используются для машинного обучения, в то время как другие могут не найти функции машинного обучения полезными или соответствующими их потребностям. При интеграции машинного обучения в ваше приложение React Native важно учитывать потребности и предпочтения вашей целевой аудитории.

давайте рассмотрим еще один пример того, как интегрировать машинное обучение в приложения React Native с помощью TensorFlow.js. В этом примере мы будем использовать предварительно обученную модель TensorFlow.js для распознавания рукописных цифр.

Настройка среды

Для начала нам нужно настроить нашу среду и установить необходимые зависимости. Во-первых, нам нужно создать новый проект React Native с помощью команды react-native init. Затем нам нужно установить пакеты tensorflow и react-native-tensorflow с помощью npm:

npm install tensorflow react-native-tensorflow

После установки пакетов нам нужно связать нативные библиотеки, выполнив следующие команды:

react-native link react-native-tensorflow

Создание приложения

Теперь, когда наша среда настроена, мы можем приступить к созданию нашего приложения. Во-первых, нам нужно создать новый компонент с именем DigitRecognizer, который будет содержать логику нашего приложения. Мы будем использовать компонент Canvas из react-native-canvas для рисования цифр, которые мы хотим распознать.

import React, { Component } from 'react';
import { View, Text, Button } from 'react-native';
import Canvas from 'react-native-canvas';
import { loadLayersModel } from '@tensorflow/tfjs';

export default class DigitRecognizer extends Component {
  state = {
    model: null,
    prediction: null,
  };

  async componentDidMount() {
    // Load the pre-trained TensorFlow.js model
    const model = await loadLayersModel('https://storage.googleapis.com/tfjs-models/tfjs/mnist_v1/model.json');
    this.setState({ model });
  }

  handleRecognizeDigit = async () => {
    // Get the canvas context and extract the pixel data
    const { drawing } = this.refs;
    const ctx = drawing.getContext('2d');
    const pixels = ctx.getImageData(0, 0, 28, 28).data;

    // Preprocess the pixel data
    const input = Array.from(pixels).map(x => (255 - x) / 255);

    // Run the model and get the predictions
    const output = await this.state.model.predict([input]).data();
    const prediction = output.indexOf(Math.max(...output));

    this.setState({ prediction });
  };

  render() {
    return (
      <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
        <Text style={{ fontSize: 24, marginBottom: 20 }}>Digit Recognizer</Text>
        <Canvas ref="drawing" style={{ width: 280, height: 280, borderWidth: 1, borderColor: '#000' }} />
        <Button title="Recognize Digit" onPress={this.handleRecognizeDigit} />
        {this.state.prediction !== null && <Text style={{ fontSize: 24 }}>Prediction: {this.state.prediction}</Text>}
      </View>
    );
  }
}

В этом компоненте мы сначала загружаем предварительно обученную модель TensorFlow.js с помощью функции loadLayersModel. Затем мы устанавливаем модель в состояние компонента.

Когда пользователь нажимает кнопку «Распознать цифру», мы получаем контекст холста и извлекаем данные пикселей. Затем мы предварительно обрабатываем данные пикселей, масштабируя значения пикселей в диапазоне от 0 до 1. Наконец, мы передаем предварительно обработанные данные пикселей в функцию predict модели и получаем прогнозы. Мы извлекаем цифру с наибольшей вероятностью и устанавливаем ее в состояние компонента.

Другой пример

import React, { Component } from 'react';
import { View, Text, StyleSheet } from 'react-native';
import { RNCamera } from 'react-native-camera';
import { TensorCamera } from 'react-native-tensorflow';
import { loadGraphModel } from '@tensorflow/tfjs';

export default class ImageClassifier extends Component {
  state = {
    model: null,
    prediction: null,
  };

  async componentDidMount() {
    // Load the pre-trained TensorFlow.js model
    const model = await loadGraphModel('https://tfhub.dev/google/tfjs-model/imagenet/mobilenet_v2_100_224/classification/4/default/1', { fromTFHub: true });
    this.setState({ model });
  }

  handleCameraStream = async images => {
    // Get the image tensor from the camera stream
    const { image } = images;
    const tensor = new TensorCamera(image, 3).getTensor();

    // Run the model and get the predictions
    const output = await this.state.model.predict(tensor).data();
    const prediction = output.indexOf(Math.max(...output));

    this.setState({ prediction });
  };

  render() {
    return (
      <View style={styles.container}>
        <RNCamera style={styles.preview} type={RNCamera.Constants.Type.back} onGoogleVisionBarcodesDetected={null} onTextRecognized={null}>
          <TensorCamera style={styles.preview} type={RNCamera.Constants.Type.back} zoom={0} cameraTextureHeight={1080} cameraTextureWidth={1920} resizeHeight={224} resizeWidth={224} resizeDepth={3} onReady={this.handleCameraStream} />
        </RNCamera>
        {this.state.prediction !== null && <Text style={styles.predictionText}>Prediction: {this.state.prediction}</Text>}
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    flexDirection: 'column',
    backgroundColor: '#000',
  },
  preview: {
    flex: 1,
    justifyContent: 'flex-end',
    alignItems: 'center',
  },
  predictionText: {
    fontSize: 24,
    fontWeight: 'bold',
    color: '#fff',
    position: 'absolute',
    bottom: 20,
    left: 20,
  },
});

В этом компоненте мы сначала загружаем предварительно обученную модель TensorFlow.js, используя `loadGraph

Параметр Modelfunction from@tensorflow/tfjs. We use the fromTFHub, чтобы указать, что модель размещена в TensorFlow Hub.

Затем мы определяем функцию handleCameraStream, которая будет вызываться каждый раз, когда камера захватывает новое изображение. Внутри этой функции мы используем компонент TensorCamera для предварительной обработки изображения и преобразования его в тензор, который можно передать в модель TensorFlow.js. Затем мы используем функцию predict для запуска модели и получения прогнозов.

Наконец, мы обновляем состояние значением прогноза и отображаем его на экране с помощью компонента Text.

Тестирование приложения

Чтобы протестировать приложение, мы можем запустить его на устройстве Android или iOS с помощью команд react-native run-android или react-native run-ios. Когда приложение загрузится, камера запустится автоматически, и модель начнет классифицировать изображения в режиме реального времени.

Мы можем протестировать модель, направив камеру на разные объекты и проверив, правильно ли приложение их идентифицирует. Например, если мы направляем камеру на кошку, приложение должно предсказать метку класса для «кошки» с высокой степенью достоверности.

Заключение

В этой статье мы узнали, как интегрировать машинное обучение в приложения React Native с помощью TensorFlow.js. Мы использовали предварительно обученную модель для классификации изображений в режиме реального времени с помощью камеры устройства. Этот пример демонстрирует возможности React Native для создания сложных кроссплатформенных приложений, включающих возможности машинного обучения. В связи с растущим спросом на мобильные приложения с поддержкой ИИ разработчикам становится важно иметь навыки и знания для интеграции машинного обучения в свои приложения, и React Native предоставляет для этого отличную платформу.

Спасибо, что прочитали эту статью.

Пожалуйста, поставьте лайк и подпишитесь на меня, чтобы получать больше статей.

Гопеш Джангид