alrichardbollans commited on
Commit
3e5ea4d
·
1 Parent(s): aef7d7f

Attempt to add multiprocessing

Browse files
app.py CHANGED
@@ -9,21 +9,13 @@
9
  # except:
10
  # print('Couldnt find CUDA device')
11
 
12
- import base64
13
  import tempfile
14
- import cv2
15
- from io import BytesIO
16
 
17
  import pandas as pd
18
- from PIL import Image
19
  from shiny import App, ui, render, reactive, Session
20
 
21
- from python_utils import load_model
22
- # Load data and compute static values
23
- from shared import app_dir
24
 
25
- # Load the prediction model
26
- predictor = load_model()
27
  app_ui = ui.page_fluid(
28
  ui.include_css("styles.css"),
29
  ui.panel_title(ui.div("Orchid TZ Viability Analyzer", class_="navbar-title")),
@@ -34,10 +26,10 @@ app_ui = ui.page_fluid(
34
  ui.layout_sidebar(
35
  ui.sidebar(
36
  ui.input_file("upload", "Upload Images",
37
- multiple=True,
38
- accept=[".png", ".jpg", ".jpeg"]),
39
  ui.input_action_button("analyze", "Analyze", class_="btn-success"),
40
- width =300
41
  ),
42
  ui.output_ui("results_container"),
43
  border=False,
@@ -46,7 +38,6 @@ app_ui = ui.page_fluid(
46
  )
47
 
48
 
49
-
50
  def server(input, output, session: Session):
51
  analysis_results = reactive.Value([])
52
 
@@ -57,30 +48,8 @@ def server(input, output, session: Session):
57
  if not files:
58
  return
59
 
60
- results = []
61
- with tempfile.TemporaryDirectory() as temp_dir:
62
- for idx, file in enumerate(files):
63
- # Read image using OpenCV
64
- im = cv2.imread(file["datapath"])
65
-
66
- # Convert BGR to RGB for display
67
- im_rgb = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)
68
- pil_img = Image.fromarray(im_rgb)
69
-
70
- # Convert to base64 for HTML display
71
- buffered = BytesIO()
72
- pil_img.save(buffered, format="PNG")
73
- img_base64 = base64.b64encode(buffered.getvalue()).decode()
74
-
75
- # Run prediction with original BGR image
76
- prediction = predictor(im)
77
-
78
- results.append({
79
- "filename": file["name"],
80
- "image": img_base64,
81
- **prediction
82
- })
83
-
84
  # Update reactive value
85
  analysis_results.set(results)
86
 
@@ -127,8 +96,6 @@ def server(input, output, session: Session):
127
 
128
  app = App(app_ui, server)
129
 
130
-
131
-
132
  # --------------------------------------------------------
133
  # Reactive calculations and effects
134
  # --------------------------------------------------------
 
9
  # except:
10
  # print('Couldnt find CUDA device')
11
 
 
12
  import tempfile
 
 
13
 
14
  import pandas as pd
 
15
  from shiny import App, ui, render, reactive, Session
16
 
17
+ from python_utils import run_predictions
 
 
18
 
 
 
19
  app_ui = ui.page_fluid(
20
  ui.include_css("styles.css"),
21
  ui.panel_title(ui.div("Orchid TZ Viability Analyzer", class_="navbar-title")),
 
26
  ui.layout_sidebar(
27
  ui.sidebar(
28
  ui.input_file("upload", "Upload Images",
29
+ multiple=True,
30
+ accept=[".png", ".jpg", ".jpeg"]),
31
  ui.input_action_button("analyze", "Analyze", class_="btn-success"),
32
+ width=300
33
  ),
34
  ui.output_ui("results_container"),
35
  border=False,
 
38
  )
39
 
40
 
 
41
  def server(input, output, session: Session):
42
  analysis_results = reactive.Value([])
43
 
 
48
  if not files:
49
  return
50
 
51
+ results = run_predictions(files)
52
+ print(results)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  # Update reactive value
54
  analysis_results.set(results)
55
 
 
96
 
97
  app = App(app_ui, server)
98
 
 
 
99
  # --------------------------------------------------------
100
  # Reactive calculations and effects
101
  # --------------------------------------------------------
python_utils/__init__.py CHANGED
@@ -1 +1 @@
1
- from .get_model import *
 
1
+ from .running_model import *
python_utils/{get_model.py → running_model.py} RENAMED
@@ -1,3 +1,11 @@
 
 
 
 
 
 
 
 
1
  def get_set_up():
2
  import torch
3
  TORCH_VERSION = ".".join(torch.__version__.split(".")[:2])
@@ -20,7 +28,6 @@ def load_model():
20
  from detectron2.config import get_cfg
21
  from detectron2.data.datasets import register_coco_instances
22
 
23
- import os
24
  import numpy as np
25
 
26
  ## define relevant parameters
@@ -78,6 +85,62 @@ def load_model():
78
  predictor = DefaultPredictor(cfg)
79
  return predictor
80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  if __name__ == '__main__':
82
  # get_set_up()
83
- load_model()
 
1
+ import base64
2
+ from io import BytesIO
3
+ from PIL import Image
4
+ import torch
5
+ import cv2
6
+ import multiprocessing
7
+
8
+
9
  def get_set_up():
10
  import torch
11
  TORCH_VERSION = ".".join(torch.__version__.split(".")[:2])
 
28
  from detectron2.config import get_cfg
29
  from detectron2.data.datasets import register_coco_instances
30
 
 
31
  import numpy as np
32
 
33
  ## define relevant parameters
 
85
  predictor = DefaultPredictor(cfg)
86
  return predictor
87
 
88
+
89
+ def load_from_file(file):
90
+ # Read image using OpenCV
91
+ im = cv2.imread(file["datapath"])
92
+
93
+ # Convert BGR to RGB for display
94
+ im_rgb = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)
95
+ pil_img = Image.fromarray(im_rgb)
96
+
97
+ # Convert to base64 for HTML display
98
+ buffered = BytesIO()
99
+ pil_img.save(buffered, format="PNG")
100
+ img_base64 = base64.b64encode(buffered.getvalue()).decode()
101
+ return im, img_base64
102
+
103
+
104
+ def process_file(file, predictor_=None):
105
+ im, img_base64 = load_from_file(file)
106
+ ## Where using multiprocessing, use the global predictor
107
+ if predictor_ is None:
108
+ prediction = predictor(im)
109
+
110
+ else:
111
+ # otherwise use the passed predictor
112
+ prediction = predictor_(im)
113
+ return {
114
+ "filename": file["name"],
115
+ "image": img_base64,
116
+ **prediction
117
+ }
118
+
119
+
120
+ def run_predictions(files):
121
+ results = []
122
+
123
+ ## When using GPU, run single instance
124
+ if torch.cuda.is_available():
125
+ for file in files:
126
+ # Run prediction with original BGR image
127
+ predictor_ = load_model()
128
+ prediction_output = process_file(file, predictor_=predictor_)
129
+
130
+ results.append(prediction_output)
131
+ else:
132
+ ## Else use multiprocessing to run in parallel
133
+ print(f'Using {multiprocessing.cpu_count()} cpus')
134
+ # Set up to load one model per worker process
135
+ def init_worker():
136
+ global predictor
137
+ predictor = load_model() # Load once per worker process
138
+
139
+ with multiprocessing.Pool(initializer=init_worker) as pool:
140
+ results = pool.map(process_file, files)
141
+ return results
142
+
143
+
144
  if __name__ == '__main__':
145
  # get_set_up()
146
+ load_model()
shared.py CHANGED
@@ -3,4 +3,4 @@ from pathlib import Path
3
  import pandas as pd
4
 
5
  app_dir = Path(__file__).parent
6
- tips = pd.read_csv(app_dir / "tips.csv")
 
3
  import pandas as pd
4
 
5
  app_dir = Path(__file__).parent
6
+ # tips = pd.read_csv(app_dir / "tips.csv")
tips.csv DELETED
@@ -1,245 +0,0 @@
1
- total_bill,tip,sex,smoker,day,time,size
2
- 16.99,1.01,Female,No,Sun,Dinner,2
3
- 10.34,1.66,Male,No,Sun,Dinner,3
4
- 21.01,3.5,Male,No,Sun,Dinner,3
5
- 23.68,3.31,Male,No,Sun,Dinner,2
6
- 24.59,3.61,Female,No,Sun,Dinner,4
7
- 25.29,4.71,Male,No,Sun,Dinner,4
8
- 8.77,2.0,Male,No,Sun,Dinner,2
9
- 26.88,3.12,Male,No,Sun,Dinner,4
10
- 15.04,1.96,Male,No,Sun,Dinner,2
11
- 14.78,3.23,Male,No,Sun,Dinner,2
12
- 10.27,1.71,Male,No,Sun,Dinner,2
13
- 35.26,5.0,Female,No,Sun,Dinner,4
14
- 15.42,1.57,Male,No,Sun,Dinner,2
15
- 18.43,3.0,Male,No,Sun,Dinner,4
16
- 14.83,3.02,Female,No,Sun,Dinner,2
17
- 21.58,3.92,Male,No,Sun,Dinner,2
18
- 10.33,1.67,Female,No,Sun,Dinner,3
19
- 16.29,3.71,Male,No,Sun,Dinner,3
20
- 16.97,3.5,Female,No,Sun,Dinner,3
21
- 20.65,3.35,Male,No,Sat,Dinner,3
22
- 17.92,4.08,Male,No,Sat,Dinner,2
23
- 20.29,2.75,Female,No,Sat,Dinner,2
24
- 15.77,2.23,Female,No,Sat,Dinner,2
25
- 39.42,7.58,Male,No,Sat,Dinner,4
26
- 19.82,3.18,Male,No,Sat,Dinner,2
27
- 17.81,2.34,Male,No,Sat,Dinner,4
28
- 13.37,2.0,Male,No,Sat,Dinner,2
29
- 12.69,2.0,Male,No,Sat,Dinner,2
30
- 21.7,4.3,Male,No,Sat,Dinner,2
31
- 19.65,3.0,Female,No,Sat,Dinner,2
32
- 9.55,1.45,Male,No,Sat,Dinner,2
33
- 18.35,2.5,Male,No,Sat,Dinner,4
34
- 15.06,3.0,Female,No,Sat,Dinner,2
35
- 20.69,2.45,Female,No,Sat,Dinner,4
36
- 17.78,3.27,Male,No,Sat,Dinner,2
37
- 24.06,3.6,Male,No,Sat,Dinner,3
38
- 16.31,2.0,Male,No,Sat,Dinner,3
39
- 16.93,3.07,Female,No,Sat,Dinner,3
40
- 18.69,2.31,Male,No,Sat,Dinner,3
41
- 31.27,5.0,Male,No,Sat,Dinner,3
42
- 16.04,2.24,Male,No,Sat,Dinner,3
43
- 17.46,2.54,Male,No,Sun,Dinner,2
44
- 13.94,3.06,Male,No,Sun,Dinner,2
45
- 9.68,1.32,Male,No,Sun,Dinner,2
46
- 30.4,5.6,Male,No,Sun,Dinner,4
47
- 18.29,3.0,Male,No,Sun,Dinner,2
48
- 22.23,5.0,Male,No,Sun,Dinner,2
49
- 32.4,6.0,Male,No,Sun,Dinner,4
50
- 28.55,2.05,Male,No,Sun,Dinner,3
51
- 18.04,3.0,Male,No,Sun,Dinner,2
52
- 12.54,2.5,Male,No,Sun,Dinner,2
53
- 10.29,2.6,Female,No,Sun,Dinner,2
54
- 34.81,5.2,Female,No,Sun,Dinner,4
55
- 9.94,1.56,Male,No,Sun,Dinner,2
56
- 25.56,4.34,Male,No,Sun,Dinner,4
57
- 19.49,3.51,Male,No,Sun,Dinner,2
58
- 38.01,3.0,Male,Yes,Sat,Dinner,4
59
- 26.41,1.5,Female,No,Sat,Dinner,2
60
- 11.24,1.76,Male,Yes,Sat,Dinner,2
61
- 48.27,6.73,Male,No,Sat,Dinner,4
62
- 20.29,3.21,Male,Yes,Sat,Dinner,2
63
- 13.81,2.0,Male,Yes,Sat,Dinner,2
64
- 11.02,1.98,Male,Yes,Sat,Dinner,2
65
- 18.29,3.76,Male,Yes,Sat,Dinner,4
66
- 17.59,2.64,Male,No,Sat,Dinner,3
67
- 20.08,3.15,Male,No,Sat,Dinner,3
68
- 16.45,2.47,Female,No,Sat,Dinner,2
69
- 3.07,1.0,Female,Yes,Sat,Dinner,1
70
- 20.23,2.01,Male,No,Sat,Dinner,2
71
- 15.01,2.09,Male,Yes,Sat,Dinner,2
72
- 12.02,1.97,Male,No,Sat,Dinner,2
73
- 17.07,3.0,Female,No,Sat,Dinner,3
74
- 26.86,3.14,Female,Yes,Sat,Dinner,2
75
- 25.28,5.0,Female,Yes,Sat,Dinner,2
76
- 14.73,2.2,Female,No,Sat,Dinner,2
77
- 10.51,1.25,Male,No,Sat,Dinner,2
78
- 17.92,3.08,Male,Yes,Sat,Dinner,2
79
- 27.2,4.0,Male,No,Thur,Lunch,4
80
- 22.76,3.0,Male,No,Thur,Lunch,2
81
- 17.29,2.71,Male,No,Thur,Lunch,2
82
- 19.44,3.0,Male,Yes,Thur,Lunch,2
83
- 16.66,3.4,Male,No,Thur,Lunch,2
84
- 10.07,1.83,Female,No,Thur,Lunch,1
85
- 32.68,5.0,Male,Yes,Thur,Lunch,2
86
- 15.98,2.03,Male,No,Thur,Lunch,2
87
- 34.83,5.17,Female,No,Thur,Lunch,4
88
- 13.03,2.0,Male,No,Thur,Lunch,2
89
- 18.28,4.0,Male,No,Thur,Lunch,2
90
- 24.71,5.85,Male,No,Thur,Lunch,2
91
- 21.16,3.0,Male,No,Thur,Lunch,2
92
- 28.97,3.0,Male,Yes,Fri,Dinner,2
93
- 22.49,3.5,Male,No,Fri,Dinner,2
94
- 5.75,1.0,Female,Yes,Fri,Dinner,2
95
- 16.32,4.3,Female,Yes,Fri,Dinner,2
96
- 22.75,3.25,Female,No,Fri,Dinner,2
97
- 40.17,4.73,Male,Yes,Fri,Dinner,4
98
- 27.28,4.0,Male,Yes,Fri,Dinner,2
99
- 12.03,1.5,Male,Yes,Fri,Dinner,2
100
- 21.01,3.0,Male,Yes,Fri,Dinner,2
101
- 12.46,1.5,Male,No,Fri,Dinner,2
102
- 11.35,2.5,Female,Yes,Fri,Dinner,2
103
- 15.38,3.0,Female,Yes,Fri,Dinner,2
104
- 44.3,2.5,Female,Yes,Sat,Dinner,3
105
- 22.42,3.48,Female,Yes,Sat,Dinner,2
106
- 20.92,4.08,Female,No,Sat,Dinner,2
107
- 15.36,1.64,Male,Yes,Sat,Dinner,2
108
- 20.49,4.06,Male,Yes,Sat,Dinner,2
109
- 25.21,4.29,Male,Yes,Sat,Dinner,2
110
- 18.24,3.76,Male,No,Sat,Dinner,2
111
- 14.31,4.0,Female,Yes,Sat,Dinner,2
112
- 14.0,3.0,Male,No,Sat,Dinner,2
113
- 7.25,1.0,Female,No,Sat,Dinner,1
114
- 38.07,4.0,Male,No,Sun,Dinner,3
115
- 23.95,2.55,Male,No,Sun,Dinner,2
116
- 25.71,4.0,Female,No,Sun,Dinner,3
117
- 17.31,3.5,Female,No,Sun,Dinner,2
118
- 29.93,5.07,Male,No,Sun,Dinner,4
119
- 10.65,1.5,Female,No,Thur,Lunch,2
120
- 12.43,1.8,Female,No,Thur,Lunch,2
121
- 24.08,2.92,Female,No,Thur,Lunch,4
122
- 11.69,2.31,Male,No,Thur,Lunch,2
123
- 13.42,1.68,Female,No,Thur,Lunch,2
124
- 14.26,2.5,Male,No,Thur,Lunch,2
125
- 15.95,2.0,Male,No,Thur,Lunch,2
126
- 12.48,2.52,Female,No,Thur,Lunch,2
127
- 29.8,4.2,Female,No,Thur,Lunch,6
128
- 8.52,1.48,Male,No,Thur,Lunch,2
129
- 14.52,2.0,Female,No,Thur,Lunch,2
130
- 11.38,2.0,Female,No,Thur,Lunch,2
131
- 22.82,2.18,Male,No,Thur,Lunch,3
132
- 19.08,1.5,Male,No,Thur,Lunch,2
133
- 20.27,2.83,Female,No,Thur,Lunch,2
134
- 11.17,1.5,Female,No,Thur,Lunch,2
135
- 12.26,2.0,Female,No,Thur,Lunch,2
136
- 18.26,3.25,Female,No,Thur,Lunch,2
137
- 8.51,1.25,Female,No,Thur,Lunch,2
138
- 10.33,2.0,Female,No,Thur,Lunch,2
139
- 14.15,2.0,Female,No,Thur,Lunch,2
140
- 16.0,2.0,Male,Yes,Thur,Lunch,2
141
- 13.16,2.75,Female,No,Thur,Lunch,2
142
- 17.47,3.5,Female,No,Thur,Lunch,2
143
- 34.3,6.7,Male,No,Thur,Lunch,6
144
- 41.19,5.0,Male,No,Thur,Lunch,5
145
- 27.05,5.0,Female,No,Thur,Lunch,6
146
- 16.43,2.3,Female,No,Thur,Lunch,2
147
- 8.35,1.5,Female,No,Thur,Lunch,2
148
- 18.64,1.36,Female,No,Thur,Lunch,3
149
- 11.87,1.63,Female,No,Thur,Lunch,2
150
- 9.78,1.73,Male,No,Thur,Lunch,2
151
- 7.51,2.0,Male,No,Thur,Lunch,2
152
- 14.07,2.5,Male,No,Sun,Dinner,2
153
- 13.13,2.0,Male,No,Sun,Dinner,2
154
- 17.26,2.74,Male,No,Sun,Dinner,3
155
- 24.55,2.0,Male,No,Sun,Dinner,4
156
- 19.77,2.0,Male,No,Sun,Dinner,4
157
- 29.85,5.14,Female,No,Sun,Dinner,5
158
- 48.17,5.0,Male,No,Sun,Dinner,6
159
- 25.0,3.75,Female,No,Sun,Dinner,4
160
- 13.39,2.61,Female,No,Sun,Dinner,2
161
- 16.49,2.0,Male,No,Sun,Dinner,4
162
- 21.5,3.5,Male,No,Sun,Dinner,4
163
- 12.66,2.5,Male,No,Sun,Dinner,2
164
- 16.21,2.0,Female,No,Sun,Dinner,3
165
- 13.81,2.0,Male,No,Sun,Dinner,2
166
- 17.51,3.0,Female,Yes,Sun,Dinner,2
167
- 24.52,3.48,Male,No,Sun,Dinner,3
168
- 20.76,2.24,Male,No,Sun,Dinner,2
169
- 31.71,4.5,Male,No,Sun,Dinner,4
170
- 10.59,1.61,Female,Yes,Sat,Dinner,2
171
- 10.63,2.0,Female,Yes,Sat,Dinner,2
172
- 50.81,10.0,Male,Yes,Sat,Dinner,3
173
- 15.81,3.16,Male,Yes,Sat,Dinner,2
174
- 7.25,5.15,Male,Yes,Sun,Dinner,2
175
- 31.85,3.18,Male,Yes,Sun,Dinner,2
176
- 16.82,4.0,Male,Yes,Sun,Dinner,2
177
- 32.9,3.11,Male,Yes,Sun,Dinner,2
178
- 17.89,2.0,Male,Yes,Sun,Dinner,2
179
- 14.48,2.0,Male,Yes,Sun,Dinner,2
180
- 9.6,4.0,Female,Yes,Sun,Dinner,2
181
- 34.63,3.55,Male,Yes,Sun,Dinner,2
182
- 34.65,3.68,Male,Yes,Sun,Dinner,4
183
- 23.33,5.65,Male,Yes,Sun,Dinner,2
184
- 45.35,3.5,Male,Yes,Sun,Dinner,3
185
- 23.17,6.5,Male,Yes,Sun,Dinner,4
186
- 40.55,3.0,Male,Yes,Sun,Dinner,2
187
- 20.69,5.0,Male,No,Sun,Dinner,5
188
- 20.9,3.5,Female,Yes,Sun,Dinner,3
189
- 30.46,2.0,Male,Yes,Sun,Dinner,5
190
- 18.15,3.5,Female,Yes,Sun,Dinner,3
191
- 23.1,4.0,Male,Yes,Sun,Dinner,3
192
- 15.69,1.5,Male,Yes,Sun,Dinner,2
193
- 19.81,4.19,Female,Yes,Thur,Lunch,2
194
- 28.44,2.56,Male,Yes,Thur,Lunch,2
195
- 15.48,2.02,Male,Yes,Thur,Lunch,2
196
- 16.58,4.0,Male,Yes,Thur,Lunch,2
197
- 7.56,1.44,Male,No,Thur,Lunch,2
198
- 10.34,2.0,Male,Yes,Thur,Lunch,2
199
- 43.11,5.0,Female,Yes,Thur,Lunch,4
200
- 13.0,2.0,Female,Yes,Thur,Lunch,2
201
- 13.51,2.0,Male,Yes,Thur,Lunch,2
202
- 18.71,4.0,Male,Yes,Thur,Lunch,3
203
- 12.74,2.01,Female,Yes,Thur,Lunch,2
204
- 13.0,2.0,Female,Yes,Thur,Lunch,2
205
- 16.4,2.5,Female,Yes,Thur,Lunch,2
206
- 20.53,4.0,Male,Yes,Thur,Lunch,4
207
- 16.47,3.23,Female,Yes,Thur,Lunch,3
208
- 26.59,3.41,Male,Yes,Sat,Dinner,3
209
- 38.73,3.0,Male,Yes,Sat,Dinner,4
210
- 24.27,2.03,Male,Yes,Sat,Dinner,2
211
- 12.76,2.23,Female,Yes,Sat,Dinner,2
212
- 30.06,2.0,Male,Yes,Sat,Dinner,3
213
- 25.89,5.16,Male,Yes,Sat,Dinner,4
214
- 48.33,9.0,Male,No,Sat,Dinner,4
215
- 13.27,2.5,Female,Yes,Sat,Dinner,2
216
- 28.17,6.5,Female,Yes,Sat,Dinner,3
217
- 12.9,1.1,Female,Yes,Sat,Dinner,2
218
- 28.15,3.0,Male,Yes,Sat,Dinner,5
219
- 11.59,1.5,Male,Yes,Sat,Dinner,2
220
- 7.74,1.44,Male,Yes,Sat,Dinner,2
221
- 30.14,3.09,Female,Yes,Sat,Dinner,4
222
- 12.16,2.2,Male,Yes,Fri,Lunch,2
223
- 13.42,3.48,Female,Yes,Fri,Lunch,2
224
- 8.58,1.92,Male,Yes,Fri,Lunch,1
225
- 15.98,3.0,Female,No,Fri,Lunch,3
226
- 13.42,1.58,Male,Yes,Fri,Lunch,2
227
- 16.27,2.5,Female,Yes,Fri,Lunch,2
228
- 10.09,2.0,Female,Yes,Fri,Lunch,2
229
- 20.45,3.0,Male,No,Sat,Dinner,4
230
- 13.28,2.72,Male,No,Sat,Dinner,2
231
- 22.12,2.88,Female,Yes,Sat,Dinner,2
232
- 24.01,2.0,Male,Yes,Sat,Dinner,4
233
- 15.69,3.0,Male,Yes,Sat,Dinner,3
234
- 11.61,3.39,Male,No,Sat,Dinner,2
235
- 10.77,1.47,Male,No,Sat,Dinner,2
236
- 15.53,3.0,Male,Yes,Sat,Dinner,2
237
- 10.07,1.25,Male,No,Sat,Dinner,2
238
- 12.6,1.0,Male,Yes,Sat,Dinner,2
239
- 32.83,1.17,Male,Yes,Sat,Dinner,2
240
- 35.83,4.67,Female,No,Sat,Dinner,3
241
- 29.03,5.92,Male,No,Sat,Dinner,3
242
- 27.18,2.0,Female,Yes,Sat,Dinner,2
243
- 22.67,2.0,Male,Yes,Sat,Dinner,2
244
- 17.82,1.75,Male,No,Sat,Dinner,2
245
- 18.78,3.0,Female,No,Thur,Dinner,2