From 90b44a658197d3dc75e8f0dd88544ec0374277d5 Mon Sep 17 00:00:00 2001 From: Maciej Czajka Date: Fri, 27 Jan 2023 22:46:56 +0100 Subject: [PATCH] update iOS app --- .../UserInterfaceState.xcuserstate | Bin 70299 -> 44261 bytes .../LicensePlates/Another/ImagePicker.swift | 98 ------- .../LicensePlates/Controller/Api.swift | 18 -- .../LicensePlates/Data/PlatesList.swift | 3 - .../LicensePlates/View/ContentView.swift | 260 ++++++++---------- .../LicensePlates/View/MenuView.swift | 42 ++- .../LicensePlates/View/PlatesListView.swift | 62 +---- 7 files changed, 159 insertions(+), 324 deletions(-) diff --git a/App/LicensePlates/LicensePlates.xcodeproj/project.xcworkspace/xcuserdata/maciej.xcuserdatad/UserInterfaceState.xcuserstate b/App/LicensePlates/LicensePlates.xcodeproj/project.xcworkspace/xcuserdata/maciej.xcuserdatad/UserInterfaceState.xcuserstate index 5f488ace880f315dbca8a81d84fa0a35ef1630f8..c95ddba28cfe768b9b87a2656fe00373a6988657 100644 GIT binary patch literal 44261 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 literal 70299 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%0AXF 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 -> UIImagePickerController { -// -// let imagePicker = UIImagePickerController() -// imagePicker.allowsEditing = false -// imagePicker.sourceType = sourceType -// imagePicker.delegate = context.coordinator -// -// return imagePicker -// } -// -// func updateUIViewController(_ uiViewController: UIImagePickerController, context: UIViewControllerRepresentableContext) { -// -// } -// -// func makeCoordinator() -> Coordinator { -// Coordinator(self) -// } -// -// final class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate { -// -// var parent: CameraPicker -// -// init(_ parent: CameraPicker) { -// self.parent = parent -// } -// -// func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { -// -// if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { -// parent.selectedImage.append(image) -// } -// -// parent.presentationMode.wrappedValue.dismiss() -// } -// } -//} -// -//struct ImagePicker: UIViewControllerRepresentable { -// func makeCoordinator() -> Coordinator { -// return ImagePicker.Coordinator(self) -// } -// -// -// @Binding var images: [UIImage] -// @Binding var picker: Bool -// -// func makeUIViewController(context: Context) -> PHPickerViewController { -// var config = PHPickerConfiguration() -// config.filter = .images -// config.selectionLimit = 0 -// let picker = PHPickerViewController(configuration: config) -// picker.delegate = context.coordinator -// return picker -// } -// -// func updateUIViewController(_ uiViewController: PHPickerViewController, context: Context) { -// // nop -// } -// -// class Coordinator: NSObject, PHPickerViewControllerDelegate { -// let parent: ImagePicker -// -// init(_ parent1: ImagePicker) { -// self.parent = parent1 -// } -// -// func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { -// parent.picker.toggle() -// for img in results { -// if img.itemProvider.canLoadObject(ofClass: UIImage.self) { -// img.itemProvider.loadObject(ofClass: UIImage.self) { (image, error) in -// guard let image1 = image else { -// print(error) -// return -// } -//// DispatchQueue.main.async { -//// self.parent.images.append(image as! UIImage) -//// } -// self.parent.images.append(image as! UIImage) -// -// } -// } else { -// print("cannot be loaded") -// } -// } -// } -// } -//} - - diff --git a/App/LicensePlates/LicensePlates/Controller/Api.swift b/App/LicensePlates/LicensePlates/Controller/Api.swift index 4401f7e..b0a068e 100644 --- a/App/LicensePlates/LicensePlates/Controller/Api.swift +++ b/App/LicensePlates/LicensePlates/Controller/Api.swift @@ -61,10 +61,6 @@ class Api { ResponseData.shared.imageData = new_image PlatesList.shared.imagesList.append(LicensePlateItem(image: new_image)) - // using UserDefaults -// PlatesList.shared.imagesBase64List.append(myUIImage!.base64!) -// UserDefaults.standard.set(PlatesList.shared.imagesBase64List, forKey: "platesList") - ResponseData.shared.uiImageData = myUIImage! self.getPlatsNumberResponse(image: image) { res in if res == true { @@ -105,9 +101,6 @@ class Api { let allReplies = try JSONDecoder().decode(PlatesNumberItem.self, from: jsonData!) if allReplies.platesNumber != ["None"] { -// responseData = responseData.replacingOccurrences(of: "b'", with: "") -// responseData = String(responseData.replacingOccurrences(of: "\'", with: "")) -// responseData = responseData.fixedBase64Format for n in allReplies.platesNumber { PlatesList.shared.platesNumberList.append(n) @@ -115,17 +108,6 @@ class Api { UserDefaults.standard.set(PlatesList.shared.platesNumberList, forKey: "platesList") -// let myUIImage = responseData.imageFromBase64 - -// let image = Image(uiImage: myUIImage!) -// ResponseData.shared.imageData = image -// PlatesList.shared.imagesList.append(LicensePlateItem(image: image)) - - // using UserDefaults -// PlatesList.shared.imagesBase64List.append(myUIImage!.base64!) -// UserDefaults.standard.set(PlatesList.shared.imagesBase64List, forKey: "platesList") - -// ResponseData.shared.uiImageData = myUIImage! completion(true) } else { completion(false) diff --git a/App/LicensePlates/LicensePlates/Data/PlatesList.swift b/App/LicensePlates/LicensePlates/Data/PlatesList.swift index c694661..a29b5b6 100644 --- a/App/LicensePlates/LicensePlates/Data/PlatesList.swift +++ b/App/LicensePlates/LicensePlates/Data/PlatesList.swift @@ -12,8 +12,5 @@ class PlatesList : ObservableObject { @Published var imagesList: [LicensePlateItem] = [LicensePlateItem]() @Published var platesNumberList: [String] = UserDefaults.standard.stringArray(forKey: "platesList") ?? [String]() - // using UserDefaults -// @Published var imagesBase64List: [String] = UserDefaults.standard.stringArray(forKey: "platesList") ?? [String]() - static let shared = PlatesList() } diff --git a/App/LicensePlates/LicensePlates/View/ContentView.swift b/App/LicensePlates/LicensePlates/View/ContentView.swift index 7715ed4..cf36b02 100644 --- a/App/LicensePlates/LicensePlates/View/ContentView.swift +++ b/App/LicensePlates/LicensePlates/View/ContentView.swift @@ -26,130 +26,120 @@ struct ContentView: View { private let apiManager = Api() var body: some View { - ZStack { - NavigationView { - VStack { - NavigationLink(destination: ResultView(), tag: "Success", selection: $selection) { EmptyView() } - Spacer() - if image != nil { - HStack { - Spacer() - image?.resizable() - .scaledToFit() - .cornerRadius(10) - .padding(.bottom, 10) - .onTapGesture { - openCamera() - } - Image(systemName: "minus.circle") - .foregroundColor(Color(.red)) - .padding(5) - .onTapGesture { - withAnimation(.easeOut) { - image = nil - inputImage = nil - disabledButton = true - } - } - Spacer() - } - } else { - HStack { - Spacer() - VStack { - Image(systemName: "plus.circle.fill") - .font(.system(size: 40)) - .foregroundColor(Color(colorScheme == .dark ? .white : .black)) - .padding(.top, 5) - .onTapGesture { - self.showingImagePicker = true - } - .padding() - Text("Choose a photo\n from the library") - .multilineTextAlignment(.center) - - } - - Spacer() - - VStack { - Image(systemName: "camera.fill") - .font(.system(size: 40)) - .foregroundColor(Color(colorScheme == .dark ? .white : .black)) - .padding(.top, 5) - .onTapGesture { - isPresented.toggle() - } - .padding() - Text("Take a photo\n with a camera") - .multilineTextAlignment(.center) - } - - Spacer() - } - .padding() - } - - if disabledButton == false { - Button { - wait.wait = true - apiManager.getImageResponse(image: inputImage!.base64!) { res in - if res == true { - selection = "Success" - wait.wait = false - image = nil - inputImage = nil - disabledButton = true - } else { - wait.wait = false - notDetected.toggle() - image = nil - inputImage = nil - disabledButton = true - } - } - } label: { - Text("Detect license plate") - } - .disabled(disabledButton) - .padding(.horizontal, 30) - .padding(.vertical, 5) -// .background(Color(colorScheme == .dark ? .white : .black)) - .cornerRadius(40) - .foregroundColor(Color(colorScheme == .dark ? .white : .black)) - .padding(5) - .overlay(RoundedRectangle(cornerRadius: 40).stroke(Color(colorScheme == .dark ? .white : .black), lineWidth: 2.0)) - .padding() - } - Spacer() - } - .alert("Please take a photo horizontally", isPresented: $isPresented) { - Button("OK", role: .cancel) { + NavigationView { + VStack { + NavigationLink(destination: ResultView(), tag: "Success", selection: $selection) { EmptyView() } + Spacer() + if image != nil { + HStack { + Spacer() + image?.resizable() + .scaledToFit() + .cornerRadius(10) + .padding(.bottom, 10) + .onTapGesture { openCamera() } + Image(systemName: "minus.circle") + .foregroundColor(Color(.red)) + .padding(5) + .onTapGesture { + withAnimation(.easeOut) { + image = nil + inputImage = nil + disabledButton = true + } + } + Spacer() + } + } else { + HStack { + Spacer() + VStack { + Image(systemName: "plus.circle.fill") + .font(.system(size: 40)) + .foregroundColor(Color(colorScheme == .dark ? .white : .black)) + .padding(.top, 5) + .onTapGesture { + self.showingImagePicker = true + } + .padding() + Text("Choose a photo\n from the library") + .multilineTextAlignment(.center) + } - .alert("No license plate detected, find another photo", isPresented: $notDetected) { - Button("OK", role: .cancel) { - // do nothing + + Spacer() + + VStack { + Image(systemName: "camera.fill") + .font(.system(size: 40)) + .foregroundColor(Color(colorScheme == .dark ? .white : .black)) + .padding(.top, 5) + .onTapGesture { + isPresented.toggle() + } + .padding() + Text("Take a photo\n with a camera") + .multilineTextAlignment(.center) + } + + Spacer() + } + .padding() + } + + if disabledButton == false { + Button { + wait.wait = true + apiManager.getImageResponse(image: inputImage!.base64!) { res in + if res == true { + selection = "Success" + wait.wait = false + image = nil + inputImage = nil + disabledButton = true + } else { + wait.wait = false + notDetected.toggle() + image = nil + inputImage = nil + disabledButton = true } } - - - } - .sheet(isPresented: $showingImagePicker, onDismiss: loadImage) { - ImagePicker(image: self.$inputImage) - } - .sheet(isPresented: $showingCameraPicker, onDismiss: loadImage) { - CameraPicker(sourceType: .camera, selectedImage: self.$inputImage) - } - - if wait.wait { - GeometryReader { _ in - LoaderView().frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height) + } label: { + Text("Detect license plate") + } + .disabled(disabledButton) + .padding(.horizontal, 30) + .padding(.vertical, 5) +// .background(Color(colorScheme == .dark ? .white : .black)) + .cornerRadius(40) + .foregroundColor(Color(colorScheme == .dark ? .white : .black)) + .padding(5) + .overlay(RoundedRectangle(cornerRadius: 40).stroke(Color(colorScheme == .dark ? .white : .black), lineWidth: 2.0)) + .padding() } - .background(Color.black.opacity(0.45)) - .edgesIgnoringSafeArea(.all) + Spacer() } + .alert("Please take a photo horizontally", isPresented: $isPresented) { + Button("OK", role: .cancel) { + openCamera() + } + } + .alert("No license plate detected, find another photo", isPresented: $notDetected) { + Button("OK", role: .cancel) { + // do nothing + } + } + + + } + .sheet(isPresented: $showingImagePicker, onDismiss: loadImage) { + ImagePicker(image: self.$inputImage) + } + .sheet(isPresented: $showingCameraPicker, onDismiss: loadImage) { + CameraPicker(sourceType: .camera, selectedImage: self.$inputImage) } } @@ -169,12 +159,6 @@ struct ContentView: View { image = Image(uiImage: inputImage) disabledButton = false } - - func convertImageToBase64String(inputImage: UIImage?) -> String { - guard let imageData = inputImage?.jpegData(compressionQuality: 0.3) else { return ""} - let res = imageData.base64EncodedString() - return res - } } struct ContentView_Previews: PreviewProvider { @@ -183,21 +167,6 @@ struct ContentView_Previews: PreviewProvider { } } -extension UIImage { - var base64: String? { - self.jpegData(compressionQuality: 1)?.base64EncodedString() - } -} - -extension String { - var imageFromBase64: UIImage? { - guard let imageData = Data(base64Encoded: self, options: .ignoreUnknownCharacters) else { - return nil - } - return UIImage(data: imageData) - } -} - struct ImageOverlay: View { var number: String @@ -217,3 +186,18 @@ struct ImageOverlay: View { } } } + +extension UIImage { + var base64: String? { + self.jpegData(compressionQuality: 1)?.base64EncodedString() + } +} + +extension String { + var imageFromBase64: UIImage? { + guard let imageData = Data(base64Encoded: self, options: .ignoreUnknownCharacters) else { + return nil + } + return UIImage(data: imageData) + } +} diff --git a/App/LicensePlates/LicensePlates/View/MenuView.swift b/App/LicensePlates/LicensePlates/View/MenuView.swift index 1fabd2b..84a3424 100644 --- a/App/LicensePlates/LicensePlates/View/MenuView.swift +++ b/App/LicensePlates/LicensePlates/View/MenuView.swift @@ -10,25 +10,37 @@ import SwiftUI struct MenuView: View { @Environment(\.colorScheme) var colorScheme + @ObservedObject var wait = Wait.shared var body: some View { - TabView { - ContentView() - .tabItem { - Image(systemName: "camera") - .foregroundColor(Color(colorScheme == .dark ? .white : .black)) - Text("Photo") - .foregroundColor(Color(colorScheme == .dark ? .white : .black)) - } - PlatesListView() - .tabItem { - Image(systemName: "list.dash") - .foregroundColor(Color(colorScheme == .dark ? .white : .black)) - Text("History") - .foregroundColor(Color(colorScheme == .dark ? .white : .black)) + ZStack { + TabView { + ContentView() + .tabItem { + Image(systemName: "camera") + .foregroundColor(Color(colorScheme == .dark ? .white : .black)) + Text("Photo") + .foregroundColor(Color(colorScheme == .dark ? .white : .black)) + } + PlatesListView() + .tabItem { + Image(systemName: "list.dash") + .foregroundColor(Color(colorScheme == .dark ? .white : .black)) + Text("History") + .foregroundColor(Color(colorScheme == .dark ? .white : .black)) + } + } + .accentColor(Color(colorScheme == .dark ? .white : .black)) + + if wait.wait { + GeometryReader { _ in + LoaderView().frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height) } + .background(Color.black.opacity(0.45)) + .edgesIgnoringSafeArea(.all) + } } - .accentColor(Color(colorScheme == .dark ? .white : .black)) + } } diff --git a/App/LicensePlates/LicensePlates/View/PlatesListView.swift b/App/LicensePlates/LicensePlates/View/PlatesListView.swift index 45d9950..ebebeab 100644 --- a/App/LicensePlates/LicensePlates/View/PlatesListView.swift +++ b/App/LicensePlates/LicensePlates/View/PlatesListView.swift @@ -25,16 +25,10 @@ struct PlatesListView: View { .resizable() .scaledToFit() .overlay(ImageOverlay(item), alignment: .trailing) - -// item.image -// .resizable() -// .scaledToFit() -// .padding() - - } + .onDelete(perform: removeRows) } - + } } .toolbar { @@ -50,53 +44,17 @@ struct PlatesListView: View { .alert(isPresented: $isPresented, content: { Alert(title: Text("Do you want to delete the history?"), primaryButton: .default(Text("No")){ - }, + }, secondaryButton:.default(Text("Yes")) { - UserDefaults.standard.set([String](), forKey: "platesList") - imagesList.platesNumberList = UserDefaults.standard.stringArray(forKey: "platesList") ?? [String]() - }) + UserDefaults.standard.set([String](), forKey: "platesList") + imagesList.platesNumberList = UserDefaults.standard.stringArray(forKey: "platesList") ?? [String]() + }) }) - - // using UserDefaults -// VStack { -// if imagesList.imagesBase64List.isEmpty { -// Text("No history") -// } else { -// List { -// ForEach(imagesList.imagesBase64List, id: \.self) { item in -// Image(uiImage: item.imageFromBase64!) -// .resizable() -// .scaledToFit() -// .padding() -// -// } -// } -// -// } -// } - - // using UserDefaults -// .toolbar { -// ToolbarItem(placement: .navigationBarLeading) { -// Button { -// isPresented.toggle() -// } label: { -// Image(systemName: "trash") -// } -// } -// } - } - // using UserDefaults -// .alert(isPresented: $isPresented, content: { -// Alert(title: Text("Do you want to delete the history?"), -// primaryButton: .default(Text("No")){ -// }, -// secondaryButton:.default(Text("Yes")) { -// UserDefaults.standard.set([String](), forKey: "platesList") -//// imagesList.imagesBase64List = UserDefaults.standard.stringArray(forKey: "platesList") ?? [String]() -// }) -// }) + } + func removeRows(at offsets: IndexSet) { + imagesList.platesNumberList.remove(atOffsets: offsets) + UserDefaults.standard.set(imagesList.platesNumberList, forKey: "platesList") } }