Commit f68a09f9 authored by Boteju W.J.M.'s avatar Boteju W.J.M.

09/22

parents 3cc11667 9eb0cb79
Pipeline #1583 failed with stages
......@@ -168,5 +168,3 @@ STATICFILES_DIRS = [
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
class Dog {
String breed;
String image;
//final File image;
Dog(this.breed, this.image);
}
\ No newline at end of file
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:flutter/cupertino.dart';
......@@ -8,8 +9,12 @@ import 'package:flutter/src/widgets/basic.dart';
import 'package:flutter/src/widgets/container.dart';
import 'package:image_picker/image_picker.dart';
import 'package:video_player/video_player.dart';
import 'package:http/http.dart' as http;
import 'package:path_provider/path_provider.dart';
import '../../constants.dart';
import 'dog_details_screen.dart';
import 'Dog.dart';
class DogBreedIdentification extends StatefulWidget {
......@@ -18,18 +23,58 @@ class DogBreedIdentification extends StatefulWidget {
}
class _DogBreedIdentificationState extends State<DogBreedIdentification> {
Dog dog;
PickedFile _imageFile;
dynamic _pickImageError;
bool isVideo = false;
VideoPlayerController _controller;
VideoPlayerController _toBeDisposed;
String _retrieveDataError;
bool _isLoading = false;
bool _isDone = false;
final ImagePicker _picker = ImagePicker();
final TextEditingController maxWidthController = TextEditingController();
final TextEditingController maxHeightController = TextEditingController();
final TextEditingController qualityController = TextEditingController();
Future<Map> _predictBreed(File image) async {
print('image path' + image.path);
setState(() {
_isLoading = true;
});
final String apiUrl = "https://dog-breed.codeylab.com/predict";
var request = http.MultipartRequest('POST', Uri.parse(apiUrl));
request.files.add(await http.MultipartFile.fromPath('file', image.path));
var streamedResponse = await request.send();
var response = await http.Response.fromStream(streamedResponse);
if (response.statusCode != 200) {
// pop error
}
setState(() {
_isLoading = false;
_isDone = true;
});
final Map<String, dynamic> data = json.decode(response.body);
print(data['name']);
//Navigator.pushNamed(context, '/details');
Navigator.push(context, MaterialPageRoute(
builder: (context) => DogDetails(),
settings: RouteSettings(
arguments: data,
),
));
// return data;
}
Future navigateToDogDetails(context) async {
//Navigator.of(context).pushReplacementNamed('/details');
// Navigator.pushNamed(context, '/details');
// Get.toNamed('/details');
}
Future<void> _showChoiceDialog(BuildContext context){
return showDialog(
context: context,
......@@ -93,37 +138,45 @@ class _DogBreedIdentificationState extends State<DogBreedIdentification> {
await _controller.setVolume(1.0);
}
await _controller.initialize();
await _controller.setLooping(true);
await _controller.setLooping(false);
await _controller.play();
setState(() {});
}
}
Future<File> moveFile(File sourceFile, String newPath) async {
final newFile = await sourceFile.copy(newPath);
return newFile;
}
void _onImageButtonPressed(ImageSource source, {BuildContext context}) async {
Navigator.of(context, rootNavigator: true).pop();
Navigator.of(context).pop();
if (_controller != null) {
await _controller.setVolume(0.0);
}
PickedFile file;
File predictFile;
if (isVideo) {
final PickedFile file = await _picker.getVideo(
file = await _picker.getVideo(
source: source,
maxDuration: const Duration(seconds: 10)
);
final File tempfile = File(file.path);
Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;
predictFile = await moveFile(tempfile, tempPath + 'video.mp4');
await _playVideo(file);
} else {
try {
final pickedFile = await _picker.getImage(
source: source,
);
setState(() {
_imageFile = pickedFile;
});
} catch (e) {
file = await _picker.getImage(source: source, imageQuality: 50);
predictFile = File(file.path);
setState(() {
_pickImageError = e;
_imageFile = file;
});
}
}
await _predictBreed(predictFile);
}
@override
......@@ -178,10 +231,9 @@ class _DogBreedIdentificationState extends State<DogBreedIdentification> {
if (kIsWeb) {
// Why network?
// See https://pub.dev/packages/image_picker#getting-ready-for-the-web-platform
print(1);
return Image.network(_imageFile.path);
} else {
print(2);
print(_imageFile.path);
return Image.file(File(_imageFile.path), width: 400, height: 400);
}
} else if (_pickImageError != null) {
......@@ -279,7 +331,7 @@ class _DogBreedIdentificationState extends State<DogBreedIdentification> {
)
: (isVideo ? _previewVideo() : _previewImage()),
),
RaisedButton(onPressed: () {
!_isLoading ? RaisedButton(onPressed: () {
_showChoiceDialog(context);
},
child: Text(
......@@ -292,6 +344,7 @@ class _DogBreedIdentificationState extends State<DogBreedIdentification> {
color: kPrimaryGreenColor,
padding: EdgeInsets.fromLTRB(50, 15, 50, 15),
)
: CircularProgressIndicator(),
],
),
),
......
......@@ -13,9 +13,17 @@ class _DogDetailsState extends State<DogDetails> {
final GlobalKey<FormBuilderState> _fbKey = GlobalKey<FormBuilderState>();
var genderOptions = ['Male', 'Female'];
TextEditingController breedController = new TextEditingController();
TextEditingController nameController = new TextEditingController();
String selectedgender;
String selectedDate;
TextEditingController dateController = new TextEditingController();
@override
Widget build(BuildContext context) {
final Map<String, dynamic> data = ModalRoute.of(context).settings.arguments;
breedController.text = data['name'];
final String imageUrl = 'https://dog-breed.codeylab.com/upload/' + data['image'];
return Scaffold(
body: Center(
child: Container(
......@@ -33,12 +41,10 @@ class _DogDetailsState extends State<DogDetails> {
),
),
SizedBox(height: 1),
Text(
'Image Here',
style: TextStyle(
color: kTextMediumColor,
fontSize: 18,
),
Image(
image: NetworkImage(imageUrl),
height: 150,
width: 150,
),
SizedBox(height: 1),
Container(
......@@ -51,6 +57,7 @@ class _DogDetailsState extends State<DogDetails> {
children: [
FormBuilderTextField(
attribute: "name",
controller: nameController,
style: TextStyle(color: kBackgroundColor),
decoration: InputDecoration(labelText: "Name", labelStyle: TextStyle(color: kBackgroundColor)),
validators: [
......@@ -59,6 +66,7 @@ class _DogDetailsState extends State<DogDetails> {
),
FormBuilderTextField(
attribute: "breed",
controller: breedController,
style: TextStyle(color: kBackgroundColor),
decoration: InputDecoration(labelText: "Breed", labelStyle: TextStyle(color: kBackgroundColor)),
validators: [
......@@ -76,6 +84,11 @@ class _DogDetailsState extends State<DogDetails> {
value: gender,
child: Text('$gender', style: TextStyle(color: kBackgroundColor)),
)).toList(),
onChanged: (gender) {
setState(() {
selectedgender = gender;
});
},
allowClear: true,
),
FormBuilderDateTimePicker(
......@@ -85,6 +98,12 @@ class _DogDetailsState extends State<DogDetails> {
inputType: InputType.date,
initialDate: DateTime.now(),
format: DateFormat("yyyy-MM-dd"),
controller: dateController,
onChanged: (dateController) {
setState(() {
selectedDate = dateController.toString();
});
},
validators: [
FormBuilderValidators.required()
],
......@@ -103,7 +122,13 @@ class _DogDetailsState extends State<DogDetails> {
),
color: kPrimaryGreenColor,
padding: EdgeInsets.fromLTRB(50, 15, 50, 15),
onPressed: () => null,
onPressed: () => {
print(imageUrl),
print(nameController.text),
print(breedController.text),
print(selectedgender),
print(selectedDate)
},
),
],
),
......
import 'package:flutter/material.dart';
class Test extends StatefulWidget {
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
@override
Widget build(BuildContext context) {
return Container(
child: Text('hellooo'),
);
}
}
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class Test2 extends StatefulWidget {
@override
_Test2State createState() => _Test2State();
}
class _Test2State extends State<Test2> {
@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: RaisedButton(
child: Text('press'),
onPressed: () => {
Navigator.pushNamed(context, '/breed')
}
),
),
);
}
}
......@@ -9,3 +9,4 @@ const kTextLightColor = Color(0xFFACB1C0);
const kPrimaryColor = Color(0xFF388E3C);
const kBackgroundColor = Color(0xFFFCFCFC);
const kInactiveChartColor = Color(0xFFEAECEF);
const kPrimaryGreenColor = Color(0xFF55BD8B);
\ No newline at end of file
import 'package:flutter/material.dart';
import 'package:fitnessapp/Screens/WalkingPatternRecognition/home_page.dart';
// import 'package:fitnessapp/Screens/Login/login_screen.dart';
import 'Screens/DogBreedRecognition/dog_breed_identification_screen.dart';
import 'Screens/DogBreedRecognition/dog_details_screen.dart';
import 'Screens/DogBreedRecognition/test2.dart';
import 'package:fitnessapp/constants.dart';
void main() => runApp(MyApp());
......@@ -16,7 +17,14 @@ class MyApp extends StatelessWidget {
scaffoldBackgroundColor: Colors.white,
),
debugShowCheckedModeBanner: false,
home: HomePage(),
//home: HomePage(),
//home: MonthlyDetailsScreen(),
//initialRoute: '/',
home: Test2(),
routes: {
'/details': (context) => DogDetails(),
'/breed': (context) => DogBreedIdentification(),
},
);
}
}
This diff is collapsed.
......@@ -17,6 +17,11 @@ environment:
sdk: ">=2.6.0 <3.0.0"
dependencies:
image_picker: ^0.6.7+7
video_player: ^0.10.12+2
flutter_form_builder: ^3.13.5
get:
path_provider: ^1.6.16
flutter:
sdk: flutter
......@@ -30,7 +35,7 @@ dependencies:
http: ^0.12.1
jiffy: ^3.0.1
quiver: ^2.1.3
flutter_spinkit: "^4.1.2"
flutter_spinkit: ^4.1.2
dev_dependencies:
flutter_test:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment