Skip to content

Commit c04d670

Browse files
committed
Move base64_image related functions to common directory
Signed-off-by: Jin Hai <[email protected]>
1 parent 256b0fb commit c04d670

File tree

7 files changed

+92
-61
lines changed

7 files changed

+92
-61
lines changed

api/apps/llm_app.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from api.db import StatusEnum, LLMType
2525
from api.db.db_models import TenantLLM
2626
from api.utils.api_utils import get_json_result
27-
from api.utils.base64_image import test_image
27+
from common.base64_image import test_image
2828
from rag.llm import EmbeddingModel, ChatModel, RerankModel, CvModel, TTSModel
2929

3030

api/utils/base64_image.py

Lines changed: 15 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,15 @@
1-
import base64
2-
import logging
3-
from functools import partial
4-
from io import BytesIO
5-
6-
from PIL import Image
7-
8-
test_image_base64 = "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAA6ElEQVR4nO3QwQ3AIBDAsIP9d25XIC+EZE8QZc18w5l9O+AlZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBT+IYAHHLHkdEgAAAABJRU5ErkJggg=="
9-
test_image = base64.b64decode(test_image_base64)
10-
11-
12-
async def image2id(d: dict, storage_put_func: partial, objname:str, bucket:str="imagetemps"):
13-
import logging
14-
from io import BytesIO
15-
import trio
16-
from rag.svr.task_executor import minio_limiter
17-
if not d.get("image"):
18-
return
19-
20-
with BytesIO() as output_buffer:
21-
if isinstance(d["image"], bytes):
22-
output_buffer.write(d["image"])
23-
output_buffer.seek(0)
24-
else:
25-
# If the image is in RGBA mode, convert it to RGB mode before saving it in JPEG format.
26-
if d["image"].mode in ("RGBA", "P"):
27-
converted_image = d["image"].convert("RGB")
28-
d["image"] = converted_image
29-
try:
30-
d["image"].save(output_buffer, format='JPEG')
31-
except OSError as e:
32-
logging.warning(
33-
"Saving image exception, ignore: {}".format(str(e)))
34-
35-
async with minio_limiter:
36-
await trio.to_thread.run_sync(lambda: storage_put_func(bucket=bucket, fnm=objname, binary=output_buffer.getvalue()))
37-
d["img_id"] = f"{bucket}-{objname}"
38-
if not isinstance(d["image"], bytes):
39-
d["image"].close()
40-
del d["image"] # Remove image reference
41-
42-
43-
def id2image(image_id:str|None, storage_get_func: partial):
44-
if not image_id:
45-
return
46-
arr = image_id.split("-")
47-
if len(arr) != 2:
48-
return
49-
bkt, nm = image_id.split("-")
50-
try:
51-
blob = storage_get_func(bucket=bkt, filename=nm)
52-
if not blob:
53-
return
54-
return Image.open(BytesIO(blob))
55-
except Exception as e:
56-
logging.exception(e)
1+
#
2+
# Copyright 2024 The InfiniFlow Authors. All Rights Reserved.
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
#

common/base64_image.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#
2+
# Copyright 2024 The InfiniFlow Authors. All Rights Reserved.
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
#
16+
17+
import base64
18+
import logging
19+
from functools import partial
20+
from io import BytesIO
21+
22+
from PIL import Image
23+
24+
test_image_base64 = "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAA6ElEQVR4nO3QwQ3AIBDAsIP9d25XIC+EZE8QZc18w5l9O+AlZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBWYFZgVmBT+IYAHHLHkdEgAAAABJRU5ErkJggg=="
25+
test_image = base64.b64decode(test_image_base64)
26+
27+
28+
async def image2id(d: dict, storage_put_func: partial, objname:str, bucket:str="imagetemps"):
29+
import logging
30+
from io import BytesIO
31+
import trio
32+
from rag.svr.task_executor import minio_limiter
33+
if not d.get("image"):
34+
return
35+
36+
with BytesIO() as output_buffer:
37+
if isinstance(d["image"], bytes):
38+
output_buffer.write(d["image"])
39+
output_buffer.seek(0)
40+
else:
41+
# If the image is in RGBA mode, convert it to RGB mode before saving it in JPEG format.
42+
if d["image"].mode in ("RGBA", "P"):
43+
converted_image = d["image"].convert("RGB")
44+
d["image"] = converted_image
45+
try:
46+
d["image"].save(output_buffer, format='JPEG')
47+
except OSError as e:
48+
logging.warning(
49+
"Saving image exception, ignore: {}".format(str(e)))
50+
51+
async with minio_limiter:
52+
await trio.to_thread.run_sync(lambda: storage_put_func(bucket=bucket, fnm=objname, binary=output_buffer.getvalue()))
53+
d["img_id"] = f"{bucket}-{objname}"
54+
if not isinstance(d["image"], bytes):
55+
d["image"].close()
56+
del d["image"] # Remove image reference
57+
58+
59+
def id2image(image_id:str|None, storage_get_func: partial):
60+
if not image_id:
61+
return
62+
arr = image_id.split("-")
63+
if len(arr) != 2:
64+
return
65+
bkt, nm = image_id.split("-")
66+
try:
67+
blob = storage_get_func(bucket=bkt, filename=nm)
68+
if not blob:
69+
return
70+
return Image.open(BytesIO(blob))
71+
except Exception as e:
72+
logging.exception(e)

rag/flow/hierarchical_merger/hierarchical_merger.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import trio
2222

2323
from common.misc_utils import get_uuid
24-
from api.utils.base64_image import id2image, image2id
24+
from common.base64_image import id2image, image2id
2525
from deepdoc.parser.pdf_parser import RAGFlowPdfParser
2626
from rag.flow.base import ProcessBase, ProcessParamBase
2727
from rag.flow.hierarchical_merger.schema import HierarchicalMergerFromUpstream

rag/flow/parser/parser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from api.db.services.file_service import FileService
2828
from api.db.services.llm_service import LLMBundle
2929
from common.misc_utils import get_uuid
30-
from api.utils.base64_image import image2id
30+
from common.base64_image import image2id
3131
from deepdoc.parser import ExcelParser
3232
from deepdoc.parser.mineru_parser import MinerUParser
3333
from deepdoc.parser.pdf_parser import PlainParser, RAGFlowPdfParser, VisionParser

rag/flow/splitter/splitter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import trio
1919

2020
from common.misc_utils import get_uuid
21-
from api.utils.base64_image import id2image, image2id
21+
from common.base64_image import id2image, image2id
2222
from deepdoc.parser.pdf_parser import RAGFlowPdfParser
2323
from rag.flow.base import ProcessBase, ProcessParamBase
2424
from rag.flow.splitter.schema import SplitterFromUpstream

rag/svr/task_executor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from api.db.services.knowledgebase_service import KnowledgebaseService
2828
from api.db.services.pipeline_operation_log_service import PipelineOperationLogService
2929
from api.utils.api_utils import timeout
30-
from api.utils.base64_image import image2id
30+
from common.base64_image import image2id
3131
from api.utils.log_utils import init_root_logger
3232
from common.file_utils import get_project_base_directory
3333
from api.utils.configs import show_configs

0 commit comments

Comments
 (0)