Skip to content

Commit

Permalink
feat: api set kb (#106)
Browse files Browse the repository at this point in the history
  • Loading branch information
Zeyi-Lin authored Sep 11, 2024
1 parent a1ccb1a commit f66677f
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 7 deletions.
27 changes: 27 additions & 0 deletions deploy_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,33 @@ async def watermark(
return result_messgae


# 设置照片KB值接口(RGB图)
@app.post("/set_kb")
async def set_kb(
input_image: UploadFile,
kb: int = Form(50),
):
image_bytes = await input_image.read()
nparr = np.frombuffer(image_bytes, np.uint8)
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)

try:
result_image = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
result_image_base64 = resize_image_to_kb_base64(result_image, int(kb))

result_messgae = {
"status": True,
"image_base64": result_image_base64,
}
except Exception as e:
result_messgae = {
"status": False,
"error": e,
}

return result_messgae


if __name__ == "__main__":
import uvicorn

Expand Down
47 changes: 47 additions & 0 deletions docs/api_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,19 @@ python deploy_api.py

`人像抠图`接口的逻辑是发送一张 RGB 图像,输出一张标准抠图人像照和高清抠图人像照(无任何背景填充)。

### 5.图像加水印

接口名:`watermark`

`图像加水印`接口的功能是接收一个水印文本,然后在原图上添加指定的水印。用户可以指定水印的位置、透明度和大小等属性,以便将水印无缝地融合到原图中。


### 6.设置图像KB大小

接口名:`set_kb`

`设置图像KB大小`接口的功能是接收一张图像和目标文件大小(以KB为单位),如果设置的KB值小于原文件,则调整压缩率;如果设置的KB值大于源文件,则通过给文件头添加信息的方式调大KB值,目标是让图像的最终大小与设置的KB值一致。

<br>

## cURL 请求示例
Expand Down Expand Up @@ -111,6 +124,16 @@ curl -X 'POST' \
-F 'text=Hello'
```

### 6. 设置图像KB大小
```bash
curl -X 'POST' \
'http://127.0.0.1:8080/set_kb' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'input_image=@demo/images/test0.jpg;type=image/jpeg' \
-F 'kb=50'
```


<br>

Expand Down Expand Up @@ -211,6 +234,30 @@ else:
print(f"Request failed with status code {response.status_code}: {response.text}")
```

### 6. 设置图像KB大小
```bash
import requests

# 设置请求的 URL
url = "http://127.0.0.1:8080/set_kb"

# 设置文件和其他表单数据
input_image_path = "demo/images/test0.jpg"
files = {"input_image": open(input_image_path, "rb")}
data = {"kb": 50}

# 发送 POST 请求
response = requests.post(url, files=files, data=data)

# 检查响应
if response.ok:
# 输出响应内容
print(response.json())
else:
# 输出错误信息
print(f"Request failed with status code {response.status_code}: {response.text}")
```
<br>
## Java 请求示例
Expand Down
15 changes: 8 additions & 7 deletions hivision/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,6 @@ def resize_image_to_kb(input_image, output_image_path, target_size_kb):
quality = 1


import numpy as np
from PIL import Image
import io
import base64


def resize_image_to_kb_base64(input_image, target_size_kb, mode="exact"):
"""
Resize an image to a target size in KB and return it as a base64 encoded string.
Expand Down Expand Up @@ -154,13 +148,20 @@ def resize_image_to_kb_base64(input_image, target_size_kb, mode="exact"):
return img_base64


def numpy_2_base64(img: np.ndarray):
def numpy_2_base64(img: np.ndarray) -> str:
_, buffer = cv2.imencode(".png", img)
base64_image = base64.b64encode(buffer).decode("utf-8")

return base64_image


def base64_2_numpy(base64_image: str) -> np.ndarray:
img = base64.b64decode(base64_image)
img = np.frombuffer(img, np.uint8)

return img


def save_numpy_image(numpy_img, file_path):
# 检查数组的形状
if numpy_img.shape[2] == 4:
Expand Down

0 comments on commit f66677f

Please sign in to comment.