当前位置: 首页 > article >正文

用CLIP模型打造个人图片搜索引擎:5步搞定以图搜图小工具(附完整代码)

用CLIP模型打造个人图片搜索引擎5步搞定以图搜图小工具附完整代码你是否曾经面对海量的图片库感到无从下手或是需要快速找到风格相似的参考图片却苦于没有高效工具现在借助OpenAI的CLIP模型你可以轻松搭建一个属于自己的图片搜索引擎。本文将带你从零开始用不到100行代码实现一个功能完整的以图搜图工具。1. 环境准备与基础配置在开始之前我们需要确保开发环境准备就绪。CLIP模型对硬件要求相对友好即使是个人电脑也能流畅运行。1.1 安装必要依赖首先创建一个干净的Python虚拟环境推荐使用Python 3.8然后安装以下核心库pip install torch torchvision pip install githttps://github.com/openai/CLIP.git pip install hnswlib pillow matplotlib注意Pillow库版本建议锁定在9.0.0避免与CLIP的兼容性问题。1.2 硬件配置检查CLIP支持CPU和GPU运行但GPU能显著提升处理速度。运行以下代码检查你的设备import torch device cuda if torch.cuda.is_available() else cpu print(fUsing {device} device)如果输出显示使用CUDANVIDIA GPU恭喜你获得了性能加成。即使只有CPU小型图片库的处理也完全可行。2. 理解CLIP模型的核心机制CLIP(Contrastive Language-Image Pre-Training)的革命性在于它建立了文本和图像的统一语义空间。这种多模态理解能力使其成为图片搜索的理想选择。2.1 嵌入向量(Embedding)的魔力CLIP将每张图片转换为512维的向量表示这个过程中语义相似的图片在向量空间中距离更近完全无关的图片向量则相距甚远向量距离计算通常采用余弦相似度2.2 模型选择与加载CLIP提供多种预训练模型平衡精度和速度的最佳选择是ViT-B/32import clip model, preprocess clip.load(ViT-B/32, devicedevice)首次运行会自动下载约300MB的模型文件。这个轻量级模型在保持良好精度的同时对硬件要求极低。3. 构建图片索引系统高效的搜索离不开精心设计的索引结构。我们将使用hnswlib库实现近似最近邻搜索(ANN)。3.1 图片预处理与特征提取为图片库中的每张图片生成嵌入向量from PIL import Image import os def generate_embeddings(image_folder): embeddings [] valid_files [] for filename in os.listdir(image_folder): if filename.lower().endswith((.png, .jpg, .jpeg)): try: image preprocess(Image.open(os.path.join(image_folder, filename))).unsqueeze(0).to(device) with torch.no_grad(): embedding model.encode_image(image).cpu().numpy().squeeze() embeddings.append(embedding) valid_files.append(filename) except Exception as e: print(fError processing {filename}: {str(e)}) return embeddings, valid_files3.2 创建高效索引使用hnswlib构建可快速查询的向量索引import hnswlib def build_index(embeddings): dim len(embeddings[0]) index hnswlib.Index(spacecosine, dimdim) index.init_index(max_elementslen(embeddings), ef_construction200, M16) index.add_items(embeddings) return index关键参数说明参数说明推荐值space距离度量方式cosineef_construction索引构建质量100-200M图连接数16-244. 实现搜索功能与结果展示现在进入最激动人心的部分——实现真正的以图搜图功能。4.1 核心搜索逻辑def search_similar_images(query_image_path, index, file_list, top_k8): # 处理查询图片 query_image preprocess(Image.open(query_image_path)).unsqueeze(0).to(device) with torch.no_grad(): query_embedding model.encode_image(query_image).cpu().numpy().squeeze() # 执行搜索 indices, distances index.knn_query(query_embedding, ktop_k) # 返回结果 return [(file_list[i], float(distances[0][idx])) for idx, i in enumerate(indices[0])]4.2 可视化搜索结果用Matplotlib展示搜索结果直观比较相似度import matplotlib.pyplot as plt def display_results(results, image_folder): plt.figure(figsize(15, 10)) for i, (filename, distance) in enumerate(results): img plt.imread(os.path.join(image_folder, filename)) plt.subplot(2, 4, i1) plt.imshow(img) plt.title(f相似度: {1-distance:.2f}) plt.axis(off) plt.tight_layout() plt.show()5. 性能优化与实用技巧要让你的图片搜索引擎真正实用化还需要考虑以下优化策略。5.1 批量处理加速对于大型图片库使用批处理可以大幅提升特征提取速度def batch_generate_embeddings(image_folder, batch_size32): # 收集所有有效图片路径 image_paths [...] # 分批处理 for i in range(0, len(image_paths), batch_size): batch_paths image_paths[i:ibatch_size] batch_images torch.stack([preprocess(Image.open(p)) for p in batch_paths]).to(device) with torch.no_grad(): batch_embeddings model.encode_image(batch_images).cpu().numpy() # 存储embeddings...5.2 索引持久化避免每次重启都重新构建索引# 保存索引 index.save_index(image_search_index.bin) # 加载索引 loaded_index hnswlib.Index(spacecosine, dim512) loaded_index.load_index(image_search_index.bin)5.3 混合搜索策略结合CLIP的文本编码器实现图文混合搜索def text_search(query_text, index, file_list, top_k5): with torch.no_grad(): text_embedding model.encode_text(clip.tokenize(query_text).to(device)).cpu().numpy().squeeze() indices, _ index.knn_query(text_embedding, ktop_k) return [file_list[i] for i in indices[0]]完整实现与扩展应用将所有组件整合你就得到了一个功能完备的图片搜索引擎。在实际项目中我发现这套系统特别适合摄影师管理作品集设计师寻找风格参考电商平台商品图片去重社交媒体内容推荐一个典型的应用场景是当我需要为设计项目寻找极简风格室内设计参考时只需上传一张代表性图片系统就能从我的收藏中找出所有相似作品效率提升惊人。

