一款强大wordpress以图搜图插件imgso,适配任何wordpress主题
wordpress吧
全部回复
仅看楼主
level 5
2025年03月27日 01点03分 1
level 5
推荐一款网站插件imgso。它是一款专业级的识图搜图系统,它是wordpress的插件,适合适用任何wordpress的主题,完美兼容,让你的wordpress网站拥有以图搜图的功能。
以图搜图适合以下几个主要的应用场景:
1. 电商购物网站
快速找到相似或同款商品,提升购物体验,增加转化率
2. 设计资源网站
设计师可上传图片搜索相似设计元素、图案、字体等,便于灵感搜集和素材寻找。
3. 社交网络
用于用户之间分享和发现相似内容。
4. 教育与学术平台
学生和教师可上传图表、实验图片查找相关学术资料,辅助学习和研究。
5. 旅游与房产平台
用户上传理想目的地或房屋样式图片,快速找到相似的旅游景点或房源。
2025年03月27日 01点03分 2
imgso插件演示imgso.sjoneone.com
2025年04月25日 03点04分
level 5
这款imgso专业搜图采用以神经网络学习底层技术进行深度搜图,更有其他丰富的功能设置:
1. 拖拽本地图片识图
2. 粘贴网络图片地址识图
3. 截图粘贴图片识图
4. 本地上传图片识图
5.裁图识图
这些都是搜图网站的必备功能,另外Imgso系统插件有增强的功能: 限制每天搜索次数:开启该功能后,可以限制一些用户每天搜索次数。 限制登录后搜索:开启该功能后,用户需要登录才能搜索。 搜图分类:开启该功能后,搜索结果只展示你该分类下的素材。 ......等等,更多功能设置需要你亲自体验。
2025年03月27日 01点03分 3
level 5
2025年03月27日 01点03分 4
level 5
搜图实现代码:
#以图搜图图片数据分析计算逻辑
from multiprocessing import Pool
from skimage.transform import resize
# Apply transformations to multiple images
def apply_transformer(imgs, transformer, parallel=True):
if parallel:
pool = Pool()
imgs_transform = pool.map(transformer, [img for img in imgs])
pool.close()
pool.join()
else:
imgs_transform = [transformer(img) for img in imgs]
return imgs_transform
# Normalize image data [0, 255] -> [0.0, 1.0]
def normalize_img(img):
return img / 255.
# Resize image
def resize_img(img, shape_resized):
img_resized = resize(img, shape_resized,
anti_aliasing=True,
preserve_range=True)
assert img_resized.shape == shape_resized
return img_resized
# Flatten image
def flatten_img(img):
return img.flatten("C")
"""
import numpy as np
import tensorflow as tf
from src.utils import split
class AutoEncoder():
def __init__(self, modelName, info):
self.modelName = modelName
self.info = info
self.autoencoder = None
self.encoder = None
self.decoder = None
# Train
def fit(self, X, n_epochs=50, batch_size=256):
indices_fracs = split(fracs=[0.9, 0.1], N=len(X), seed=0)
X_train, X_valid = X[indices_fracs[0]], X[indices_fracs[1]]
self.autoencoder.fit(X_train, X_train,
epochs = n_epochs,
batch_size = batch_size,
shuffle = True,
validation_data = (X_valid, X_valid))
# Inference
def predict(self, X):
return self.encoder.predict(X)
2025年03月27日 01点03分 5
level 5
使用VGG16网络提取图像特征1
基于vgg16网络提取图像特征,vgg网络在图像领域有着广泛的应用,后续许多层次更深,网络更宽的模型都是基于此扩展的,vgg网络能很好的提取到图片的有用特征。
简单说来就是对图片数据库的每张图片抽取特征(一般形式为特征向量),存储于数据库中,对于待检索图片,抽取同样的特征向量,然后并对该向量和数据库中向量的距离(相似度计算),找出最接近的一些特征向量,其对应的图片即为检索结果。
使用ORB算法、局部敏感哈希(phash)算法和直方图计算相似度算法3
分别自定义三种计算图片相似度算法,计算图片相似度算法ORB算法,以及局部敏感哈希phash算法,还有传统的直方图计算相似度算法。
定义融合相似度阈值为0.85,若三种算法计算出来的相似度最大值大于等于0.85,则取最大值为融合算法之后的相似度。否则,则取三种算法计算出来的相似度的最小值,作为融合算法的之后的相似度。
定义最终相似度较高判断阈值为0.98,若融合之后的相似度值达到0.98,则认为图片非常相似。
图片相似的图片复制到一个文件夹下。
2025年05月28日 09点05分 6
level 5
import osimport numpy as npfrom PIL import Imageimport tensorflow as tffrom tensorflow.keras.applications import VGG16from tensorflow.keras.applications.vgg16 import preprocess_inputfrom tensorflow.keras.preprocessing import imageimport faissimport cv2class ImageSearchEngine: def __init__(self, model='vgg16'): # 使用预训练的VGG16模型提取特征 self.model = VGG16(weights='imagenet', include_top=False) self.index = None self.image_paths = [] self.image_embeddings = [] def extract_features(self, img_path): """从图片中提取特征""" try: img = image.load_img(img_path, target_size=(224, 224)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) features = self.model.predict(x) return features.flatten() except Exception as e: print(f"Error processing {img_path}: {str(e)}") return None def build_index(self, image_dir): """构建图像特征索引""" self.image_paths = [] self.image_embeddings = [] # 遍历目录中的所有图片 for root, _, files in os.walk(image_dir): for file in files: if file.lower().endswith(('.png', '.jpg', '.jpeg')): img_path = os.path.join(root, file) features = self.extract_features(img_path) if features is not None: self.image_paths.append(img_path) self.image_embeddings.append(features) # 将特征转换为numpy数组 self.image_embeddings = np.array(self.image_embeddings) # 使用Faiss构建索引 dimension = self.image_embeddings.shape[1] self.index = faiss.IndexFlatL2(dimension) self.index.add(self.image_embeddings) print(f"Index built with {len(self.image_paths)} images") def search_similar_images(self, query_image_path, num_results=5): """搜索相似图片""" if self.index is None: raise ValueError("Index not built yet. Please call build_index() first.") query_features = self.extract_features(query_image_path) if query_features is None: return [] # 搜索最相似的图片 D, I = self.index.search(query_features.reshape(1, -1), num_results) # 返回相似图片的路径和相似度分数 results = [] for i in range(num_results): if I[0][i] < len(self.image_paths): results.append({ 'path': self.image_paths[I[0][i]], 'score': D[0][i] }) return results def visualize_results(self, query_path, results): """可视化搜索结果""" # 读取查询图片 query_img = cv2.imread(query_path) query_img = cv2.resize(query_img, (200, 200)) # 创建结果窗口 result_img = np.zeros((200, 200 * (len(results) + 1), 3), dtype=np.uint8) result_img[:, :200] = query_img # 添加查询图片 cv2.putText(result_img, "Query", (10, 180), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2) # 添加相似图片 for i, result in enumerate(results): img = cv2.imread(result['path']) img = cv2.resize(img, (200, 200)) result_img[:, (i+1)*200:(i+2)*200] = img cv2.putText(result_img, f"Score: {result['score']:.2f}", ((i+1)*200 + 10, 180), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2) cv2.imshow("Similar Images", result_img) cv2.waitKey(0) cv2.destroyAllWindows()# 使用示例if __name__ == "__main__": # 创建图像搜索引擎实例 search_engine = ImageSearchEngine() # 构建索引(需要指定图片目录) image_directory = "path/to/your/images" search_engine.build_index(image_directory) # 搜索相似图片 query_image = "path/to/query/image.jpg" results = search_engine.search_similar_images(query_image, num_results=5) # 可视化结果 search_engine.visualize_results(query_image, results)
2025年06月09日 08点06分 7
level 5
# app.pyimport osimport numpy as npfrom flask import Flask, request, jsonify, render_templatefrom PIL import Imageimport torchimport torchvision.transforms as transformsimport torchvision.models as modelsimport faissapp = Flask(__name__)
# 配置
UPLOAD_FOLDER = 'static/uploads'DATASET_FOLDER = 'dataset'FEATURE_FILE = 'features/index.faiss'PATHS_FILE = 'image_paths.npy'os.makedirs(UPLOAD_FOLDER, exist_ok=True)os.makedirs('features', exist_ok=True)
# 1. 加载预训练模型(ResNet-18)model = models.resnet18(pretrained=True)model = torch.nn.Sequential(*list(model.children())[:-1])
# 去掉最后的分类层model.eval()# 图像预处理transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),])
# 2. 提取特征函数def extract_feature(image_path): img = Image.open(image_path).convert('RGB') img_tensor = transform(img).unsqueeze(0)
# 添加 batch 维度 with torch.no_grad(): feature = model(img_tensor) feature = feature.squeeze().numpy() # 转为 numpy 数组 feature = feature / np.linalg.norm(feature)
# L2 归一化 return feature#
3. 构建特征库(首次运行时执行)def build_feature_index(): image_paths = [] features = [] for root, _, files in os.walk(DATASET_FOLDER): for file in files: if file.lower().endswith(('jpg', 'jpeg', 'png', 'bmp')): path = os.path.join(root, file) image_paths.append(path) feat = extract_feature(path) features.append(feat) features = np.array(features).astype('float32') image_paths = np.array(image_paths)
# 使用 Faiss 构建索引 dimension = features.shape[1] index = faiss.IndexFlatL2(dimension)
# L2 距离 index.add(features)
# 保存索引和路径 faiss.write_index(index, FEATURE_FILE) np.save(PATHS_FILE, image_paths) print(f"✅ 特征库构建完成:{len(image_paths)} 张图片")
# 4. 加载或构建索引if not os.path.exists(FEATURE_FILE): build_feature_index()index = faiss.read_index(FEATURE_FILE)image_paths = np.load(PATHS_FILE)
# 5. 搜索函数def search_similar_images(query_feature, k=5): query_feature = np.array([query_feature]).astype('float32') distances, indices = index.search(query_feature, k) return [(image_paths[i], distances[0][j]) for j, i in enumerate(indices[0])]# 6. Web 路由@app.route('/')def index(): return render_template('index.html')@app.route('/search', methods=['POST'])def search(): if 'image' not in request.files: return jsonify({'error': 'No image uploaded'}), 400 file = request.files['image'] if file.filename == '': return jsonify({'error': 'No selected file'}), 400 # 保存上传图片 upload_path = os.path.join(UPLOAD_FOLDER, file.filename) file.save(upload_path) try: # 提取特征 query_feature = extract_feature(upload_path) # 搜索最相似的图片 results = search_similar_images(query_feature, k=5) # 返回结果(相对路径用于前端显示) result_data = [] for path, dist in results: rel_path = os.path.relpath(path, '.').replace('\\', '/') # Windows 兼容 rel_upload = os.path.relpath(upload_path, '.').replace('\\', '/') result_data.append({ 'image': rel_path, 'distance': float(dist) }) return jsonify({ 'query': rel_upload, 'results': result_data }) except Exception as e: return jsonify({'error': str(e)}), 500if __name__ == '__main__': app.run(debug=True)
2025年08月26日 09点08分 11
level 5
def extract_color_histogram(image, bins=(8, 8, 8)): """ 提取图像的颜色直方图特征 """ hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) hist = cv2.calcHist([hsv], [0, 1, 2], None, bins, [0, 180, 0, 256, 0, 256]) cv2.normalize(hist, hist) return hist.flatten()def search_similar_images(query_img_path, db_path, top_k=5): if not os.path.exists(query_img_path): print(f"查询图片不存在: {query_img_path}") return # 读取查询图像 query_img = cv2.imread(query_img_path) if query_img is None: print("无法读取查询图片") return query_hist = extract_color_histogram(query_img) # 支持的图像格式 extensions = ['*.jpg', '*.jpeg', '*.png', '*.bmp', '*.tiff'] image_paths = [] for ext in extensions: image_paths.extend(glob.glob(os.path.join(db_path, ext))) results = [] print("正在搜索相似图片...") for img_path in image_paths: try: img = cv2.imread(img_path) if img is None: continue hist = extract_color_histogram(img) # 使用巴氏距离(越小越相似) similarity = cv2.compareHist(query_hist, hist, cv2.HISTCMP_BHATTACHARYYA) results.append((img_path, similarity)) except Exception as e: print(f" 处理失败: {img_path}, 错误: {e}") # 按相似度排序(距离越小越相似) results.sort(key=lambda x: x[1]) # 返回前 top_k 个结果 return results[:top_k]def show_results(query_path, results): import matplotlib.pyplot as plt query_img = cv2.imread(query_path) query_img = cv2.cvtColor(query_img, cv2.COLOR_BGR2RGB) fig = plt.figure("Query Image") plt.imshow(query_img) plt.title("Query Image") plt.axis("off") fig = plt.figure("Search Results") cols = 3 rows = (len(results) + 2) // 3 for i, (path, score) in enumerate(results): ax = fig.add_su
bp
lot(rows, cols, i + 1) img = cv2.imread(path) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(img) plt.title(f"{Path(path).name}\nScore: {score:.3f}") plt.axis("off") plt.tight_layout() plt.show()# 主程序if __name__ == "__main__": # 确保目录存在 if not os.path.exists(DATABASE_PATH): print(f"创建图片库目录: {DATABASE_PATH}") os.makedirs(DATABASE_PATH) # 执行搜索 top_results = search_similar_images(QUERY_IMAGE, DATABASE_PATH, top_k=6) if top_results: print("最相似图片:") for path, score in top_results: print(f"{path} - 相似度得分: {score:.4f}") # 显示结果 show_results(QUERY_IMAGE, top_results) else: print("未找到任何匹配图片。")
2025年09月11日 01点09分 12
level 5
from bs4 import BeautifulSoupdef remove_img_tags(html_content): """ 从给定的 HTML 内容中移除所有的 <img> 标签。 :param html_content: 包含 HTML 的字符串 :return: 移除了 <img> 标签后的 HTML 字符串 """ # 创建一个 BeautifulSoup 对象用于解析 HTML soup = BeautifulSoup(html_content, 'html.parser') # 查找所有 <img> 标签并将其从文档中移除 for img_tag in soup.find_all('img'): img_tag.decompose() # 返回修改后的 HTML 字符串 return str(soup)# 示例 HTML 内容html_content = """<html><head><title>测试页面</title></head><body><h1>欢迎来到我的网页</h1><img src="example.jpg" alt="这是一个例子图片"><p>这里有一些文本。</p><img src="another_example.png" alt="这是另一个例子图片"></body></html>"""# 调用函数并打印结果cleaned_html = remove_img_tags(html_content)print(cleaned_html)
2025年09月24日 09点09分 13
level 5
import numpy as npfrom PIL import Imagefrom sklearn.cluster import KMeansimport matplotlib.pyplot as pltfrom collections import Counterimport osdef rgb_to_hex(rgb): """将 RGB 元组转换为 HEX 颜色字符串""" return '#{:02x}{:02x}{:02x}'.format(int(rgb[0]), int(rgb[1]), int(rgb[2]))def analyze_image_colors(image_path, num_colors=10, show_chart=True): """ 分析图片主色 :param image_path: 图片路径 :param num_colors: 提取颜色数量 :param show_chart: 是否显示颜色分布图 """ # 检查文件是否存在 if not os.path.exists(image_path): print(f"错误:文件 {image_path} 不存在!") return # 1. 使用 PIL 打开图像并转换为 RGB image = Image.open(image_path) image = image.convert('RGB') # 2. 转换为 numpy 数组 data = np.array(image) # 将图像展平为 (像素数, 3) 的二维数组 pixels = data.reshape(-1, 3) # 3. 使用 KMeans 聚类提取主要颜色 kmeans = KMeans(n_clusters=num_colors, random_state=42, n_init=10) kmeans.fit(pixels) colors = kmeans.cluster_centers_.astype(int) # 主色 (RGB) labels = kmeans.labels_ label_counts = Counter(labels) total = len(labels) # 按出现频率排序 sorted_colors = sorted([(color, label_counts[i] / total * 100) for i, color in enumerate(colors)], key=lambda x: x[1], reverse=True) # 4. 输出结果 print(f"\n🖼️ 图片: {os.path.basename(image_path)}") print(f"📐 尺寸: {image.size[0]} x {image.size[1]}") print(f"🎨 主要颜色分析 (Top {num_colors}):") print("-" * 60) print(f"{'序号':<4} {'RGB值':<15} {'HEX值':<10} {'占比(%)':<8}") print("-" * 60) for idx, (color, percent) in enumerate(sorted_colors): rgb = tuple(color) hex_color = rgb_to_hex(color) print(f"{idx+1:<4} {str(rgb):<15} {hex_color:<10} {percent:<8.2f}") # 5. 可视化颜色分布 if show_chart: plt.figure(figsize=(10, 2)) plt.title(f"Top {num_colors} 颜色分布 - {os.path.basename(image_path)}") # 创建颜色条 color_blocks = [sorted_colors[i][0] / 255.0 for i in range(num_colors)] plt.bar(range(num_colors), [p[1] for p in sorted_colors], color=color_blocks) plt.xticks(range(num_colors), [f"{i+1}" for i in range(num_colors)]) plt.xlabel("颜色序号") plt.ylabel("占比 (%)") plt.tight_layout() plt.show() return sorted_colors# ============ 使用示例 ============if __name__ == "__main__": # 替换为你的图片路径 img_path = "example.jpg" # 支持 jpg, png 等常见格式 # 分析图片,提取前10种主色显示图表 colors = analyze_image_colors(img_path, num_colors=10, show_chart=True)
2025年10月24日 03点10分 15
level 5
KMeans 聚类提取主要颜色 kmeans = KMeans(n_clusters=num_colors, random_state=42, n_init=10) kmeans.fit(pixels) colors = kmeans.cluster_centers_.astype(int) # 主色 (RGB) labels = kmeans.labels_ label_counts = Counter(labels) total = len(labels) # 按出现频率排序 sorted_colors = sorted([(color, label_counts[i] / total * 100) for i, color in enumerate(colors)], key=lambda x: x[1], reverse=True) # 4. 输出结果 print(f"\n🖼️ 图片: {os.path.basename(image_path)}") print(f"📐 尺寸: {image.size[0]} x {image.size[1]}") print(f"🎨 主要颜色分析 (Top {num_colors}):") print("-" * 60) print(f"{'序号':<4} {'RGB值':<15} {'HEX值':<10}
2025年11月05日 00点11分 16
level 5
import net.sourceforge.tess4j.ITesseract;import net.sourceforge.tess4j.Tesseract;import net.sourceforge.tess4j.TesseractException;import java.io.File;public class ImageRecognizer { public static void main(String[] args) { // 1. 初始化Tesseract实例 ITesseract tesseract = new Tesseract(); // 2. 设置语言包目录(需替换为你的语言包存放路径) tesseract.setDatapath("D:/tessdata"); // 3. 设置识别语言(中文+英文,需确保对应语言包存在) tesseract.setLanguage("chi_sim+eng"); try { // 4. 读取图像文件(替换为你的图片路径,支持jpg、png等格式) File imageFile = new File("D:/test.png"); // 5. 识别图像中的文字 String result = tesseract.doOCR(imageFile); // 6. 输出识别结果 System.out.println("识别结果:\n" + result); } catch (TesseractException e) { System.err.println("识别失败:" + e.getMessage()); } }}
2025年11月20日 07点11分 17
level 5
import cv2import numpy as npfrom keras.applications.mobilenet import MobileNet, preprocess_input, decode_predictionsfrom keras.preprocessing import image# 加载预训练的MobileNet模型(权重为ImageNet数据集)model = MobileNet(weights='imagenet', include_top=True)def image_classification(img_path, top_k=3): """ 图像分类:识别图像中的物体类别 :param img_path: 图像路径 :param top_k: 返回概率最高的k个类别 :return: 分类结果(类别名称、概率) """ # 读取图像并调整尺寸(MobileNet要求输入尺寸224x224) img = image.load_img(img_path, target_size=(224, 224)) # 转换为数组并扩展维度(模型要求输入形状为(1, 224, 224, 3)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) # 预处理图像(符合MobileNet的输入要求) x = preprocess_input(x) # 预测 preds = model.predict(x) # 解码预测结果(将概率映射为类别名称) results = decode_predictions(preds, top=top_k)[0] # 打印结果 print(f"图像分类结果(Top {top_k}):") for i, (imagenet_id, label, score) in enumerate(results): print(f"{i+1}. 类别:{label},概率:{score:.4f}") return results# 测试:替换为你的图像路径(支持jpg、png等格式)image_classification("test.jpg", top_k=3)
2025年11月26日 07点11分 18
level 5
import cv2
import numpy as np
# 读取图片
img = cv2.imread('your_image.jpg')
# 转换 BGR -> RGB(OpenCV 默认是 BGR)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 将图像 reshape 成 (像素数量, 3)
pixels = img.reshape(-1, 3)
# 转为元组列表以便统计
pixels_view = pixels.view(np.dtype((np.void, pixels.dtype.itemsize * pixels.shape[1])))
_, idx, counts = np.unique(pixels_view, return_index=True, return_counts=True)
# 找到出现次数最多的颜色
dominant_color = pixels[idx[np.argmax(counts)]]
print("主颜色 (R, G, B):", tuple(dominant_color))
2026年01月19日 01点01分 19
1