当前位置: 首页 > news >正文

【HarmonyOS 5】VisionKit人脸活体检测详解

【HarmonyOS 5】VisionKit人脸活体检测详解

一、VisionKit人脸活体检测是什么?

VisionKit是HamronyOS提供的场景化视觉服务工具包。

华为将常见的解决方案,通常需要三方应用使用SDK进行集成。华为以Kit的形式集成在HarmoyOS系统中,方便三方应用快速开发和赋能。

而VisionKit中包含人脸活体检测的功能接口interactiveLiveness 。人脸活体检测见名知意,主要是为了检测当前人是否为活人本人,而不是照片,硅胶面具,AI视频仿真的可能。

虽然该算法接口已通过中金金融(CECA)认证。但是官方还是建议添加额外的安全措施后,在使用该人脸检测接口,尽量不要直接使用在高风险性的支付和金融场景中。推荐在低危险场景,例如登录,考勤,实名认证等业务场景进行使用。

需要注意的是**,人脸活体检测,不支持模拟器和预览器。**

详情参见官方接口:
https://developer.huawei.com/consumer/cn/doc/harmonyos-references/vision-interactive-liveness
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/vision-interactiveliveness
在这里插入图片描述

二、人脸活体检测如何使用?

人脸活体检测功能interactiveLiveness ,起始版本为 5.0.0 (API12),可通过@kit.VisionKit模块导入,支持动作活体检测模式(INTERACTIVE_MODE),动作数量可配置为 3 或 4 个,包含点头、张嘴、眨眼等 6 种动作。

通过InteractiveLivenessConfig配置检测模式、跳转路径、语音播报等参数,提供startLivenessDetection和getInteractiveLivenessResult接口,能抵御照片、视频等攻击,适用于身份验证场景,需申请ohos.permission.CAMERA相机权限,错误码可参考 Vision Kit 错误码文档。

Vision Kit 错误码文档
https://developer.huawei.com/consumer/cn/doc/harmonyos-references/vision-error-code

1. 核心接口为人脸页面唤起接口:
interactiveLiveness.startLivenessDetection,该接口需要配置config进行设置人脸的模式,动作等操作。

(1) Promise 方式:仅返回跳转结果(boolean)。


interactiveLiveness.startLivenessDetection(routerOptions).then((DetectState: boolean) => {hilog.info(0x0001, "LivenessCollectionIndex", `Succeeded in jumping.`);
}).catch((err: BusinessError) => {hilog.error(0x0001, "LivenessCollectionIndex", `Failed to jump. Code:${err.code},message:${err.message}`);
})

(2) Promise + 回调方式:同时返回跳转结果和检测结果(仅适用于 BACK_MODE)。


interactiveLiveness.startLivenessDetection(routerOptions, (err: BusinessError, result: interactiveLiveness.InteractiveLivenessResult | undefined) => {if(err.code !== 0 && !result) {hilog.error(0x0001, "LivenessCollectionIndex", `Failed to detect. Code:${err.code},message:${err.message}`);return;}hilog.info(0x0001, 'LivenessCollectionIndex', `Succeeded in detecting result:${result}`);
})

2. InteractiveLivenessConfig配置接口:
调用人脸活体检测,需要填入该配置对象,进行相关设置,参数见以下表格:

  1. 检测模式(DetectionMode)

    名称说明
    SILENT_MODE“SILENT_MODE”静默活体检测(暂未支持)
    INTERACTIVE_MODE“INTERACTIVE_MODE”动作活体检测(默认模式)
  2. 动作数量(ActionsNumber)

    名称说明
    ONE_ACTION1随机1个动作(暂未支持)
    TWO_ACTION2随机2个动作(暂未支持)
    THREE_ACTION3随机3个动作([眨眼,注视]不同时存在且不相邻,相邻动作不重复)
    FOUR_ACTION4随机4个动作(眨眼仅1次,注视最多1次,[眨眼,注视]不相邻,相邻动作不重复)
  3. 跳转模式(RouteRedirectionMode)

    名称说明
    BACK_MODE“back”检测完成后调用router.back返回上一页
    REPLACE_MODE“replace”检测完成后调用router.replaceUrl跳转(默认模式)
  4. 配置项(InteractiveLivenessConfig)

    名称类型必填/可选说明
    isSilentModeDetectionMode必填检测模式(默认INTERACTIVE_MODE)
    actionsNumActionsNumber可选动作数量(3或4,默认3)
    successfulRouteUrlstring可选检测成功跳转路径(未填则用系统默认页面)
    failedRouteUrlstring可选检测失败跳转路径(未填则用系统默认页面)
    routeModeRouteRedirectionMode可选跳转模式(默认REPLACE_MODE)
    challengestring可选安全摄像头场景挑战值(16-128位,空值表示不使用)
    speechSwitchboolean可选语音播报开关(默认开启)
    isPrivacyModeboolean可选隐私模式(需申请ohos.permission.PRIVACY_WINDOW权限,默认关闭)

人脸活体检测的配置项对象除了isSilentMode是必填,其他属性均为可选:

import { interactiveLiveness } from '@kit.VisionKit';let isSilentMode = "INTERACTIVE_MODE" as interactiveLiveness.DetectionMode;
let routeMode = "replace" as interactiveLiveness.RouteRedirectionMode;
let actionsNum = 3 as interactiveLiveness.ActionsNumber;
let routerOptions: interactiveLiveness.InteractiveLivenessConfig= {isSilentMode: isSilentMode,routeMode: routeMode,actionsNum: actionsNum,failedRouteUrl: "pages/FailPage",successfulRouteUrl: "pages/SuccessPage"
}

3. getInteractiveLivenessResult获取人脸活体检测结果:
在调用人脸活体检测成功后,可通过该接口获取检测结果。结果内容如下表格所示:

名称类型只读可选说明
livenessTypeLivenessType活体检测模式,值包括:
- 0(INTERACTIVE_LIVENESS,动作活体检测)
- 1(SILENT_LIVENESS,静默活体检测,暂未支持)
- 2(NOT_LIVENESS,非活体)
mPixelMapimage.PixelMap检测成功后返回的最具有活体特征的图片(如包含人脸关键点的特征图),检测失败时无此数据。
securedImageBufferArrayBuffer安全摄像头场景下返回的安全流数据(加密后的图像特征数据),非安全场景无此数据。
certificateArray安全摄像头场景下返回的证书链(用于验证安全流的合法性),非安全场景无此数据。
let successResult = interactiveLiveness.getInteractiveLivenessResult();
successResult.then(data => {hilog.info(0x0001, "LivenessCollectionIndex", `Succeeded in detecting.`);
}).catch((err: BusinessError) => {hilog.error(0x0001, "LivenessCollectionIndex", `Failed to detect. Code:${err.code},message:${err.message}`);
})

三、DEMO源码示例

import { interactiveLiveness } from '@kit.VisionKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { abilityAccessCtrl, common } from '@kit.AbilityKit';

struct FaceLivenessDemo { userGrant: boolean = false // 权限状态 detectionResult: string = "" // 检测结果展示 actionCount: interactiveLiveness.ActionsNumber = interactiveLiveness.ActionsNumber.THREE_ACTION; // 动作数量(3或4) speechEnabled: boolean = true // 语音播报开关// 表示人脸活体检测完成后使用router.back返回到上一页。 routeMode: interactiveLiveness.RouteRedirectionMode = interactiveLiveness.RouteRedirectionMode.BACK_MODE; // 跳转模式// 权限申请逻辑private async requestPermissions() {const context = getContext() as common.UIAbilityContext;const atManager = abilityAccessCtrl.createAtManager();const results = await atManager.requestPermissionsFromUser(context, ["ohos.permission.CAMERA"]);this.userGrant = results.authResults.every(status => status === 0);}// 检测配置生成private generateDetectionConfig(): interactiveLiveness.InteractiveLivenessConfig {return {// 表示的是人脸活体检测模式,默认动作活体检测模式。// INTERACTIVE_MODE表示动作活体检测模式。isSilentMode: interactiveLiveness.DetectionMode.INTERACTIVE_MODE,// 表示动作活体检测的动作数量,数量范围3或4个,默认3个动作。随机生成,规则如下://// 当actionsNum=3时,[眨眼,注视]组合中的动作元素不会同时存在并且相邻的动作元素不会相同。//// 当actionsNum=4时,眨眼动作元素有且仅有1次,注视动作元素最多出现1次,[眨眼,注视]组合中的动作元素不会相邻,相邻的动作元素不会相同。//// 该参数只有当isSilentMode是INTERACTIVE_MODE的时候有效。actionsNum: this.actionCount,// 表示人脸活体检测成功后跳转的页面路径。如果不填,系统有默认的检测成功页面。// successfulRouteUrl: "pages/result/success", // 自定义成功跳转路径(需提前创建页面)// 表示人脸活体检测失败后跳转的页面路径。如果不填,系统有默认的检测失败页面。// failedRouteUrl: "pages/result/fail", // 自定义失败跳转路径(需提前创建页面)routeMode: this.routeMode, // 跳转模式// 语音播报的开关。//// true表示开启语音播报。// false表示关闭语音播报。// 默认开启语音播报。speechSwitch: this.speechEnabled, // 语音播报控制// 挑战值。仅用于安全摄像头场景(对应initializeAttestContext方法中的“userData”字段)的活体检测。//// 使用安全摄像头场景的前提需要开通Device Security服务。//// 长度范围是16-128之间(challenge传空或者undefined表示不使用安全摄像头)。// challenge: "自定义挑战值1234567890abcdef", // 安全摄像头场景可选// 是否设置隐私模式。//// true:设置隐私模式。// false:不设置隐私模式。// 默认值为false。// isPrivacyMode: true // 隐私模式需额外权限 当设置隐私模式时,需要申请ohos.permission.PRIVACY_WINDOW权限。};}// 启动检测private async startDetection() {if (!this.userGrant) {this.detectionResult = "请先申请相机权限";return;}const config = this.generateDetectionConfig();try {const jumpSuccess = await interactiveLiveness.startLivenessDetection(config);if (jumpSuccess) {hilog.info(0x0001, "Detection", "跳转检测页面成功");// 检测完成后获取结果(需在返回页面时调用)const result = await interactiveLiveness.getInteractiveLivenessResult();this.processResult(result);}} catch (err) {const error = err as BusinessError;hilog.error(0x0001, "Detection", `检测失败: 错误码${error.code}, 信息${error.message}`);this.detectionResult = `检测异常:错误码${error.code}`;}}// 结果处理private processResult(result: interactiveLiveness.InteractiveLivenessResult) {let status = "";let livenessType = result.livenessType;switch (livenessType) {case 0: // 动作活体检测成功status = "活体检测通过";// 可在此处处理特征图片或安全数据break;case 2: // 非活体status = "检测到非活体(照片/视频攻击)";break;default:status = "检测结果异常";}this.detectionResult = status;}build() {Column({ space: 40 }){// 权限申请按钮Button(this.userGrant ? "权限已授权" : "申请相机权限").fontSize(18).margin(10).padding(12).backgroundColor(this.userGrant ? Color.Green : Color.Blue).onClick(() => this.requestPermissions())// 动作数量选择Row({ space: 20 }) {Text("动作数量:").fontSize(16)Button("3个动作").backgroundColor(this.actionCount === 3 ? Color.Blue : Color.White).border({ width: 1, color: Color.Gray }).onClick(() => this.actionCount = 3)Button("4个动作").backgroundColor(this.actionCount === 4 ? Color.Blue : Color.White).border({ width: 1, color: Color.Gray }).onClick(() => this.actionCount = 4)}// 语音播报开关Toggle({ type: ToggleType.Checkbox, isOn: this.speechEnabled }).onChange((isOn: boolean)=>{this.speechEnabled = isOn;})// 跳转模式选择Row({ space: 20 }) {Text("跳转模式:").fontSize(16)Button("替换页面").backgroundColor(this.routeMode === "replace" ? Color.Blue : Color.White).border({ width: 1, color: Color.Gray }).onClick(() => {this.routeMode = interactiveLiveness.RouteRedirectionMode.REPLACE_MODE;})Button("返回上页").backgroundColor(this.routeMode === "back" ? Color.Blue : Color.White).border({ width: 1, color: Color.Gray }).onClick(() => {this.routeMode = interactiveLiveness.RouteRedirectionMode.BACK_MODE;})}// 启动检测按钮Button("开始人脸活体检测").fontSize(20).padding(16).backgroundColor(Color.Orange).onClick(() => this.startDetection())// 结果显示Text(this.detectionResult).fontSize(16).margin({top: 30}).foregroundColor(this.detectionResult.includes("通过") ? Color.Green : Color.Red)}.width("100%").height("100%").justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center)}
}

