All Projects → ppsreejith → react-native-camera-tflite

ppsreejith / react-native-camera-tflite

Licence: MIT license
Real time image classification with React Native and Tensorflow lite.

Programming Languages

java
68154 projects - #9 most used programming language
objective c
16641 projects - #2 most used programming language
C#
18002 projects
javascript
184084 projects - #8 most used programming language
ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to react-native-camera-tflite

Imageatm
Image classification for everyone.
Stars: ✭ 201 (+286.54%)
Mutual labels:  image-classification
Catalyst
Accelerated deep learning R&D
Stars: ✭ 2,804 (+5292.31%)
Mutual labels:  image-classification
TF2DeepFloorplan
TF2 Deep FloorPlan Recognition using a Multi-task Network with Room-boundary-Guided Attention. Enable tensorboard, quantization, flask, tflite, docker, github actions and google colab.
Stars: ✭ 98 (+88.46%)
Mutual labels:  tflite
Group Normalization Tensorflow
A TensorFlow implementation of Group Normalization on the task of image classification
Stars: ✭ 205 (+294.23%)
Mutual labels:  image-classification
Nfnets Pytorch
NFNets and Adaptive Gradient Clipping for SGD implemented in PyTorch
Stars: ✭ 215 (+313.46%)
Mutual labels:  image-classification
Wildcat.pytorch
PyTorch implementation of "WILDCAT: Weakly Supervised Learning of Deep ConvNets for Image Classification, Pointwise Localization and Segmentation", CVPR 2017
Stars: ✭ 238 (+357.69%)
Mutual labels:  image-classification
Deepdetect
Deep Learning API and Server in C++14 support for Caffe, Caffe2, PyTorch,TensorRT, Dlib, NCNN, Tensorflow, XGBoost and TSNE
Stars: ✭ 2,306 (+4334.62%)
Mutual labels:  image-classification
SCL
📄 Spatial Contrastive Learning for Few-Shot Classification (ECML/PKDD 2021).
Stars: ✭ 42 (-19.23%)
Mutual labels:  image-classification
Ml Classifier Ui
A UI tool for quickly training image classifiers in the browser
Stars: ✭ 224 (+330.77%)
Mutual labels:  image-classification
Computer Vision Guide
📖 This guide is to help you understand the basics of the computerized image and develop computer vision projects with OpenCV. Includes Python, Java, JavaScript, C# and C++ examples.
Stars: ✭ 244 (+369.23%)
Mutual labels:  image-classification
Labelimg
🖍️ LabelImg is a graphical image annotation tool and label object bounding boxes in images
Stars: ✭ 16,088 (+30838.46%)
Mutual labels:  image-classification
Pixel level land classification
Tutorial demonstrating how to create a semantic segmentation (pixel-level classification) model to predict land cover from aerial imagery. This model can be used to identify newly developed or flooded land. Uses ground-truth labels and processed NAIP imagery provided by the Chesapeake Conservancy.
Stars: ✭ 217 (+317.31%)
Mutual labels:  image-classification
Pytorch fine tuning tutorial
A short tutorial on performing fine tuning or transfer learning in PyTorch.
Stars: ✭ 240 (+361.54%)
Mutual labels:  image-classification
Dataturks
ML data annotations made super easy for teams. Just upload data, add your team and build training/evaluation dataset in hours.
Stars: ✭ 200 (+284.62%)
Mutual labels:  image-classification
Pyramidnet
Pytorch implementation of pyramidnet
Stars: ✭ 27 (-48.08%)
Mutual labels:  image-classification
Deep Learning With Python
Deep learning codes and projects using Python
Stars: ✭ 195 (+275%)
Mutual labels:  image-classification
Googlenet Inception
TensorFlow implementation of GoogLeNet and Inception for image classification.
Stars: ✭ 230 (+342.31%)
Mutual labels:  image-classification
SimMIM
This is an official implementation for "SimMIM: A Simple Framework for Masked Image Modeling".
Stars: ✭ 717 (+1278.85%)
Mutual labels:  image-classification
Sign-Recognition
Traffic Sign Recognition with Keras.
Stars: ✭ 19 (-63.46%)
Mutual labels:  image-classification
Mobilenetv2 Pytorch
Impementation of MobileNetV2 in pytorch
Stars: ✭ 241 (+363.46%)
Mutual labels:  image-classification

Related blog article

For more information, see react-native-camera. All react-native-camera props/features should also work with this.

Real time image classification with React Native

