Skip to content

Commit eb3d23e

Browse files
committed
implement API for vectorizing image from image stream
1 parent b567703 commit eb3d23e

File tree

4 files changed

+56
-0
lines changed

4 files changed

+56
-0
lines changed

backend/internals/azure_ai_vision.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,34 @@ def analyze_image(
3333
)
3434
logger.info("Analyzed image")
3535
return result.as_dict()
36+
37+
def vectorize_image(
38+
self,
39+
image: bytes,
40+
) -> dict:
41+
# FIXME: replace with Azure SDK when available
42+
from urllib.parse import urljoin
43+
44+
import requests
45+
46+
url = urljoin(
47+
self.settings.azure_ai_vision_endpoint,
48+
"/computervision/retrieval:vectorizeImage",
49+
)
50+
params = {
51+
"overload": "stream",
52+
"api-version": "2023-02-01-preview",
53+
"modelVersion": "latest",
54+
}
55+
headers = {
56+
"Content-Type": "application/octet-stream",
57+
"Ocp-Apim-Subscription-Key": self.settings.azure_ai_vision_api_key,
58+
}
59+
response = requests.post(
60+
url=url,
61+
params=params,
62+
headers=headers,
63+
data=image,
64+
)
65+
response.raise_for_status()
66+
return response.json()

backend/routers/azure_ai_vision.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,21 @@ async def analyze_image(file: UploadFile):
3535
return azure_ai_vision_schemas.ImageAnalysisResponse(
3636
result=result,
3737
)
38+
39+
40+
@router.post(
41+
"/image/vectorize/",
42+
status_code=200,
43+
)
44+
async def vectorize_image(file: UploadFile):
45+
try:
46+
content = await file.read()
47+
result = client.vectorize_image(
48+
image=content,
49+
)
50+
except Exception as e:
51+
logger.error(f"Failed to vectorize image: {e}")
52+
raise
53+
return azure_ai_vision_schemas.VectorizeImageResponse(
54+
result=result,
55+
)

backend/schemas/azure_ai_vision.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,7 @@
77

88
class ImageAnalysisResponse(BaseModel):
99
result: dict
10+
11+
12+
class VectorizeImageResponse(BaseModel):
13+
result: dict

docs/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@
4545
### Azure AI Vision
4646

4747
- [Quickstart: Image Analysis 4.0](https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/quickstarts-sdk/image-analysis-client-library-40?tabs=visual-studio%2Cwindows&pivots=programming-language-python)
48+
- [Do image retrieval using multimodal embeddings (version 4.0)](https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/how-to/image-retrieval?tabs=python)
49+
- [Multimodal embeddings (version 4.0)](https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/concept-image-retrieval)
50+
- [Image Retrieval - Vectorize Image From Image Stream](https://learn.microsoft.com/en-us/rest/api/computervision/image-retrieval/vectorize-image-from-image-stream?view=rest-computervision-2023-02-01-preview&tabs=HTTP)
4851

4952
### Azure AI Document Intelligence
5053

0 commit comments

Comments
 (0)