mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-05 18:55:23 +03:00
Refactor DeepstackDetectorConfig and DeepStack classes to use httpx for making API requests
This commit is contained in:
parent
baf671b764
commit
c7d2fbeeb1
@ -1,8 +1,8 @@
|
|||||||
import io
|
import io
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
import httpx
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import requests
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from pydantic import Field
|
from pydantic import Field
|
||||||
from typing_extensions import Literal
|
from typing_extensions import Literal
|
||||||
@ -20,7 +20,7 @@ class DeepstackDetectorConfig(BaseDetectorConfig):
|
|||||||
api_url: str = Field(
|
api_url: str = Field(
|
||||||
default="http://localhost:80/v1/vision/detection", title="DeepStack API URL"
|
default="http://localhost:80/v1/vision/detection", title="DeepStack API URL"
|
||||||
)
|
)
|
||||||
api_timeout: float = Field(default=0.1, title="DeepStack API timeout (in seconds)")
|
api_timeout: float = Field(default=1.0, title="DeepStack API timeout (in seconds)")
|
||||||
api_key: str = Field(default="", title="DeepStack API key (if required)")
|
api_key: str = Field(default="", title="DeepStack API key (if required)")
|
||||||
|
|
||||||
|
|
||||||
@ -44,18 +44,23 @@ class DeepStack(DetectionApi):
|
|||||||
def detect_raw(self, tensor_input):
|
def detect_raw(self, tensor_input):
|
||||||
image_data = np.squeeze(tensor_input).astype(np.uint8)
|
image_data = np.squeeze(tensor_input).astype(np.uint8)
|
||||||
image = Image.fromarray(image_data)
|
image = Image.fromarray(image_data)
|
||||||
self.w, self.h = image.size
|
w, h = image.size
|
||||||
with io.BytesIO() as output:
|
with io.BytesIO() as output:
|
||||||
image.save(output, format="JPEG")
|
image.save(output, format="JPEG")
|
||||||
image_bytes = output.getvalue()
|
image_bytes = output.getvalue()
|
||||||
data = {"api_key": self.api_key}
|
data = {"api_key": self.api_key}
|
||||||
response = requests.post(
|
try:
|
||||||
|
response = httpx.post(
|
||||||
self.api_url,
|
self.api_url,
|
||||||
data=data,
|
data=data,
|
||||||
files={"image": image_bytes},
|
files={"image": image_bytes},
|
||||||
timeout=self.api_timeout,
|
timeout=self.api_timeout,
|
||||||
)
|
)
|
||||||
response_json = response.json()
|
response_json = response.json()
|
||||||
|
except httpx.RequestError as e:
|
||||||
|
logger.error(f"An error occurred while making the request: {e}")
|
||||||
|
return np.zeros((20, 6), np.float32)
|
||||||
|
|
||||||
detections = np.zeros((20, 6), np.float32)
|
detections = np.zeros((20, 6), np.float32)
|
||||||
if response_json.get("predictions") is None:
|
if response_json.get("predictions") is None:
|
||||||
logger.debug(f"Error in parsing response json: {response_json}")
|
logger.debug(f"Error in parsing response json: {response_json}")
|
||||||
@ -73,10 +78,10 @@ class DeepStack(DetectionApi):
|
|||||||
detections[i] = [
|
detections[i] = [
|
||||||
label,
|
label,
|
||||||
float(detection["confidence"]),
|
float(detection["confidence"]),
|
||||||
detection["y_min"] / self.h,
|
detection["y_min"] / h,
|
||||||
detection["x_min"] / self.w,
|
detection["x_min"] / w,
|
||||||
detection["y_max"] / self.h,
|
detection["y_max"] / h,
|
||||||
detection["x_max"] / self.w,
|
detection["x_max"] / w,
|
||||||
]
|
]
|
||||||
|
|
||||||
return detections
|
return detections
|
||||||
|
|||||||
@ -2,6 +2,7 @@ click == 8.1.*
|
|||||||
Flask == 2.3.*
|
Flask == 2.3.*
|
||||||
faster-fifo == 1.4.*
|
faster-fifo == 1.4.*
|
||||||
imutils == 0.5.*
|
imutils == 0.5.*
|
||||||
|
httpx == 0.24.*
|
||||||
matplotlib == 3.7.*
|
matplotlib == 3.7.*
|
||||||
mypy == 1.4.1
|
mypy == 1.4.1
|
||||||
numpy == 1.23.*
|
numpy == 1.23.*
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user