Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
I
image_search
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
service
image_search
Commits
3e9d8678
Commit
3e9d8678
authored
May 24, 2025
by
zhengyaoqiu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
上传 检索 接口
parent
adb8deaf
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
37 additions
and
9 deletions
+37
-9
routes.py
app/api/routes.py
+29
-4
image_search.py
app/services/image_search.py
+3
-2
image_upload.py
app/services/image_upload.py
+5
-3
No files found.
app/api/routes.py
View file @
3e9d8678
from
flask
import
jsonify
,
request
from
flask
import
jsonify
,
request
from
app.api
import
api_bp
from
app.api
import
api_bp
from
app.services.feature_extractor
import
FeatureExtractor
from
app.services.image_search
import
ImageSearch
from
app.services.image_upload
import
ImageUpload
from
app.services.milvus
import
MilvusClient
@
api_bp
.
route
(
'/hello'
,
methods
=
[
'GET'
])
@
api_bp
.
route
(
'/hello'
,
methods
=
[
'GET'
])
def
hello_world
():
def
hello_world
():
...
@@ -24,9 +29,29 @@ def upload():
...
@@ -24,9 +29,29 @@ def upload():
# 访问具体字段
# 访问具体字段
bucket
=
data
.
get
(
'bucket'
)
bucket
=
data
.
get
(
'bucket'
)
image2keys
=
data
.
get
(
'image2keys'
)
image2keys
=
data
.
get
(
'image2keys'
)
print
(
bucket
)
print
(
image2keys
)
feature_extractor
=
FeatureExtractor
()
milvus
=
MilvusClient
()
.
connect
()
image_upload
=
ImageUpload
(
feature_extractor
,
milvus
)
image_upload
.
upload_many
(
bucket
,
image2keys
)
return
jsonify
({
return
jsonify
({
'message'
:
f
'Hello!'
,
'code'
:
0
,
'status'
:
'success'
'message'
:
''
,
})
@
api_bp
.
route
(
'/search'
,
methods
=
[
'GET'
])
def
search
():
image
=
request
.
args
.
get
(
"image"
)
top_k
=
request
.
args
.
get
(
"top_k"
,
type
=
int
)
bucket
=
request
.
args
.
get
(
"bucket"
)
feature_extractor
=
FeatureExtractor
()
milvus
=
MilvusClient
()
.
connect
()
result
=
ImageSearch
(
feature_extractor
,
milvus
)
.
image_to_image_search
(
bucket
,
image
,
top_k
)
return
jsonify
({
'code'
:
0
,
'message'
:
''
,
'data'
:
result
,
})
})
app/services/image_search.py
View file @
3e9d8678
...
@@ -10,7 +10,7 @@ class ImageSearch:
...
@@ -10,7 +10,7 @@ class ImageSearch:
def
image_to_image_search
(
self
,
bucket
,
image
,
top_k
=
100
):
def
image_to_image_search
(
self
,
bucket
,
image
,
top_k
=
100
):
try
:
try
:
# 提取查询图像的特征
# 提取查询图像的特征
vector
=
self
.
feature_extractor
.
extract_f
eatures
(
image
)
vector
=
self
.
feature_extractor
.
extract_f
rom_url
(
image
)
results
=
self
.
milvus
.
search
(
bucket
,
vector
,
top_k
)
results
=
self
.
milvus
.
search
(
bucket
,
vector
,
top_k
)
...
@@ -20,9 +20,10 @@ class ImageSearch:
...
@@ -20,9 +20,10 @@ class ImageSearch:
# 返回结果
# 返回结果
keys
=
[
hit
.
entity
.
get
(
"key"
)
for
hit
in
results
[
0
]]
keys
=
[
hit
.
entity
.
get
(
"key"
)
for
hit
in
results
[
0
]]
images
=
[
hit
.
entity
.
get
(
"image"
)
for
hit
in
results
[
0
]]
scores
=
[
hit
.
score
for
hit
in
results
[
0
]]
scores
=
[
hit
.
score
for
hit
in
results
[
0
]]
return
list
(
zip
(
keys
,
scores
))
return
list
(
zip
(
keys
,
images
,
scores
))
except
Exception
as
e
:
except
Exception
as
e
:
self
.
__logger
.
error
(
f
"Image search failed: {e}"
)
self
.
__logger
.
error
(
f
"Image search failed: {e}"
)
...
...
app/services/image_upload.py
View file @
3e9d8678
import
logging
import
logging
class
Upload
:
class
Image
Upload
:
__logger
=
logging
.
getLogger
(
__name__
)
__logger
=
logging
.
getLogger
(
__name__
)
def
__init__
(
self
,
feature_extractor
,
milvus
):
def
__init__
(
self
,
feature_extractor
,
milvus
):
...
@@ -10,12 +10,14 @@ class Upload:
...
@@ -10,12 +10,14 @@ class Upload:
def
upload_one
(
self
,
bucket
,
image
,
key
):
def
upload_one
(
self
,
bucket
,
image
,
key
):
self
.
upload_many
(
bucket
,
{
image
:
key
})
self
.
upload_many
(
bucket
,
{
image
:
key
})
def
upload_many
(
self
,
bucket
,
image2key
):
def
upload_many
(
self
,
bucket
,
image2key
s
):
images
=
[]
images
=
[]
keys
=
[]
keys
=
[]
vectors
=
[]
vectors
=
[]
for
image
,
key
in
image2key
.
items
():
for
image2key
in
image2keys
:
image
=
image2key
[
"image"
]
key
=
image2key
[
"key"
]
vector
=
self
.
feature_extractor
.
extract_from_url
(
image
)
vector
=
self
.
feature_extractor
.
extract_from_url
(
image
)
images
.
append
(
image
)
images
.
append
(
image
)
keys
.
append
(
key
)
keys
.
append
(
key
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment