Skip to content

Commit 3eec033

Browse files
feat(idle_requests): change json matrix on byte array in requests
1 parent 22d7321 commit 3eec033

File tree

4 files changed

+26
-25
lines changed

4 files changed

+26
-25
lines changed

idle_models/IdleObjectDetectionModel.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ def __preprocess_image__(self, img: np.array) -> np.array:
2424
return img
2525

2626
@torch.no_grad()
27-
def __call__(self, img: np.array) -> list:
27+
def __call__(self, img: np.array) -> torch.Tensor:
2828
img = self.__preprocess_image__(img)
2929
pred = self.model(img, augment=False)[0]
3030
pred = non_max_suppression(
3131
pred, 0.45, 0.5, classes=[67], agnostic=False)[0]
3232
pred[:, :4] = scale_coords(
3333
img.shape[2:], pred[:, :4], self.img_shape).round()
34-
return pred[:, :4], pred[:, 4]
34+
return pred[:, :5]

idle_models/app.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from configs.load_configs import *
44
from IdleObjectDetectionModel import IdleObjectDetectionModel
55
import numpy as np
6+
import io
67

78

89
app = Flask(__name__)
@@ -13,15 +14,15 @@
1314
CLASSES
1415
)
1516

17+
convert_bytes2image = lambda bytes: np.array(Image.open(io.BytesIO(bytes)), dtype=np.uint8)
1618

1719
@app.route('/predict', methods=['POST'])
1820
def predict():
1921
if request.method == 'POST':
20-
image = np.array(request.json['image']).astype(np.float32)
21-
coords, confs = model(image)
22+
image = convert_bytes2image(request.files["image"].read())
23+
coords = model(image)
2224
return jsonify(
2325
{
24-
"coordinates": coords.tolist(),
25-
"confidences": confs.tolist()
26+
"coordinates": coords.tolist()
2627
}
2728
)

main.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,15 @@ def run():
2828
time.sleep(1)
2929
continue
3030
time.sleep(1)
31-
preds, scores = predict(img, server_url, logger)
31+
preds = predict(img, server_url, logger)
3232
if preds is None:
33+
logger.warning("Empty response")
3334
time.sleep(1)
3435
continue
35-
img = put_rectangle(img, preds, scores)
36-
if len(scores) > 0:
36+
if len(preds) > 0:
3737
logger.info("Telephone is detected")
3838
if check_coordinates_diffs(prev_preds, preds):
39+
img = put_rectangle(img, preds[:, :4], preds[:, 4])
3940
send_report_and_save_photo(img, start_tracking)
4041
prev_preds = preds
4142

send_request.py

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,30 @@
11
import requests
22
import numpy as np
33
from logging import Logger
4+
from PIL import Image
5+
import io
46

57

68
PORT = 5001
79

810

11+
def convert_image2bytes(image: np.array, format='PNG', encoding='utf-8'):
12+
pil_image = Image.fromarray(image)
13+
img_byte_arr = io.BytesIO()
14+
pil_image.save(img_byte_arr, format=format)
15+
img_byte_arr.seek(0)
16+
return img_byte_arr
17+
18+
919
def predict(img: np.array, server_url: str, logger: Logger) -> list:
1020
try:
1121
response = requests.post(
1222
f"{server_url}:{PORT}/predict",
13-
json={
14-
"image": img.tolist()
23+
files={
24+
"image": ("image", convert_image2bytes(img), "image/png")
1525
}
1626
)
27+
response.raise_for_status()
28+
return np.array(response.json().get("coordinates"))
1729
except Exception as exc:
18-
logger.critical(
19-
"Cannot send request. Error - {}".format(exc)
20-
)
21-
return [None, None]
22-
if response.status_code == 200:
23-
coordinates = np.array(response.json().get("coordinates"))
24-
confidences = np.array(response.json().get("confidences"))
25-
else:
26-
logger.warning(
27-
"Status code = {}\n response = {}".format(
28-
response.status_code, response)
29-
)
30-
coordinates = confidences = None
31-
return [coordinates, confidences]
30+
logger.critical("Cannot send request. Error - {}".format(exc))

0 commit comments

Comments
 (0)