From 4971796a268bacfed2e2088e0fbacf512896804d Mon Sep 17 00:00:00 2001 From: Akash kr <97912085+A7-4real@users.noreply.github.com> Date: Sat, 26 Mar 2022 23:53:19 +0530 Subject: [PATCH 1/5] changing first argument as "path" from "transformed_img" while calling "make_record" function in searh_image function. This solves the "ValueError: the input array must have size 3 along `channel_axis`, got (1269, 1920)" error while searching the image. --- image_match/signature_database_base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/image_match/signature_database_base.py b/image_match/signature_database_base.py index 86dd2f7..e190b04 100644 --- a/image_match/signature_database_base.py +++ b/image_match/signature_database_base.py @@ -270,7 +270,7 @@ def search_image(self, path, all_orientations=False, bytestream=False, pre_filte transformed_img = transform(img) # generate the signature - transformed_record = make_record(transformed_img, self.gis, self.k, self.N) + transformed_record = make_record(path, self.gis, self.k, self.N) l = self.search_single_record(transformed_record, pre_filter=pre_filter) result.extend(l) From 7fe4aefdad695c273a00e05398ae8ce83a6f4b5b Mon Sep 17 00:00:00 2001 From: Akash kr <97912085+A7-4real@users.noreply.github.com> Date: Sun, 3 Apr 2022 21:00:29 +0530 Subject: [PATCH 2/5] added research paper --- ...AN IMAGE SIGNATURE FOR ANY KIND OF IMAGE.pdf | Bin 0 -> 75754 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/AN IMAGE SIGNATURE FOR ANY KIND OF IMAGE.pdf diff --git a/docs/AN IMAGE SIGNATURE FOR ANY KIND OF IMAGE.pdf b/docs/AN IMAGE SIGNATURE FOR ANY KIND OF IMAGE.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a12b423dc14dfa009a6fba5e5126d12a0f2823a2 GIT binary patch literal 75754 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

}p(BZu*%9gGWK> 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 F{{!5Cch3L- literal 0 HcmV?d00001 From 1cce08fc858001fd5e2374ab4047e85051a1c1e7 Mon Sep 17 00:00:00 2001 From: Akash kr <97912085+A7-4real@users.noreply.github.com> Date: Tue, 19 Apr 2022 00:14:55 +0530 Subject: [PATCH 3/5] added flask api server for image-match (server.py) --- server.py | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 server.py diff --git a/server.py b/server.py new file mode 100644 index 0000000..dec408a --- /dev/null +++ b/server.py @@ -0,0 +1,146 @@ +from elasticsearch import Elasticsearch +from flask import Flask, request +from flask_restful import +from image_match.elasticsearch_driver import SignatureES +from image_match.goldberg import ImageSignature +import json +import os + + +# Globals values + + +es_url = os.environ['http://127.0.0.1:9200/'] # localhost (by default) +es_index = os.environ['images'] # index name +es_doc_type = os.environ['image'] # doc_type +all_orientations = os.environ['ALL_ORIENTATIONS'] + +app = Flask(__name__) +es = Elasticsearch([es_url], verify_certs=True, timeout=60, + max_retries=10, retry_on_timeout=True) +ses = SignatureES(es, index=es_index, doc_type=es_doc_type) +gis = ImageSignature() + +# Try to create the index and ignore IndexAlreadyExistsException +# if the index already exists +es.indices.create(index=es_index, ignore=400) + +# Helper functions + + +def get_image(url_field, file_field): + if url_field in request.form: + return request.form[url_field], False + else: + return request.files[file_field].read(), True + + +def count_images(): + return es.count(index=es_index)['count'] + + +def delete_ids(ids): + for i in ids: + es.delete(index=es_index, doc_type=es_doc_type, id=i, ignore=404) + + +def dist_to_percent(dist): + return (1 - dist) * 100 + + +def ids_with_path(path): + matches = es.search(index=es_index, + _source='_id', + q='path:' + json.dumps(path)) + return [m['_id'] for m in matches['hits']['hits']] + + +# Routes + +@app.route('/search', methods=['GET', 'POST']) +def search_handler(): + img, bs = get_image('url', 'image') + ao = request.form.get('all_orientations', all_orientations) == 'true' + + matches = ses.search_image( + path=img, + all_orientations=ao, + bytestream=bs) + + return json.dumps({ + 'status': 'ok', + 'error': [], + 'method': 'search', + 'result': [{ + 'score': dist_to_percent(m['dist']), + 'filepath': m['path'], + 'metadata': m['metadata'] + } for m in matches] + }) + + +@app.route('/delete', methods=['DELETE']) +def delete_handler(): + path = request.form['filepath'] + ids = ids_with_path(path) + delete_ids(ids) + return json.dumps({ + 'status': 'ok', + 'error': [], + 'method': 'delete', + 'result': [] + }) + + +@app.route('/count', methods=['GET', 'POST']) +def count_handler(): + count = count_images() + return json.dumps({ + 'status': 'ok', + 'error': [], + 'method': 'count', + 'result': [count] + }) + +# ============================================================================= +# Error Handlers + + +@app.errorhandler(400) +def bad_request(e): + return json.dumps({ + 'status': 'fail', + 'error': ['bad request'], + 'method': '', + 'result': [] + }), 400 + + +@app.errorhandler(404) +def page_not_found(e): + return json.dumps({ + 'status': 'fail', + 'error': ['not found'], + 'method': '', + 'result': [] + }), 404 + + +@app.errorhandler(405) +def method_not_allowed(e): + return json.dumps({ + 'status': 'fail', + 'error': ['method not allowed'], + 'method': '', + 'result': [] + }), 405 + + +@app.errorhandler(500) +def server_error(e): + return json.dumps({ + 'status': 'fail', + 'error': [str(e)], + 'method': '', + 'result': [] + }), 500 From 323450113b0fdc8abac24f77fab398a36132221c Mon Sep 17 00:00:00 2001 From: Akash kr <97912085+A7-4real@users.noreply.github.com> Date: Tue, 19 Apr 2022 00:17:43 +0530 Subject: [PATCH 4/5] accepting image as raw bytes --- image_match/goldberg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/image_match/goldberg.py b/image_match/goldberg.py index 19674b1..2d3258e 100644 --- a/image_match/goldberg.py +++ b/image_match/goldberg.py @@ -96,7 +96,7 @@ def __init__(self, n=9, crop_percentiles=(5, 95), P=None, diagonal_neighbors=Tru self.handle_mpo = True - def generate_signature(self, path_or_image, bytestream=False): + def generate_signature(self, path_or_image, bytestream=True): """Generates an image signature. See section 3 of Goldberg, et al. From ce180380ba2f158a2c11b9a0b74258fab4d52653 Mon Sep 17 00:00:00 2001 From: Akash kr <97912085+A7-4real@users.noreply.github.com> Date: Sat, 14 May 2022 22:28:34 +0530 Subject: [PATCH 5/5] Update server.py --- server.py | 1 - 1 file changed, 1 deletion(-) diff --git a/server.py b/server.py index dec408a..5fc3b92 100644 --- a/server.py +++ b/server.py @@ -1,6 +1,5 @@ from elasticsearch import Elasticsearch from flask import Flask, request -from flask_restful import from image_match.elasticsearch_driver import SignatureES from image_match.goldberg import ImageSignature import json