ShapedSdkCamera
Descrição
O ShapedSdkCamera é um componente Flutter para captura de imagens e detecção de poses corporais. Ele permite capturar imagens de um usuário enquanto valida a postura e fornece feedback baseado na posição do corpo.
Instalação
Para utilizar o ShapedSdkCamera, adicione o plugin ao seu projeto Flutter. No seu pubspec.yaml, adicione:
dependencies:
shaped_plugin: ^0.1.7
Dentro do seu projeto no arquivo local.properties, adicione suas credenciais disponibilizadas pelo administrador para garantir que as dependências privadas sejam resolvidas corretamente:
GITHUB_USER=seu_usuario
GITHUB_TOKEN=seu_token
Outro passo é a configuração para utilizar o ShapedSdkCamera no IOS, para isso vá até seu PodFile e cole o trecho a seguir, pode ser logo após platform :ios, 'xx.x':
use_simulator = ENV["USE_SIMULATOR"] == "true"
cocoapods_source = "https://cdn.cocoapods.org/"
shaped_source = use_simulator ?
"https://github.com/shapeddev/shaped-sdk-ios-specs-emulator.git" :
"https://github.com/shapeddev/shaped-sdk-ios-specs.git"
source cocoapods_source
source shaped_source
Em seguida, execute:
flutter pub get
Permissões Necessárias
Para utilizar a câmera, adicione as seguintes permissões nos arquivos de configuração do seu projeto:
Android
No arquivo AndroidManifest.xml, adicione:
<uses-permission android:name="android.permission.CAMERA"/>
iOS
No arquivo Info.plist (localizado em ios/Runner/Info.plist), adicione:
<key>NSCameraUsageDescription</key>
<string>Este aplicativo precisa acessar a câmera para capturar imagens.</string>
Uso
Importação
No seu arquivo Dart, importe o pacote:
import 'package:shaped_plugin/shaped_plugin.dart';
Exemplo de Implementação
Abaixo, um exemplo de como utilizar o ShapedSdkCamera dentro de um StatefulWidget:
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:shaped_plugin/shaped_plugin.dart';
class CameraPage extends StatefulWidget {
@override
_CameraPageState createState() => _CameraPageState();
}
class _CameraPageState extends State<CameraPage> {
bool _frontalValidation = true;
List<Uint8List> _capturedImages = [];
void _handleImages(List<Uint8List> capturedImages, bool frontalValidation) {
setState(() {
_capturedImages = capturedImages;
_frontalValidation = frontalValidation;
});
}
Future<void> _changeFrontalValidation(bool frontalValidation) async {
setState(() {
_frontalValidation = frontalValidation;
});
}
void _handleErrors(List<String> errors, int? countdown) {
print("Erros detectados: $errors");
}
void _onValidateDeviceLevel(bool validLevel) {
if (!validLevel) {
print("Dispositivo não está nivelado corretamente.");
}
}
Future<dynamic> showDialogCustom(
String description,
String labelButton,
void Function() clickButton,
bool barrierDismissible,
bool buttonWide,
) async {
return showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text(description),
actions: [
TextButton(onPressed: clickButton, child: Text(labelButton)),
],
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Detecção Corporal")),
body: Center(
child: ShapedSdkCamera(
frontalValidation: _frontalValidation,
capturedImages: _capturedImages,
onImagesCaptured: _handleImages,
onChangeFrontalValidation: _changeFrontalValidation,
onDeviceLevel: _onValidateDeviceLevel,
onErrorsImage: _handleErrors,
showDialog: showDialogCustom,
),
),
);
}
}
Parâmetros do ShapedSdkCamera
| Parâmetro | Tipo | Descrição |
|---|---|---|
frontalValidation |
bool |
Define se a validação frontal está ativada. |
capturedImages |
List<Uint8List> |
Lista de imagens capturadas. |
onImagesCaptured |
Function(List<Uint8List>, bool) |
Callback acionado ao capturar imagens. |
onChangeFrontalValidation |
Future<void> Function(bool) |
Callback acionado quando há mudança na validação frontal. |
onDeviceLevel |
Function(bool) |
Callback para informar se o dispositivo está nivelado. |
onErrorsImage |
Function(List<String>, int?) |
Callback acionado ao detectar erros na captura. |
showDialog |
Future<dynamic> Function(String, String, void Function(), bool, bool) |
Função para exibir diálogos personalizados. |
currentLocale |
String? |
Idioma a ser usado pelo módulo nativo (ex: "pt-BR", "pt", "en-US", "en", "es-ES", "es", "pt-PT"). Te como default "pt-BR" |
Lista de Erros Possíveis
Os seguintes erros podem ser retornados pelo onErrorsImage:
const List<String> errorKeys = [
'faceNotDetected', // Caminhe para trás, enquadrando o corpo inteiro
'leftHandNotDetected', // Mão esquerda não está aparecendo na imagem
'rightHandNotDetected', // Mão direita não está aparecendo na imagem
'leftFootNotDetected', // Pé esquerdo não está aparecendo na imagem
'rightFootNotDetected', // Pé direito não está aparecendo na imagem
'angleNotDetected', // Ajuste sua postura
'armsBelow', // Levante os braços
'armsTop', // Abaixe os braços
'legsOpen', // Aproxime as pernas
'legsClosed', // Afaste as pernas
'rightArmTop', // Abaixe o braço direito
'rightArmBelow', // Levante o braço direito
'leftArmTop', // Abaixe o braço esquerdo
'leftArmBelow', // Levante o braço direito
'verifyVolumeSetting', // Por favor verifique o volume do dispositivo (mensagem de aviso, não é erro)
'personIsFar', // Aproxime-se da câmera
'deviceLevelInvalid', // Afaste o ângulo do seu device
'approachLegsOnSide', // Aproxime as pernas mantendo a esquerda não visível
'leftHandTopRightHandBelow', // Abaixe o braço esquerdo e levante o braço direito
];
Configuração para utilizar o ShapedSdkCamera em ambiente de desenvolvimento mockado
Durante o desenvolvimento, é possível utilizar uma versão mockada da SDK, que simula a captura de imagens e a detecção de pose corporal sem precisar da câmera real ou de um dispositivo físico.
Esse modo é ideal para testes em simuladores iOS e para desenvolvimento de interface sem dependência do hardware.
O comportamento é controlado pela variável de ambiente USE_SIMULATOR.
🍎 iOS
No arquivo ios/Podfile, adicione o seguinte trecho logo após platform :ios, 'xx.x':
use_simulator = ENV["USE_SIMULATOR"] == "true"
cocoapods_source = "https://cdn.cocoapods.org/"
shaped_source = use_simulator ?
"https://github.com/shapeddev/shaped-sdk-ios-specs-emulator.git" :
"https://github.com/shapeddev/shaped-sdk-ios-specs.git"
source cocoapods_source
source shaped_source
Em seguida, execute um dos comandos abaixo:
# ✅ Para modo mockado (simulador)
USE_SIMULATOR=true cd ios && pod install
# 🚀 Para modo real (produção)
unset USE_SIMULATOR && cd ios && pod install
🤖 Android
No Android, a variável USE_SIMULATOR também pode ser usada para indicar o ambiente.
Ela pode ser definida em qualquer um dos seguintes locais:
-
Nas variáveis de ambiente do Flutter:
USE_SIMULATOR=true flutter run -
Ou no arquivo
android/local.properties:USE_SIMULATOR=true
Considerações Finais
O ShapedSdkCamera fornece uma interface robusta para captura e validação de imagens corporais, podendo ser facilmente integrado a qualquer projeto Flutter. Certifique-se de conceder as permissões necessárias para a câmera antes de usá-lo.