OpenCV实现图像搜索引擎(Image Search Engine)

opencv实现以图搜图 opencv 实现以图搜图 阅读详情
一.原理
1. 图像搜索原理
图像搜索算法基本可以分为如下步骤:

提取图像特征。如采用SIFT、指纹算法函数、哈希函数、bundling features算法等。当然如知乎中所言,也可以针对特定的图像集群采用特定的模式设计算法,从而提高匹配的精度。如已知所有图像的中间部分在颜色空间或构图上有显著的区别,就可以加强对中间部分的分析,从而更加高效地提取图像特征。

图像特征的存储。一般将图像特征量化为数据存放于索引表中,并存储在外部存储介质中,搜索图片时仅搜索索引表中的图像特征,按匹配程度从高到低查找类似图像。对于图像尺寸分辩率不同的情况可以采用降低采样或归一化方法。

相似度匹配。如存储的是特征向量,则比较特征向量之间的加权后的平方距离。如存储的是散列码,则比较Hamming距离。初筛后,还可以进一步筛选最佳图像集。

2. 图片搜索引擎算法及框架设计
基本步骤
采用颜色空间特征提取器和构图空间特征提取器提取图像特征。
图像索引表构建驱动程序生成待搜索图像库的图像特征索引表。
图像搜索引擎驱动程序执行搜索命令,生成原图图像特征并传入图片搜索匹配器。
图片搜索匹配内核执行搜索匹配任务。返回前limit个最佳匹配图像。

color_descriptor.py

# -*- coding: utf-8 -*-
# @Time    : 2021/10/9 9:44
# @Author  : 
import cv2
import numpy
"""
颜色空间特征提取器ColorDescriptor
类成员bins。记录HSV色彩空间生成的色相、饱和度及明度分布直方图的最佳bins分配。bins分配过多则可能导致程序效率低下,匹配难度和匹配要求过分苛严;bins分配过少则会导致匹配精度不足,不能表证图像特征。
成员函数describe(self, image)。将图像从BGR色彩空间转为HSV色彩空间(此处应注意OpenCV读入图像的色彩空间为BGR而非RGB)。生成左上、右上、左下、右下、中心部分的掩模。中心部分掩模的形状为椭圆形。这样能够有效区分中心部分和边缘部分,从而在getHistogram()方法中对不同部位的色彩特征做加权处理。

"""

class ColorDescriptor:
    __slot__ = ["bins"]

    def __init__(self, bins):
        self.bins = bins

    def getHistogram(self, image, mask, isCenter):
        """
        :param image:
        :param mask:
        :param isCenter:
        :return:
        """
        # get histogram
        imageHistogram = cv2.calcHist([image], [0, 1, 2], mask, self.bins, [0, 180, 0, 256, 0, 256])
        # normalize
        imageHistogram = cv2.normalize(imageHistogram, imageHistogram).flatten()
        if isCenter:
            weight = 5.0
            for index in range(len(imageHistogram)):
                imageHistogram[index] *= weight
        return imageHistogram

    def describe(self, image):
        image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
        features = []
        # get dimension and center
        height, width = image.shape[0], image.shape[1]
        centerX, centerY = int(width * 0.5), int(height * 0.5)
        # initialize mask dimension
        segments = [(0, centerX, 0, centerY), (0, centerX, centerY, height), (centerX, width, 0, centerY),
                    (centerX, width, centerY, height)]
        # initialize center part
        axesX, axesY = int(width * 0.75) / 2, int(height * 0.75) / 2
        ellipseMask = numpy.zeros([height, width], dtype="uint8")
        # img, center, axes, angle, startAngle, endAngle, color, thickness=None, lineType=None, shift=None
        cv2.ellipse(ellipseMask, (centerX, centerY), (int(axesX), int(axesY)), 0, 0, 360, 255, -1)
        # initialize corner part
        for startX, endX, startY, endY in segments:
            cornerMask = numpy.zeros([height, width], dtype="uint8")
            cv2.rectangle(cornerMask, (startX, startY), (endX, endY), 255, -1)
            cornerMask = cv2.subtract(cornerMask, ellipseMask)
            # get histogram of corner part
            imageHistogram = self.getHistogram(image, cornerMask, False)
            features.append(imageHistogram)
        # get histogram of center part
        imageHistogram = self.getHistogram(image, ellipseMask, True)
        features.append(imageHistogram)
        # return
        return features

