Flutter-Dart dili ile, bir resim çekip içindeki nesneleri listeleyen yapay zeka programı yazabilir miyiz?

Flutter-Dart dili ile, bir resim çekip içindeki nesneleri listeleyen yapay zeka programı yazabilir miyiz?

Flutter ve Dart programlama dili kullanarak, bir resimdeki nesneleri tespit etmek için yapay zeka kullanarak bir program yazabilirsiniz. Bu işlemi gerçekleştirmek için, TensorFlow Lite ve Flutter arasındaki entegrasyonu kullanabiliriz.

TensorFlow Lite, mobil cihazlar için hafif bir derin öğrenme çerçevesidir(kütüphane) ve bu çerçeve sayesinde, nesne tespiti gibi yapay zeka görevlerini mobil uygulamalarda gerçekleştirebiliriz.

İşlemin adımları şu şekildedir:

Öncelikle Flutter uygulaması içinde kamera fonksiyonu kullanarak resim çekilir.

Resim, TensorFlow Lite modeline verilerek nesne tespiti yapılır.

Model, resimde bulunan nesneleri tespit eder ve nesne türlerini belirler.

Son olarak, tespit edilen nesnelerin adları, bir liste şeklinde kullanıcıya sunulur.

Bu adımları gerçekleştirmek için aşağıdaki adımlar takip edilebilir:

İlk olarak, TensorFlow Lite paketini projenize eklemelisiniz. Bunun için, pubspec.yaml dosyasında aşağıdaki gibi bir düzenleme yapabilirsiniz:

dependencies:

  tensorflow_lite: ^1.0.0

Nesne tespiti için bir TensorFlow Lite modeli indirin. TensorFlow Hub veya başka bir kaynaktan uygun bir model bulabilirsiniz. Modeli projenize ekleyin ve kullanacağınız fonksiyonda yükleyin.

 

Kamera erişim izni alın. Bunun için, kamera erişim izni için gerekli kodu yazmanız gerekecektir. Bu adımı gerçekleştirmek için Flutter'ın flutter_camera_ml_vision veya flutter_native_camera paketlerini kullanabilirsiniz.

Resim tespiti yapmak için bir fonksiyon oluşturun. Bu fonksiyon, TensorFlow Lite modelini yükleyecek, resmi işleyecek ve tespit edilen nesnelerin listesini döndürecektir.

Son olarak, bu liste, kullanıcı arayüzünde görüntülenebilir veya başka bir şekilde kullanılabilir.

Aşağıda, bu adımları gerçekleştirmek için kullanabileceğiniz bir örnek kod parçası bulunmaktadır:

 

import 'package:flutter/material.dart';

import 'package:tflite_flutter/tflite_flutter.dart';

 

class ImageRecognitionApp extends StatefulWidget {

  @override

  _ImageRecognitionAppState createState() => _ImageRecognitionAppState();

}

 

class _ImageRecognitionAppState extends State<ImageRecognitionApp> {

  File _image;

  List _recognitions;

  Interpreter _interpreter;

 

  @override

  void initState() {

    super.initState();

    loadModel();

  }

 

  void loadModel() async {

    _interpreter = await Interpreter.fromAsset('model.tflite');

  }

 

  void predictImage() async {

    var recognitions = await _interpreter.run(_image);

 

    setState(() {

      _recognitions = recognitions;

    });

  }

 

  void pickImage() async {

    var image = await ImagePicker.pickImage(source: ImageSource.camera);

 

    setState(() {

      _image = image;

    });

 

    predictImage();

  }

 

  @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(

        title: Text('Image Recognition App'),

      ),

      body: Center(

        child: _image == null

            ? Text('No Image Selected')

            : Column(

                mainAxisAlignment: MainAxisAlignment.center,

                children: <Widget>[

                  Image.file(_image),

                  SizedBox(height: 16),

                  _recognitions == null

                      ? CircularProgressIndicator()

                      : ListView.builder(

                          shrinkWrap: true,

                          itemCount: _recognitions.length,

                          itemBuilder: (context, index) {

                            var recognition = _recognitions[index];

                            return ListTile(

                              title: Text(recognition['label']),

                              subtitle: Text('${recognition['confidence']}%'),

                            );

                          },

                        ),

                ],

              ),

      ),

      floatingActionButton: FloatingActionButton(

        onPressed: pickImage,

        tooltip: 'Pick Image',

        child: Icon(Icons.camera),

      ),

    );

  }

}