اذهب إلى المحتوى

السؤال

نشر (معدل)
from fastapi import FastAPI
import uvicorn
import os
from DeepImageSearch import Load_Data, Search_Setup
import shutil

os.environ['KMP_DUPLICATE_LIB_OK']='True'
app = FastAPI()


@app.post("/api/request-similar-images")
async def get_user_image(user_image: dict):
    # Access the data sent by the user
    try :
        img = user_image.get("image")
        # image_list = Load_Data().from_folder(['\image_search\Demo_Data'])
        # go back one directory
        path = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..'))
        # go to \storage\app\public\image-search
        image_list = os.path.abspath(os.path.join(path, 'storage/app/public/image-search'))

        # Set up the search engine, You can load 'vit_base_patch16_224_in21k', 'resnet50' etc more then 500+ models
        st = Search_Setup(image_list=image_list, model_name='vgg19', pretrained=True, image_count=len(image_list))
        # Get metadata
        metadata = st.get_image_metadata_file()
        st.add_images_to_index([img])
        img_dict , images_and_scores = st.get_similar_images(image_path=img, number_of_images=100)

        paths_list = []
        for index , path in img_dict.items():
            paths_list.append(path)


        scores_list = []
        for index , path in images_and_scores.items():
            scores_list.append(path)


        similarty_list = dict(zip(paths_list, scores_list))
        similarty_list = [{key: value} for key, value in similarty_list.items()]

        for i, d in enumerate(similarty_list):
            mydict = similarty_list[i]
            for key, value in mydict.copy().items():
                if value == 0.0 :
                    del mydict[key]


        while {} in similarty_list:
            similarty_list.remove({})

        transformed_list = [
            {"path": list(item.keys())[0], "score": list(item.values())[0]} for item in similarty_list]


        return transformed_list

    except Exception as e:
        print (e)
        return "No image found."


if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=5000)

عندما ارسال اكثر من request من خلال Postman او استخدام ال endpoint في اي مكان اخر.
المشكله انه يجب الانتظار على كل request حتى الانتهاء ليبدا ال request الذي بعدة 
كيف يمكننى حل هذه المشكلة 
image.thumb.png.06310157232bec3ff38bc751463a5f2f.png


 

تم التعديل في بواسطة احمد مصطفى14

Recommended Posts

  • 0
نشر

عن طريق تحديد عدد ال workers الذى سيقوم بإستقبال الطلبات و تنفيذها بشكل متوازي (parallel)  workers=NUM حيث بشكل إفتراضى يكون عدد ال workers واحد فقط . 

uvicorn.run(app, host="127.0.0.1", port=5000,workers=4)

 وإذا لم تعمل معك تلك الطريقة فيرجي تشغيل المشروع عن طريق الأمر التالي مع حذف السطر السابق من الكود :

uvicorn request-similar-images:app --host 127.0.0.1 --port 5000 --workers 4

وإذا كان إسم الملف ليس request-similar-images.py فيمكنك تغير request-similar-images في الأمر السابق إلي إسم الملف

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...