experimental spike for proto-based plugin
This commit is contained in:
parent
a53cc09605
commit
805e8300f7
1
mediapipe/dart/dart_builder/.gitignore
vendored
1
mediapipe/dart/dart_builder/.gitignore
vendored
|
@ -1,3 +1,4 @@
|
||||||
# https://dart.dev/guides/libraries/private-files
|
# https://dart.dev/guides/libraries/private-files
|
||||||
# Created by `dart pub`
|
# Created by `dart pub`
|
||||||
.dart_tool/
|
.dart_tool/
|
||||||
|
cc/*
|
||||||
|
|
36
mediapipe/dart/dart_builder/bin/cpp_test.dart
Normal file
36
mediapipe/dart/dart_builder/bin/cpp_test.dart
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
|
||||||
|
// for details. All rights reserved. Use of this source code is governed by a
|
||||||
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
import 'dart:ffi' as ffi;
|
||||||
|
import 'dart:io' show Platform, Directory;
|
||||||
|
|
||||||
|
import 'package:path/path.dart' as path;
|
||||||
|
|
||||||
|
// FFI signature of the hello_world C function
|
||||||
|
typedef IncrementFunc = ffi.Int32 Function(ffi.Int32);
|
||||||
|
typedef Increment = int Function(int);
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
// Open the dynamic library
|
||||||
|
var libraryPath =
|
||||||
|
path.join(Directory.current.absolute.path, 'cpp', 'main.dylib');
|
||||||
|
|
||||||
|
// if (Platform.isMacOS) {
|
||||||
|
// libraryPath =
|
||||||
|
// path.join(Directory.current.path, 'hello_library', 'libhello.dylib');
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (Platform.isWindows) {
|
||||||
|
// libraryPath = path.join(
|
||||||
|
// Directory.current.path, 'hello_library', 'Debug', 'hello.dll');
|
||||||
|
// }
|
||||||
|
|
||||||
|
final dylib = ffi.DynamicLibrary.open(libraryPath);
|
||||||
|
|
||||||
|
// Look up the C function 'hello_world'
|
||||||
|
final Increment increment =
|
||||||
|
dylib.lookup<ffi.NativeFunction<IncrementFunc>>('increment').asFunction();
|
||||||
|
// Call the function
|
||||||
|
print(increment(99));
|
||||||
|
}
|
|
@ -37,13 +37,6 @@ class DartProtoBuilder {
|
||||||
repositoryRoot.absolute.path, 'mediapipe', 'dart', 'dart_builder'),
|
repositoryRoot.absolute.path, 'mediapipe', 'dart', 'dart_builder'),
|
||||||
);
|
);
|
||||||
|
|
||||||
_buildDirectory = io.Directory(
|
|
||||||
path.join(
|
|
||||||
io.Directory.current.parent.parent.parent.parent.absolute.path,
|
|
||||||
'build',
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
_outputDirectory = options.outputPath != null
|
_outputDirectory = options.outputPath != null
|
||||||
? io.Directory(options.outputPath!)
|
? io.Directory(options.outputPath!)
|
||||||
: io.Directory(
|
: io.Directory(
|
||||||
|
@ -67,12 +60,11 @@ class DartProtoBuilder {
|
||||||
io.Directory get mediapipeDir => _mediapipeDir!;
|
io.Directory get mediapipeDir => _mediapipeDir!;
|
||||||
io.Directory? _mediapipeDir;
|
io.Directory? _mediapipeDir;
|
||||||
|
|
||||||
io.Directory get buildDirectory => _buildDirectory!;
|
/// Directory to place compiled protobufs.
|
||||||
io.Directory? _buildDirectory;
|
|
||||||
|
|
||||||
io.Directory get outputDirectory => _outputDirectory!;
|
io.Directory get outputDirectory => _outputDirectory!;
|
||||||
io.Directory? _outputDirectory;
|
io.Directory? _outputDirectory;
|
||||||
|
|
||||||
|
/// Location of this command.
|
||||||
io.Directory get dartBuilderDirectory => _dartBuilderDirectory!;
|
io.Directory get dartBuilderDirectory => _dartBuilderDirectory!;
|
||||||
io.Directory? _dartBuilderDirectory;
|
io.Directory? _dartBuilderDirectory;
|
||||||
|
|
||||||
|
@ -100,7 +92,7 @@ class DartProtoBuilder {
|
||||||
[ansi.green],
|
[ansi.green],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
// await _buildProtos();
|
await _buildProtos();
|
||||||
await _buildBarrelFiles();
|
await _buildBarrelFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,16 +220,13 @@ class DartProtoBuilder {
|
||||||
).absolute.path;
|
).absolute.path;
|
||||||
|
|
||||||
Future<void> _confirmOutputDirectories() async {
|
Future<void> _confirmOutputDirectories() async {
|
||||||
if (!await _buildDirectory!.exists()) {
|
|
||||||
_buildDirectory!.create();
|
|
||||||
}
|
|
||||||
if (!await _outputDirectory!.exists()) {
|
if (!await _outputDirectory!.exists()) {
|
||||||
_outputDirectory!.create();
|
_outputDirectory!.create();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _prepareProtos() async {
|
Future<void> _prepareProtos() async {
|
||||||
if (!(await outputDirectory.exists())) {
|
if (!await outputDirectory.exists()) {
|
||||||
io.stdout.writeln('Creating output directory');
|
io.stdout.writeln('Creating output directory');
|
||||||
outputDirectory.create();
|
outputDirectory.create();
|
||||||
}
|
}
|
||||||
|
|
2
mediapipe/dart/mediapipe/.gitignore
vendored
2
mediapipe/dart/mediapipe/.gitignore
vendored
|
@ -1,6 +1,8 @@
|
||||||
# https://dart.dev/guides/libraries/private-files
|
# https://dart.dev/guides/libraries/private-files
|
||||||
# Created by `dart pub`
|
# Created by `dart pub`
|
||||||
.dart_tool/
|
.dart_tool/
|
||||||
|
lib/generated/google/*
|
||||||
|
lib/generated/mediapipe/*
|
||||||
|
|
||||||
# Avoid committing pubspec.lock for library packages; see
|
# Avoid committing pubspec.lock for library packages; see
|
||||||
# https://dart.dev/guides/libraries/private-files#pubspeclock.
|
# https://dart.dev/guides/libraries/private-files#pubspeclock.
|
||||||
|
|
10
mediapipe/dart/mediapipe/Makefile
Normal file
10
mediapipe/dart/mediapipe/Makefile
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
ffigen:
|
||||||
|
dart run ffigen --config ffigen.yaml
|
||||||
|
|
||||||
|
compile:
|
||||||
|
gcc c/text_classifier.c -o c/text_classifier
|
||||||
|
cd c && gcc -static -c -fPIC *.c -o text_classifier.o
|
||||||
|
cd c && gcc -shared -o text_classifier.dylib text_classifier.o
|
||||||
|
|
||||||
|
run:
|
||||||
|
cd c && dart text_classifier_c.dart
|
8
mediapipe/dart/mediapipe/ffigen.yaml
Normal file
8
mediapipe/dart/mediapipe/ffigen.yaml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
name: flutter_mediapipe
|
||||||
|
description: MediaPipe bindings.
|
||||||
|
|
||||||
|
output: "lib/src/third_party/generated/mediapipe_bindings.dart"
|
||||||
|
headers:
|
||||||
|
entry-points:
|
||||||
|
- "third_party/mediapipe/classification_result.h"
|
||||||
|
- "third_party/mediapipe/text_classifier.h"
|
|
@ -1,15 +1,35 @@
|
||||||
|
import 'dart:ffi' as ffi;
|
||||||
|
// TODO: This will require a web-specific solution.
|
||||||
|
import 'dart:io';
|
||||||
|
import 'package:path/path.dart' as path;
|
||||||
|
|
||||||
import '../../../generated/mediapipe/framework/calculator.pb.dart';
|
import '../../../generated/mediapipe/framework/calculator.pb.dart';
|
||||||
|
|
||||||
|
// TODO: Figure out ffi type for Maps
|
||||||
|
typedef ProcessCC = Map<String, Packet> Function(Map<String, Object> data);
|
||||||
|
typedef Process = Map<String, Packet> Function(Map<String, Object> data);
|
||||||
|
|
||||||
// TODO: Wrap C++ TaskRunner with this, similarly to this Python wrapper:
|
// TODO: Wrap C++ TaskRunner with this, similarly to this Python wrapper:
|
||||||
// https://source.corp.google.com/piper///depot/google3/third_party/mediapipe/python/framework_bindings.cc?q=python%20framework_bindings.cc
|
// https://source.corp.google.com/piper///depot/google3/third_party/mediapipe/python/framework_bindings.cc?q=python%20framework_bindings.cc
|
||||||
class TaskRunner {
|
class TaskRunner {
|
||||||
TaskRunner(this.graphConfig);
|
TaskRunner(this.graphConfig) {
|
||||||
|
var libraryPath =
|
||||||
|
path.join(Directory.current.absolute.path, 'cc', 'main.dylib');
|
||||||
|
mediaPipe = ffi.DynamicLibrary.open(libraryPath);
|
||||||
|
}
|
||||||
|
|
||||||
final CalculatorGraphConfig graphConfig;
|
final CalculatorGraphConfig graphConfig;
|
||||||
|
|
||||||
|
late ffi.DynamicLibrary mediaPipe;
|
||||||
|
|
||||||
// TODO: Actually decode this line for correct parameter type:
|
// TODO: Actually decode this line for correct parameter type:
|
||||||
// https://source.corp.google.com/piper///depot/google3/third_party/mediapipe/tasks/python/text/text_classifier.py;l=181
|
// https://source.corp.google.com/piper///depot/google3/third_party/mediapipe/tasks/python/text/text_classifier.py;l=181
|
||||||
Map<String, Packet> process(Map<String, Object> data) => {};
|
Map<String, Packet> process(Map<String, Object> data) {
|
||||||
|
throw UnimplementedError();
|
||||||
|
// final Process ccProcess =
|
||||||
|
// mediaPipe.lookup<ffi.NativeFunction<ProcessCC>>('process').asFunction();
|
||||||
|
// return ccProcess(data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Wrap C++ Packet with this, similarly to this Python wrapper:
|
// TODO: Wrap C++ Packet with this, similarly to this Python wrapper:
|
||||||
|
|
|
@ -23,6 +23,8 @@ class TextClassifier {
|
||||||
|
|
||||||
/// Configuration options for this [TextClassifier].
|
/// Configuration options for this [TextClassifier].
|
||||||
final TextClassifierOptions options;
|
final TextClassifierOptions options;
|
||||||
|
|
||||||
|
/// Configuration object passed to the [TaskRunner].
|
||||||
final TaskInfo _taskInfo;
|
final TaskInfo _taskInfo;
|
||||||
|
|
||||||
TaskRunner get taskRunner => _taskRunner!;
|
TaskRunner get taskRunner => _taskRunner!;
|
||||||
|
@ -35,11 +37,12 @@ class TextClassifier {
|
||||||
static const taskGraphName =
|
static const taskGraphName =
|
||||||
'mediapipe.tasks.text.text_classifier.TextClassifierGraph';
|
'mediapipe.tasks.text.text_classifier.TextClassifierGraph';
|
||||||
|
|
||||||
|
// TODO: Don't return protobuf objects. Instead, convert to plain Dart objects.
|
||||||
/// Performs classification on the input `text`.
|
/// Performs classification on the input `text`.
|
||||||
Future<tasks_pb.ClassificationResult> classify(String text) async {
|
Future<tasks_pb.ClassificationResult> classify(String text) async {
|
||||||
// TODO: Actually decode this line to correctly fill up this map parameter
|
// TODO: Actually decode this line to correctly fill up this map parameter
|
||||||
// https://source.corp.google.com/piper///depot/google3/third_party/mediapipe/tasks/python/text/text_classifier.py;l=181
|
// https://source.corp.google.com/piper///depot/google3/third_party/mediapipe/tasks/python/text/text_classifier.py;l=181
|
||||||
final outputPackets = taskRunner.process({});
|
final outputPackets = taskRunner.process({textInStreamName: Object()});
|
||||||
|
|
||||||
// TODO: Obviously this is not real
|
// TODO: Obviously this is not real
|
||||||
return tasks_pb.ClassificationResult.create();
|
return tasks_pb.ClassificationResult.create();
|
||||||
|
|
420
mediapipe/dart/mediapipe/lib/src/third_party/generated/mediapipe_bindings.dart
vendored
Normal file
420
mediapipe/dart/mediapipe/lib/src/third_party/generated/mediapipe_bindings.dart
vendored
Normal file
|
@ -0,0 +1,420 @@
|
||||||
|
// AUTO GENERATED FILE, DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by `package:ffigen`.
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
import 'dart:ffi' as ffi;
|
||||||
|
|
||||||
|
/// MediaPipe bindings.
|
||||||
|
class flutter_mediapipe {
|
||||||
|
/// Holds the symbol lookup function.
|
||||||
|
final ffi.Pointer<T> Function<T extends ffi.NativeType>(String symbolName)
|
||||||
|
_lookup;
|
||||||
|
|
||||||
|
/// The symbols are looked up in [dynamicLibrary].
|
||||||
|
flutter_mediapipe(ffi.DynamicLibrary dynamicLibrary)
|
||||||
|
: _lookup = dynamicLibrary.lookup;
|
||||||
|
|
||||||
|
/// The symbols are looked up with [lookup].
|
||||||
|
flutter_mediapipe.fromLookup(
|
||||||
|
ffi.Pointer<T> Function<T extends ffi.NativeType>(String symbolName)
|
||||||
|
lookup)
|
||||||
|
: _lookup = lookup;
|
||||||
|
|
||||||
|
void text_classifier_create(
|
||||||
|
TextClassifierOptions options,
|
||||||
|
) {
|
||||||
|
return _text_classifier_create(
|
||||||
|
options,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
late final _text_classifier_createPtr =
|
||||||
|
_lookup<ffi.NativeFunction<ffi.Void Function(TextClassifierOptions)>>(
|
||||||
|
'text_classifier_create');
|
||||||
|
late final _text_classifier_create = _text_classifier_createPtr
|
||||||
|
.asFunction<void Function(TextClassifierOptions)>();
|
||||||
|
|
||||||
|
ffi.Pointer<TextClassifierResult> text_classifier_classify(
|
||||||
|
ffi.Pointer<ffi.Void> classifier,
|
||||||
|
ffi.Pointer<ffi.Char> utf8_text,
|
||||||
|
) {
|
||||||
|
return _text_classifier_classify(
|
||||||
|
classifier,
|
||||||
|
utf8_text,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
late final _text_classifier_classifyPtr = _lookup<
|
||||||
|
ffi.NativeFunction<
|
||||||
|
ffi.Pointer<TextClassifierResult> Function(ffi.Pointer<ffi.Void>,
|
||||||
|
ffi.Pointer<ffi.Char>)>>('text_classifier_classify');
|
||||||
|
late final _text_classifier_classify =
|
||||||
|
_text_classifier_classifyPtr.asFunction<
|
||||||
|
ffi.Pointer<TextClassifierResult> Function(
|
||||||
|
ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Char>)>();
|
||||||
|
|
||||||
|
ffi.Pointer<TextClassifierResult> text_classifier_classify_simple(
|
||||||
|
ffi.Pointer<ffi.Char> utf8_text,
|
||||||
|
) {
|
||||||
|
return _text_classifier_classify_simple(
|
||||||
|
utf8_text,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
late final _text_classifier_classify_simplePtr = _lookup<
|
||||||
|
ffi.NativeFunction<
|
||||||
|
ffi.Pointer<TextClassifierResult> Function(
|
||||||
|
ffi.Pointer<ffi.Char>)>>('text_classifier_classify_simple');
|
||||||
|
late final _text_classifier_classify_simple =
|
||||||
|
_text_classifier_classify_simplePtr.asFunction<
|
||||||
|
ffi.Pointer<TextClassifierResult> Function(ffi.Pointer<ffi.Char>)>();
|
||||||
|
|
||||||
|
void text_classifier_close(
|
||||||
|
ffi.Pointer<ffi.Void> classifier,
|
||||||
|
) {
|
||||||
|
return _text_classifier_close(
|
||||||
|
classifier,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
late final _text_classifier_closePtr =
|
||||||
|
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>(
|
||||||
|
'text_classifier_close');
|
||||||
|
late final _text_classifier_close = _text_classifier_closePtr
|
||||||
|
.asFunction<void Function(ffi.Pointer<ffi.Void>)>();
|
||||||
|
}
|
||||||
|
|
||||||
|
final class __mbstate_t extends ffi.Union {
|
||||||
|
@ffi.Array.multi([128])
|
||||||
|
external ffi.Array<ffi.Char> __mbstate8;
|
||||||
|
|
||||||
|
@ffi.LongLong()
|
||||||
|
external int _mbstateL;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class __darwin_pthread_handler_rec extends ffi.Struct {
|
||||||
|
external ffi
|
||||||
|
.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>
|
||||||
|
__routine;
|
||||||
|
|
||||||
|
external ffi.Pointer<ffi.Void> __arg;
|
||||||
|
|
||||||
|
external ffi.Pointer<__darwin_pthread_handler_rec> __next;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class _opaque_pthread_attr_t extends ffi.Struct {
|
||||||
|
@ffi.Long()
|
||||||
|
external int __sig;
|
||||||
|
|
||||||
|
@ffi.Array.multi([56])
|
||||||
|
external ffi.Array<ffi.Char> __opaque;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class _opaque_pthread_cond_t extends ffi.Struct {
|
||||||
|
@ffi.Long()
|
||||||
|
external int __sig;
|
||||||
|
|
||||||
|
@ffi.Array.multi([40])
|
||||||
|
external ffi.Array<ffi.Char> __opaque;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class _opaque_pthread_condattr_t extends ffi.Struct {
|
||||||
|
@ffi.Long()
|
||||||
|
external int __sig;
|
||||||
|
|
||||||
|
@ffi.Array.multi([8])
|
||||||
|
external ffi.Array<ffi.Char> __opaque;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class _opaque_pthread_mutex_t extends ffi.Struct {
|
||||||
|
@ffi.Long()
|
||||||
|
external int __sig;
|
||||||
|
|
||||||
|
@ffi.Array.multi([56])
|
||||||
|
external ffi.Array<ffi.Char> __opaque;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class _opaque_pthread_mutexattr_t extends ffi.Struct {
|
||||||
|
@ffi.Long()
|
||||||
|
external int __sig;
|
||||||
|
|
||||||
|
@ffi.Array.multi([8])
|
||||||
|
external ffi.Array<ffi.Char> __opaque;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class _opaque_pthread_once_t extends ffi.Struct {
|
||||||
|
@ffi.Long()
|
||||||
|
external int __sig;
|
||||||
|
|
||||||
|
@ffi.Array.multi([8])
|
||||||
|
external ffi.Array<ffi.Char> __opaque;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class _opaque_pthread_rwlock_t extends ffi.Struct {
|
||||||
|
@ffi.Long()
|
||||||
|
external int __sig;
|
||||||
|
|
||||||
|
@ffi.Array.multi([192])
|
||||||
|
external ffi.Array<ffi.Char> __opaque;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class _opaque_pthread_rwlockattr_t extends ffi.Struct {
|
||||||
|
@ffi.Long()
|
||||||
|
external int __sig;
|
||||||
|
|
||||||
|
@ffi.Array.multi([16])
|
||||||
|
external ffi.Array<ffi.Char> __opaque;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class _opaque_pthread_t extends ffi.Struct {
|
||||||
|
@ffi.Long()
|
||||||
|
external int __sig;
|
||||||
|
|
||||||
|
external ffi.Pointer<__darwin_pthread_handler_rec> __cleanup_stack;
|
||||||
|
|
||||||
|
@ffi.Array.multi([8176])
|
||||||
|
external ffi.Array<ffi.Char> __opaque;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class Category extends ffi.Struct {
|
||||||
|
@ffi.Int()
|
||||||
|
external int index;
|
||||||
|
|
||||||
|
@ffi.Float()
|
||||||
|
external double score;
|
||||||
|
|
||||||
|
external ffi.Pointer<ffi.Char> category_name;
|
||||||
|
|
||||||
|
external ffi.Pointer<ffi.Char> display_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class Classifications extends ffi.Struct {
|
||||||
|
external ffi.Pointer<Category> categories;
|
||||||
|
|
||||||
|
@ffi.Uint32()
|
||||||
|
external int categories_count;
|
||||||
|
|
||||||
|
@ffi.Int()
|
||||||
|
external int head_index;
|
||||||
|
|
||||||
|
external ffi.Pointer<ffi.Char> head_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class ClassificationResult extends ffi.Struct {
|
||||||
|
external ffi.Pointer<Classifications> classifications;
|
||||||
|
|
||||||
|
@ffi.Uint32()
|
||||||
|
external int classifications_count;
|
||||||
|
|
||||||
|
@ffi.Int64()
|
||||||
|
external int timestamp_ms;
|
||||||
|
|
||||||
|
@ffi.Bool()
|
||||||
|
external bool has_timestamp_ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class BaseOptions extends ffi.Struct {
|
||||||
|
external ffi.Pointer<ffi.Char> model_asset_buffer;
|
||||||
|
|
||||||
|
external ffi.Pointer<ffi.Char> model_asset_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class ClassifierOptions extends ffi.Struct {
|
||||||
|
external ffi.Pointer<ffi.Char> display_names_locale;
|
||||||
|
|
||||||
|
@ffi.Int()
|
||||||
|
external int max_results;
|
||||||
|
|
||||||
|
@ffi.Float()
|
||||||
|
external double score_threshold;
|
||||||
|
|
||||||
|
external ffi.Pointer<ffi.Pointer<ffi.Char>> category_allowlist;
|
||||||
|
|
||||||
|
@ffi.Uint32()
|
||||||
|
external int category_allowlist_count;
|
||||||
|
|
||||||
|
external ffi.Pointer<ffi.Pointer<ffi.Char>> category_denylist;
|
||||||
|
|
||||||
|
@ffi.Uint32()
|
||||||
|
external int category_denylist_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class TextClassifierOptions extends ffi.Struct {
|
||||||
|
external BaseOptions base_options;
|
||||||
|
|
||||||
|
external ClassifierOptions classifier_options;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef TextClassifierResult = ClassificationResult;
|
||||||
|
|
||||||
|
const int true1 = 1;
|
||||||
|
|
||||||
|
const int false1 = 0;
|
||||||
|
|
||||||
|
const int __bool_true_false_are_defined = 1;
|
||||||
|
|
||||||
|
const int __WORDSIZE = 64;
|
||||||
|
|
||||||
|
const int __DARWIN_ONLY_64_BIT_INO_T = 1;
|
||||||
|
|
||||||
|
const int __DARWIN_ONLY_UNIX_CONFORMANCE = 1;
|
||||||
|
|
||||||
|
const int __DARWIN_ONLY_VERS_1050 = 1;
|
||||||
|
|
||||||
|
const int __DARWIN_UNIX03 = 1;
|
||||||
|
|
||||||
|
const int __DARWIN_64_BIT_INO_T = 1;
|
||||||
|
|
||||||
|
const int __DARWIN_VERS_1050 = 1;
|
||||||
|
|
||||||
|
const int __DARWIN_NON_CANCELABLE = 0;
|
||||||
|
|
||||||
|
const String __DARWIN_SUF_EXTSN = '\$DARWIN_EXTSN';
|
||||||
|
|
||||||
|
const int __DARWIN_C_ANSI = 4096;
|
||||||
|
|
||||||
|
const int __DARWIN_C_FULL = 900000;
|
||||||
|
|
||||||
|
const int __DARWIN_C_LEVEL = 900000;
|
||||||
|
|
||||||
|
const int __STDC_WANT_LIB_EXT1__ = 1;
|
||||||
|
|
||||||
|
const int __DARWIN_NO_LONG_LONG = 0;
|
||||||
|
|
||||||
|
const int _DARWIN_FEATURE_64_BIT_INODE = 1;
|
||||||
|
|
||||||
|
const int _DARWIN_FEATURE_ONLY_64_BIT_INODE = 1;
|
||||||
|
|
||||||
|
const int _DARWIN_FEATURE_ONLY_VERS_1050 = 1;
|
||||||
|
|
||||||
|
const int _DARWIN_FEATURE_ONLY_UNIX_CONFORMANCE = 1;
|
||||||
|
|
||||||
|
const int _DARWIN_FEATURE_UNIX_CONFORMANCE = 3;
|
||||||
|
|
||||||
|
const int __has_ptrcheck = 0;
|
||||||
|
|
||||||
|
const int __DARWIN_NULL = 0;
|
||||||
|
|
||||||
|
const int __PTHREAD_SIZE__ = 8176;
|
||||||
|
|
||||||
|
const int __PTHREAD_ATTR_SIZE__ = 56;
|
||||||
|
|
||||||
|
const int __PTHREAD_MUTEXATTR_SIZE__ = 8;
|
||||||
|
|
||||||
|
const int __PTHREAD_MUTEX_SIZE__ = 56;
|
||||||
|
|
||||||
|
const int __PTHREAD_CONDATTR_SIZE__ = 8;
|
||||||
|
|
||||||
|
const int __PTHREAD_COND_SIZE__ = 40;
|
||||||
|
|
||||||
|
const int __PTHREAD_ONCE_SIZE__ = 8;
|
||||||
|
|
||||||
|
const int __PTHREAD_RWLOCK_SIZE__ = 192;
|
||||||
|
|
||||||
|
const int __PTHREAD_RWLOCKATTR_SIZE__ = 16;
|
||||||
|
|
||||||
|
const int USER_ADDR_NULL = 0;
|
||||||
|
|
||||||
|
const int INT8_MAX = 127;
|
||||||
|
|
||||||
|
const int INT16_MAX = 32767;
|
||||||
|
|
||||||
|
const int INT32_MAX = 2147483647;
|
||||||
|
|
||||||
|
const int INT64_MAX = 9223372036854775807;
|
||||||
|
|
||||||
|
const int INT8_MIN = -128;
|
||||||
|
|
||||||
|
const int INT16_MIN = -32768;
|
||||||
|
|
||||||
|
const int INT32_MIN = -2147483648;
|
||||||
|
|
||||||
|
const int INT64_MIN = -9223372036854775808;
|
||||||
|
|
||||||
|
const int UINT8_MAX = 255;
|
||||||
|
|
||||||
|
const int UINT16_MAX = 65535;
|
||||||
|
|
||||||
|
const int UINT32_MAX = 4294967295;
|
||||||
|
|
||||||
|
const int UINT64_MAX = -1;
|
||||||
|
|
||||||
|
const int INT_LEAST8_MIN = -128;
|
||||||
|
|
||||||
|
const int INT_LEAST16_MIN = -32768;
|
||||||
|
|
||||||
|
const int INT_LEAST32_MIN = -2147483648;
|
||||||
|
|
||||||
|
const int INT_LEAST64_MIN = -9223372036854775808;
|
||||||
|
|
||||||
|
const int INT_LEAST8_MAX = 127;
|
||||||
|
|
||||||
|
const int INT_LEAST16_MAX = 32767;
|
||||||
|
|
||||||
|
const int INT_LEAST32_MAX = 2147483647;
|
||||||
|
|
||||||
|
const int INT_LEAST64_MAX = 9223372036854775807;
|
||||||
|
|
||||||
|
const int UINT_LEAST8_MAX = 255;
|
||||||
|
|
||||||
|
const int UINT_LEAST16_MAX = 65535;
|
||||||
|
|
||||||
|
const int UINT_LEAST32_MAX = 4294967295;
|
||||||
|
|
||||||
|
const int UINT_LEAST64_MAX = -1;
|
||||||
|
|
||||||
|
const int INT_FAST8_MIN = -128;
|
||||||
|
|
||||||
|
const int INT_FAST16_MIN = -32768;
|
||||||
|
|
||||||
|
const int INT_FAST32_MIN = -2147483648;
|
||||||
|
|
||||||
|
const int INT_FAST64_MIN = -9223372036854775808;
|
||||||
|
|
||||||
|
const int INT_FAST8_MAX = 127;
|
||||||
|
|
||||||
|
const int INT_FAST16_MAX = 32767;
|
||||||
|
|
||||||
|
const int INT_FAST32_MAX = 2147483647;
|
||||||
|
|
||||||
|
const int INT_FAST64_MAX = 9223372036854775807;
|
||||||
|
|
||||||
|
const int UINT_FAST8_MAX = 255;
|
||||||
|
|
||||||
|
const int UINT_FAST16_MAX = 65535;
|
||||||
|
|
||||||
|
const int UINT_FAST32_MAX = 4294967295;
|
||||||
|
|
||||||
|
const int UINT_FAST64_MAX = -1;
|
||||||
|
|
||||||
|
const int INTPTR_MAX = 9223372036854775807;
|
||||||
|
|
||||||
|
const int INTPTR_MIN = -9223372036854775808;
|
||||||
|
|
||||||
|
const int UINTPTR_MAX = -1;
|
||||||
|
|
||||||
|
const int INTMAX_MAX = 9223372036854775807;
|
||||||
|
|
||||||
|
const int UINTMAX_MAX = -1;
|
||||||
|
|
||||||
|
const int INTMAX_MIN = -9223372036854775808;
|
||||||
|
|
||||||
|
const int PTRDIFF_MIN = -9223372036854775808;
|
||||||
|
|
||||||
|
const int PTRDIFF_MAX = 9223372036854775807;
|
||||||
|
|
||||||
|
const int SIZE_MAX = -1;
|
||||||
|
|
||||||
|
const int RSIZE_MAX = 9223372036854775807;
|
||||||
|
|
||||||
|
const int WCHAR_MAX = 2147483647;
|
||||||
|
|
||||||
|
const int WCHAR_MIN = -2147483648;
|
||||||
|
|
||||||
|
const int WINT_MIN = -2147483648;
|
||||||
|
|
||||||
|
const int WINT_MAX = 2147483647;
|
||||||
|
|
||||||
|
const int SIG_ATOMIC_MIN = -2147483648;
|
||||||
|
|
||||||
|
const int SIG_ATOMIC_MAX = 2147483647;
|
|
@ -7,10 +7,12 @@ environment:
|
||||||
|
|
||||||
# Add regular dependencies here.
|
# Add regular dependencies here.
|
||||||
dependencies:
|
dependencies:
|
||||||
|
ffi: ^2.0.2
|
||||||
fixnum: ^1.1.0
|
fixnum: ^1.1.0
|
||||||
path: ^1.8.3
|
path: ^1.8.3
|
||||||
protobuf: ^3.0.0
|
protobuf: ^3.0.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
|
ffigen: ^9.0.1
|
||||||
lints: ^2.0.0
|
lints: ^2.0.0
|
||||||
test: ^1.21.0
|
test: ^1.21.0
|
||||||
|
|
25
mediapipe/dart/mediapipe/third_party/mediapipe/base_options.h
vendored
Normal file
25
mediapipe/dart/mediapipe/third_party/mediapipe/base_options.h
vendored
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
/* Copyright 2023 The MediaPipe Authors.
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==============================================================================*/
|
||||||
|
|
||||||
|
#ifndef THIRD_PARTY_MEDIAPIPE_TASKS_C_CORE_BASE_OPTIONS_H_
|
||||||
|
#define THIRD_PARTY_MEDIAPIPE_TASKS_C_CORE_BASE_OPTIONS_H_
|
||||||
|
|
||||||
|
// Base options for MediaPipe C Tasks.
|
||||||
|
struct BaseOptions
|
||||||
|
{
|
||||||
|
// The model asset file contents as a string.
|
||||||
|
char *model_asset_buffer;
|
||||||
|
|
||||||
|
// The path to the model asset to open and mmap in memory.
|
||||||
|
char *model_asset_path;
|
||||||
|
};
|
||||||
|
#endif // THIRD_PARTY_MEDIAPIPE_TASKS_C_CORE_BASE_OPTIONS_H_
|
35
mediapipe/dart/mediapipe/third_party/mediapipe/category.h
vendored
Normal file
35
mediapipe/dart/mediapipe/third_party/mediapipe/category.h
vendored
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
|
||||||
|
/* Copyright 2023 The MediaPipe Authors.
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==============================================================================*/
|
||||||
|
#ifndef THIRD_PARTY_MEDIAPIPE_TASKS_C_COMPONENTS_CONTAINERS_CATEGORY_H_
|
||||||
|
#define THIRD_PARTY_MEDIAPIPE_TASKS_C_COMPONENTS_CONTAINERS_CATEGORY_H_
|
||||||
|
// Defines a single classification result.
|
||||||
|
//
|
||||||
|
// The label maps packed into the TFLite Model Metadata [1] are used to populate
|
||||||
|
// the 'category_name' and 'display_name' fields.
|
||||||
|
//
|
||||||
|
// [1]: https://www.tensorflow.org/lite/convert/metadata
|
||||||
|
struct Category {
|
||||||
|
// The index of the category in the classification model output.
|
||||||
|
int index;
|
||||||
|
// The score for this category, e.g. (but not necessarily) a probability in
|
||||||
|
// [0,1].
|
||||||
|
float score;
|
||||||
|
// The optional ID for the category, read from the label map packed in the
|
||||||
|
// TFLite Model Metadata if present. Not necessarily human-readable.
|
||||||
|
char *category_name;
|
||||||
|
// The optional human-readable name for the category, read from the label map
|
||||||
|
// packed in the TFLite Model Metadata if present.
|
||||||
|
char *display_name;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // THIRD_PARTY_MEDIAPIPE_TASKS_C_COMPONENTS_CONTAINERS_CATEGORY_H_
|
62
mediapipe/dart/mediapipe/third_party/mediapipe/classification_result.h
vendored
Normal file
62
mediapipe/dart/mediapipe/third_party/mediapipe/classification_result.h
vendored
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
/* Copyright 2023 The MediaPipe Authors.
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==============================================================================*/
|
||||||
|
|
||||||
|
#ifndef THIRD_PARTY_MEDIAPIPE_TASKS_C_COMPONENTS_CONTAINERS_CLASSIFICATION_RESULT_H_
|
||||||
|
#define THIRD_PARTY_MEDIAPIPE_TASKS_C_COMPONENTS_CONTAINERS_CLASSIFICATION_RESULT_H_
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "category.h"
|
||||||
|
|
||||||
|
// Defines classification results for a given classifier head.
|
||||||
|
struct Classifications
|
||||||
|
{
|
||||||
|
// The array of predicted categories, usually sorted by descending scores,
|
||||||
|
// e.g. from high to low probability.
|
||||||
|
struct Category *categories;
|
||||||
|
|
||||||
|
// The number of elements in the categories array.
|
||||||
|
uint32_t categories_count;
|
||||||
|
|
||||||
|
// The index of the classifier head (i.e. output tensor) these categories
|
||||||
|
// refer to. This is useful for multi-head models.
|
||||||
|
int head_index;
|
||||||
|
|
||||||
|
// The optional name of the classifier head, as provided in the TFLite Model
|
||||||
|
// Metadata [1] if present. This is useful for multi-head models.
|
||||||
|
//
|
||||||
|
// [1]: https://www.tensorflow.org/lite/convert/metadata
|
||||||
|
char *head_name;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Defines classification results of a model.
|
||||||
|
struct ClassificationResult
|
||||||
|
{
|
||||||
|
// The classification results for each head of the model.
|
||||||
|
struct Classifications *classifications;
|
||||||
|
|
||||||
|
// The number of classifications in the classifications array.
|
||||||
|
uint32_t classifications_count;
|
||||||
|
|
||||||
|
// The optional timestamp (in milliseconds) of the start of the chunk of data
|
||||||
|
// corresponding to these results.
|
||||||
|
//
|
||||||
|
// This is only used for classification on time series (e.g. audio
|
||||||
|
// classification). In these use cases, the amount of data to process might
|
||||||
|
// exceed the maximum size that the model can process: to solve this, the
|
||||||
|
// input data is split into multiple chunks starting at different timestamps.
|
||||||
|
int64_t timestamp_ms;
|
||||||
|
|
||||||
|
// Specifies whether the timestamp contains a valid value.
|
||||||
|
bool has_timestamp_ms;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // THIRD_PARTY_MEDIAPIPE_TASKS_C_COMPONENTS_CONTAINERS_CLASSIFICATION_RESULT_H_
|
48
mediapipe/dart/mediapipe/third_party/mediapipe/classifier_options.h
vendored
Normal file
48
mediapipe/dart/mediapipe/third_party/mediapipe/classifier_options.h
vendored
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
/* Copyright 2023 The MediaPipe Authors.
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==============================================================================*/
|
||||||
|
|
||||||
|
#ifndef THIRD_PARTY_MEDIAPIPE_TASKS_C_COMPONENTS_PROCESSORS_CLASSIFIER_OPTIONS_H_
|
||||||
|
#define THIRD_PARTY_MEDIAPIPE_TASKS_C_COMPONENTS_PROCESSORS_CLASSIFIER_OPTIONS_H_
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
// Classifier options for MediaPipe C classification Tasks.
|
||||||
|
struct ClassifierOptions {
|
||||||
|
// The locale to use for display names specified through the TFLite Model
|
||||||
|
// Metadata, if any. Defaults to English.
|
||||||
|
char *display_names_locale;
|
||||||
|
|
||||||
|
// The maximum number of top-scored classification results to return. If < 0,
|
||||||
|
// all available results will be returned. If 0, an invalid argument error is
|
||||||
|
// returned.
|
||||||
|
int max_results;
|
||||||
|
|
||||||
|
// Score threshold to override the one provided in the model metadata (if
|
||||||
|
// any). Results below this value are rejected.
|
||||||
|
float score_threshold;
|
||||||
|
|
||||||
|
// The allowlist of category names. If non-empty, detection results whose
|
||||||
|
// category name is not in this set will be filtered out. Duplicate or unknown
|
||||||
|
// category names are ignored. Mutually exclusive with category_denylist.
|
||||||
|
char **category_allowlist;
|
||||||
|
|
||||||
|
// The number of elements in the category allowlist.
|
||||||
|
uint32_t category_allowlist_count;
|
||||||
|
|
||||||
|
// The denylist of category names. If non-empty, detection results whose
|
||||||
|
// category name is in this set will be filtered out. Duplicate or unknown
|
||||||
|
// category names are ignored. Mutually exclusive with category_allowlist.
|
||||||
|
char **category_denylist;
|
||||||
|
|
||||||
|
// The number of elements in the category denylist.
|
||||||
|
uint32_t category_denylist_count;
|
||||||
|
};
|
||||||
|
#endif // THIRD_PARTY_MEDIAPIPE_TASKS_C_COMPONENTS_PROCESSORS_CLASSIFIER_OPTIONS_H_
|
43
mediapipe/dart/mediapipe/third_party/mediapipe/text_classifier.h
vendored
Normal file
43
mediapipe/dart/mediapipe/third_party/mediapipe/text_classifier.h
vendored
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
/* Copyright 2023 The MediaPipe Authors.
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==============================================================================*/
|
||||||
|
#ifndef THIRD_PARTY_MEDIAPIPE_TASKS_C_TEXT_TEXT_CLASSIFIER_TEXT_CLASSIFIER_H_
|
||||||
|
#define THIRD_PARTY_MEDIAPIPE_TASKS_C_TEXT_TEXT_CLASSIFIER_TEXT_CLASSIFIER_H_
|
||||||
|
#include "base_options.h"
|
||||||
|
#include "classification_result.h"
|
||||||
|
#include "classifier_options.h"
|
||||||
|
|
||||||
|
typedef struct ClassificationResult TextClassifierResult;
|
||||||
|
|
||||||
|
// The options for configuring a MediaPipe text classifier task.
|
||||||
|
struct TextClassifierOptions {
|
||||||
|
// Base options for configuring MediaPipe Tasks, such as specifying the model
|
||||||
|
// file with metadata, accelerator options, op resolver, etc.
|
||||||
|
struct BaseOptions base_options;
|
||||||
|
// Options for configuring the classifier behavior, such as score threshold,
|
||||||
|
// number of results, etc.
|
||||||
|
struct ClassifierOptions classifier_options;
|
||||||
|
};
|
||||||
|
|
||||||
|
// void *text_classifier_options_create();
|
||||||
|
|
||||||
|
// Creates a TextClassifier from the provided `options`.
|
||||||
|
void *text_classifier_create(struct TextClassifierOptions *options);
|
||||||
|
|
||||||
|
// Performs classification on the input `text`.
|
||||||
|
TextClassifierResult *text_classifier_classify(void *classifier,
|
||||||
|
char *utf8_text);
|
||||||
|
|
||||||
|
// Shuts down the TextClassifier when all the work is done. Frees all memory.
|
||||||
|
void text_classifier_close(void *classifier);
|
||||||
|
void text_classifier_result_close(TextClassifierResult *result);
|
||||||
|
|
||||||
|
#endif // THIRD_PARTY_MEDIAPIPE_TASKS_C_TEXT_TEXT_CLASSIFIER_TEXT_CLASSIFIER_H_
|
Loading…
Reference in New Issue
Block a user