注意:

1. 人脸活体检测支持两种模式
INTERACTIVE_MODE(动作活体检测):默认模式,需用户完成 3 或 4 个随机动作(如眨眼、点头等),通过动作组合验证活体,规则限制避免相邻动作重复或特定组合(如眨眼和注视不相邻)。
SILENT_MODE(静默活体检测):暂未支持,无需用户做动作,通过其他技术(如微表情、光线反射)检测活体。

2. 配置人脸活体检测的动作数量和跳转逻辑
通过InteractiveLivenessConfig中的actionsNum配置,可选值为 3(默认)或 4,3 个动作时(眨眼,注视) 不同时存在且不相邻,4 个动作时眨眼仅 1 次,注视最多 1 次。
通过routeMode配置跳转模式(BACK_MODE 返回上一页或 REPLACE_MODE 替换跳转,默认 REPLACE_MODE)。
successfulRouteUrl和failedRouteUrl设置成功 / 失败后的自定义跳转路径(未填则用系统默认页面)。

3. 常见错误及处理:
201(Permission denied):未申请ohos.permission.CAMERA权限

1008301002(Route switching failed):路由配置错误,检查successfulRouteUrl/failedRouteUrl路径是否正确,或routeMode是否与页面路由匹配。

1008302000-1008302004(检测相关错误):检测过程中算法初始化失败、超时或动作不符合规则,可通过回调或 Promise 的 catch 捕获错误码,提示用户重新检测并检查动作合规性。

相关文章:

【HarmonyOS 5】VisionKit人脸活体检测详解

【HarmonyOS 5】VisionKit人脸活体检测详解 一、VisionKit人脸活体检测是什么? VisionKit是HamronyOS提供的场景化视觉服务工具包。 华为将常见的解决方案,通常需要三方应用使用SDK进行集成。华为以Kit的形式集成在HarmoyOS系统中,方便三方…...

Linux操作系统--进程的创建和终止

目录 1.进程创建 1.1fork()函数初识 1.2写时拷贝 1. 提升系统效率 2. 隔离错误影响 3. 支持并行计算 2.进程终止: 2.1进程退出场景: 2.2进程常见退出方法: 2.3_exit()系统调用接口 2.4exit函数 2.5return退出 1.进程创建 1.1for…...

算法分析传输加密数据格式密文存储代码混淆逆向保护

代码混淆 一.基本概念java的bytecode很容易通过JAD等反编译工具还原出源代码。这样势必不满足安全的定义。如何一定程度上保护需要防止被反编译的源代码呢?混淆(obfuscate)技术注意:用obfuscate防盗版是根本不可能,连汇…...

从事计算机视觉需要掌握哪些知识

目录 基础数学知识 计算机科学基础 传统计算机视觉知识 机器学习与深度学习知识 其他知识 计算机视觉是一门让计算机从图像或视频中获取有意义信息的跨学科领域,从事该领域需要掌握多方面的知识,以下详细介绍: 基础数学知识 线性代数 &…...

Android Studio 中 Drawable 详细全解