相关文章:

用CLIP模型打造个人图片搜索引擎:5步搞定以图搜图小工具(附完整代码)

用CLIP模型打造个人图片搜索引擎:5步搞定以图搜图小工具(附完整代码) 你是否曾经面对海量的图片库感到无从下手?或是需要快速找到风格相似的参考图片却苦于没有高效工具?现在,借助OpenAI的CLIP模型&#xf…...

智能LED控制入门指南:用WLED打造低代码灯光项目

智能LED控制入门指南:用WLED打造低代码灯光项目 【免费下载链接】WLED Control WS2812B and many more types of digital RGB LEDs with an ESP8266 or ESP32 over WiFi! 项目地址: https://gitcode.com/GitHub_Trending/wl/WLED 智能LED控制技术正在改变我们…...

Phi-4-Reasoning-Vision惊艳效果:低光照/模糊图像中的关键信息增强推理

Phi-4-Reasoning-Vision惊艳效果:低光照/模糊图像中的关键信息增强推理 1. 专业级多模态推理工具介绍 Phi-4-Reasoning-Vision是一款基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具。这个工具专为双卡RTX 4090环境优化,能够处理…...

用Unity粒子系统让道具发光!Health Pickup旋转动画全流程拆解

Unity3D道具发光特效实战:Health Pickup旋转动画与粒子系统深度解析 在3D游戏开发中,道具的视觉反馈直接影响玩家的拾取欲望和使用体验。本文将深入讲解如何通过Unity的粒子系统和动画控制器,为Health Pickup道具打造一套"旋转发光"…...

Wan2.1快速上手实战:从提示词到高清视频的完整流程

Wan2.1快速上手实战:从提示词到高清视频的完整流程 1. 认识Wan2.1视频生成模型 Wan2.1是阿里巴巴开发的一款强大的视频生成模型,它能够根据文字描述自动生成高质量的视频内容。想象一下,你只需要用简单的语言描述一个场景,比如&…...

Youtu-Parsing入门指南:3步完成模型部署与JavaScript前端调用

Youtu-Parsing入门指南:3步完成模型部署与JavaScript前端调用 你是不是也遇到过这样的场景?手头有一堆PDF、Word或者图片格式的文档,里面包含了表格、文字、图表等各种信息,你想把它们快速提取出来,变成结构化的数据&…...

像素幻梦部署案例:中小企业低成本搭建像素艺术AI内容生产平台

像素幻梦部署案例:中小企业低成本搭建像素艺术AI内容生产平台 1. 项目背景与价值 在数字内容创作领域,像素艺术因其独特的复古美感和广泛的适用性,成为游戏开发、社交媒体、品牌营销等领域的热门选择。然而传统像素艺术创作需要专业的美术功…...

3步实现OpenCore智能配置:Hackintosh效率革命指南

3步实现OpenCore智能配置:Hackintosh效率革命指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 想要在普通PC上体验macOS系统&#xff0…...

ChatGPT邀请码获取与使用全指南:从注册到API调用的实战解析

ChatGPT邀请码获取与使用全指南:从注册到API调用的实战解析 作为一名开发者,你是否也曾遇到过这样的困境:面对一个绝佳的AI应用创意,却卡在了第一步——如何稳定、安全地获取ChatGPT的访问权限?邀请码、API密钥、网络…...

机器学习Matlab毕设实战:从算法选型到工程化落地的完整指南

最近在帮学弟学妹们看机器学习相关的毕业设计,发现一个挺普遍的现象:很多同学虽然用Matlab跑通了某个算法,拿到了一个“看起来不错”的结果,但整个项目就像个黑盒子——代码结构混乱,换个数据集就跑不通,自…...

Llama-3.2V-11B-cot保姆级教程:零配置双卡4090部署与图片问答

Llama-3.2V-11B-cot保姆级教程:零配置双卡4090部署与图片问答 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具,专为双卡4090环境优化。这个工具让普通用户也能轻松体验专业级的多模态大模型能力&a…...

vLLM-v0.17.1详细步骤:自定义Tokenizer与模型权重加载方法

vLLM-v0.17.1详细步骤:自定义Tokenizer与模型权重加载方法 1. vLLM框架简介 vLLM是一个专注于大语言模型(LLM)推理和服务的高性能开源库。这个项目最初由加州大学伯克利分校的天空计算实验室开发,现在已经发展成为一个由学术界和工业界共同维护的社区项…...

【技术解析】MaskFormer:超越逐像素分类的语义分割新范式

1. 从像素到掩码:语义分割的范式革命 第一次看到MaskFormer论文时,我正被一个医疗影像分割项目折磨得焦头烂额。传统方法在细胞边界处总是产生模糊的预测,直到尝试了这个将Transformer与掩码分类结合的新范式,准确率突然提升了8个…...

Windows 10系统优化与性能加速指南:基于Debloat-Windows-10开源工具的系统健康解决方案

Windows 10系统优化与性能加速指南:基于Debloat-Windows-10开源工具的系统健康解决方案 【免费下载链接】Debloat-Windows-10 A Collection of Scripts Which Disable / Remove Windows 10 Features and Apps 项目地址: https://gitcode.com/gh_mirrors/de/Debloa…...

大学生毕业设计实战指南:从选题到部署的全链路技术实践

很多同学在做毕业设计时,常常会陷入一个误区:想法很宏大,功能列了一堆,但最后要么代码跑不起来,要么答辩时被老师问得哑口无言。其实,一个优秀的毕业设计,不在于用了多少炫酷的技术,…...

从线极化到圆极化:CST仿真中金属馈电位置对天线性能的影响实测

金属馈电位置对圆极化天线性能的CST仿真优化策略 在微波与射频工程领域,圆极化天线的设计一直是研究热点。与传统的线极化天线相比,圆极化天线具有极化匹配灵活、抗多径干扰能力强等优势,广泛应用于卫星通信、雷达系统和移动设备中。然而&…...

影刀RPA操作飞书表格时,那个烦人的‘记录ID数组’问题,我是这样绕过去的

影刀RPA操作飞书多维表格时如何巧妙规避记录ID数组陷阱 第一次用影刀RPA批量更新飞书多维表格时,我盯着调试面板里那串诡异的[["recxxxxx"]]格式记录ID发呆了半小时——这跟官方文档里承诺的"直接字符串ID"完全不符。更糟的是,当我尝…...

3个实战技巧:如何通过CompactGUI社区数据库智能优化游戏存储空间

3个实战技巧:如何通过CompactGUI社区数据库智能优化游戏存储空间 【免费下载链接】CompactGUI Transparently compress active games and programs using Windows 10/11 APIs 项目地址: https://gitcode.com/gh_mirrors/co/CompactGUI CompactGUI是一款利用W…...

如何用Windows Cleaner轻松拯救你的C盘?3个实用技巧告别爆红烦恼