index.py

# -*- coding: utf-8 -*-
# @Time    : 2021/10/9 9:45
# @Author  : 
import color_descriptor
import structure_descriptor
import glob
import argparse
import cv2

"""
图像索引表构建驱动index.py。
引入color_descriptor和structure_descriptor。用于解析图片库图像,获得色彩空间特征向量和构图空间特征向量。

用argparse设置命令行参数。参数包括图片库路径、色彩空间特征索引表路径、构图空间特征索引表路径。
用glob获得图片库路径。
生成索引表文本并写入csv文件。

可采用如下命令行形式启动驱动程序:
python index.py --dataset dataset --colorindex color_index.csv --structure structure_index.csv
"""
searchArgParser = argparse.ArgumentParser()
searchArgParser.add_argument("-d", "--dataset", required=True,
                             help="Path to the directory that contains the images to be indexed")
searchArgParser.add_argument("-c", "--colorindex", required=True,
                             help="Path to where the computed color index will be stored")
searchArgParser.add_argument("-s", "--structureindex", required=True,
                             help="Path to where the computed structure index will be stored")
arguments = vars(searchArgParser.parse_args())

idealBins = (8, 12, 3)
colorDesriptor = color_descriptor.ColorDescriptor(idealBins)

output = open(arguments["colorindex"], "w")

for imagePath in glob.glob(arguments["dataset"] + "/*.jpg"):
    imageName = imagePath[imagePath.rfind("/") + 1:]
    image = cv2.imread(imagePath)
    features = colorDesriptor.describe(image)
    # write features to file
    features = [str(feature).replace("\n", "") for feature in features]
    output.write("%s,%s\n" % (imageName, ",".join(features)))
# close index file
output.close()

idealDimension = (16, 16)
structureDescriptor = structure_descriptor.StructureDescriptor(idealDimension)

output = open(arguments["structureindex"], "w")

for imagePath in glob.glob("dataset" + "/*.jpg"):
    imageName = imagePath[imagePath.rfind("/") + 1:]
    image = cv2.imread(imagePath)
    structures = structureDescriptor.describe(image)
    # write structures to file
    structures = [str(structure).replace("\n", "") for structure in structures]
    output.write("%s,%s\n" % (imageName, ",".join(structures)))
# close index file
output.close()

searchEngine.py

# -*- coding: utf-8 -*-
# @Time    : 2021/10/9 9:45
# @Author  : 
import color_descriptor
import structure_descriptor
import searcher
import argparse
import cv2
"""
图像搜索引擎驱动searchEngine.py。

引入color_descriptor和structure_descriptor。用于解析待匹配(搜索)的图像,获得色彩空间特征向量和构图空间特征向量。

用argparse设置命令行参数。参数包括图片库路径、色彩空间特征索引表路径、构图空间特征索引表路径、待搜索图片路径。
生成索引表文本并写入csv文件。

可采用如下命令行形式启动驱动程序:
python searchEngine.py -c color_index.csv -s structure_index.csv -r dataset -q query/pyramid.jpg 

dataset为图片库路径。color_index.csv为色彩空间特征索引表路径。structure_index.csv为构图空间特征索引表路径,query/pyramid.jpg为待搜索图片路径。
"""

searchArgParser = argparse.ArgumentParser()
searchArgParser.add_argument("-c", "--colorindex", required = True, help = "Path to where the computed color index will be stored")
searchArgParser.add_argument("-s", "--structureindex", required = True, help = "Path to where the computed structure index will be stored")
searchArgParser.add_argument("-q", "--query", required = True, help = "Path to the query image")
searchArgParser.add_argument("-r", "--resultpath", required = True, help = "Path to the result path")
searchArguments = vars(searchArgParser.parse_args())

idealBins = (8, 12, 3)
idealDimension = (16, 16)

colorDescriptor = color_descriptor.ColorDescriptor(idealBins)
structureDescriptor = structure_descriptor.StructureDescriptor(idealDimension)
queryImage = cv2.imread(searchArguments["query"])
colorIndexPath = searchArguments["colorindex"]
structureIndexPath = searchArguments["structureindex"]
resultPath = searchArguments["resultpath"]

