{"id":4409,"date":"2025-07-10T17:11:20","date_gmt":"2025-07-10T17:11:20","guid":{"rendered":"https:\/\/techtrendfeed.com\/?p=4409"},"modified":"2025-07-10T17:11:21","modified_gmt":"2025-07-10T17:11:21","slug":"style-advice-system-utilizing-fastembed-qdrant","status":"publish","type":"post","link":"https:\/\/techtrendfeed.com\/?p=4409","title":{"rendered":"Style Advice System Utilizing FastEmbed, Qdrant"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div id=\"article-start\">\n<p>Advice programs are all over the place. From Netflix and Spotify to Amazon. However what when you needed to construct a visible advice engine? One that appears on the picture, not simply the title or tags? On this article, you\u2019ll construct a males\u2019s style advice system. It&#8217;ll use picture embeddings and the Qdrant vector database. You\u2019ll go from uncooked picture information to real-time visible suggestions.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-learning-objective\">Studying Goal<\/h2>\n<ul class=\"wp-block-list\">\n<li>How picture embeddings signify visible content material<\/li>\n<li>Easy methods to use FastEmbed for vector technology<\/li>\n<li>Easy methods to retailer and search vectors utilizing Qdrant<\/li>\n<li>Easy methods to construct a feedback-driven advice engine<\/li>\n<li>Easy methods to create a easy UI with Streamlit<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\" id=\"h-use-case-visual-recommendations-for-t-shirts-and-polos\">Use Case: Visible Suggestions for T-shirts and Polos<\/h2>\n<p>Think about a consumer clicks on a trendy polo shirt. As an alternative of utilizing product tags, your style advice system will suggest T-shirts and polos that look comparable. It makes use of the picture itself to make that call.<\/p>\n<p>Let\u2019s discover how.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-1-understanding-image-embeddings\">Step 1: Understanding Picture Embeddings<\/h3>\n<h4 class=\"wp-block-heading\" id=\"h-what-are-image-embeddings\">What Are Picture Embeddings?<\/h4>\n<p>An <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/www.analyticsvidhya.com\/blog\/2022\/07\/recommending-similar-images-using-image-embedding\/\" target=\"_blank\" rel=\"noreferrer noopener\">picture embedding<\/a> is a vector. It&#8217;s a checklist of numbers. These numbers signify the important thing options within the picture. Two comparable pictures have embeddings which are shut collectively in vector area. This enables the system to measure visible similarity.<\/p>\n<p>For instance, two completely different T-shirts might look completely different pixel-wise. However their embeddings will likely be shut if they&#8217;ve comparable colours, patterns, and textures. It is a essential capacity for a style advice system.<\/p>\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"873\" height=\"472\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/07\/Fashion-recommendation-system-1.webp\" alt=\"Fashion recommendation system 1\" class=\"wp-image-238948\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/07\/Fashion-recommendation-system-1.webp 873w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/07\/Fashion-recommendation-system-1-300x162.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/07\/Fashion-recommendation-system-1-768x415.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/07\/Fashion-recommendation-system-1-150x81.webp 150w\" sizes=\"(max-width: 873px) 100vw, 873px\"\/><\/figure>\n<h4 class=\"wp-block-heading\" id=\"h-how-are-embeddings-generated\">How Are Embeddings Generated?<\/h4>\n<p>Most embedding fashions use deep studying. CNNs (Convolutional Neural Networks) extract visible patterns. These patterns turn out to be a part of the vector.<\/p>\n<p>In our case, we use FastEmbed. The embedding mannequin used right here is: Qdrant\/Unicom-ViT-B-32<\/p>\n<pre class=\"wp-block-code\"><code>from fastembed import ImageEmbedding\nfrom typing import Checklist\nfrom dotenv import load_dotenv\nimport os\n\nload_dotenv()\nmannequin = ImageEmbedding(os.getenv(\"IMAGE_EMBEDDING_MODEL\"))\n\ndef compute_image_embedding(image_paths: Checklist[str]) -&gt; checklist[float]:\n    return checklist(mannequin.embed(image_paths))<\/code><\/pre>\n<p>This perform takes an inventory of picture paths. It returns vectors that seize the essence of these pictures.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-2-getting-the-dataset\">Step 2: Getting the Dataset<\/h3>\n<p>We used a dataset of round 2000 males\u2019s style pictures. Yow will discover it on Kaggle. Right here is how we load the dataset:<\/p>\n<pre class=\"wp-block-code\"><code>import shutil, os, kagglehub\nfrom dotenv import load_dotenv\n\nload_dotenv()\nkaggle_repo = os.getenv(\"KAGGLE_REPO\")\npath = kagglehub.dataset_download(kaggle_repo)\ntarget_folder = os.getenv(\"DATA_PATH\")\n\ndef getData():\n    if not os.path.exists(target_folder):\n        shutil.copytree(path, target_folder)<\/code><\/pre>\n<p>This script checks if the goal folder exists. If not, it copies the photographs there.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-3-store-and-search-vectors-with-qdrant\">Step 3: Retailer and Search Vectors with Qdrant<\/h3>\n<p>As soon as we&#8217;ve embeddings, we have to retailer and search them. That is the place <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/www.analyticsvidhya.com\/blog\/2023\/11\/a-deep-dive-into-qdrant-the-rust-based-vector-database\/\" target=\"_blank\" rel=\"noreferrer noopener\">Qdrant<\/a> is available in. It\u2019s a quick and scalable vector database.<\/p>\n<p>Right here is how to hook up with Qdrant Vector Database:<\/p>\n<pre class=\"wp-block-code\"><code>from qdrant_client import QdrantClient\n\nshopper = QdrantClient(\n    url=os.getenv(\"QDRANT_URL\"),\n    api_key=os.getenv(\"QDRANT_API_KEY\"),\n)\nThat is the best way to insert the photographs paired with its embedding to a Qdrant assortment:\nclass VectorStore:\n    def __init__(self, embed_batch: int = 64, upload_batch: int = 32, parallel_uploads: int = 3):\n        # ... (initializer code omitted for brevity) ...\n\n    def insert_images(self, image_paths: Checklist[str]):\n        def chunked(iterable, dimension):\n            for i in vary(0, len(iterable), dimension):\n                yield iterable[i:i + size]\n\n        for batch in chunked(image_paths, self.embed_batch):\n            embeddings = compute_image_embedding(batch)  # Batch embed\n            factors = [\n                models.PointStruct(id=str(uuid.uuid4()), vector=emb, payload={\"image_path\": img})\n                for emb, img in zip(embeddings, batch)\n            ]\n\n            # Batch add every sub-batch\n            self.shopper.upload_points(\n                collection_name=self.collection_name,\n                factors=factors,\n                batch_size=self.upload_batch,\n                parallel=self.parallel_uploads,\n                max_retries=3,\n                wait=True\n            )<\/code><\/pre>\n<p>This code takes an inventory of picture file paths, turns them into embeddings in batches, and uploads these embeddings to a Qdrant assortment. It first checks if the gathering exists. Then it processes the photographs in parallel utilizing threads to hurry issues up. Every picture will get a novel ID and is wrapped right into a \u201cLevel\u201d with its embedding and path. These factors are then uploaded to Qdrant in chunks.<\/p>\n<h4 class=\"wp-block-heading\" id=\"h-search-similar-images\">Search Related Photographs<\/h4>\n<pre class=\"wp-block-code\"><code>def search_similar(query_image_path: str, restrict: int = 5):\n    emb_list = compute_image_embedding([query_image_path])\n    hits = shopper.search(\n        collection_name=\"fashion_images\",\n        query_vector=emb_list[0],\n        restrict=restrict\n    )\n    return [{\"id\": h.id, \"image_path\": h.payload.get(\"image_path\")} for h in hits]<\/code><\/pre>\n<p>You give a question picture. The system returns pictures which are visually comparable utilizing cosine similarity metrics.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-4-create-the-recommendation-engine-with-feedback\">Step 4: Create the Advice Engine with Suggestions<\/h3>\n<p>We now go a step additional. What if the consumer likes some pictures and dislikes others? Can the style advice system be taught from this?<\/p>\n<p>Sure. Qdrant permits us to present optimistic and unfavorable suggestions. It then returns higher, extra personalised outcomes.<\/p>\n<pre class=\"wp-block-code\"><code>class RecommendationEngine:\n    def get_recommendations(self, liked_images:Checklist[str], disliked_images:Checklist[str], restrict=10):\n        beneficial = shopper.suggest(\n            collection_name=\"fashion_images\",\n            optimistic=liked_images,\n            unfavorable=disliked_images,\n            restrict=restrict\n        )\n        return [{\"id\": hit.id, \"image_path\": hit.payload.get(\"image_path\")} for hit in recommended]<\/code><\/pre>\n<p>Listed here are the inputs of this perform:<\/p>\n<ul class=\"wp-block-list\">\n<li>liked_images: A listing of picture IDs representing objects the consumer has favored.<\/li>\n<li>disliked_images: A listing of picture IDs representing objects the consumer has disliked.<\/li>\n<li>restrict (non-obligatory): An integer specifying the utmost variety of suggestions to return (defaults to 10).<\/li>\n<\/ul>\n<p>This may returns beneficial garments utilizing the embedding vector similarity offered beforehand.<\/p>\n<p>This lets your system adapt. It learns consumer preferences shortly.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-5-build-a-ui-with-streamlit\">Step 5: Construct a UI with Streamlit<\/h3>\n<p>We use Streamlit to construct the interface. It\u2019s easy, quick, and written in Python.<\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"507\" height=\"286\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/07\/Fashion-recommendation-system-2.webp\" alt=\"Fashion recommendation system 2\" class=\"wp-image-238949\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/07\/Fashion-recommendation-system-2.webp 507w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/07\/Fashion-recommendation-system-2-300x169.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/07\/Fashion-recommendation-system-2-150x85.webp 150w\" sizes=\"auto, (max-width: 507px) 100vw, 507px\"\/><\/figure>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"507\" height=\"286\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/07\/Fashion-recommendation-system-3.webp\" alt=\"Fashion recommendation system\" class=\"wp-image-238950\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/07\/Fashion-recommendation-system-3.webp 507w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/07\/Fashion-recommendation-system-3-300x169.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/07\/Fashion-recommendation-system-3-150x85.webp 150w\" sizes=\"auto, (max-width: 507px) 100vw, 507px\"\/><\/figure>\n<p>Customers can:<\/p>\n<ul class=\"wp-block-list\">\n<li>Browse clothes<\/li>\n<li>Like or dislike objects<\/li>\n<li>View new, higher suggestions<\/li>\n<\/ul>\n<p>Right here is the streamlit code:<\/p>\n<pre class=\"wp-block-code\"><code>import streamlit as st\nfrom PIL import Picture\nimport os\n\nfrom src.advice.engine import RecommendationEngine\nfrom src.vector_database.vectorstore import VectorStore\nfrom src.information.get_data import getData\n\n# -------------- Config --------------\nst.set_page_config(page_title=\"\ud83e\udde5 Males's Style Recommender\", structure=\"broad\")\nIMAGES_PER_PAGE = 12\n\n# -------------- Guarantee Dataset Exists (as soon as) --------------\n@st.cache_resource\ndef initialize_data():\n    getData()\n    return VectorStore(), RecommendationEngine()\n\nvector_store, recommendation_engine = initialize_data()\n\n# -------------- Session State Defaults --------------\nsession_defaults = {\n    \"favored\": {},\n    \"disliked\": {},\n    \"current_page\": 0,\n    \"recommended_images\": vector_store.factors,\n    \"vector_store\": vector_store,\n    \"recommendation_engine\": recommendation_engine,\n}\n\nfor key, worth in session_defaults.objects():\n    if key not in st.session_state:\n        st.session_state[key] = worth\n\n# -------------- Sidebar Information --------------\nwith st.sidebar:\n    st.title(\"\ud83e\udde5 Males's Style Recommender\")\n\n    st.markdown(\"\"\"\n    **Uncover style types that fit your style.**  \n    Like \ud83d\udc4d or dislike \ud83d\udc4e outfits and obtain AI-powered suggestions tailor-made to you.\n    \"\"\")\n\n    st.markdown(\"### \ud83d\udce6 Dataset\")\n    st.markdown(\"\"\"\n    - Supply: [Kaggle \u2013 virat164\/fashion-database](https:\/\/www.kaggle.com\/datasets\/virat164\/fashion-database)  \n    - ~2,000 style pictures\n    \"\"\")\n\n    st.markdown(\"### \ud83e\udde0 How It Works\")\n    st.markdown(\"\"\"\n    1. Photographs are embedded into vector area  \n    2. You present preferences through Like\/Dislike  \n    3. Qdrant finds visually comparable pictures  \n    4. Outcomes are up to date in real-time\n    \"\"\")\n\n    st.markdown(\"### \u2699\ufe0f Applied sciences\")\n    st.markdown(\"\"\"\n    - **Streamlit** UI  \n    - **Qdrant** vector DB  \n    - **Python** backend  \n    - **PIL** for picture dealing with  \n    - **Kaggle API** for information\n    \"\"\")\n\n    st.markdown(\"---\")\n# -------------- Core Logic Capabilities --------------\ndef get_recommendations(liked_ids, disliked_ids):\n    return st.session_state.recommendation_engine.get_recommendations(\n        liked_images=liked_ids,\n        disliked_images=disliked_ids,\n        restrict=3 * IMAGES_PER_PAGE\n    )\n\ndef refresh_recommendations():\n    liked_ids = checklist(st.session_state.favored.keys())\n    disliked_ids = checklist(st.session_state.disliked.keys())\n    st.session_state.recommended_images = get_recommendations(liked_ids, disliked_ids)\n\n# -------------- Show: Chosen Preferences --------------\ndef display_selected_images():\n    if not st.session_state.favored and never st.session_state.disliked:\n        return\n\n    st.markdown(\"### \ud83e\uddcd Your Picks\")\n    cols = st.columns(6)\n    pictures = st.session_state.vector_store.factors\n\n    for i, (img_id, standing) in enumerate(\n        checklist(st.session_state.favored.objects()) + checklist(st.session_state.disliked.objects())\n    ):\n        img_path = subsequent((img[\"image_path\"] for img in pictures if img[\"id\"] == img_id), None)\n        if img_path and os.path.exists(img_path):\n            with cols[i % 6]:\n                st.picture(img_path, use_container_width=True, caption=f\"{img_id} ({standing})\")\n                col1, col2 = st.columns(2)\n                if col1.button(\"\u274c Take away\", key=f\"remove_{img_id}\"):\n                    if standing == \"favored\":\n                        del st.session_state.favored[img_id]\n                    else:\n                        del st.session_state.disliked[img_id]\n                    refresh_recommendations()\n                    st.rerun()\n\n                if col2.button(\"\ud83d\udd01 Swap\", key=f\"switch_{img_id}\"):\n                    if standing == \"favored\":\n                        del st.session_state.favored[img_id]\n                        st.session_state.disliked[img_id] = \"disliked\"\n                    else:\n                        del st.session_state.disliked[img_id]\n                        st.session_state.favored[img_id] = \"favored\"\n                    refresh_recommendations()\n                    st.rerun()\n\n# -------------- Show: Advisable Gallery --------------\ndef display_gallery():\n    st.markdown(\"### \ud83e\udde0 Good Recommendations\")\n\n    web page = st.session_state.current_page\n    start_idx = web page * IMAGES_PER_PAGE\n    end_idx = start_idx + IMAGES_PER_PAGE\n    current_images = st.session_state.recommended_images[start_idx:end_idx]\n\n    cols = st.columns(4)\n    for idx, img in enumerate(current_images):\n        with cols[idx % 4]:\n            if os.path.exists(img[\"image_path\"]):\n                st.picture(img[\"image_path\"], use_container_width=True)\n            else:\n                st.warning(\"Picture not discovered\")\n\n            col1, col2 = st.columns(2)\n            if col1.button(\"\ud83d\udc4d Like\", key=f\"like_{img['id']}\"):\n                st.session_state.favored[img[\"id\"]] = \"favored\"\n                refresh_recommendations()\n                st.rerun()\n            if col2.button(\"\ud83d\udc4e Dislike\", key=f\"dislike_{img['id']}\"):\n                st.session_state.disliked[img[\"id\"]] = \"disliked\"\n                refresh_recommendations()\n                st.rerun()\n\n    # Pagination\n    col1, _, col3 = st.columns([1, 2, 1])\n    with col1:\n        if st.button(\"\u2b05\ufe0f Earlier\") and web page &gt; 0:\n            st.session_state.current_page -= 1\n            st.rerun()\n    with col3:\n        if st.button(\"\u27a1\ufe0f Subsequent\") and end_idx &lt; len(st.session_state.recommended_images):\n            st.session_state.current_page += 1\n            st.rerun()\n\n# -------------- Important Render Pipeline --------------\nst.title(\"\ud83e\udde5 Males's Style Recommender\")\n\ndisplay_selected_images()\nst.divider()\ndisplay_gallery()\n\nThis UI closes the loop. It turns a perform right into a usable product.<\/code><\/pre>\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2>\n<p>You simply constructed an entire style advice system. It sees pictures, understands visible options, and makes sensible strategies.<\/p>\n<p>Utilizing FastEmbed, Qdrant, and Streamlit, you now have a robust advice system. It really works for T-shirts, polos and for any males\u2019s clothes however may be tailored to some other image-based suggestions.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-frequently-asked-questions\">Ceaselessly Requested Questions<\/h2>\n<div class=\"schema-faq wp-block-yoast-faq-block\">\n<div class=\"schema-faq-section\" id=\"faq-question-1751427330702\"><strong class=\"schema-faq-question\">Do the numbers in picture embeddings signify pixel intensities?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">Not precisely. The numbers in embeddings seize semantic options like shapes, colours, and textures\u2014not uncooked pixel values. This helps the system perceive the which means behind the picture slightly than simply the pixel information.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1751427353991\"><strong class=\"schema-faq-question\">Does this advice system require coaching?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">No. It leverages vector similarity (like cosine similarity) within the embedding area to search out visually comparable objects while not having to coach a standard mannequin from scratch.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1751427388144\"><strong class=\"schema-faq-question\">Can I fine-tune or practice my very own picture embedding mannequin?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">Sure, you possibly can. Coaching or fine-tuning picture embedding fashions usually entails frameworks like TensorFlow or PyTorch and a labeled dataset. This allows you to customise embeddings for particular wants.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1751427412471\"><strong class=\"schema-faq-question\">Is it potential to question picture embeddings utilizing textual content?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">Sure, when you use a multimodal mannequin that maps each pictures and textual content into the identical vector area. This fashion, you possibly can search pictures with textual content queries or vice versa.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1751427425085\"><strong class=\"schema-faq-question\">Ought to I all the time use FastEmbed for embeddings?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">FastEmbed is a superb selection for fast and environment friendly embeddings. However there are lots of options, together with fashions from OpenAI, Google, or Groq. Selecting will depend on your use case and efficiency wants.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1751427449370\"><strong class=\"schema-faq-question\">Can I take advantage of vector databases apart from Qdrant?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">Completely. Standard options embrace Pinecone, Weaviate, Milvus, and Vespa. Every has distinctive options, so choose what most closely fits your undertaking necessities.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1751427461444\"><strong class=\"schema-faq-question\">Is this technique just like Retrieval Augmented Technology (RAG)?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">No. Whereas each use vector searches, RAG integrates retrieval with language technology for duties like query answering. Right here, the main target is only on visible similarity suggestions.<\/p>\n<\/p><\/div><\/div>\n<div class=\"border-top py-3 author-info my-4\">\n<div class=\"author-card d-flex align-items-center\">\n<div class=\"flex-shrink-0 overflow-hidden\">\n                                    <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/www.analyticsvidhya.com\/blog\/author\/rindra\/\" class=\"text-decoration-none active-avatar\"><br \/>\n                                                                       <img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/07\/Profile-picture-scaled.png\" width=\"48\" height=\"48\" alt=\"Rindra RANDRIAMIHAMINA\" loading=\"lazy\" class=\"rounded-circle\"\/><\/p>\n<p>                                <\/a>\n                                <\/div><\/div>\n<p>I&#8217;m a Knowledge Scientist with experience in Pure Language Processing (NLP), Massive Language Fashions (LLMs), Pc Imaginative and prescient (CV), Predictive Modeling, Machine Studying, Advice Methods, and Cloud Computing.<\/p>\n<p>    I concentrate on coaching ML\/DL fashions tailor-made to particular use circumstances.<\/p>\n<p>    I construct Vector Database purposes to allow LLMs to entry exterior information for extra exact query answering.<\/p>\n<p>    I fine-tune LLMs on domain-specific information.<\/p>\n<p>    I leverage LLMs to generate structured outputs for automating information extraction from unstructured textual content.<\/p>\n<p>I design AI answer architectures on AWS following finest practices.<\/p>\n<p>I&#8217;m keen about exploring new applied sciences and fixing complicated AI issues, and I sit up for contributing beneficial insights to the Analytics Vidhya neighborhood.<\/p>\n<\/p><\/div><\/div>\n<p><h4 class=\"fs-24 text-dark\">Login to proceed studying and luxuriate in expert-curated content material.<\/h4>\n<p>                        <button class=\"btn btn-primary mx-auto d-table\" data-bs-toggle=\"modal\" data-bs-target=\"#loginModal\" id=\"readMoreBtn\">Maintain Studying for Free<\/button>\n                    <\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Advice programs are all over the place. From Netflix and Spotify to Amazon. However what when you needed to construct a visible advice engine? One that appears on the picture, not simply the title or tags? On this article, you\u2019ll construct a males\u2019s style advice system. It&#8217;ll use picture embeddings and the Qdrant vector database. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":4411,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[55],"tags":[3936,3937,3938,1327,849],"class_list":["post-4409","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-machine-learning","tag-fashion","tag-fastembed","tag-qdrant","tag-recommendation","tag-system"],"_links":{"self":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/4409","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4409"}],"version-history":[{"count":1,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/4409\/revisions"}],"predecessor-version":[{"id":4410,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/4409\/revisions\/4410"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/media\/4411"}],"wp:attachment":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4409"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4409"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}<!-- This website is optimized by Airlift. Learn more: https://airlift.net. Template:. Learn more: https://airlift.net. Template: 69d9690a190636c2e0989534. Config Timestamp: 2026-04-10 21:18:02 UTC, Cached Timestamp: 2026-05-14 17:58:11 UTC -->