文章目录 一、Drawable 概述二、Drawable 类型详解1. 位图 Drawable (BitmapDrawable)2. 矢量 Drawable (VectorDrawable)3. 形状 Drawable (ShapeDrawable)4. 图层 Drawable (LayerDrawable)5. 状态列表 Drawable (StateListDrawable)6. 级别列表 Drawable (LevelListDrawable…...

【实战中提升自己】内网安全部署之端口隔离与MAC地址认证

1 1拓扑 「模拟器、工具合集」复制整段内容 链接:https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab7ulgil 1 端口隔离技术部署 [boss]port-group 1 [boss-port-group-1]port-isolate enable 说明:这里有几个地方不需要部署…...

Linux 420 find stat touch tree scp crontab

准备安装CentOSstream https://blog.csdn.net/s_alted/article/details/117739735 官网 CentOS 9 “Couldn’t open file /mnt/repodata/repomd.xml” deepseek 下载成功 树状 另一台虚拟机...

基于 Vue3 + ECharts + GeoJson 实现区域地图钻取功能详解

文章目录 前言一、实现步骤1. 项目初始化2. 准备GeoJson数据3. 创建地图组件4. 创建主页面组件5. 使用组件 二、功能亮点三、性能优化建议四、常见问题解决五、结语六、实战demo七、资源下载 前言 在数据可视化领域,地图展示是一种非常直观的表现形式。而地图钻取&…...

算法题(129):二维前缀和

审题: 本题需要我们将q组矩阵的和打印出来 思路: 方法一:二维前缀和 由于本题使用暴力的模拟方法运行次数高达1e11,会超时,所以我们采用运行次数在1e6的二维前缀和来解题 第一步:前缀和的求法 x i&#xf…...

NEAT 算法解决 Lunar Lander 问题:从理论到实践

NEAT 算法解决 Lunar Lander 问题:从理论到实践 0. 前言1. 定义环境2. 配置 NEAT3. 解决 Lunar lander 问题小结系列链接0. 前言 在使用 NEAT 解决强化学习问题一节所用的方法只适用于较简单的强化学习 (reinforcement learning, RL) 环境。在更复杂的环境中使用同样的进化解…...

Arduino示例代码讲解:Project 07 - Keyboard 键盘

Arduino示例代码讲解:Project 07 - Keyboard 键盘 Project 07 - Keyboard 键盘程序功能概述功能:硬件要求:输出:代码结构全局变量`setup()` 函数`loop()` 函数读取电位器值:打印电位器值:播放音调:运行过程注意事项Project 07 - Keyboard 键盘 /*Arduino Starter Kit e…...

4.凸包-Graham Scan

Graham Scan:Algorithm Preprocessing 根据角度进行排序 Graham Scan 例子 例2 Graham Scan:Correctness Left Turn/right Trun 下一个点出现的两种情况:非蓝即绿 Presorting 预排序很重要:否则所有的点都会满足 to-left-test BackTracks算法复杂度 …...

系统架构师2025年论文《论SOA技术的应用》

摘要: 本人于XXXX年XX月参加某市医院《预约挂号系统》的开发工作,在该项目中主要担任系统架构师,主要负责该系统架构和网络安全体系架构设计。经过多年的医院信息化建设,某市医院已经建立了一些应用系统,但是&#xf…...

React+TS编写轮播图

当前轮播图存在部分问题,一次循环结束,进入下一次需要点击两次(所以动画效果上点击第二次才出现) 轮播图:实现无限循环轮播图的关键在于"视觉欺骗"——我们在实际数据的前后各添加部分数据副本,当…...

山东大学创新项目实训开发日志(19)之前端知识深度学习

今天晚上在队长的带领下学习了一下前端vue的基础知识 reactive和ref函数 refreactive数据类型原始数据、对象对象操作js中需要添加.value&#xff0c;tamplate中则不用都不用添加.value computed和watch computed 写法 <script setup>const Factorial computed(() &g…...

【C++详解】C++入门(一)

文章目录 一、命名空间命名空间的基本特性命名空间的使用 二、C输入输出用法三、缺省参数(默认参数)定义用法 四、函数重载 一、命名空间 命名空间的基本特性 #include <stdio.h> #include <stdlib.h>int rand 10;int main() {// 编译报错&#xff1a;error C23…...

MAC-从es中抽取数据存入表中怎么实现

使用 Java 从 Elasticsearch 抽取数据并存入数据库表的完整实现方案: 1. Maven 依赖配置 <dependencies><!-- Elasticsearch --><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-c…...

Android串口通信

最近因为需要在Android平台进行电子秤的开发&#xff0c;首先第一步就是需要解决Android串口通信获取电子秤的称重信息。 google官方给我们提供了现成的解决方案&#xff0c;里面有编译好的apk文件还有源代码可以直接参考使用。地址&#xff1a;http://code.google.com/p/andr…...

QT常见输入类控件及其属性

Line Edit QLineEdit用来表示单行输入框&#xff0c;可以输入一段文本&#xff0c;但是不能换行 核心属性&#xff1a; 核心信号 信号 说明 void cursorPositionChanged(int old,int new) 当鼠标移动时发出此型号&#xff0c;old为先前位置&#xff0c;new为新位置 void …...

RAG 与 MCP 如何以不同方式解决大模型的局限性

Claude 和 GPT-4o 等大型语言模型 (LLM) 功能强大&#xff0c;但也面临两个主要限制&#xff1a;它们包含的知识是时效性的&#xff08;更具体地说&#xff0c;是在训练时点固定的&#xff09;&#xff0c;并且决定它们一次可以处理多少信息的上下文窗口是有限的。 检索增强生…...

[Windows]_[VS2017]_[如何进行远程调试程序]

场景 在开发Windows程序时&#xff0c;有时候在测试机上测试出异常操作的情况&#xff0c;在开发机上就是出现不了。还比如在测试机上能测试到崩溃的情况&#xff0c;在开发机上也是重现不了&#xff0c;怎么办&#xff1f; 说明 这种情况可能是测试机上的系统版本&#xff0…...

Retinex系列图像/视频增强算法介绍

Retinex 系列原理基础 一、核心原理与理论 Retinex算法基于人类视觉系统特性,认为观测到的图像由光照分量(L)与反射分量( R )乘积构成,即: S ( x , y ) = L ( x , y...

游戏引擎学习第237天:使用 OpenGL 显示图像

win32_game.cpp: 禁用 PFD_DOUBLEBUFFER 我们正在处理一个新的开发阶段&#xff0c;目标是在使用 OpenGL 渲染的同时能正常通过 OBS 进行直播。昨天我们已经尝试了一整天来解决这个问题&#xff0c;希望能找到一种方式让 OBS 能正确地捕捉到 OpenGL 的窗口画面。虽然我们不确定…...

【C++基本算法】背包问题——完全背包

7. 背包问题——完全背包 文章目录 7. 背包问题——完全背包【模板】完全背包零钱兑换零钱兑换∥完全平方数问题解决注意事项 【模板】完全背包 题目链接&#xff1a; 【模板】完全背包 要点&#xff1a; 完全背包核心逻辑&#xff1a;物品无限次选择&#xff0c;状态转移方…...

Spring 01

今天是2025/0420 19:44 day 21 总路线请移步主页Java大纲相关文章 今天进行Spring 1,2,3 个模块的归纳 最近在忙毕设&#xff0c;更新有点慢&#xff0c;见谅 首先是Spring 的相关内容概括的思维导图 一、核心概念详解 1. IoC容器 1.1 工作原理 // 典型使用示例 Applica…...

小迪第10天http/s数据包

HTTP数据包 浏览器请求&请求头&响应头 浏览器访问流程 请求:用户–>web服务器 (Request) 响应:web服务器–> 用户(Response) 加代理后 请求:用户–>代理–>web服务器 (Request) 响应:web服务器–>代理–> 用户(Response) http GET请求头 http post…...

网络设备基础运维全攻略:华为/思科核心操作与巡检指南

一、设备登录与基础操作体系 1. 安全登录策略与环境准备 &#xff08;1&#xff09;登录方式深度解析 协议华为/H3C命令思科命令安全性应用场景Telnettelnet 192.168.1.1telnet 192.168.1.1明文传输本地测试&#xff08;禁止公网使用&#xff09;SSHssh -l admin 192.168.1.…...

Jsp技术入门指南【八】利用EL表达式开发无脚本的JSP页面

Jsp技术入门指南【八】利用EL表达式开发无脚本的JSP页面 前言一、什么是EL&#xff1f;二、EL如何访问作用域&#xff1f;2.1 对比传统脚本 vs EL2.2 EL的“自动搜索机制” 三、EL运算规则&#xff1a;什么能相加&#xff1f;什么不能&#xff1f;四、EL如何访问集合和数组&…...

MySQL数据库(基础篇)

一&#xff1a;MySQL的概述 1&#xff1a;MySQL数据库的下载地址 MySQL &#xff1a;&#xff1a; 下载 MySQL 安装程序 2&#xff1a;MySQL的客户端连接方式 1&#xff1a;使用Mysql自带的来连接 2&#xff1a;使用windows自带的命令行来来连接&#xff08;需要配置path环…...

OpenCV 图像调整指南

OpenCV 提供了多种图像调整功能&#xff0c;以下是常见的视觉图片调整方法&#xff1a; 一、基本调整 1. 调整亮度和对比度 import cv2 import numpy as npdef adjust_brightness_contrast(img, brightness0, contrast0):# 亮度和对比度调整# brightness: -100 到 100 (0 表示…...

云效部署实现Java项目自动化部署图解

前言 记录下使用云效部署Java项目&#xff0c;实现java项目一键化自动化部署。 云效流程说明&#xff1a; 1.云效拉取最新git代码后 2.进行maven编译打包后&#xff0c;上传到指定服务器目录 3.通过shell脚本&#xff0c;先kill java项目后&#xff0c;通过java -jar 启动项…...

17.Chromium指纹浏览器开发教程之设备内存和处理器指纹定制

设备内存指纹定制 在 JavaScript 中&#xff0c;可以使用 navigator.deviceMemory 来获取设备的内存信息。它返回一个表示设备的内存大小&#xff08;以 GB 为单位&#xff09;的浮点数。具体代码如下&#xff1a; if (navigator.deviceMemory) {// 获取设备内存信息const de…...

遇到QT进程启动失败。被调用的程序丢失,或者您可能没有足够的权限来调用该程序。

【完整错误】16:43:40: The process failed to start. Either the invoked program "/home/xiaojin/QT_code/QT_TCP_CLIENT/build/Desktop_Qt_5_15_0_GCC_64bit-Debug/QT_TCP_CLIENT" is missing, or you may have insufficient permissions to invoke the program. …...

大数据可能出现的bug之flume

一、vi /software/flume/conf/dir_to_logger.conf配置文件 问题的关键: Dir的D写成了小写 另一个终端里面的东西一直在监听状态下无法显示 原来是vi /software/flume/conf/dir_to_logger.conf里面的配置文件写错了 所以说不是没有source参数的第三行的原因 跟这个没关系 …...

32-工艺品商城小程序

技术&#xff1a; 基于 B/S 架构 SpringBootMySQLvueelementuiuniapp 环境&#xff1a; Idea mysql maven jdk1.8 node 可修改为其他类型商城 用户端功能 1.系统首页展示轮播图及工艺品列表 2.分类模块:展示产品的分类类型 3.购物车:进行商品多选结算 或者批量管理操作 4.…...

Kubernetes控制平面组件:调度器Scheduler(一)

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

HTTP:十.cookie机制

Cookie概念及类型 HTTP cookie,简称cookie,又称数码存根、“网站/浏览+魔饼/魔片”等,是浏览网站时由网络服务器创建并由网页浏览器存放在用户计算机或其他设备的小文本文件。Cookie使Web服务器能在用户的设备存储状态信息(如添加到在线商店购物车中的商品)或跟踪用户…...

go语言对http协议的支持

http&#xff1a;无状态协议&#xff0c;是互联网中使用http使用http实现计算机和计算机之间的请求和响应 使用纯文本方式发送和接受协议数据&#xff0c;不需要借助专门工具进行分析就知道协议中的数据 服务器端的几个概念 Request&#xff1a;用户请求的信息&#xff0c;用…...

Origin将双Y轴柱状图升级为双向分组柱状图

当变量同时存在两个数值时的可视化时&#xff0c;往往会想到用双Y轴柱状图来表达我们的数据。 双Y轴柱状图是一种在同一图表中使用左右两个Y轴的可视化形式&#xff0c;常用于展示两组量纲不同或数值范围差异较大的数据。 双向分组柱状图是一种结合了双向柱状图和分组柱状图的…...

FileZilla“服务器发回了不可路由的地址,使用服务器地址代替

问题&#xff1a;在宝塔创建的FTP无法使用&#xff0c;提示“服务器回应不可路由的地址。使用服务器地址代替 第一种解决办法&#xff1a;由于宝塔把FTP被动模式端口范围设置成了39000-40000&#xff0c;所以只需要把阿里云服务器上相应的端口范围开放即可。 第二种解决办法&am…...

Linux中服务器时间同步

简单介绍 在 redhat 8 之前&#xff0c;时间同步服务是使用 NTP&#xff08;网络时间协议&#xff09;来实现的&#xff0c;在 redhat 8 及之 后使用是 NTP 的实现工具 chrony 来实现时间同步。 在 redhat 8 及之后&#xff0c;默认情况下已经安装好 chrony 软件并已经开机启…...

gbase8s之线程状态详解(超值)

--mutex wait nsf.0lock 意味着数据库服务器中的一个线程当前正在等待获取名为 nsf.0lock 的互斥锁 可能的原因和影响: 锁争用 (Lock Contention): 这是最常见的原因。多个线程可能需要频繁访问由 nsf.0lock 保护的共享资源。如果持有锁的线程执行时间过长,或者有太多线…...

Linux学习——Linux进程间通信(IPC)聊天程序实践

Linux学习——Linux进程间通信&#xff08;IPC&#xff09;聊天程序实践 一、在阿里云服务器上使用talk程序 Linux系统自带的talk命令可以让两个登录用户进行实时文字聊天&#xff1a; 用户A执行&#xff1a;talk usernameB用户B会收到通知&#xff0c;并需要执行&#xff1…...

PCA 降维实战:从原理到电信客户流失数据应用

一、简介 在机器学习领域&#xff0c;数据的特征维度往往较高&#xff0c;这不仅会增加计算的复杂度&#xff0c;还可能导致过拟合等问题。主成分分析&#xff08;Principal Component Analysis&#xff0c;简称 PCA&#xff09;作为一种经典的降维技术&#xff0c;能够在保留数…...

即插即用模块(1) -MAFM特征融合

(即插即用模块-特征处理部分) 一、(2024) MAFM&MCM 特征融合特征解码 paper&#xff1a;MAGNet: Multi-scale Awareness and Global fusion Network for RGB-D salient object detection 1. 多尺度感知融合模块 (MAFM) 多尺度感知融合模块 (MAFM) 旨在高效融合 RGB 和深度…...

Linux学习——TCP

一.TCP编程API 1.socket函数 1.socket函数 include include int socket(int domain,int type,int protocol); 参数 domain AF_INET AF_INET6 AF_UNIX,AF_LOCAL AF_NETLINK AF_PACKET type SOCK_STREAM: 流式…...

Kubernetes控制平面组件:调度器Scheduler(二)

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

数据通信学习笔记之OSPF其他内容2

OSPF 与 BFD 联动 网络上的链路故障或拓扑变化都会导致设备重新进行路由计算&#xff0c;所以缩短路由协议的收敛时间对于提高网络的性能是非常重要的。 OSPF 与 BFD 联动就是将 BFD 和 OSPF 关联起来&#xff0c;一旦与邻居之间的链路出现故障&#xff0c;BFD 对完品以&…...

数据通信学习笔记之OSPF的区域

OSPFArea 用于标识一个 OSPF 的区域 区域是从逻辑上将设备划分为不同的组&#xff0c;每个组用区域号 (Area ID)来标识 OSPF 的区域 ID 是一个 32bit 的非负整数&#xff0c;按点分十进制的形式(与 IPV4 地址的格式一样)呈现&#xff0c;例如 Area0.0.0.1。 为了简便起见&#…...

css3新特性第四章(渐变)

渐变 线性渐变 径向渐变 重复渐变 使用&#xff1a; background-image: xx 渐变 background-image: linear-gradient(red,yellow,green); 公共代码 .box {width: 300px;height: 200px;border: 1px solid black;float: left;margin-left: 30px;margin-top: 30px;text-align:…...