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
|
||||
# Created by `dart pub`
|
||||
.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'),
|
||||
);
|
||||
|
||||
_buildDirectory = io.Directory(
|
||||
path.join(
|
||||
io.Directory.current.parent.parent.parent.parent.absolute.path,
|
||||
'build',
|
||||
),
|
||||
);
|
||||
|
||||
_outputDirectory = options.outputPath != null
|
||||
? io.Directory(options.outputPath!)
|
||||
: io.Directory(
|
||||
|
@ -67,12 +60,11 @@ class DartProtoBuilder {
|
|||
io.Directory get mediapipeDir => _mediapipeDir!;
|
||||
io.Directory? _mediapipeDir;
|
||||
|
||||
io.Directory get buildDirectory => _buildDirectory!;
|
||||
io.Directory? _buildDirectory;
|
||||
|
||||
/// Directory to place compiled protobufs.
|
||||
io.Directory get outputDirectory => _outputDirectory!;
|
||||
io.Directory? _outputDirectory;
|
||||
|
||||
/// Location of this command.
|
||||
io.Directory get dartBuilderDirectory => _dartBuilderDirectory!;
|
||||
io.Directory? _dartBuilderDirectory;
|
||||
|
||||
|
@ -100,7 +92,7 @@ class DartProtoBuilder {
|
|||
[ansi.green],
|
||||
),
|
||||
);
|
||||
// await _buildProtos();
|
||||
await _buildProtos();
|
||||
await _buildBarrelFiles();
|
||||
}
|
||||
|
||||
|
@ -228,16 +220,13 @@ class DartProtoBuilder {
|
|||
).absolute.path;
|
||||
|
||||
Future<void> _confirmOutputDirectories() async {
|
||||
if (!await _buildDirectory!.exists()) {
|
||||
_buildDirectory!.create();
|
||||
}
|
||||
if (!await _outputDirectory!.exists()) {
|
||||
_outputDirectory!.create();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _prepareProtos() async {
|
||||
if (!(await outputDirectory.exists())) {
|
||||
if (!await outputDirectory.exists()) {
|
||||
io.stdout.writeln('Creating output directory');
|
||||
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
|
||||
# Created by `dart pub`
|
||||
.dart_tool/
|
||||
lib/generated/google/*
|
||||
lib/generated/mediapipe/*
|
||||
|
||||
# Avoid committing pubspec.lock for library packages; see
|
||||
# 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';
|
||||
|
||||
// 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:
|
||||
// https://source.corp.google.com/piper///depot/google3/third_party/mediapipe/python/framework_bindings.cc?q=python%20framework_bindings.cc
|
||||
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;
|
||||
|
||||
late ffi.DynamicLibrary mediaPipe;
|
||||
|
||||
// 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
|
||||
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:
|
||||
|
|
|
@ -23,6 +23,8 @@ class TextClassifier {
|
|||
|
||||
/// Configuration options for this [TextClassifier].
|
||||
final TextClassifierOptions options;
|
||||
|
||||
/// Configuration object passed to the [TaskRunner].
|
||||
final TaskInfo _taskInfo;
|
||||
|
||||
TaskRunner get taskRunner => _taskRunner!;
|
||||
|
@ -35,11 +37,12 @@ class TextClassifier {
|
|||
static const taskGraphName =
|
||||
'mediapipe.tasks.text.text_classifier.TextClassifierGraph';
|
||||
|
||||
// TODO: Don't return protobuf objects. Instead, convert to plain Dart objects.
|
||||
/// Performs classification on the input `text`.
|
||||
Future<tasks_pb.ClassificationResult> classify(String text) async {
|
||||
// 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
|
||||
final outputPackets = taskRunner.process({});
|
||||
final outputPackets = taskRunner.process({textInStreamName: Object()});
|
||||
|
||||
// TODO: Obviously this is not real
|
||||
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.
|
||||
dependencies:
|
||||
ffi: ^2.0.2
|
||||
fixnum: ^1.1.0
|
||||
path: ^1.8.3
|
||||
protobuf: ^3.0.0
|
||||
|
||||
dev_dependencies:
|
||||
ffigen: ^9.0.1
|
||||
lints: ^2.0.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