一、应用场景
电商平台
商品搜索:用户上传商品图片,系统通过图片识别技术找到相似或相同的商品,提高购物体验。
自动标签:通过图片内容自动生成标签,提升商品管理效率。
社交媒体
相似内容推荐:通过分析用户上传的图片,推荐相似的内容或用户,提高用户粘性。
版权保护:识别盗版图片,保护原创作者的权益。
艺术领域
艺术品鉴定:通过上传艺术品图片,自动匹配数据库中的相关信息,提供鉴定服务。
艺术品推荐:根据用户上传的艺术品图片,推荐相似风格的作品,提升用户体验。
安全监控
人员识别:通过监控视频中的图像,快速识别人员,提高安全性。
车辆识别:识别监控视频中的车辆,提高交通管理效率。
干货来了:
图像特征提取, 落地。
def extract_features(img_path):
"""
从指定路径加载图像,进行预处理,然后通过模型提取特征向量
:param img_path: 图像路径
:return: 特征向量
"""
img = image.load_img(img_path, target_size=(1024, 1024))
img_data = image.img_to_array(img)
img_data = np.expand_dims(img_data, axis=0)
img_data = preprocess_input(img_data)
features = model.predict(img_data)
return features.flatten()
为了再百万记录中快速的查询到所需的图片。我们在提前特征的时候同时记录索引
# 初始化 FAISS 索引(使用内积作为余弦相似度)
dimension = 2048 # ResNet50 的输出维度
index = faiss.IndexFlatIP(dimension) # 使用内积作为相似度度量
# 保存索引
faiss.write_index(index, 'image_features_index.faiss')
通过上传的图片特征进行,图片特征比对,实现以图搜图。
# 开始比对计时
start_time = time.time()
# 提取新图像的特征向量
new_features = extract_features(new_img_path)
new_features = new_features / np.linalg.norm(new_features) # 对新图像的特征进行归一化
# 进行相似性搜索,返回 k 个最近邻居
k = 1
D, I = index.search(np.array([new_features]), k)
# 结束比对计时
end_time = time.time()
# 计算比对时间
search_time = end_time - start_time
# 打印最近的 k 个图像名称和相似度(内积)
for i, idx in enumerate(I[0]):
img_name = list(image_features.keys())[idx]
similarity = D[0][i]
print(f'Image: {img_name}, Similarity: {similarity}')
print(f"图像比对完成,耗时:{search_time:.2f} 秒")
本次我们采用的模型为ResNet50
# 初始化 ResNet50 模型
model = ResNet50(weights='imagenet', include_top=False, pooling='avg')
阅读是一种习惯,点赞是一种美德。