queryFeatures = colorDescriptor.describe(queryImage)
queryStructures = structureDescriptor.describe(queryImage)

imageSearcher = searcher.Searcher(colorIndexPath, structureIndexPath)
searchResults = imageSearcher.search(queryFeatures, queryStructures)
print(searchResults)
for imageName, score in searchResults:
    queryResult = cv2.imread( imageName)
    cv2.imshow("Result Score: " + str(int(score)) + " (lower is better)", queryResult)
cv2.imshow("Query", queryImage)
cv2.waitKey(0)

searcher.py

# -*- coding: utf-8 -*-
# @Time    : 2021/10/9 9:45
# @Author  : 
import numpy
import csv
import re

"""
图片搜索匹配内核Searcher。

类成员colorIndexPath和structureIndexPath。记录色彩空间特征索引表路径和结构特征索引表路径。
成员函数solveColorDistance(self, features, queryFeatures, eps = 1e-5)。求features和queryFeatures特征向量的二范数。eps是为了避免除零错误。
成员函数solveStructureDistance(self, structures, queryStructures, eps = 1e-5)。同样是求特征向量的二范数。eps是为了避免除零错误。需作统一化处理,color和structure特征向量距离相对比例适中,不可过分偏颇。
成员函数searchByColor(self, queryFeatures)。使用csv模块的reader方法读入索引表数据。采用re的split方法解析数据格式。用字典searchResults存储query图像与库中图像的距离,键为图库内图像名imageName,值为距离distance。
成员函数transformRawQuery(self, rawQueryStructures)。将未处理的query图像矩阵转为用于匹配的特征向量形式。
成员函数searchByStructure(self, rawQueryStructures)。类似4。
成员函数search(self, queryFeatures, rawQueryStructures, limit = 3)。将searchByColor方法和searchByStructure的结果汇总,获得总匹配分值,分值越低代表综合距离越小,匹配程度越高。返回前limit个最佳匹配图像。

"""


class Searcher:
    __slot__ = ["colorIndexPath", "structureIndexPath"]

    def __init__(self, colorIndexPath, structureIndexPath):
        self.colorIndexPath, self.structureIndexPath = colorIndexPath, structureIndexPath

    def solveColorDistance(self, features, queryFeatures, eps=1e-5):
        distance = 0.5 * numpy.sum([((a - b) ** 2) / (a + b + eps) for a, b in zip(features, queryFeatures)])
        return distance

    def solveStructureDistance(self, structures, queryStructures, eps=1e-5):
        distance = 0
        normalizeRatio = 5e3
        for index in range(len(queryStructures)):
            for subIndex in range(len(queryStructures[index])):
                a = structures[index][subIndex]
                b = queryStructures[index][subIndex]
                distance += (a - b) ** 2 / (a + b + eps)
        return distance / normalizeRatio

    def searchByColor(self, queryFeatures):
        searchResults = {}
        with open(self.colorIndexPath) as indexFile:
            reader = csv.reader(indexFile)
            for line in reader:
                features = []
                for feature in line[1:]:
                    feature = feature.replace("[", "").replace("]", "")
                    findStartPosition = 0
                    feature = re.split("\s+", feature)
                    rmlist = []
                    for index, strValue in enumerate(feature):
                        if strValue == "":
                            rmlist.append(index)
                    for _ in range(len(rmlist)):
                        currentIndex = rmlist[-1]
                        rmlist.pop()
                        del feature[currentIndex]
                    feature = [float(eachValue) for eachValue in feature]
                    features.append(feature)
                distance = self.solveColorDistance(features, queryFeatures)
                searchResults[line[0]] = distance
            indexFile.close()
        # print "feature", sorted(searchResults.iteritems(), key = lambda item: item[1], reverse = False)
        return searchResults

    def transformRawQuery(self, rawQueryStructures):
        queryStructures = []
        for substructure in rawQueryStructures:
            structure = []
            for line in substructure:
                for tripleColor in line:
                    structure.append(float(tripleColor))
            queryStructures.append(structure)
        return queryStructures

    def searchByStructure(self, rawQueryStructures):
        searchResults = {}
        queryStructures = self.transformRawQuery(rawQueryStructures)
        with open(self.structureIndexPath) as indexFile:
            reader = csv.reader(indexFile)
            for line in reader:
                structures = []
                for structure in line[1:]:
                    structure = structure.replace("[", "").replace("]", "")
                    structure = re.split("\s+", structure)
                    if structure[0] == "":
                        structure = structure[1:]
                    structure = [float(eachValue) for eachValue in structure]
                    structures.append(structure)
                distance = self.solveStructureDistance(structures, queryStructures)
                searchResults[line[0]] = distance
            indexFile.close()
        # print "structure", sorted(searchResults.iteritems(), key = lambda item: item[1], reverse = False)
        return searchResults

    def search(self, queryFeatures, rawQueryStructures, limit=3):
        featureResults = self.searchByColor(queryFeatures)
        structureResults = self.searchByStructure(rawQueryStructures)
        results = {}
        for key, value in featureResults.items():
            results[key] = value + structureResults[key]
        results = sorted(results.items(), key=lambda item: item[1], reverse=False)
        return results[: limit]