Earlier attempts at Image classification over React Native involved sending image data to the model classifier by sending the image over the bridge or storing the image to disk and accessing the image on the native side. Here's an attempt at live image classification by processing from the camera feed on the native side and getting the output as a byte stream on the JS side using the react-native-camera-tflite library.

Huge shout-out to the people over at react-native-camera. This is essentially just a fork of their awesome work.

Note: This is currently developed only for Android but could be implemented for iOS. (See here for a CoreML implementation on iOS).

To start, let's create an empty react native project:

react-native init mobilenetapp
cd mobilenet-app

Let's add our dependencies:

npm i react-native-camera-tflite
react-native link react-native-camera-tflite

Follow the install instructions (for android. Same as react-native-camera):

  1. Insert the following lines inside the dependencies block in android/build.gradle:
    ...
    allprojects {
        repositories {
            maven { url "[https://jitpack.io](https://jitpack.io)" }  
            maven { url "[https://maven.google.com](https://maven.google.com)" }

    ...
    ...
    ext {
        compileSdkVersion           = 26
        targetSdkVersion            = 26
        buildToolsVersion           = "26.0.2"
        googlePlayServicesVersion   = "12.0.1"
        supportLibVersion           = "27.1.0"
    }
  1. Insert the following lines inside android/app/build.gradle

    android { ... aaptOptions { noCompress "tflite" noCompress "lite" } ...

Now let's use the download our model file from here, decompress it, and copy over the mobilenet_v1_1.0_224_quant.tflite file over to our project.

    mkdir -p ./android/app/src/main/assets
    cp mobilenet_v1_1.0_224_quant.tflite ./android/app/src/main/assets

Add this file to your project root directory as Output.json

Replace the content of App.js in your project root directory with the following:

    import React, {Component} from 'react';
    import {StyleSheet, Text, View } from 'react-native';
    import { RNCamera } from 'react-native-camera-tflite';
    import outputs from './Output.json';
    import _ from 'lodash';

    let _currentInstant = 0;

    export default class App extends Component {
      constructor(props) {
        super(props);
        this.state = {
          time: 0,
          output: ""
        };
      }

    processOutput({data}) {
        const probs = _.map(data, item => _.round(item/255.0, 0.02));
        const orderedData = _.chain(data).zip(outputs).orderBy(0, 'desc').map(item => [_.round(item[0]/255.0, 2), item[1]]).value();
        const outputData = _.chain(orderedData).take(3).map(item => `${item[1]}: ${item[0]}`).join('\n').value();
        const time = Date.now() - (_currentInstant || Date.now());
        const output = `Guesses:\n${outputData}\nTime:${time} ms`;
        this.setState(state => ({
          output
        }));
        _currentInstant = Date.now();
      }
      
      render() {
        const modelParams = {
          file: "mobilenet_v1_1.0_224_quant.tflite",
          inputDimX: 224,
          inputDimY: 224,
          outputDim: 1001,
          freqms: 0
        };
        return (
          <View style={styles.container}>
            <RNCamera
                ref={ref => {
                    this.camera = ref;
                  }}
                style = {styles.preview}
                type={RNCamera.Constants.Type.back}
                flashMode={RNCamera.Constants.FlashMode.on}
                permissionDialogTitle={'Permission to use camera'}
                permissionDialogMessage={'We need your permission to use your camera phone'}
                onModelProcessed={data => this.processOutput(data)}
                modelParams={modelParams}
            >
              <Text style={styles.cameraText}>{this.state.output}</Text>
            </RNCamera>
          </View>
        );
      }
    }

    const styles = StyleSheet.create({
      container: {
        flex: 1,
        flexDirection: 'column',
        backgroundColor: 'black'
      },
      preview: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center'
      },
      cameraText: {
        color: 'white',
        fontSize: 18,
        fontWeight: 'bold'
      }
    });

We're done! Run your app with the following command.

    react-native run-android

Image Classification FTW!Image Classification FTW!

To convert this to a hotdog not-hotdog app, just replace the processOutput function above with the following:

    processOutput({data}) {
      const isHotDogProb = data[935];
      const isHotDog = isHotDogProb > 0.2 ? "HotDog" : "Not HotDog";
      const time = Date.now() - (_currentInstant || Date.now());
      const output = `${isHotDog}\nTime:${time} ms`;
      this.setState(state => ({
       output
      }));
     _currentInstant = Date.now();
    }

Run your app with the following command.

    react-native run-android

It's HotDogIt’s HotDog

Jian Yang would be proud :)

This project has a lot of rough edges. I hope to clean up this up a lot more in the coming days. The rest of the features are the same as react-native-camera.

Links: Github Demo App npm

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].