如何用Windows Cleaner轻松拯救你的C盘?3个实用技巧告别爆红烦恼 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 当你的C盘突然变红,系统卡…...

一招搞定重复代码:模板方法模式实战

在日常撸代码的时候,你肯定遇到过这种恶心的场景: 有几个业务流程,它们整体的“套路”几乎是一模一样的,只有中间那么一两个小步骤不一样。比如你要写一个解析文件的功能,要支持解析 XML、JSON 和 CSV。 这三者的流程都…...

Chinese-CLIP模型微调实战:从数据准备到生产环境部署

在中文多模态任务中,CLIP模型展现出了巨大的潜力。它能够理解图像和文本之间的语义关联,为图像搜索、内容审核、智能推荐等场景提供了强大的基础能力。然而,原始的英文CLIP模型在中文语境下往往“水土不服”,直接应用效果不佳。因…...

激活函数调参指南:用PyTorch可视化ReLU/GELU/LeakyReLU的梯度差异与训练效果

激活函数调参实战:PyTorch可视化与梯度差异深度解析 在深度学习模型调优过程中,激活函数的选择往往被忽视,却直接影响着模型的收敛速度和最终性能。本文将带您深入ReLU、GELU和LeakyReLU三大主流激活函数的微观世界,通过PyTorch动…...

Xinference多模态实战:Qwen2-VL+Whisper+Stable-Diffusion-XL统一API调用示例

Xinference多模态实战:Qwen2-VLWhisperStable-Diffusion-XL统一API调用示例 Xinference版本:v1.17.1 1. 为什么需要统一的多模态API? 想象一下这样的场景:你需要让AI看懂图片、听懂语音、还能生成图像,传统做法是要部…...

技术面试流程与注意事项

技术面试是求职过程中至关重要的一环,它不仅考察候选人的专业能力,还考验其逻辑思维和问题解决能力。无论是应届毕业生还是资深工程师,掌握技术面试的流程与注意事项都能显著提升成功率。本文将详细介绍技术面试的常见流程,并从多…...

互联网产品需求分析助手:SmallThinker-3B-Preview评审PRD与生成用户故事

互联网产品需求分析助手:SmallThinker-3B-Preview评审PRD与生成用户故事 做产品,最怕什么?怕需求说不清,怕文档写不明,怕开发同学看完一脸懵,最后做出来的东西和你想的完全不是一回事。我自己带团队做产品…...

Python asyncio 异步爬虫实现

Python asyncio 异步爬虫实现:高效抓取数据的利器 在当今数据驱动的时代,网络爬虫成为获取信息的重要工具。传统的同步爬虫在面对大规模数据抓取时,往往因阻塞式I/O操作导致效率低下。Python的asyncio库提供了一种基于协程的异步编程模型&am…...

别再让Cesium地图卡顿了!手把手教你用EntityCluster实现高性能点聚合(附完整Vue3代码)

Cesium地图性能救星:EntityCluster点聚合实战指南 当你的智慧城市大屏上需要展示上万个物联网设备位置,或是物流监控系统要实时追踪数千辆运输车辆时,传统的点标记渲染方式很快就会让浏览器不堪重负。我曾接手过一个城市安防项目,…...

nlp_structbert_sentence-similarity_chinese-large 服务监控与调优:保障生产环境稳定性

nlp_structbert_sentence-similarity_chinese-large 服务监控与调优:保障生产环境稳定性 把模型服务部署上线,只是万里长征第一步。真正考验人的,是服务上线之后——怎么知道它跑得好不好?流量大了会不会崩?响应慢了用…...

UniApp打包避坑指南:从证书生成到上架全流程(Android/iOS双平台)

UniApp跨平台打包实战:Android/iOS全流程避坑手册 第一次将UniApp项目打包成原生应用时,我踩遍了所有能想到的坑——从证书过期导致的打包失败,到渠道包统计失灵,再到App Store审核被拒。这份手册正是基于三年跨平台开发经验&…...

从零配置glab:解决GitLab命令行工具认证失败的常见问题

从零配置glab:解决GitLab命令行工具认证失败的常见问题 对于开发者而言,高效管理GitLab仓库是日常工作中的重要环节。glab作为GitLab官方推荐的非官方命令行工具,提供了比原生Git更丰富的功能集,但初次配置时遇到的认证问题往往让…...