structure_descriptor.py

# -*- coding: utf-8 -*-
# @Time    : 2021/10/9 9:45
# @Author  : 
import cv2
"""
构图空间特征提取器StructureDescriptor。

类成员dimension。将所有图片归一化(降低采样)为dimension所规定的尺寸。由此才能够用于统一的匹配和构图空间特征的生成。
成员函数describe(self, image)。将图像从BGR色彩空间转为HSV色彩空间(此处应注意OpenCV读入图像的色彩空间为BGR而非RGB)。返回HSV色彩空间的矩阵,等待在搜索引擎核心中的下一步处理。

"""


class StructureDescriptor:
    __slot__ = ["dimension"]

    def __init__(self, dimension):
        self.dimension = dimension

    def describe(self, image):
        image = cv2.resize(image, self.dimension, interpolation=cv2.INTER_CUBIC)
        # image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
        return image

二.执行
# 构建索引
python index.py --dataset dataset --colorindex color_index.csv --structure structure_index.csv

# 搜图
python searchEngine.py -c color_index.csv -s structure_index.csv -r dataset -q query/pyramid.jpg 

在这里插入图片描述
在这里插入图片描述

参考:https://blog.youkuaiyun.com/coderhuhy/article/details/46575667

使用OpenCV实现以图搜图 阅读详情

相关推荐

基于C++实现的简单的图像搜索引擎

本工程主要根据:http://python.jobbole.com/80860/   移植的。具体原理不再赘述,直接上代码! 首先是 类: #ifndef IMAGE_SEARCH_ENGINE_H #define IMAGE_SEARCH_ENGINE_H #include "StdAfx.h" #include #include #include #include #in

ruan_sjtu的专栏 2629

四个福利性在线网站分享,每一个都让你欲罢不能……

随着社会的不断发展,我们网络上的一些资源就像雨后春笋一般的拔地而起,许多东西我们的来不及上车就被新的事物给掩盖了,但是对于一些好用的网站来说是真的很不错,小编今天就和你们分享一些最具福利性的在线网站! 你们准备好了吗?老司机准备发车了: 一.TinEye.com—图片搜索引擎 如果你的电脑或者你的手机里有一张不知道哪里来的图片,你想要将图片的源地址给找出来该怎么做?一般的时候我们都是束手无策,但是有了这个网站就不一样,可以图片上传带上去进行查找...

weixin_43363835的博客 430万+

用BridgeTower+Streamlit打造本地化以图搜图应用

以图搜图是图像检索的核心技术,本质是实现视觉内容与自然语言的跨模态语义对齐。其原理依赖多模态预训练模型将图像和文本映射到统一向量空间,通过相似度计算完成匹配。BridgeTower凭借双塔结构与轻量交叉注意力,在精度、速度与资源占用间取得工程平衡;Streamlit则提供零前端门槛的Python原生Web交付能力。该技术方案显著降低本地部署门槛,适用于设计师素材检索、电商主图比对、科研图像管理等中小规模语义搜索场景,尤其适合注重隐私、离线运行与快速迭代的终端用户。

weixin_30855761的博客 387

