├── README.md ├── api ├── Values │ └── save.dat ├── __pycache__ │ └── processImage.cpython-38.pyc ├── api.py └── processImage.py ├── desktop_application_python ├── SysImages │ └── Parameters.png ├── User │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ └── 5.png ├── Values │ └── save.dat ├── __pycache__ │ └── parameters.cpython-38.pyc ├── detect.py └── estimate.py └── mobile_application_flutter ├── .gitignore ├── .metadata ├── README.md ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── height_estimator_mobile │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets └── images │ ├── imgPH.png │ └── placeholder.png ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings └── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-1024x1024@1x.png │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ └── Icon-App-83.5x83.5@2x.png │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── Runner-Bridging-Header.h ├── lib ├── API │ └── api.dart ├── Models │ └── SelectImage.dart ├── Widget │ └── buttons.dart └── main.dart ├── pubspec.lock ├── pubspec.yaml └── test └── widget_test.dart /README.md: -------------------------------------------------------------------------------- 1 | # Object-Height-Estimation 2 | 3 | This is a project based on opencv-python which estimates height of an object based upon its picture. It uses a the height reference of a standard object that is recognised by the system and must be in the frame of the object to be measured standing parallel to it. 4 | 5 | ## Problem Definition 6 | 7 | The objective of this project is to give estimates of height of an object without need to measure it, using a picture of that object in parallel to a fixed standard measure. It can be useful of various purposes like estimating height of buildings, trees, and industrial vehicles which can take a lot of time and effort if done manually. 8 | 9 | The project includes a desktop application and a mobile application, both of which can be used to estimate height of the object using images either clicked by the camera or by importing an image from the gallery. However, the desktop application does provide a lot more flexibility on how to use the application including changing the standard measure that will be used by the application as a reference to also select any part of the image that is to be measured. 10 | 11 | ## The Proposed System 12 | 13 | The proposed system is described in the steps as follows: 14 | 15 | Step 1. The first step will include user either capturing or importing the image of the object that they want to measure. 16 | Step 2. The next step will be to identify the standard in the image, this will be done in two sub-parts 17 |  Step 2.1 Filtering the color of the object that we want to recognize from the image. 18 |  Step 2.2 Checking the edges of the object that are left on the masking layer after filtering out the excess, unnecessary colors. 19 |  Step 2.3 Marking the object with correct number of edges (4 in this case) and using its height for further calculation. 20 | Step 3. The third step will be to asking the user about the object that he wants to measure from the image that he has selected. This will be done by the user by marking two points on the image representing the height that is to be measured. 21 | Step 4. The last step will be to comparing the height (in px) that the user has selected to the reference height. The reference height is set to be 1m by default thus, the required height will be the ratio of the reference height. 22 | 23 | ## Technology Used 24 | 25 | The software is only tested on Linux environment as of writing this report. The packages to be installed for execution of the software are Python with some of its libraries installed (OpenCV, NumPy, tkinter and flask), Flutter and Android Studio (or VS Code) integrated with the flutter installation and including flutter plugin and dart plugin. The android application uses a REST API which is required to be started before using the applications such that a HTTP communication can be established. 26 | 27 | The major technologies associated with the project as represented in the tree as follows: 28 | 29 | • Python 30 | ◦ numpy 31 | ◦ cv2 (OpenCV) 32 | ◦ tkinter 33 | ◦ flask 34 | ◦ json 35 | ◦ base64 36 | ◦ pickle 37 | • Dart 38 | ◦ Flutter 39 | ◦ Additional Packages 40 | ▪ cupertino_icons v1.0.0 41 | ▪ http v0.12.2 42 | ▪ image_picker v0.6.7+12 43 | • IDE and Text Editors 44 | ◦ VS Code 45 | ◦ Android Studio 46 | • Version Control 47 | ◦ git 48 | ◦ GitHub 49 | 50 | 51 | -------------------------------------------------------------------------------- /api/Values/save.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/api/Values/save.dat -------------------------------------------------------------------------------- /api/__pycache__/processImage.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/api/__pycache__/processImage.cpython-38.pyc -------------------------------------------------------------------------------- /api/api.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, request, jsonify 2 | import json 3 | from processImage import identifyMark, setStandardValues 4 | 5 | app = Flask(__name__) 6 | 7 | 8 | @app.route('/api', methods=['POST']) 9 | def identifyStandard(): 10 | data = request.json 11 | d = {} 12 | d['found'], d['img'], d['height'] = identifyMark(data['image']) 13 | return jsonify(d) 14 | 15 | @app.route('/setting', methods=['POST']) 16 | def settingStandard(): 17 | data = request.json 18 | d = {} 19 | d['img'], d['img_dil'] = setStandardValues(data['image'], data['values']) 20 | return jsonify(d) 21 | 22 | if __name__ == '__main__': 23 | app.run() 24 | 25 | -------------------------------------------------------------------------------- /api/processImage.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import pickle 3 | import numpy as np 4 | from cv2 import cv2 5 | 6 | # Loading the saved values 7 | save = open('Values/save.dat', 'rb') 8 | db = pickle.load(save) 9 | (h_min, h_max, s_min, s_max, v_min, v_max, threshold1, threshold2, area_min) = tuple(db.values()) 10 | 11 | # Draw Contour (Used internally) 12 | def getContour(img, imgContour): 13 | contour, _ = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 14 | global h 15 | found = False 16 | h = 1 17 | for cnt in contour: 18 | area = cv2.contourArea(cnt) 19 | peri = cv2.arcLength(cnt, True) # True shows that the shape is closed 20 | approx = cv2.approxPolyDP(cnt, 0.02*peri, True) 21 | area = cv2.contourArea(cnt) 22 | if 4 <= len(approx) <= 7 and area > area_min: 23 | found = True 24 | cv2.drawContours(imgContour, cnt, -1, (255, 0, 255), 3) 25 | x, y, w, h = cv2.boundingRect(approx) 26 | cv2.rectangle(imgContour, (x,y), (x+w, y+h), (0,255,0), 3) 27 | return found, h 28 | 29 | # Calculate Height of the image 30 | def calculateHeight(image, standardHeight): 31 | imageHeight = image.shape[0] 32 | return float('{:.2f}'.format(imageHeight / standardHeight)) 33 | 34 | # Mark the images if standard detected 35 | def identifyMark(base64Image): 36 | img_str = base64.b64decode(base64Image) 37 | 38 | nparr = np.fromstring(img_str, np.uint8) 39 | image = cv2.imdecode(nparr, cv2.IMREAD_COLOR) 40 | imgHSV = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) 41 | lower = np.array([h_min, s_min, v_min]) 42 | upper = np.array([h_max, s_max, v_max]) 43 | mask = cv2.inRange(imgHSV, lower, upper) 44 | mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR) 45 | imgCanny = cv2.Canny(mask, threshold1, threshold2) 46 | kernel = np.ones((5,5)) 47 | imgDil = cv2.dilate(imgCanny, kernel, iterations=1) 48 | found, standardHeight = getContour(imgDil, image) 49 | 50 | img_str = cv2.imencode('.jpg', image)[1].tobytes() 51 | base64ImageReturn = base64.b64encode(img_str) 52 | 53 | height = calculateHeight(image, standardHeight) 54 | 55 | return ('yes' if found else 'no'), base64ImageReturn, height 56 | 57 | # Set standard 58 | def setStandardValues(base64Image, values): 59 | 60 | d = [] 61 | for i in values: 62 | d.append(int(i['value'])) 63 | (h_min, h_max, s_min, s_max, v_min, v_max, threshold1, threshold2, area_min) = tuple(d) 64 | 65 | img_str = base64.b64decode(base64Image) 66 | 67 | nparr = np.fromstring(img_str, np.uint8) 68 | image = cv2.imdecode(nparr, cv2.IMREAD_COLOR) 69 | imgHSV = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) 70 | lower = np.array([h_min, s_min, v_min]) 71 | upper = np.array([h_max, s_max, v_max]) 72 | mask = cv2.inRange(imgHSV, lower, upper) 73 | result = cv2.bitwise_and(image, image, mask = mask) 74 | mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR) 75 | imgCanny = cv2.Canny(mask, threshold1, threshold2) 76 | kernel = np.ones((5,5)) 77 | imgDil = cv2.dilate(imgCanny, kernel, iterations=1) 78 | found, standardHeight = getContour(imgDil, image) 79 | 80 | img_str = cv2.imencode('.png', imgHSV)[1].tobytes() 81 | base64ImageReturn = base64.b64encode(img_str) 82 | 83 | imgD_str = cv2.imencode('.png', result)[1].tobytes() 84 | base64ImgDilReturn = base64.b64encode(imgD_str) 85 | 86 | return base64ImageReturn, base64ImgDilReturn 87 | -------------------------------------------------------------------------------- /desktop_application_python/SysImages/Parameters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/desktop_application_python/SysImages/Parameters.png -------------------------------------------------------------------------------- /desktop_application_python/User/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/desktop_application_python/User/1.png -------------------------------------------------------------------------------- /desktop_application_python/User/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/desktop_application_python/User/2.png -------------------------------------------------------------------------------- /desktop_application_python/User/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/desktop_application_python/User/3.png -------------------------------------------------------------------------------- /desktop_application_python/User/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/desktop_application_python/User/4.png -------------------------------------------------------------------------------- /desktop_application_python/User/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/desktop_application_python/User/5.png -------------------------------------------------------------------------------- /desktop_application_python/Values/save.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/desktop_application_python/Values/save.dat -------------------------------------------------------------------------------- /desktop_application_python/__pycache__/parameters.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/desktop_application_python/__pycache__/parameters.cpython-38.pyc -------------------------------------------------------------------------------- /desktop_application_python/detect.py: -------------------------------------------------------------------------------- 1 | from cv2 import cv2 2 | import numpy as np 3 | import pickle 4 | import time 5 | 6 | 7 | save = open('Values/save.dat', 'rb') 8 | 9 | cap = cv2.VideoCapture(0) 10 | cap.set(3, 600) 11 | cap.set(4, 300) 12 | 13 | 14 | # detecting the standard in the image and marking it 15 | def getContour(img, imgContour): 16 | contour, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 17 | found = False 18 | for cnt in contour: 19 | area = cv2.contourArea(cnt) 20 | peri = cv2.arcLength(cnt, True) # True shows that the shape is closed 21 | approx = cv2.approxPolyDP(cnt, 0.02*peri, True) 22 | area = cv2.contourArea(cnt) 23 | if 4 <= len(approx) <= 7 and area > area_min: 24 | found = True 25 | cv2.drawContours(imgContour, cnt, -1, (255, 0, 255), 7) 26 | x, y, w, h = cv2.boundingRect(approx) 27 | cv2.rectangle(imgContour, (x,y), (x+w, y+h), (0,255,0), 5) 28 | return found 29 | 30 | 31 | def empty(a): 32 | pass 33 | 34 | # spawns a Window for changing the parameters 35 | def takeVal(): 36 | 37 | img = cv2.imread('SysImages/Parameters.png')[:160, :, :] 38 | img = cv2.resize(img, (340, 120)) 39 | 40 | cv2.namedWindow('Parameters') 41 | cv2.imshow('Parameters', img) 42 | cv2.resizeWindow('Parameters', 640, 240) 43 | cv2.createTrackbar('HUE Min', 'Parameters', 150, 255, empty) 44 | cv2.createTrackbar('HUE Max', 'Parameters', 190, 255, empty) 45 | cv2.createTrackbar('SAT Min', 'Parameters', 195, 255, empty) 46 | cv2.createTrackbar('SAT Max', 'Parameters', 255, 255, empty) 47 | cv2.createTrackbar('VALUE Min', 'Parameters', 195, 255, empty) 48 | cv2.createTrackbar('VALUE Max', 'Parameters', 255, 255, empty) 49 | cv2.createTrackbar('Thresh1', 'Parameters', 0, 255, empty) 50 | cv2.createTrackbar('Thresh2', 'Parameters', 225, 255, empty) 51 | cv2.createTrackbar('Area Min', 'Parameters', 100, 1000, empty) 52 | 53 | 54 | read_temp = False 55 | db = pickle.load(save) 56 | try: 57 | (h_min, h_max, s_min, s_max, v_min, v_max, threshold1, threshold2, area_min) = tuple(db.values()) 58 | except: 59 | read_temp = True 60 | takeVal() 61 | 62 | while True: 63 | 64 | _, img = cap.read() 65 | img_copy = img.copy() 66 | 67 | if read_temp: 68 | h_min = cv2.getTrackbarPos('HUE Min', 'Parameters') 69 | h_max = cv2.getTrackbarPos('HUE Max', 'Parameters') 70 | s_min = cv2.getTrackbarPos('SAT Min', 'Parameters') 71 | s_max = cv2.getTrackbarPos('SAT Max', 'Parameters') 72 | v_min = cv2.getTrackbarPos('VALUE Min', 'Parameters') 73 | v_max = cv2.getTrackbarPos('VALUE Max', 'Parameters') 74 | threshold1 = cv2.getTrackbarPos('Thresh1', 'Parameters') 75 | threshold2 = cv2.getTrackbarPos('Thresh2', 'Parameters') 76 | area_min = cv2.getTrackbarPos('Area Min', 'Parameters') 77 | db['h_min'], db['h_max'], db['s_min'], db['s_max'], db['v_min'], db['v_max'], db['threshold1'], db['threshold2'], db['area_min'] = h_min, h_max, s_min, s_max, v_min, v_max, threshold1, threshold2, area_min 78 | 79 | imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 80 | 81 | lower = np.array([h_min, s_min, v_min]) 82 | upper = np.array([h_max, s_max, v_max]) 83 | 84 | mask = cv2.inRange(imgHSV, lower, upper) 85 | result = cv2.bitwise_and(img, img, mask = mask) 86 | 87 | mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR) 88 | 89 | # converting images required in order to call getContour() 90 | imgCanny = cv2.Canny(mask, threshold1, threshold2) 91 | kernel = np.ones((5,5)) 92 | imgDil = cv2.dilate(imgCanny, kernel, iterations=1) 93 | found = getContour(imgDil, img) 94 | 95 | hstack = np.hstack([img, result]) 96 | 97 | cv2.imshow('Stacked', hstack) 98 | 99 | key = cv2.waitKey(1) &0xFF 100 | if key == ord('q'): 101 | if read_temp: 102 | cv2.destroyWindow('Parameters') 103 | read_temp = False 104 | else: 105 | break 106 | elif key == ord('p'): 107 | db = {} 108 | takeVal() 109 | read_temp = True 110 | elif (key == ord('s')) and read_temp: 111 | # writing the current values into save.dat 112 | write = open('Values/save.dat', 'wb') 113 | pickle.dump(db, write) 114 | print('Saved') 115 | write.close() 116 | cv2.destroyWindow('Parameters') 117 | read_temp = False 118 | elif key == ord('c'): 119 | # saving the images of the if its sharp and standard is recognicable 120 | blur = cv2.Laplacian(img_copy, cv2.CV_64F).var() 121 | print(found, blur) 122 | if found and blur > 0: 123 | nowTime = time.time() 124 | cv2.imwrite('User'+'/'+str(int(blur))+"_"+str(nowTime)+".png", img_copy) 125 | print('Captured') 126 | img[:, :, :] = 0 127 | hstack = np.hstack([img, result, mask]) 128 | cv2.imshow('Stacked', hstack) 129 | cv2.waitKey(10000) 130 | 131 | 132 | save.close() 133 | cap.release() 134 | cv2.destroyAllWindows() 135 | -------------------------------------------------------------------------------- /desktop_application_python/estimate.py: -------------------------------------------------------------------------------- 1 | from cv2 import cv2 2 | import pickle 3 | import numpy as np 4 | from math import sqrt 5 | from tkinter import filedialog 6 | 7 | save = open('Values/save.dat', 'rb') 8 | 9 | 10 | # detecting the standard in the image and marking it 11 | h = 1 12 | def getContour(img, imgContour): 13 | contour, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 14 | global h 15 | for cnt in contour: 16 | area = cv2.contourArea(cnt) 17 | peri = cv2.arcLength(cnt, True) # True shows that the shape is closed 18 | approx = cv2.approxPolyDP(cnt, 0.02*peri, True) 19 | area = cv2.contourArea(cnt) 20 | if 4 <= len(approx) <= 7 and area > area_min: 21 | cv2.drawContours(imgContour, cnt, -1, (255, 0, 255), 3) 22 | x, y, w, h = cv2.boundingRect(approx) 23 | cv2.rectangle(imgContour, (x,y), (x+w, y+h), (0,255,0), 3) # rectangle must match with the contour for knowing the standard in parallel 24 | 25 | 26 | # Function for detecting mouse points and saving it into as numpy array 27 | points = np.zeros((2,2), np.int) 28 | counter = 0 29 | def mousePoints(event, x, y, flags, params): 30 | global counter 31 | if event == cv2.EVENT_LBUTTONDOWN: 32 | points[counter] = x,y 33 | counter += 1 34 | 35 | # Printing the estimate on the image 36 | def addEstimate(img, str): 37 | font = cv2.FONT_HERSHEY_SIMPLEX 38 | image = cv2.putText(img, str, (10, 30), font, 1, (255, 0, 0), 2, cv2.LINE_AA) 39 | 40 | 41 | 42 | db = pickle.load(save) 43 | try: 44 | (h_min, h_max, s_min, s_max, v_min, v_max, threshold1, threshold2, area_min) = tuple(db.values()) 45 | except: 46 | print('Nope') 47 | exit(0) 48 | 49 | path = '' 50 | fname = filedialog.askopenfilename() 51 | img = cv2.imread(path + fname) 52 | 53 | imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 54 | 55 | lower = np.array([h_min, s_min, v_min]) 56 | upper = np.array([h_max, s_max, v_max]) 57 | 58 | mask = cv2.inRange(imgHSV, lower, upper) 59 | result = cv2.bitwise_and(img, img, mask = mask) 60 | 61 | mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR) 62 | 63 | # converting images required in order to call getContour() 64 | imgCanny = cv2.Canny(mask, threshold1, threshold2) 65 | kernel = np.ones((5,5)) 66 | imgDil = cv2.dilate(imgCanny, kernel, iterations=1) 67 | getContour(imgDil, img) 68 | 69 | 70 | while True: 71 | 72 | for i in range(counter): 73 | cv2.circle(img, (points[i][0], points[i][1]), 5, (0,0,255), cv2.FILLED) 74 | cv2.imshow('Image', img) 75 | 76 | if counter == 2: 77 | break 78 | 79 | cv2.setMouseCallback('Image', mousePoints) 80 | 81 | cv2.waitKey(1) 82 | 83 | 84 | dist = abs(points[0,1] - points[1,1]) 85 | print('Height Estimate: {:.2f}m'.format(dist / h)) 86 | 87 | addEstimate(img, '{:.2f}m'.format(dist / h)) 88 | cv2.imshow('Image', img) 89 | 90 | while not (cv2.waitKey(1) & 0xFF == ord('q')): 91 | pass 92 | 93 | cv2.destroyAllWindows() -------------------------------------------------------------------------------- /mobile_application_flutter/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | **/ios/Flutter/.last_build_id 26 | .dart_tool/ 27 | .flutter-plugins 28 | .flutter-plugins-dependencies 29 | .packages 30 | .pub-cache/ 31 | .pub/ 32 | /build/ 33 | 34 | # Web related 35 | lib/generated_plugin_registrant.dart 36 | 37 | # Symbolication related 38 | app.*.symbols 39 | 40 | # Obfuscation related 41 | app.*.map.json 42 | -------------------------------------------------------------------------------- /mobile_application_flutter/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: d408d302e22179d598f467e11da5dd968dbdc9ec 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /mobile_application_flutter/README.md: -------------------------------------------------------------------------------- 1 | # height_estimator_mobile 2 | 3 | A new Flutter project. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 13 | 14 | For help getting started with Flutter, view our 15 | [online documentation](https://flutter.dev/docs), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /mobile_application_flutter/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | -------------------------------------------------------------------------------- /mobile_application_flutter/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion 29 30 | 31 | sourceSets { 32 | main.java.srcDirs += 'src/main/kotlin' 33 | } 34 | 35 | lintOptions { 36 | disable 'InvalidPackage' 37 | } 38 | 39 | defaultConfig { 40 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 41 | applicationId "com.example.height_estimator_mobile" 42 | minSdkVersion 16 43 | targetSdkVersion 29 44 | versionCode flutterVersionCode.toInteger() 45 | versionName flutterVersionName 46 | } 47 | 48 | buildTypes { 49 | release { 50 | // TODO: Add your own signing config for the release build. 51 | // Signing with the debug keys for now, so `flutter run --release` works. 52 | signingConfig signingConfigs.debug 53 | } 54 | } 55 | } 56 | 57 | flutter { 58 | source '../..' 59 | } 60 | 61 | dependencies { 62 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 63 | } 64 | -------------------------------------------------------------------------------- /mobile_application_flutter/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile_application_flutter/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 8 | 12 | 19 | 23 | 27 | 32 | 36 | 37 | 38 | 39 | 40 | 41 | 43 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /mobile_application_flutter/android/app/src/main/kotlin/com/example/height_estimator_mobile/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.height_estimator_mobile 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /mobile_application_flutter/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /mobile_application_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile_application_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile_application_flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile_application_flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile_application_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile_application_flutter/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /mobile_application_flutter/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile_application_flutter/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.50' 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.5.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | jcenter() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /mobile_application_flutter/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | android.enableR8=true 5 | -------------------------------------------------------------------------------- /mobile_application_flutter/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip 7 | -------------------------------------------------------------------------------- /mobile_application_flutter/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /mobile_application_flutter/assets/images/imgPH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/assets/images/imgPH.png -------------------------------------------------------------------------------- /mobile_application_flutter/assets/images/placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/assets/images/placeholder.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 9.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXCopyFilesBuildPhase section */ 19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 20 | isa = PBXCopyFilesBuildPhase; 21 | buildActionMask = 2147483647; 22 | dstPath = ""; 23 | dstSubfolderSpec = 10; 24 | files = ( 25 | ); 26 | name = "Embed Frameworks"; 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXCopyFilesBuildPhase section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | ); 53 | runOnlyForDeploymentPostprocessing = 0; 54 | }; 55 | /* End PBXFrameworksBuildPhase section */ 56 | 57 | /* Begin PBXGroup section */ 58 | 9740EEB11CF90186004384FC /* Flutter */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 65 | ); 66 | name = Flutter; 67 | sourceTree = ""; 68 | }; 69 | 97C146E51CF9000F007C117D = { 70 | isa = PBXGroup; 71 | children = ( 72 | 9740EEB11CF90186004384FC /* Flutter */, 73 | 97C146F01CF9000F007C117D /* Runner */, 74 | 97C146EF1CF9000F007C117D /* Products */, 75 | ); 76 | sourceTree = ""; 77 | }; 78 | 97C146EF1CF9000F007C117D /* Products */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 97C146EE1CF9000F007C117D /* Runner.app */, 82 | ); 83 | name = Products; 84 | sourceTree = ""; 85 | }; 86 | 97C146F01CF9000F007C117D /* Runner */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 92 | 97C147021CF9000F007C117D /* Info.plist */, 93 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 94 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 95 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 96 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 97 | ); 98 | path = Runner; 99 | sourceTree = ""; 100 | }; 101 | /* End PBXGroup section */ 102 | 103 | /* Begin PBXNativeTarget section */ 104 | 97C146ED1CF9000F007C117D /* Runner */ = { 105 | isa = PBXNativeTarget; 106 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 107 | buildPhases = ( 108 | 9740EEB61CF901F6004384FC /* Run Script */, 109 | 97C146EA1CF9000F007C117D /* Sources */, 110 | 97C146EB1CF9000F007C117D /* Frameworks */, 111 | 97C146EC1CF9000F007C117D /* Resources */, 112 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 113 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 114 | ); 115 | buildRules = ( 116 | ); 117 | dependencies = ( 118 | ); 119 | name = Runner; 120 | productName = Runner; 121 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 122 | productType = "com.apple.product-type.application"; 123 | }; 124 | /* End PBXNativeTarget section */ 125 | 126 | /* Begin PBXProject section */ 127 | 97C146E61CF9000F007C117D /* Project object */ = { 128 | isa = PBXProject; 129 | attributes = { 130 | LastUpgradeCheck = 1020; 131 | ORGANIZATIONNAME = ""; 132 | TargetAttributes = { 133 | 97C146ED1CF9000F007C117D = { 134 | CreatedOnToolsVersion = 7.3.1; 135 | LastSwiftMigration = 1100; 136 | }; 137 | }; 138 | }; 139 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 140 | compatibilityVersion = "Xcode 9.3"; 141 | developmentRegion = en; 142 | hasScannedForEncodings = 0; 143 | knownRegions = ( 144 | en, 145 | Base, 146 | ); 147 | mainGroup = 97C146E51CF9000F007C117D; 148 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 149 | projectDirPath = ""; 150 | projectRoot = ""; 151 | targets = ( 152 | 97C146ED1CF9000F007C117D /* Runner */, 153 | ); 154 | }; 155 | /* End PBXProject section */ 156 | 157 | /* Begin PBXResourcesBuildPhase section */ 158 | 97C146EC1CF9000F007C117D /* Resources */ = { 159 | isa = PBXResourcesBuildPhase; 160 | buildActionMask = 2147483647; 161 | files = ( 162 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 163 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 164 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 165 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 166 | ); 167 | runOnlyForDeploymentPostprocessing = 0; 168 | }; 169 | /* End PBXResourcesBuildPhase section */ 170 | 171 | /* Begin PBXShellScriptBuildPhase section */ 172 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 173 | isa = PBXShellScriptBuildPhase; 174 | buildActionMask = 2147483647; 175 | files = ( 176 | ); 177 | inputPaths = ( 178 | ); 179 | name = "Thin Binary"; 180 | outputPaths = ( 181 | ); 182 | runOnlyForDeploymentPostprocessing = 0; 183 | shellPath = /bin/sh; 184 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 185 | }; 186 | 9740EEB61CF901F6004384FC /* Run Script */ = { 187 | isa = PBXShellScriptBuildPhase; 188 | buildActionMask = 2147483647; 189 | files = ( 190 | ); 191 | inputPaths = ( 192 | ); 193 | name = "Run Script"; 194 | outputPaths = ( 195 | ); 196 | runOnlyForDeploymentPostprocessing = 0; 197 | shellPath = /bin/sh; 198 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 199 | }; 200 | /* End PBXShellScriptBuildPhase section */ 201 | 202 | /* Begin PBXSourcesBuildPhase section */ 203 | 97C146EA1CF9000F007C117D /* Sources */ = { 204 | isa = PBXSourcesBuildPhase; 205 | buildActionMask = 2147483647; 206 | files = ( 207 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 208 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 209 | ); 210 | runOnlyForDeploymentPostprocessing = 0; 211 | }; 212 | /* End PBXSourcesBuildPhase section */ 213 | 214 | /* Begin PBXVariantGroup section */ 215 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 216 | isa = PBXVariantGroup; 217 | children = ( 218 | 97C146FB1CF9000F007C117D /* Base */, 219 | ); 220 | name = Main.storyboard; 221 | sourceTree = ""; 222 | }; 223 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 224 | isa = PBXVariantGroup; 225 | children = ( 226 | 97C147001CF9000F007C117D /* Base */, 227 | ); 228 | name = LaunchScreen.storyboard; 229 | sourceTree = ""; 230 | }; 231 | /* End PBXVariantGroup section */ 232 | 233 | /* Begin XCBuildConfiguration section */ 234 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 235 | isa = XCBuildConfiguration; 236 | buildSettings = { 237 | ALWAYS_SEARCH_USER_PATHS = NO; 238 | CLANG_ANALYZER_NONNULL = YES; 239 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 240 | CLANG_CXX_LIBRARY = "libc++"; 241 | CLANG_ENABLE_MODULES = YES; 242 | CLANG_ENABLE_OBJC_ARC = YES; 243 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 244 | CLANG_WARN_BOOL_CONVERSION = YES; 245 | CLANG_WARN_COMMA = YES; 246 | CLANG_WARN_CONSTANT_CONVERSION = YES; 247 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 248 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 249 | CLANG_WARN_EMPTY_BODY = YES; 250 | CLANG_WARN_ENUM_CONVERSION = YES; 251 | CLANG_WARN_INFINITE_RECURSION = YES; 252 | CLANG_WARN_INT_CONVERSION = YES; 253 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 254 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 255 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 256 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 257 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 258 | CLANG_WARN_STRICT_PROTOTYPES = YES; 259 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 260 | CLANG_WARN_UNREACHABLE_CODE = YES; 261 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 262 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 263 | COPY_PHASE_STRIP = NO; 264 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 265 | ENABLE_NS_ASSERTIONS = NO; 266 | ENABLE_STRICT_OBJC_MSGSEND = YES; 267 | GCC_C_LANGUAGE_STANDARD = gnu99; 268 | GCC_NO_COMMON_BLOCKS = YES; 269 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 270 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 271 | GCC_WARN_UNDECLARED_SELECTOR = YES; 272 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 273 | GCC_WARN_UNUSED_FUNCTION = YES; 274 | GCC_WARN_UNUSED_VARIABLE = YES; 275 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 276 | MTL_ENABLE_DEBUG_INFO = NO; 277 | SDKROOT = iphoneos; 278 | SUPPORTED_PLATFORMS = iphoneos; 279 | TARGETED_DEVICE_FAMILY = "1,2"; 280 | VALIDATE_PRODUCT = YES; 281 | }; 282 | name = Profile; 283 | }; 284 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 285 | isa = XCBuildConfiguration; 286 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 287 | buildSettings = { 288 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 289 | CLANG_ENABLE_MODULES = YES; 290 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 291 | ENABLE_BITCODE = NO; 292 | FRAMEWORK_SEARCH_PATHS = ( 293 | "$(inherited)", 294 | "$(PROJECT_DIR)/Flutter", 295 | ); 296 | INFOPLIST_FILE = Runner/Info.plist; 297 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 298 | LIBRARY_SEARCH_PATHS = ( 299 | "$(inherited)", 300 | "$(PROJECT_DIR)/Flutter", 301 | ); 302 | PRODUCT_BUNDLE_IDENTIFIER = com.example.heightEstimatorMobile; 303 | PRODUCT_NAME = "$(TARGET_NAME)"; 304 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 305 | SWIFT_VERSION = 5.0; 306 | VERSIONING_SYSTEM = "apple-generic"; 307 | }; 308 | name = Profile; 309 | }; 310 | 97C147031CF9000F007C117D /* Debug */ = { 311 | isa = XCBuildConfiguration; 312 | buildSettings = { 313 | ALWAYS_SEARCH_USER_PATHS = NO; 314 | CLANG_ANALYZER_NONNULL = YES; 315 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 316 | CLANG_CXX_LIBRARY = "libc++"; 317 | CLANG_ENABLE_MODULES = YES; 318 | CLANG_ENABLE_OBJC_ARC = YES; 319 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 320 | CLANG_WARN_BOOL_CONVERSION = YES; 321 | CLANG_WARN_COMMA = YES; 322 | CLANG_WARN_CONSTANT_CONVERSION = YES; 323 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 324 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 325 | CLANG_WARN_EMPTY_BODY = YES; 326 | CLANG_WARN_ENUM_CONVERSION = YES; 327 | CLANG_WARN_INFINITE_RECURSION = YES; 328 | CLANG_WARN_INT_CONVERSION = YES; 329 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 330 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 331 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 332 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 333 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 334 | CLANG_WARN_STRICT_PROTOTYPES = YES; 335 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 336 | CLANG_WARN_UNREACHABLE_CODE = YES; 337 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 338 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 339 | COPY_PHASE_STRIP = NO; 340 | DEBUG_INFORMATION_FORMAT = dwarf; 341 | ENABLE_STRICT_OBJC_MSGSEND = YES; 342 | ENABLE_TESTABILITY = YES; 343 | GCC_C_LANGUAGE_STANDARD = gnu99; 344 | GCC_DYNAMIC_NO_PIC = NO; 345 | GCC_NO_COMMON_BLOCKS = YES; 346 | GCC_OPTIMIZATION_LEVEL = 0; 347 | GCC_PREPROCESSOR_DEFINITIONS = ( 348 | "DEBUG=1", 349 | "$(inherited)", 350 | ); 351 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 352 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 353 | GCC_WARN_UNDECLARED_SELECTOR = YES; 354 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 355 | GCC_WARN_UNUSED_FUNCTION = YES; 356 | GCC_WARN_UNUSED_VARIABLE = YES; 357 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 358 | MTL_ENABLE_DEBUG_INFO = YES; 359 | ONLY_ACTIVE_ARCH = YES; 360 | SDKROOT = iphoneos; 361 | TARGETED_DEVICE_FAMILY = "1,2"; 362 | }; 363 | name = Debug; 364 | }; 365 | 97C147041CF9000F007C117D /* Release */ = { 366 | isa = XCBuildConfiguration; 367 | buildSettings = { 368 | ALWAYS_SEARCH_USER_PATHS = NO; 369 | CLANG_ANALYZER_NONNULL = YES; 370 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 371 | CLANG_CXX_LIBRARY = "libc++"; 372 | CLANG_ENABLE_MODULES = YES; 373 | CLANG_ENABLE_OBJC_ARC = YES; 374 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 375 | CLANG_WARN_BOOL_CONVERSION = YES; 376 | CLANG_WARN_COMMA = YES; 377 | CLANG_WARN_CONSTANT_CONVERSION = YES; 378 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 379 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 380 | CLANG_WARN_EMPTY_BODY = YES; 381 | CLANG_WARN_ENUM_CONVERSION = YES; 382 | CLANG_WARN_INFINITE_RECURSION = YES; 383 | CLANG_WARN_INT_CONVERSION = YES; 384 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 385 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 386 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 387 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 388 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 389 | CLANG_WARN_STRICT_PROTOTYPES = YES; 390 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 391 | CLANG_WARN_UNREACHABLE_CODE = YES; 392 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 393 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 394 | COPY_PHASE_STRIP = NO; 395 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 396 | ENABLE_NS_ASSERTIONS = NO; 397 | ENABLE_STRICT_OBJC_MSGSEND = YES; 398 | GCC_C_LANGUAGE_STANDARD = gnu99; 399 | GCC_NO_COMMON_BLOCKS = YES; 400 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 401 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 402 | GCC_WARN_UNDECLARED_SELECTOR = YES; 403 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 404 | GCC_WARN_UNUSED_FUNCTION = YES; 405 | GCC_WARN_UNUSED_VARIABLE = YES; 406 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 407 | MTL_ENABLE_DEBUG_INFO = NO; 408 | SDKROOT = iphoneos; 409 | SUPPORTED_PLATFORMS = iphoneos; 410 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 411 | TARGETED_DEVICE_FAMILY = "1,2"; 412 | VALIDATE_PRODUCT = YES; 413 | }; 414 | name = Release; 415 | }; 416 | 97C147061CF9000F007C117D /* Debug */ = { 417 | isa = XCBuildConfiguration; 418 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 419 | buildSettings = { 420 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 421 | CLANG_ENABLE_MODULES = YES; 422 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 423 | ENABLE_BITCODE = NO; 424 | FRAMEWORK_SEARCH_PATHS = ( 425 | "$(inherited)", 426 | "$(PROJECT_DIR)/Flutter", 427 | ); 428 | INFOPLIST_FILE = Runner/Info.plist; 429 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 430 | LIBRARY_SEARCH_PATHS = ( 431 | "$(inherited)", 432 | "$(PROJECT_DIR)/Flutter", 433 | ); 434 | PRODUCT_BUNDLE_IDENTIFIER = com.example.heightEstimatorMobile; 435 | PRODUCT_NAME = "$(TARGET_NAME)"; 436 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 437 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 438 | SWIFT_VERSION = 5.0; 439 | VERSIONING_SYSTEM = "apple-generic"; 440 | }; 441 | name = Debug; 442 | }; 443 | 97C147071CF9000F007C117D /* Release */ = { 444 | isa = XCBuildConfiguration; 445 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 446 | buildSettings = { 447 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 448 | CLANG_ENABLE_MODULES = YES; 449 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 450 | ENABLE_BITCODE = NO; 451 | FRAMEWORK_SEARCH_PATHS = ( 452 | "$(inherited)", 453 | "$(PROJECT_DIR)/Flutter", 454 | ); 455 | INFOPLIST_FILE = Runner/Info.plist; 456 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 457 | LIBRARY_SEARCH_PATHS = ( 458 | "$(inherited)", 459 | "$(PROJECT_DIR)/Flutter", 460 | ); 461 | PRODUCT_BUNDLE_IDENTIFIER = com.example.heightEstimatorMobile; 462 | PRODUCT_NAME = "$(TARGET_NAME)"; 463 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 464 | SWIFT_VERSION = 5.0; 465 | VERSIONING_SYSTEM = "apple-generic"; 466 | }; 467 | name = Release; 468 | }; 469 | /* End XCBuildConfiguration section */ 470 | 471 | /* Begin XCConfigurationList section */ 472 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 473 | isa = XCConfigurationList; 474 | buildConfigurations = ( 475 | 97C147031CF9000F007C117D /* Debug */, 476 | 97C147041CF9000F007C117D /* Release */, 477 | 249021D3217E4FDB00AE95B9 /* Profile */, 478 | ); 479 | defaultConfigurationIsVisible = 0; 480 | defaultConfigurationName = Release; 481 | }; 482 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 483 | isa = XCConfigurationList; 484 | buildConfigurations = ( 485 | 97C147061CF9000F007C117D /* Debug */, 486 | 97C147071CF9000F007C117D /* Release */, 487 | 249021D4217E4FDB00AE95B9 /* Profile */, 488 | ); 489 | defaultConfigurationIsVisible = 0; 490 | defaultConfigurationName = Release; 491 | }; 492 | /* End XCConfigurationList section */ 493 | }; 494 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 495 | } 496 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sanket-Mathur/Object-Height-Estimation/0acb03923a02e03a5992766fe0a077419110f152/mobile_application_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | height_estimator_mobile 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /mobile_application_flutter/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /mobile_application_flutter/lib/API/api.dart: -------------------------------------------------------------------------------- 1 | import 'package:http/http.dart' as http; 2 | import 'dart:convert'; 3 | 4 | Future identifyStandard(Map data) async{ 5 | http.Response response = await http.post( 6 | 'http://10.0.2.2:5000/api', 7 | headers: {"Content-Type": "application/json"}, 8 | body: json.encode(data), 9 | ); 10 | return response.body; 11 | } -------------------------------------------------------------------------------- /mobile_application_flutter/lib/Models/SelectImage.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:image_picker/image_picker.dart'; 3 | import 'dart:convert'; 4 | 5 | import '../API/api.dart'; 6 | 7 | class SelectImage { 8 | static var _image; 9 | static bool found = false; 10 | static var height = 0.0; 11 | 12 | static Widget displayImage() { 13 | return _image == null 14 | ? Image.asset('assets/images/imgPH.png') 15 | : Image.file(_image); 16 | } 17 | 18 | void selectGallery(Function cb) async { 19 | _image = await ImagePicker.pickImage( 20 | source: ImageSource.gallery, 21 | ); 22 | List imageBytes = _image.readAsBytesSync(); 23 | String base64Image = base64Encode(imageBytes); 24 | final result = await identifyStandard({ 25 | "image": base64Image, 26 | }); 27 | var decodedData = jsonDecode(result); 28 | if (decodedData['found'] == 'yes') { 29 | List img64 = base64Decode(decodedData['img']); 30 | _image.writeAsBytesSync(img64); 31 | found = true; 32 | height = decodedData['height']; 33 | } else { 34 | found = false; 35 | } 36 | cb(); 37 | } 38 | 39 | void selectCamera(Function cb) async { 40 | _image = await ImagePicker.pickImage( 41 | source: ImageSource.camera, 42 | ); 43 | List imageBytes = _image.readAsBytesSync(); 44 | String base64Image = base64Encode(imageBytes); 45 | final result = await identifyStandard({ 46 | "image": base64Image, 47 | }); 48 | var decodedData = jsonDecode(result); 49 | if (decodedData['found'] == 'yes') { 50 | List img64 = base64Decode(decodedData['img']); 51 | _image.writeAsBytesSync(img64); 52 | found = true; 53 | } else { 54 | found = false; 55 | } 56 | cb(); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /mobile_application_flutter/lib/Widget/buttons.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../Models/SelectImage.dart'; 4 | 5 | class Buttons extends StatelessWidget { 6 | Function callback; 7 | 8 | Buttons(this.callback); 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | return Container( 13 | width: double.infinity, 14 | child: Row( 15 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 16 | children: [ 17 | CircleAvatar( 18 | radius: 30, 19 | backgroundColor: Colors.blue, 20 | child: IconButton( 21 | icon: Icon(Icons.add_a_photo_outlined), 22 | onPressed: () { 23 | var obj = SelectImage(); 24 | obj.selectCamera(callback); 25 | Navigator.pop(context); 26 | }, 27 | color: Colors.white, 28 | iconSize: 30, 29 | ), 30 | ), 31 | CircleAvatar( 32 | radius: 30, 33 | backgroundColor: Colors.blue, 34 | child: IconButton( 35 | icon: Icon(Icons.add_photo_alternate_outlined), 36 | onPressed: () { 37 | var obj = SelectImage(); 38 | obj.selectGallery(callback); 39 | Navigator.pop(context); 40 | }, 41 | color: Colors.white, 42 | iconSize: 30, 43 | ), 44 | ), 45 | // CircleAvatar( 46 | // radius: 30, 47 | // backgroundColor: Colors.blue, 48 | // child: IconButton( 49 | // icon: Icon(Icons.cloud_upload_outlined), 50 | // onPressed: () {}, 51 | // color: Colors.white, 52 | // iconSize: 30, 53 | // ), 54 | // ), 55 | // CircleAvatar( 56 | // radius: 30, 57 | // backgroundColor: Colors.blue, 58 | // child: IconButton( 59 | // icon: Icon(Icons.drafts_outlined), 60 | // onPressed: () {}, 61 | // color: Colors.white, 62 | // iconSize: 30, 63 | // ), 64 | // ), 65 | ], 66 | ), 67 | ); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /mobile_application_flutter/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/painting.dart'; 3 | 4 | import './Widget/buttons.dart'; 5 | import './Models/SelectImage.dart'; 6 | 7 | List selectedUnit = [true, false]; 8 | 9 | void main() => runApp(MyApp()); 10 | 11 | class MyApp extends StatelessWidget { 12 | @override 13 | Widget build(BuildContext context) { 14 | return MaterialApp( 15 | title: 'Height Estimator', 16 | home: MyHomePage(), 17 | ); 18 | } 19 | } 20 | 21 | class MyHomePage extends StatefulWidget { 22 | @override 23 | _MyHomePageState createState() => _MyHomePageState(); 24 | } 25 | 26 | class _MyHomePageState extends State { 27 | void _showInputButtons(BuildContext ctx) { 28 | showModalBottomSheet( 29 | context: ctx, 30 | builder: (_) { 31 | return Container( 32 | height: 100, 33 | child: Buttons(callback), 34 | ); 35 | }, 36 | ); 37 | } 38 | 39 | callback() { 40 | setState(() {}); 41 | } 42 | 43 | var unit = 'm'; 44 | 45 | void _selectToggle(int index) { 46 | setState(() { 47 | for (int i = 0; i < selectedUnit.length; i++) { 48 | selectedUnit[i] = i == index; 49 | } 50 | if (selectedUnit[0]) { 51 | unit = 'm'; 52 | } else { 53 | unit = 'ft'; 54 | } 55 | }); 56 | print(selectedUnit); 57 | } 58 | 59 | Widget popup(BuildContext ctx) { 60 | return AlertDialog( 61 | title: Center( 62 | child: Text( 63 | (unit == 'm' ? SelectImage.height : SelectImage.height * 0.305) 64 | .toString() + 65 | ' ' + 66 | unit), 67 | ), 68 | actions: [ 69 | FlatButton( 70 | onPressed: () { 71 | Navigator.of(ctx).pop(); 72 | }, 73 | child: Icon(Icons.check), 74 | ), 75 | ], 76 | ); 77 | } 78 | 79 | @override 80 | Widget build(BuildContext context) { 81 | return Scaffold( 82 | appBar: AppBar( 83 | title: Text('Height Estimator'), 84 | actions: [ 85 | Padding( 86 | padding: EdgeInsets.all(5), 87 | child: ToggleButtons( 88 | children: [ 89 | Text('m', style: TextStyle(fontSize: 20)), 90 | Text('ft', style: TextStyle(fontSize: 20)), 91 | ], 92 | isSelected: selectedUnit, 93 | borderWidth: 5, 94 | borderRadius: BorderRadius.circular(5), 95 | color: Colors.white70, 96 | selectedColor: Colors.white, 97 | onPressed: (int index) => _selectToggle(index), 98 | ), 99 | ), 100 | ], 101 | ), 102 | body: Column( 103 | mainAxisAlignment: MainAxisAlignment.end, 104 | crossAxisAlignment: CrossAxisAlignment.start, 105 | children: [ 106 | Expanded( 107 | child: Center( 108 | child: SelectImage.displayImage(), 109 | ), 110 | ), 111 | Padding( 112 | padding: EdgeInsets.all(25), 113 | child: RaisedButton( 114 | // onPressed: getRes, 115 | onPressed: SelectImage.found 116 | ? () { 117 | showDialog( 118 | context: context, 119 | builder: (BuildContext ctx) => popup(ctx)); 120 | } 121 | : null, 122 | color: Colors.blue, 123 | child: Text( 124 | 'Estimate', 125 | style: TextStyle( 126 | color: Colors.white, 127 | fontSize: 20, 128 | ), 129 | ), 130 | ), 131 | ), 132 | ], 133 | ), 134 | floatingActionButton: FloatingActionButton( 135 | child: Icon(Icons.add), 136 | onPressed: () => _showInputButtons(context), 137 | ), 138 | ); 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /mobile_application_flutter/pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | async: 5 | dependency: transitive 6 | description: 7 | name: async 8 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "2.5.0-nullsafety.1" 11 | boolean_selector: 12 | dependency: transitive 13 | description: 14 | name: boolean_selector 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "2.1.0-nullsafety.1" 18 | characters: 19 | dependency: transitive 20 | description: 21 | name: characters 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "1.1.0-nullsafety.3" 25 | charcode: 26 | dependency: transitive 27 | description: 28 | name: charcode 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "1.2.0-nullsafety.1" 32 | clock: 33 | dependency: transitive 34 | description: 35 | name: clock 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "1.1.0-nullsafety.1" 39 | collection: 40 | dependency: transitive 41 | description: 42 | name: collection 43 | url: "https://pub.dartlang.org" 44 | source: hosted 45 | version: "1.15.0-nullsafety.3" 46 | cupertino_icons: 47 | dependency: "direct main" 48 | description: 49 | name: cupertino_icons 50 | url: "https://pub.dartlang.org" 51 | source: hosted 52 | version: "1.0.0" 53 | fake_async: 54 | dependency: transitive 55 | description: 56 | name: fake_async 57 | url: "https://pub.dartlang.org" 58 | source: hosted 59 | version: "1.2.0-nullsafety.1" 60 | flutter: 61 | dependency: "direct main" 62 | description: flutter 63 | source: sdk 64 | version: "0.0.0" 65 | flutter_plugin_android_lifecycle: 66 | dependency: transitive 67 | description: 68 | name: flutter_plugin_android_lifecycle 69 | url: "https://pub.dartlang.org" 70 | source: hosted 71 | version: "1.0.11" 72 | flutter_test: 73 | dependency: "direct dev" 74 | description: flutter 75 | source: sdk 76 | version: "0.0.0" 77 | http: 78 | dependency: "direct main" 79 | description: 80 | name: http 81 | url: "https://pub.dartlang.org" 82 | source: hosted 83 | version: "0.12.2" 84 | http_parser: 85 | dependency: transitive 86 | description: 87 | name: http_parser 88 | url: "https://pub.dartlang.org" 89 | source: hosted 90 | version: "3.1.4" 91 | image_picker: 92 | dependency: "direct main" 93 | description: 94 | name: image_picker 95 | url: "https://pub.dartlang.org" 96 | source: hosted 97 | version: "0.6.7+12" 98 | image_picker_platform_interface: 99 | dependency: transitive 100 | description: 101 | name: image_picker_platform_interface 102 | url: "https://pub.dartlang.org" 103 | source: hosted 104 | version: "1.1.1" 105 | matcher: 106 | dependency: transitive 107 | description: 108 | name: matcher 109 | url: "https://pub.dartlang.org" 110 | source: hosted 111 | version: "0.12.10-nullsafety.1" 112 | meta: 113 | dependency: transitive 114 | description: 115 | name: meta 116 | url: "https://pub.dartlang.org" 117 | source: hosted 118 | version: "1.3.0-nullsafety.3" 119 | path: 120 | dependency: transitive 121 | description: 122 | name: path 123 | url: "https://pub.dartlang.org" 124 | source: hosted 125 | version: "1.8.0-nullsafety.1" 126 | pedantic: 127 | dependency: transitive 128 | description: 129 | name: pedantic 130 | url: "https://pub.dartlang.org" 131 | source: hosted 132 | version: "1.9.2" 133 | plugin_platform_interface: 134 | dependency: transitive 135 | description: 136 | name: plugin_platform_interface 137 | url: "https://pub.dartlang.org" 138 | source: hosted 139 | version: "1.0.3" 140 | sky_engine: 141 | dependency: transitive 142 | description: flutter 143 | source: sdk 144 | version: "0.0.99" 145 | source_span: 146 | dependency: transitive 147 | description: 148 | name: source_span 149 | url: "https://pub.dartlang.org" 150 | source: hosted 151 | version: "1.8.0-nullsafety.2" 152 | stack_trace: 153 | dependency: transitive 154 | description: 155 | name: stack_trace 156 | url: "https://pub.dartlang.org" 157 | source: hosted 158 | version: "1.10.0-nullsafety.1" 159 | stream_channel: 160 | dependency: transitive 161 | description: 162 | name: stream_channel 163 | url: "https://pub.dartlang.org" 164 | source: hosted 165 | version: "2.1.0-nullsafety.1" 166 | string_scanner: 167 | dependency: transitive 168 | description: 169 | name: string_scanner 170 | url: "https://pub.dartlang.org" 171 | source: hosted 172 | version: "1.1.0-nullsafety.1" 173 | term_glyph: 174 | dependency: transitive 175 | description: 176 | name: term_glyph 177 | url: "https://pub.dartlang.org" 178 | source: hosted 179 | version: "1.2.0-nullsafety.1" 180 | test_api: 181 | dependency: transitive 182 | description: 183 | name: test_api 184 | url: "https://pub.dartlang.org" 185 | source: hosted 186 | version: "0.2.19-nullsafety.2" 187 | typed_data: 188 | dependency: transitive 189 | description: 190 | name: typed_data 191 | url: "https://pub.dartlang.org" 192 | source: hosted 193 | version: "1.3.0-nullsafety.3" 194 | vector_math: 195 | dependency: transitive 196 | description: 197 | name: vector_math 198 | url: "https://pub.dartlang.org" 199 | source: hosted 200 | version: "2.1.0-nullsafety.3" 201 | sdks: 202 | dart: ">=2.10.0-110 <2.11.0" 203 | flutter: ">=1.12.13 <2.0.0" 204 | -------------------------------------------------------------------------------- /mobile_application_flutter/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: height_estimator_mobile 2 | description: A new Flutter project. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `pub publish`. This is preferred for private packages. 6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 7 | 8 | # The following defines the version and build number for your application. 9 | # A version number is three numbers separated by dots, like 1.2.43 10 | # followed by an optional build number separated by a +. 11 | # Both the version and the builder number may be overridden in flutter 12 | # build by specifying --build-name and --build-number, respectively. 13 | # In Android, build-name is used as versionName while build-number used as versionCode. 14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 16 | # Read more about iOS versioning at 17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 18 | version: 1.0.0+1 19 | 20 | environment: 21 | sdk: ">=2.7.0 <3.0.0" 22 | 23 | dependencies: 24 | flutter: 25 | sdk: flutter 26 | 27 | 28 | # The following adds the Cupertino Icons font to your application. 29 | # Use with the CupertinoIcons class for iOS style icons. 30 | cupertino_icons: ^1.0.0 31 | http: ^0.12.2 32 | image_picker: ^0.6.7+12 33 | 34 | dev_dependencies: 35 | flutter_test: 36 | sdk: flutter 37 | 38 | # For information on the generic Dart part of this file, see the 39 | # following page: https://dart.dev/tools/pub/pubspec 40 | 41 | # The following section is specific to Flutter. 42 | flutter: 43 | 44 | # The following line ensures that the Material Icons font is 45 | # included with your application, so that you can use the icons in 46 | # the material Icons class. 47 | uses-material-design: true 48 | 49 | # To add assets to your application, add an assets section, like this: 50 | assets: 51 | - assets/images/placeholder.png 52 | - assets/images/imgPH.png 53 | # - images/a_dot_ham.jpeg 54 | 55 | # An image asset can refer to one or more resolution-specific "variants", see 56 | # https://flutter.dev/assets-and-images/#resolution-aware. 57 | 58 | # For details regarding adding assets from package dependencies, see 59 | # https://flutter.dev/assets-and-images/#from-packages 60 | 61 | # To add custom fonts to your application, add a fonts section here, 62 | # in this "flutter" section. Each entry in this list should have a 63 | # "family" key with the font family name, and a "fonts" key with a 64 | # list giving the asset and other descriptors for the font. For 65 | # example: 66 | # fonts: 67 | # - family: Schyler 68 | # fonts: 69 | # - asset: fonts/Schyler-Regular.ttf 70 | # - asset: fonts/Schyler-Italic.ttf 71 | # style: italic 72 | # - family: Trajan Pro 73 | # fonts: 74 | # - asset: fonts/TrajanPro.ttf 75 | # - asset: fonts/TrajanPro_Bold.ttf 76 | # weight: 700 77 | # 78 | # For details regarding fonts from package dependencies, 79 | # see https://flutter.dev/custom-fonts/#from-packages 80 | -------------------------------------------------------------------------------- /mobile_application_flutter/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:height_estimator_mobile/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | --------------------------------------------------------------------------------