1. 部署提要
1.1 git clone
使用git clone拉取项目文件到本地后再用intellij打开
1.2 intellij连接数据库
推荐这位站内博主的:
如何使用IDEA连接MySQL数据库 - 一篇全面的指南-CSDN博客
在完成连接mysql后要创建一个名为“visual_face_search”的database(因为几个application.yml文件都是用的这个配置名),然后右键你的database,选择New -> Query Console打开控制台,把schema-init.sql文件中的SQL语句复制进来,再点击如下的Execute键创建表:
然后进入face-search-server里面的配置文件application-local.yml修改连接数据库的配置:
记得修改url指向本机地址
1.3 maven配置
打开项目文件的maven配置文件pom.xml,你可以看到各个子模块之间的依赖关系:
face-search-server依赖于face-search-core和face-search-engine
face-search-test依赖于face-search-client:
主要子模块及其功能和关系:
- face-search-client:提供外部应用程序的接口,便于与系统交互。
- face-search-core:核心功能模块,包含主要算法和逻辑。
- face-search-engine:与向量搜索引擎(如OpenSearch)的集成。
- face-search-server:服务器端应用程序,处理请求和响应。
- face-search-test:测试模块和示例,确保系统稳定性和功能正确性。
maven这一步的操作就是在右侧的maven栏里面在Lifecycle里面执行install命令:
这个时候你就可以找到face-search-server中的bootstrap下的FaceSearchApplication.java文件,运行,若无报错,则可以打开项目里的swagger文档:
但是这时候由于还没有opensearch服务,所以你在尝试请求创建一个集合的时候,会有如下的报错响应:
1.4 opensearch安装
opensearch站内的资源比较少,推荐直接按照官方文档步骤来安装:
Windows - OpenSearch Documentation
按照这个文档页面除步骤2中的选项2外都做一遍,并且忽略步骤3中的“如果您运行了安全演示脚本,则需要手动重新配置已修改的设置。在继续操作之前,请参阅安全配置以获取指导。”这个操作(If you ran the security demo script, then you will need to manually reconfigure settings that were modified. Refer to Security configuration for guidance before proceeding.)
(仅是个人经验)
之后再进入opensearch安装文件夹的bin目录,运行一下命令:
之后在进入“服务”窗口,如果服务启动成功,是可以看到如下效果的:
(这时可以在窗口点击按钮刷新一下,看看服务是否还开启。笔者之前没启动成功时,手动启动了服务,但是刷新后立即可以看到服务其实没有被开启)
另外,打开https://localhost:9200,你可以看到:
然后进入face-search-server里面的配置文件application-local.yml修改连接数据库的配置:
然后我们再试着在API文档里再请求一次创建集合,会有:
同时,你打开database中创建的表,也可以发现创建的新数据(这里我就放我目前创建的情况了):
那我们就可以成功调用API文档啦!
2. 源码解读
2.1 测试示例
保持face-search-server中的启动FaceSearchApplication.java一直运行,在face-search-test文件下有测试代码文件FaceSearchExample.java,运行,可以出现项目中测试示例。这里我们可以在这段代码包含的路径中添加自己的图片数据文件夹:
String indexPath = "face-search-test/src/main/resources/image/validate/index";
然后再将同一个父级目录下的search文件里的图片替换成我们想要测试的图片,就有了鸡哥:
这里笔者是在部署成功后的第二天试的,发现opensearch虽然在“服务”里一直显示运行,但是实际上没有启动成功,笔者重新以管理员身份在bin目录里运行了一次:
opensearch-service.bat start才重新启动成功
如果opensearch没有启动成功的话,运行FaceSearchExample.java控制台不会出现:
并且出来的鸡哥图像也没有检测框标识头部
仔细阅读控制台消息:
发现有两个来自客户端中的com.visual.face.search.model
包中的Java类CollectRep和FaceRep,前者提供了提供了设置和获取命名空间及集合名称的方法,后者定义了一个用于表示人脸数据的模型,提供了适当的方法来访问和设置各种人脸数据的属性,可以看到人脸数据的组成:
namespace
:命名空间,用于区分不同的数据范围。collectionName
:集合名称,指示人脸数据存储在哪个集合中。sampleId
:样本ID,可能是指示人脸数据在样本集中的唯一标识。faceId
:人脸ID,用于唯一标识一个人脸。faceScore
:人脸分数,可能用于表示人脸检测或者识别的置信度。faceData
:KeyValues
类型的对象,可能用于存储额外的人脸数据。
2.2 数据库设计
id
:自增主键uuid
:唯一标识符namespace
:命名空间collection
:集合名称describe
:集合描述statue
:集合状态sample_table
:样本数据表face_table
:人脸数据表image_table
:图片数据表vector_table
:人脸向量库schema_info
:集合元数据create_time
:创建时间update_time
:更新时间deleted
:是否删除标志
预留行