一个很牛逼的网站(程序员在线工具)

[url]http://tool.oschina.net/[/url] [url]http://www.java2s.com/Code/Jar/j[/url]

u011004598的专栏 5683

GPU加速视频语义搜索:基于CLIP与向量数据库的视觉智能体实践

视频内容理解与检索是计算机视觉和多媒体分析领域的核心挑战。其基本原理在于将非结构化的视频数据转化为机器可理解的语义表示,通常通过深度学习模型提取关键帧的特征向量来实现。这项技术的核心价值在于能够从海量视频中快速、精准地定位目标内容,极大地提升了信息处理效率。在工程实践中,GPU加速的全栈流水线设计是关键,它通过将视频解码、特征提取和向量搜索等环节部署在GPU上,利用CUDA和TensorRT等技术大幅减少数据搬运开销,从而实现高吞吐、低延迟的处理能力。典型的应用场景包括智能安防检索、媒体内容管理、企业知识库

weixin_34391445的博客 386

opencv以图搜图

使用opencv2.4.9 使用VS2013 基于图像直方图颜色空间比较

用Python和OpenCV创建一个图片搜索引擎的完整指南 The complete guide to building an image search engine with Python and

Let’s face it. Trying to search for images based on text and tags sucks. Whether you are tagging and categorizing your personal images, searching for stock photos for your company website, or simpl

GarfieldEr007的专栏 6965

ANSYS HFSS 中的相控天线阵列仿真方法

相控天线阵列系统广泛使用,从国防雷达应用到商业 5G 应用。设计这些天线阵列涉及复杂的数学运算,需要全波仿真。Ansys HFSS 全场 3D 电磁仿真软件可以在合理的时间内以较低的计算成本仿真复杂的相控阵天线系统,同时考虑复杂激励、环境(即附近的天线)和平台对其性能的影响。本博客介绍了可用于有效仿真相控天线阵列的不同方法。以下是不同仿真方法的简要概述,视频链接中提供了完整的演示。ANSYS HFSS 提供 4 种不同的相控天线阵列仿真方法:1) 晶胞-无限阵列。

jkh920184196的博客 4251

Building Your First Image Search Engine in Python

The source code of this demo project: https://github.com/xiaoweige/ImageSearch Here’s a quick overview: What we’re going to do:Build an image search engine, from start to finish, usingThe ...

acai83888的博客 266

R语言计算植物群落重要值:从基础概念到优势种判定

在植被生态学研究中,重要值是衡量物种在群落中地位的核心指标,它综合了相对多度、相对频度与相对显著度三个维度,能够客观反映物种的数量优势、分布广度与空间占据能力。理解重要值的生态学逻辑,是开展群落分类、优势种判定及多样性分析的基础。而R语言凭借其批量处理、可复现和与后续多元统计无缝衔接的优势,成为生态学研究者处理样方数据的高效工具。从野外记录的宽表到标准化长表,再到分组汇总计算相对指标,R语言能够显著提升数据处理效率与准确性。本文以实测群落数据为例,系统梳理重要值的两种算法口径、基于dplyr和tidyr的完

weixin_42634811的博客 265

ARM Cortex-M系列授权解析:从研发到量产的免费与付费之路

本文深入解析了ARM Cortex-M系列内核从研发到量产过程中的授权模式。研发阶段可利用ARM DesignStart等免费资源进行原型验证,但产品商业化量产则需支付授权费与版税。文章对比了采购商用MCU与自研芯片的成本差异,并探讨了RISC-V作为免费替代方案在IoT领域的应用前景与挑战,为开发者提供了清晰的选型指南。

weixin_29292431的博客 494

SIS图像搜索引擎代码深度解析:feature_extractor.py如何实现高效特征提取

SIS(Simple image search engine)是一款轻量级图像搜索引擎,其核心功能在于通过高效的图像特征提取与比对,实现快速准确的图片检索。本文将深入解析项目中的`feature_extractor.py`文件,揭示其如何利用深度学习技术实现图像特征的高效提取,为整个搜索系统提供关键技术支撑。 ## 一、特征提取模块的核心架构 `feature_extractor.py`作为S

gitblog_00770的博客 330

