配置服务器和模块设置
服务器和模块的设置是如何提供的?
每个模块在启动时都会接收一组设置。这些设置来自多个来源:服务器本身、设置文件、环境变量和命令行。每个来源中的设置会覆盖现有设置,因此来源的加载顺序是从最通用到最具体,以便您能够微调设置以针对特定目标。
-
`/server` 目录下的所有 appsettings.json 文件。按顺序加载。
- appsettings..json
- appsettings.mode.json 文件,其中 mode = release 或 development。
- appsettings.platform.json 文件,其中 platform = windows, linux, macOS,或这些加上 -arm64 用于 Arm 变体,或 docker。
- appsettings.platform.mode.json
appsettings.json 文件中的设置通常与服务器相关。
-
模块文件夹内的所有 modulesettings.json 文件,按以下顺序加载:
- modulesettings.json
- modulesettings.mode.json,其中 mode = release 或 development。
- modulesettings.os.json,其中 os = windows, linux, macOS
- modulesettings.os.mode.json
- modulesettings.os.architecture.json,其中 architecture = x86_64 或 arm64
- modulesettings.os.architecture.mode.json
- modulesettings.docker.json
- modulesettings.docker.mode.json
- modulesettings.device.json,其中 device = raspberrypi, orangepi 或 jetson
- modulesettings.device.mode.json
modulesettings.json 文件中的设置通常与模块相关。
-
如果您通过 API 更改模块或服务器设置(或查看仪表板),这些设置将保存在 **%PROGRAMDATA%\modulesettings.json** 和 **%PROGRAMDATA%\serversettings.json** 的设置“覆盖”文件中。
PROGRAMDATA
位置将是:- Windows:C:\ProgramData\CodeProject\AI
- Linux / Docker:/usr/share/CodePrpoject/AI
- macOS:/Library/Application Support/CodeProject/AI
- 环境变量
有关模块的环境变量信息,请参阅 单个模块设置。
- 命令行变量
更改模块的设置
模块的配置方式有多种:
- 编辑模块目录中的 modulesettings.json 文件(或文件)。
- 在系统上设置环境变量。
- 使用命令行参数(如果作为 Windows 应用程序或服务运行)。
- 设置 Docker 运行参数(如果运行 Docker 镜像)。
- 通过设置 API。
服务器的 appsettings.json 文件中还存储了全局设置,这些设置由所有模块共享。
我们将依次介绍设置的命名约定、全局服务器设置、单个模块设置和旧版覆盖设置,最后将介绍如何实际更改这些设置。
命名约定
要更改设置,我们需要通过名称来引用它,而该名称取决于我们进行更改的上下文。
如果在 modulesettings.json 文件中更改设置,则该设置在 Json 结构中通过名称进行引用。
例如,ObjectDetectionYolo 模块的 MODEL_SIZE
设置将在 modules/ObjectDetectionYolo/modulesettings.json
文件中。
{
"Modules": {
"ObjectDetectionYolo": {
...
"EnvironmentVariables": {
"MODEL_SIZE": "Medium"
...
}
}
}
}
如果通过命令行、环境变量或启动 Docker 容器设置值,则通过其完全限定名称访问该设置。
对于通用模块设置,格式为 --Modules:<ModuleId>:Setting-Name=Value
。
对于模块特定设置,格式为 --Modules:<ModuleId>:EnvironmentVariables:Setting-Name=Value
。
对于旧版覆盖,请使用格式 --Setting-Name=Value
。
当前预装模块有:
模块 | ModuleId |
---|---|
人脸处理 | FaceProcessing |
对象检测 (.NET, ONNX) | ObjectDetectionNet |
对象检测 (Python, PyTorch) | ObjectDetectionYolo |
以及可下载(运行时安装)的模块有:
模块 | ModuleId |
---|---|
背景移除器 | 背景移除 |
卡通化 | 卡通化 |
图像超分辨率 | SuperResolution |
车牌识别器 | ALPR |
对象检测 (Coral) | ObjectDetectionCoral |
对象检测 (Rockchip) | ObjectDetectionYoloRKNN |
对象检测 (YOLOv5 3.1) | YOLOv5-3.1 |
光学字符识别 | OCR |
肖像滤镜(背景模糊) | PortraitFilter |
场景分类 | SceneClassification |
文本情感分析 | SentimentAnalysis |
文本摘要 | TextSummary |
训练 (YOLO) | TrainingYolov5 |
设置的宏
在提供值时,可以使用一系列宏。这些宏将在运行时替换为其实际值。
宏 | 描述 |
---|---|
%ROOT_PATH% | 应用程序根目录的路径。对于默认的 Windows 安装,这是 C:\Program Files\CodeProject\AI 。对于 Docker,这是 /app 。 |
%RUNTIMES_PATH% | 已安装的共享运行时目录的路径。在开发环境中默认为 `/src/runtimes`,在生产环境中为 `/runtimes`(相对于 ROOT_PATH)。 |
%MODULES_PATH% | 分析模块目录的路径。在开发环境中默认为 `/src/AnalysisLmodulesayer`,在生产环境中为 `/modules`(相对于 ROOT_PATH)。 |
%CURRENT_MODULE_PATH% | 当前模块相对于 %ROOT_PATH% 的路径。 |
%PLATFORM% | windows, macos, macos-arm64, linux, linux-arm64 |
%OS% | Windows, macOS 或 Linux |
%DATA_DIR% | 包含持久化数据的目录的路径。默认值为:C:\ProgramData\CodeProject\AI (Windows)/usr/share/CodePrpoject/AI (Linux)/Library/Application Support/CodeProject/AI (macOS) |
%PYTHON_RUNTIME% | Python37 或 Python39,具体取决于 modulesettings.json 中的 Runtime 值。 |
%PYTHON_BASEPATH% | 给定版本虚拟环境根目录的路径。 |
设置
全局(服务器)设置
使用命名格式 Modules:<ModuleId>:EnvironmentVariables:Setting-Name=Value
。
参数 | 默认值 | 描述 |
---|---|---|
CPAI_PORT | 32168 | 客户端应用程序和后端模块与服务器通信的端口。 |
CPAI_APPROOTPATH | %ROOT_PATH% | 应用程序根目录的绝对路径。 |
例如,命令行参数:
--Modules:BackgroundRemoval:EnvironmentVariables:CPAI_PORT=32168
例如,系统环境变量 set Modules:BackgroundRemoval:EnvironmentVariables:CPAI_PORT=32168
。
通用模块设置
使用命名格式 Modules:<ModuleId>:<Section>:Setting-Name=Value
。例如,模块“TextSummary”的 LaunchSettings 部分中的 AutoStart 将指定为 Modules:TextSummary:LaunchSettings:AutoStart
。
每个模块将具有以下设置:
Section:Parameter | 默认值 | 描述 |
---|---|---|
LaunchSettings:AutoStart | 可变 | True 或 False。确定此模块在服务器启动时是否自动启动。 |
LaunchSettings:Parallelism | 0 | 要启动的并发执行单元(线程、任务、进程 - 取决于模块和语言)的数量。0 的默认值表示“CPU 数量 - 1”。 |
LaunchSettings:PostStartPauseSecs | 0 (CPU) 5 (GPU) |
启动此模块后暂停的秒数。这提供了初始化时间。 |
GpuOptions:InstallGPU | false | True 或 False。确定此模块是否安装 GPU 支持。如果为 False,则 EnableGPU 将无效。 |
GpuOptions:EnableGPU | 可变 | True 或 False。此模块是否应启用 GPU 支持。设置为 False 表示禁用 GPU 支持。请注意,GPU 支持取决于模块和平台。模块不保证支持 GPU,也不保证在所有平台上都支持 GPU。 |
GpuOptions:AcceleratorDeviceName | 取决于模块,但对于使用 CUDA 的模块,例如,这可以是“cuda:0”或“cuda:1”,以指定第一个或第二个启用 CUDA 的 GPU。 | |
GpuOptions:HalfPrecision | 取决于模块,但对于使用 CUDA 的模块,这指定是否应使用半精度运算。仅对 CUDA 计算能力 >= 6.0 的卡有效。 |
例如,命令行参数:
--Modules:TextSummary:LaunchSettings:AutoStart=true
例如,系统环境变量 set Modules:TextSummary:LaunchSettings:AutoStart=true
。
单个模块设置
许多模块都有通过环境变量更改的单个设置。使用命名格式 Modules:<ModuleId>:EnvironmentVariables:Setting-Name=Value
。
对象检测器 (Yolo)
键 | 默认值 | 描述 |
---|---|---|
MODELS_DIR | %MODULES_PATH%\ObjectDetectionYolo\assets | 包含模型文件的文件夹路径。 |
CUSTOM_MODELS_DIR | %MODULES_PATH%\ObjectDetectionYolo\custom-models | 包含自定义模型文件的文件夹路径。 |
MODEL_SIZE | 媒体 | 检测模型的大小。Tiny、Small、Medium 或 Large。此设置对自定义模型无效。 |
USE_CUDA | True | 如果可用,是否使用 CUDA。 |
例如,通过命令行将 MODEL_SIZE
设置为 Large,使用:
--Modules:ObjectDetectionYolo:EnvironmentVariables:MODEL_SIZE=Large
要将模型目录指向一组不同的自定义模型,请使用:
--Modules:ObjectDetectionYolo:EnvironmentVariables:CUSTOM_MODELS_DIR="C:\My Custom Models"
对象检测器 (.NET)
键 | 默认值 | 描述 |
---|---|---|
MODEL_SIZE | 媒体 | 检测模型的大小。Small、Medium 或 Large。 |
例如,通过命令行将 MODEL_SIZE
设置为 Large,使用:
--Modules:ObjectDetectionNet:EnvironmentVariables:MODEL_SIZE=Large
场景分类器
键 | 默认值 | 描述 |
---|---|---|
MODELS_DIR | %MODULES_PATH%\Vision\assets | 包含模型文件的文件夹路径。 |
MODE | MEDIUM | 检测分辨率。Low、Medium 或 High。 |
例如,将 MODE
设置为 High,使用:
--Modules:SceneClassification:EnvironmentVariables:MODE=High
人脸检测
键 | 默认值 | 描述 |
---|---|---|
MODELS_DIR | %MODULES_PATH%\Vision\assets | 包含模型文件的文件夹路径。 |
MODE | MEDIUM | 检测分辨率。Low、Medium 或 High。 |
DATA_DIR | %DATA_DIR% | 包含持久化人脸数据的文件夹路径。 |
USE_CUDA | True | 如果可用,是否使用 CUDA。 |
例如,将 MODE 设置为 High,使用:
--Modules:FaceProcessing:EnvironmentVariables:MODE=High
这些环境变量由所有人脸处理模块共享。
文本摘要
对于环境变量,参数前缀是:--Modules:TextSummary:EnvironmentVariables:
。
键 | 默认值 | 描述 |
---|---|---|
NLTK_DATA | %MODULES_PATH%\TextSummary\nltk_data | 包含模型文件的文件夹路径。 |
例如,将 NLTK_DATA 设置为 'my-data',使用:
--Modules:TextSummary:EnvironmentVariables:NLTK_DATA=my-data
全局旧版设置覆盖
为了向后兼容某些模块,支持一系列命令行参数,这些参数提供了对多个模块的覆盖。
这些设置仅适用于人脸处理、场景分类和对象检测模块。
在命令行上使用格式 --Setting-Name=Value
,或在系统环境变量中使用 Setting-name=Value
。
参数 | 默认值 | 描述 |
---|---|---|
PORT | 32168 (标准) 5000 (Windows, Linux 的替代) 5500 (macOS 的替代) |
服务器监听请求的端口。 |
MODE | 媒体 | 视觉操作的检测模式。高、中或低分辨率推理。 |
DATA_DIR | C:\ProgramData\CodeProject\AI (Windows)/usr/share/CodePrpoject/AI (Linux)/Library/Application Support/CodeProject/AI (macOS) |
包含人脸识别持久化数据的目录。 |
MODELSTORE-DETECTION MODELSTORE_DETECTION |
%MODULES_PATH%\\ObjectDetectionYolo\\custom |
包含自定义 AI 模型目录。 |
VISION-FACE VISION_FACE |
True | 是否启用人脸检测操作。 |
VISION-SCENE VISION_SCENE |
True | 是否启用场景分类。 |
VISION-DETECTION VISION_DETECTION |
True | 是否启用对象检测操作。 |
CUDA_MODE | True | 是否启用 CUDA 支持。 |
其中 %MODULES_PATH%
是一个宏,展开为分析模块目录的绝对路径。默认情况下,对于 Windows 安装是 C:\Program Files\CodeProject\AI\modules
,对于 Docker 是 /app/modules
。
例如 --MODE=Medium
。
更改设置
选项 1:编辑 modulesettings.json 文件
请谨慎操作
虽然配置模块非常简单,但如果您出错,可能会导致模块无法正常工作。请务必备份您修改过的任何文件,以防需要撤销更改。
CodeProject.AI 随附的模块通过模块目录中的 modulesettings.json
文件进行配置,通常位于 C:\Program Files\CodeProject\AI\modules\<ModuleName>\modulesettings.json
,其中 ModuleName
是模块的名称。
对于每种支持的操作系统,都有该文件的变体,格式为 modulesettings.<platform>.json
,其中 platform 为 windows, macos, macos-arm, linux 或 docker。
要了解有关 modulesettings 文件的更多信息,请参阅 开发人员指南。
要编辑值,只需在记事本或 Notepad++ 等文本编辑器中打开此文件,进行更改,然后保存文件。请务必先进行备份。
选项 2:在系统上设置环境变量
适用于 Windows
- 点击开始菜单并键入“环境变量”。选择“编辑系统环境变量”。
- 点击“环境变量”。
- 点击“用户变量”或“系统变量”。用户变量仅在您登录时生效。系统变量对所有人均生效。
- 点击“新建”添加新的变量名和值,或点击现有变量,然后点击“编辑”更改其名称或值。
对于 macOS
- 打开终端窗口并键入
touch .zprofile
以确保 .zprofile 文件存在(假设您在 macOS 中使用 zsh。对于 bash,请使用 .bash_profile)。 - 运行
nano .profile
编辑文件。 - 以
export MY_VARIABLE='my value'
的格式添加或编辑变量。 - 保存并关闭文件。
- 运行
source .zprofile
强制加载更改。
选项 3:重启 CodeProject.AI 服务并提供参数
默认情况下,Windows 安装程序会将 CodeProject.AI 安装为 Windows 服务,该服务将在 Windows 启动时启动,并在失败时自动重启。如果您希望自定义设置,可以选择手动启动 CodeProject.AI 服务器服务并传递命令行参数来覆盖设置。
首先,在终端中停止服务:
然后重新启动服务,传递您想要的参数:
这将重启服务并将 Vision 推理的 AI 模式设置为“low”。
选项 4. Docker
请参阅 运行 Docker 镜像 的说明。
运行 Docker 镜像的命令是:
docker run --name CodeProject.AI-Server -d -p 32168:32168 ^
--mount type=bind,source=C:\ProgramData\CodeProject\AI\docker\data,target=/etc/codeproject/ai ^
--mount type=bind,source=C:\ProgramData\CodeProject\AI\docker\modules,target=/app/modules ^
codeproject/ai-server
要让 Docker 管理器将设置传递给 CodeProject.AI,请使用 -e setting=value
选项。例如,要传递 MODE=Low,您可以使用:
在 Docker 中可以更改的设置与在本地 Windows 安装中可用的设置相同。请参阅 API 文档,了解使用 Modules:ModuleName:Setting=value
格式设置的模块特定设置,例如:
--setting=value
格式修改的全局参数列表。
选项 5. 通过设置 API
从 CodeProject.AI 1.5.7.3 开始,有一个 API 允许您即时修改模块设置。
端点是:
POST: localhost:32168/v1/settings/<ModuleId>
其中 moduleID 由以下方式给出:
当前预装模块有:
模块 | ModuleId |
---|---|
人脸处理 | FaceProcessing |
对象检测 (.Net, ONNX) | ObjectDetectionNet |
对象检测 (Python, PyTorch) | ObjectDetectionYolo |
背景移除器 | 背景移除 |
卡通化 | 卡通化 |
图像超分辨率 | SuperResolution |
车牌识别器 | ALPR |
对象检测 (Coral) | ObjectDetectionCoral |
对象检测 (Rockchip) | ObjectDetectionYoloRKNN |
对象检测 (YOLOv5 3.1) | YOLOv5-3.1 |
光学字符识别 | OCR |
肖像滤镜(背景模糊) | PortraitFilter |
场景分类 | SceneClassification |
文本情感分析 | SentimentAnalysis |
文本摘要 | TextSummary |
训练 (YOLO) | TrainingYolov5 |
要为模块设置设置的值,您需要通过路由(<ModuleId>
部分)指定模块,将名称设置为未装饰的设置名称(例如 MODEL_SIZE
或 CPAI_PORT
),以及值。
因此,要将 YOLO 对象检测模块的模型大小设置为 Small(例如),您将执行:
POST: localhost:32168/v1/settings/ObjectDetectionYolo
并传递 name = 'MODEL_SIZE', value = 'Small'。
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
var urlencoded = new URLSearchParams();
urlencoded.append("name", "MODEL_SIZE");
urlencoded.append("value", "Small");
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: urlencoded
};
fetch("localhost:32168/v1/settings/objectdetectionyolo", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));