jflo commited on
Commit
24f3093
·
verified ·
1 Parent(s): 61da01c

Added home path

Browse files
Files changed (1) hide show
  1. app.py +111 -108
app.py CHANGED
@@ -1,108 +1,111 @@
1
- from typing import Annotated
2
- from fastapi import FastAPI, File, UploadFile
3
- from fastapi.responses import JSONResponse
4
- import uvicorn
5
-
6
- from PIL import Image
7
-
8
- import torch
9
- import torch.nn.functional as F
10
- from torchvision import transforms
11
-
12
- app = FastAPI()
13
-
14
- def transform_img(img: Image.Image) -> torch.tensor:
15
- # Transformations that will be applied
16
- the_transform = transforms.Compose([
17
- transforms.Resize((224,224)),
18
- transforms.CenterCrop((224,224)),
19
- transforms.ToTensor(),
20
- transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])
21
- ])
22
- return the_transform(img)
23
-
24
- # Returns string with class and probability
25
- def classify_img(img: Image.Image) -> dict:
26
- class_names = ['AIR COMPRESSOR',
27
- 'ALTERNATOR',
28
- 'BATTERY',
29
- 'BRAKE CALIPER',
30
- 'BRAKE PAD',
31
- 'BRAKE ROTOR',
32
- 'CAMSHAFT',
33
- 'CARBERATOR',
34
- 'CLUTCH PLATE',
35
- 'COIL SPRING',
36
- 'CRANKSHAFT',
37
- 'CYLINDER HEAD',
38
- 'DISTRIBUTOR',
39
- 'ENGINE BLOCK',
40
- 'ENGINE VALVE',
41
- 'FUEL INJECTOR',
42
- 'FUSE BOX',
43
- 'GAS CAP',
44
- 'HEADLIGHTS',
45
- 'IDLER ARM',
46
- 'IGNITION COIL',
47
- 'INSTRUMENT CLUSTER',
48
- 'LEAF SPRING',
49
- 'LOWER CONTROL ARM',
50
- 'MUFFLER',
51
- 'OIL FILTER',
52
- 'OIL PAN',
53
- 'OIL PRESSURE SENSOR',
54
- 'OVERFLOW TANK',
55
- 'OXYGEN SENSOR',
56
- 'PISTON',
57
- 'PRESSURE PLATE',
58
- 'RADIATOR',
59
- 'RADIATOR FAN',
60
- 'RADIATOR HOSE',
61
- 'RADIO',
62
- 'RIM',
63
- 'SHIFT KNOB',
64
- 'SIDE MIRROR',
65
- 'SPARK PLUG',
66
- 'SPOILER',
67
- 'STARTER',
68
- 'TAILLIGHTS',
69
- 'THERMOSTAT',
70
- 'TORQUE CONVERTER',
71
- 'TRANSMISSION',
72
- 'VACUUM BRAKE BOOSTER',
73
- 'VALVE LIFTER',
74
- 'WATER PUMP',
75
- 'WINDOW REGULATOR']
76
- model = torch.jit.load("car_part_traced_classifier_resnet50.ptl")
77
- # Applying transformation to the image
78
- model_img = transform_img(img)
79
- model_img = model_img.view(1,3,224,224)
80
-
81
- # Running image through the model
82
- model.eval()
83
- with torch.no_grad():
84
- result = model(model_img)
85
-
86
- # Converting values to softmax values
87
- result = F.softmax(result,dim=1)
88
- # Grabbing top 3 indices and probabilities for each index
89
- top3_prob, top3_catid = torch.topk(result,3)
90
-
91
- # Dictionary I will display
92
- model_output = {}
93
- for i in range(top3_prob.size(1)):
94
- car_part_name = class_names[top3_catid[0][i].item()]
95
- probability = round(top3_prob[0][i].item() * 100, 2)
96
-
97
- model_output[f"top{i+1}"] = {"name": car_part_name, "probability": probability}
98
-
99
- return model_output
100
-
101
- @app.post("/upload", response_model=dict)
102
- async def upload(file: UploadFile = File(...)) -> JSONResponse:
103
-
104
- pil_img = Image.open(file.file)
105
- result = classify_img(pil_img)
106
-
107
- return JSONResponse(content=result, status_code=201)
108
-
 
 
 
 
1
+ from typing import Annotated
2
+ from fastapi import FastAPI, File, UploadFile
3
+ from fastapi.responses import JSONResponse
4
+ import uvicorn
5
+
6
+ from PIL import Image
7
+
8
+ import torch
9
+ import torch.nn.functional as F
10
+ from torchvision import transforms
11
+
12
+ app = FastAPI()
13
+
14
+ def transform_img(img: Image.Image) -> torch.tensor:
15
+ # Transformations that will be applied
16
+ the_transform = transforms.Compose([
17
+ transforms.Resize((224,224)),
18
+ transforms.CenterCrop((224,224)),
19
+ transforms.ToTensor(),
20
+ transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])
21
+ ])
22
+ return the_transform(img)
23
+
24
+ # Returns string with class and probability
25
+ def classify_img(img: Image.Image) -> dict:
26
+ class_names = ['AIR COMPRESSOR',
27
+ 'ALTERNATOR',
28
+ 'BATTERY',
29
+ 'BRAKE CALIPER',
30
+ 'BRAKE PAD',
31
+ 'BRAKE ROTOR',
32
+ 'CAMSHAFT',
33
+ 'CARBERATOR',
34
+ 'CLUTCH PLATE',
35
+ 'COIL SPRING',
36
+ 'CRANKSHAFT',
37
+ 'CYLINDER HEAD',
38
+ 'DISTRIBUTOR',
39
+ 'ENGINE BLOCK',
40
+ 'ENGINE VALVE',
41
+ 'FUEL INJECTOR',
42
+ 'FUSE BOX',
43
+ 'GAS CAP',
44
+ 'HEADLIGHTS',
45
+ 'IDLER ARM',
46
+ 'IGNITION COIL',
47
+ 'INSTRUMENT CLUSTER',
48
+ 'LEAF SPRING',
49
+ 'LOWER CONTROL ARM',
50
+ 'MUFFLER',
51
+ 'OIL FILTER',
52
+ 'OIL PAN',
53
+ 'OIL PRESSURE SENSOR',
54
+ 'OVERFLOW TANK',
55
+ 'OXYGEN SENSOR',
56
+ 'PISTON',
57
+ 'PRESSURE PLATE',
58
+ 'RADIATOR',
59
+ 'RADIATOR FAN',
60
+ 'RADIATOR HOSE',
61
+ 'RADIO',
62
+ 'RIM',
63
+ 'SHIFT KNOB',
64
+ 'SIDE MIRROR',
65
+ 'SPARK PLUG',
66
+ 'SPOILER',
67
+ 'STARTER',
68
+ 'TAILLIGHTS',
69
+ 'THERMOSTAT',
70
+ 'TORQUE CONVERTER',
71
+ 'TRANSMISSION',
72
+ 'VACUUM BRAKE BOOSTER',
73
+ 'VALVE LIFTER',
74
+ 'WATER PUMP',
75
+ 'WINDOW REGULATOR']
76
+ model = torch.jit.load("car_part_traced_classifier_resnet50.ptl")
77
+ # Applying transformation to the image
78
+ model_img = transform_img(img)
79
+ model_img = model_img.view(1,3,224,224)
80
+
81
+ # Running image through the model
82
+ model.eval()
83
+ with torch.no_grad():
84
+ result = model(model_img)
85
+
86
+ # Converting values to softmax values
87
+ result = F.softmax(result,dim=1)
88
+ # Grabbing top 3 indices and probabilities for each index
89
+ top3_prob, top3_catid = torch.topk(result,3)
90
+
91
+ # Dictionary I will display
92
+ model_output = {}
93
+ for i in range(top3_prob.size(1)):
94
+ car_part_name = class_names[top3_catid[0][i].item()]
95
+ probability = round(top3_prob[0][i].item() * 100, 2)
96
+
97
+ model_output[f"top{i+1}"] = {"name": car_part_name, "probability": probability}
98
+
99
+ return model_output
100
+
101
+ @app.post("/upload", response_model=dict)
102
+ async def upload(file: UploadFile = File(...)) -> JSONResponse:
103
+
104
+ pil_img = Image.open(file.file)
105
+ result = classify_img(pil_img)
106
+
107
+ return JSONResponse(content=result, status_code=201)
108
+
109
+ @app.get("/")
110
+ def api_home()
111
+ return JSONResponse({'detail': 'Welcome to FastAPI!'}, status_code=200)