手把手教你完成基于YOLOv8的水果/商品/食堂/蔬菜/饮料/书籍识别与计价系统,前台+后台管理系统

手把手教你完成基于YOLOv8的商店的水果/商品/食堂/蔬菜/饮料/书籍识别与计价系统,前台+后台管理员系统,可进行目标检测的操作和展示,实现对图片、视频和摄像头的实时目标检测

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2456

如何为SIS添加图像预处理功能:自动裁剪、旋转和增强的完整实现

SIS(Simple Image Search Engine)是一款轻量级图像搜索引擎,通过添加图像预处理功能可以显著提升搜索准确性和用户体验。本文将详细介绍如何为SIS实现自动裁剪、旋转和增强的完整解决方案,即使是编程新手也能轻松跟随操作。 ## 📋 准备工作:环境与依赖检查 在开始之前,请确保您的开发环境已满足以下要求: 1. **克隆项目仓库** ```bash gi

gitblog_00094的博客 495

北斗导航 | 从北一到北二再到北三,你应该知道的北斗导航系统

博主github:https://github.com/MichaelBeechan 博主优快云:https://blog.youkuaiyun.com/u011344545 一、引言 我国高度重视北斗系统的建设和发展。自20世纪80年代开始探索适合我们国家国情的卫星导航系统发展道路,形成了“三步走”的发展战略:2000年底,建成北斗一号导航系统,向我国广大用户提供服务;2012年底,建成北斗二号导航系统,...

尘世冰封的专栏 3079

AutoSAR配置与实践(基础篇)3.2 BSW中的I/O架构和模块详解

车门位置传感器(Sensor SWC)输出的电流信号经过了一系列处理,如先被转化为电压信号,后又经ADC转换为数字信号,但是IoHwAb模块对上层隐藏了这一系列处理过程,并将数据直接抽象为它的输出接口,即车门开关状态接口。Sensor SWC 使用RTE接口直接从IoHwAb模块封装的车门开关状态,SWC它并不关心ECU硬件是如何实现的传感器电流采集,也不关心MCU ADC采样精度(如10/12位)IoHwAb把采集的电压抽象为开关状态,使得Sensor SWC不依赖具体的ECU硬件。

nihaoljq2010的博客 1300

如何快速安装与配置OpenSSE:3D草图搜索引擎完整指南

OpenSSE(Open Sketch Search Engine)是一款强大的开源3D物体检索工具,它允许用户通过草图图像作为输入来搜索3D模型。本文将为新手用户提供简单快速的安装与配置教程,帮助你轻松搭建属于自己的草图搜索系统。 ## 📋 准备工作:安装依赖项 在安装OpenSSE之前,需要确保系统已安装以下依赖: - **OpenCV 3.0.0+**:用于图像处理和计算机视觉功能 -

gitblog_00361的博客 948

2026最新YOLO26改进:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

针对YOLO26模型改进痛点,本专栏整理200+实战验证方法,覆盖卷积层、注意力机制等核心模块。 每种方法含原理、性能分析、改进路径及实操流程,代码可直接运行,快速提升模型效果,性价比超高。

魔改工程师的博客 1万+

CLIP+FAISS实现语义图像搜索:零样本多模态检索实战

语义图像搜索是一种将文本与图像映射到统一向量空间的跨模态检索技术,其核心在于突破传统关键词匹配与像素比对的局限,实现‘用自然语言描述找图’的能力。它依赖多模态预训练模型(如CLIP)完成图文联合表征,再通过高效近似最近邻算法(如FAISS)支撑海量向量实时检索。该技术具备强零样本泛化能力,无需微调即可理解复杂语义组合,显著提升内容理解深度与检索准确率。典型应用场景包括数字资产库智能检索、文生图提示优化、博物馆藏品语义导航等。本文聚焦CLIP向量归一化、FAISS索引构建及端到端工程落地细节,解决实际部署中的

weixin_34072458的博客 534

C#上位机开发:西门子/三菱PLC通信,新手直接上手

对着西门子S7协议文档看半天,连“DB块地址怎么写”都搞不懂;写三菱PLC代码时,分不清MC协议和Modbus的区别,代码改来改去连不上;好不容易跑通代码,换个PLC型号又报错,不知道哪里出问题;后来发现,新手学PLC通信根本不用先啃协议文档——先跑通“能通信”的代码,再慢慢理解底层逻辑,效率至少提升3倍。西门子PLC:用S7NetPlus库(新手最友好),实现以太网通信,支持S7-200 SMART/1200/1500;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 880

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

用Python+FAISS+RAG搭建本地化AI PDF搜索引擎

PDF搜索引擎本质是将非结构化文档转化为可语义检索的知识库,其核心在于文本解析、向量化表示与高效相似度匹配。基于FAISS的向量检索技术能实现毫秒级响应,结合RAG架构可规避大模型幻觉,确保答案具备原文溯源能力。该方案支持扫描件OCR、加密PDF解密及表格智能提取,适用于法务合规、企业知识管理、科研文献分析等需高精度、低延迟、强隐私保障的场景。文中详解Python生态下的端到端实现路径,涵盖PyMuPDF解析、bge-m3嵌入、FAISS索引优化与混合检索策略。

cok8420的博客 334

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SpringBoot+Vue企业级房屋租赁系统架构解析

企业级应用开发中,SpringBoot+Vue技术栈已成为主流选择,通过前后端分离架构实现高效开发。SpringBoot提供稳定的RESTful API服务,结合MyBatis实现灵活的数据访问层,Vue则构建响应式管理界面。这种架构特别适合房屋租赁等业务系统,能有效解决房源管理、合同处理等核心业务痛点。系统采用多租户设计和分布式锁机制保障数据安全,通过Elasticsearch优化搜索性能,配合Prometheus实现全链路监控。实际案例显示,该技术方案可使房源空置期缩短50%,合同处理效率提升40%,是

weixin_34302798的博客 385

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

基于多模态大模型与向量数据库的AI视频混剪素材精准检索方案

在视频内容创作领域,素材检索是提升效率与质量的核心环节。传统方法依赖文件名、标签或低级视觉特征匹配,难以理解素材的深层语义,常导致检索结果与创作意图不符。其原理在于,传统技术缺乏对图像、视频内容的高级语义理解能力。多模态大模型(如CLIP)通过在海量图文对上训练,能将视觉与文本信息映射到同一语义空间,实现跨模态的深度理解。结合向量数据库对高维语义向量进行高效存储与相似度检索,该技术方案能精准匹配用户意图与素材内容,从根本上解决素材错配问题。在AI视频混剪、智能媒资管理等应用场景中,此方案可构建“理解内容”的

weixin_34341117的博客 639

从网络热门BJD盲盒到智能鉴定系统:多源异构数据处理实战

在信息爆炸的时代,如何高效处理互联网上涌现的海量、零散且结构复杂的数据,是数据工程和人工智能领域面临的核心挑战。其基本原理在于通过自动化技术,对来自社交媒体、电商平台、论坛等多源的非结构化信息(如文本、图片、视频)进行采集、清洗与特征提取。这项技术的核心价值在于,它能将看似无序的网络信息转化为可检索、可分析的结构化知识,从而支撑智能决策。其应用场景广泛,从舆情监控、竞品分析到热点追踪,都依赖于一套能够理解并处理多模态数据的技术栈。本文以“鉴定网络热门BJD盲盒”这一具体场景为例,深入剖析了如何利用**向量数

java2000.net 366

Reasoning-Based RAG:用PageIndex实现意图驱动的结构化检索

RAG(检索增强生成)作为知识库问答与智能客服的核心技术,其本质是解决‘如何从海量非结构化文档中精准定位答案’的问题。传统方案依赖向量相似度匹配,易受语义漂移、长文档粒度失衡和不可追溯性制约;而Reasoning-Based RAG通过问题意图分解、结构化页面索引(PageIndex)与上下文感知重排,将检索升级为可解释、可审计的推理过程。PageIndex并非物理页码,而是融合视觉布局、逻辑结构与跨页语义的‘语义身份证’;Reasoning-Based则体现为对用户查询的领域动词识别、技术栈提取与子主题推

weixin_30336061的博客 373
上一篇: squid SwitchyOmega 实现浏览器代理切换
下一篇: ffmpeg安装
Cocktail_py
博客等级 码龄9年 8810粉丝 191原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值