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

腾讯 Kuikly 正式开源,了解一下这个基于 Kotlin 的全平台框架

在 3月的时候通过 《腾讯 TDF 即将开源 Kuikly 跨端框架,Kotlin 支持全平台》 我们大致知道了 Kuikly 的基本情况,Kuikly 是一个面向终端技术栈的跨端开发框架,完全基于kotlin语言开发,提供原生的性能和体验。

按照官方的说法:Kuikly 是基于Kotlin Multiplatform 的 UI 与逻辑全面跨端综合解决方案,由腾讯大前端领域 Oteam(公司级)推出,目的在于提供一套一码多端、极致易用、动态灵活的全平台高性能开发框架

当然,虽然是全平台,但是目前暂时只开源了 Android 和 iOS,鸿蒙部分 5 月才开源,而 Web 和 小程序暂定是 Q2:

img

官方表示 Kuikly 在腾讯内部本身已经支持了小程序 + H5 ,后续会分步骤开放,可能下一期还不会是所有小程序平台。

那 Kuikly 如何实现跨平台?目前 Kuikly 主要是在 KMP 的基础上实现的自研 DSL 来构建 UI ,比如 iOS 平台的 UI 能力就是 UIkit ,而大家更熟悉的 Compose 支持,目前还处于开发过程中:

img

SwiftUI 和 Compose 无法直接和 Kuikly 一起使用,但是 Kuikly 可以在 DSL 语法和 UI 组件属性对齐两者的写法,变成一个类 Compose 和 SwiftUI 的 UI 框架,也就是 Compose DSL 大概就是让 Kuikly 更像 Compose ,而不是直接适配 Compose

那么大家可能会有疑问,既然借助了平台控件的能力,那它和 RN 有什么区别?

首先 Kuikly 是直接从编译产物的角度实现跨平台,它的编译产物与原生一致,和 RN 是在运行时转换为原生控件不同,Kotlin 是直接编译为对应平台的原生代码,所以在运行时其实就类似原生 code 。

那 Kuikly 又如何保证多端 UI 一致?答案是 Kuikly 实现了自己的一套「薄原生层」

首先在 Kotlin 层,Kuikly 将虚拟 Dom 方案优化为直调方案,这里 Kotlin View API 直调,避免 JSON 序列化/反序列化损耗,同时只维护一棵树,更轻量和O(1)同步UI更新:

img

之后,Kuikly 使用“非常薄”的原生层,该原生层只暴露最基本和无逻辑的 UI 组件(原子组件),也就是 Kuikly 在 UI 上只用了最基本的原生层 UI ,真正的 UI 逻辑主要在共享的 Kotlin 代码来实现:

通过将 UI 逻辑抽象到共享的 Kotlin 层,减少平台特定 UI 差异或行为差异的可能性,「薄原生层」充当一致的渲染目标,确保 Kotlin 定义的 UI 元素在所有平台上都以类似的方式显示。

img

也就是说,Kuikly 虽然会依赖原生平台的控件,但是大部分控件的实现都已经被「提升」到 Kuikly 自己的 Kotlin 共享层,目前 Kuikly 实现了 60% UI 组件的纯 Kotlin 组合封装实现,不需要 Native 提供原子控件

img

最容易出现不一致的高阶组件都通过 Kotlin 实现,比如 List 列表控件,Kuikly 通过对齐 Native 的 List 内部实现原理,然后再用 Kotlin 重写一次,从而实现真正的高一致性 UI 组件跨平台实现。

img

所以基于上面的内容,我们再来看 Kuikly UI 官方提供的结构图,是不是就清晰了很多:

img

  • Core 模块提供了统一的 UI 逻辑实现和 API 接口
  • Render 模块负责在 Android、iOS、HarmonyOS、H5 以及各种小程序等多个平台上实现 UI 的渲染 。

另外在 Kuikly 领域,还有一套名为 KuiklyBase 服务,它是独立于 Kuikly UI 之外,为 Kuikly 提供基础设施支持,比如为 iOS、Android 和鸿蒙三大移动平台提供了统一的底层基建能力:

img

KuiklyBase 强调在不同平台之间实现高性能的逻辑共享 ,它更像是 KMP 的进一步定制,KuiklyBase 兼容标准的 Kotlin Multiplatform 组件,允许复用成熟的 KMP 组件,比如有些业务各端都已经有 UI 层的实现,仅仅需要非 UI 的业务逻辑实现跨端,而通过 KuiklyBase 的基础设施,也可以满足这种场景的需求。

另外 KuiklyBase 还提供了对 HarmonyOS 平台的全面支持,包括 KN HarmonyOS 编译、调试和构建能力。

也就是 Kuikly 在鸿蒙有支持 Kotlin Native 高性能版本。

同时,KuiklyBase 还提供了强大的多线程和协程能力,支持复杂业务逻辑的跨平台并行处理,以满足高性能场景的需求。

并且在开发工具链方面,KuiklyBase 覆盖了从脚手架搭建到调试、构建、发布和监控的整个流程,特别是支持和 Bugly 和 Shiply 联动提供配套能力。

最后,KuiklyBase 还内置了性能优化工具,并针对 HarmonyOS 和 iOS 提供了优化的调试体验 。

目前使用 KuiklyBase 业务的团队:腾讯视频、浏览器、新闻、输入法、理财通····

当然,这里需要注意的是, KuiklyBase 和 KuiklyUI 一起使用,某种情况下会存在场景冲突:

  • KuiklyUI 的 iOS 和鸿蒙动态化方案主要利用了 Kotlin/JS 编译成 js 产物,动态下发到宿主的js引擎去执行
  • KuiklyBase 利用 Kotlin/Native 编译成高性能的二进制产物执行,因此没有解耦 KuiklyBase 的 KMP 组件,在 iOS 和鸿蒙在动态化场景需要注意兼容

所以,动态化决定了你优先使用哪个支持:

  • 无动态化诉求场景: KuiklyBase + KuiklyUI = 完美

  • 有动态化诉求场景: KuiklyBase 兼容 js 动态化方案还没完成,短期方案可利用 KuiklyUI 的 Module 方案来作为替代

上面问题的核心其实是,KuiklyBase 组件因为是 KMP 组件,没有和平台做解耦,动态化时产物会运行在 js 环境中,由于 js 单线程,无法直接提供平台能力等的限制,所以决定了动态化部分不能直接使用多线程和平台能力。

所以业务在开发过程中需要特别注意在调用平台 KMP 组件能力的时候,需要通过 Kuikly Module 方式进行解耦调用,避免直接依赖

Kuikly 作为一个跨端的 UI 框架, 他本身不具备调用平台 API 的能力, 但是Kuikly提供了一套Module机制,可以通过Module机制将平台的 API 暴露给 Kuikly 侧调用,同时 Kuikly内置了一些通用的 Module , 如果这些 Module 不满足 业务诉求时, 可以通过扩展原生 API 自定义Module, 将更多的宿主平台 API 暴露给 Kuikly 侧使用。

在 KuiklyUI 内部,模块页面分为两种类型:可动态化类型(内置和动态灵活切换)和纯内置类型(只能内置) :

img

而可动态化类型部分:

  • 不可直接依赖平台能力
  • 不可使用多线程和协程
  • 不可依赖内置部分
  • 不可依赖使用到了平台能力或多线程协程等能力的 KMP 组件,如果无法避免需要使用相关能力,就需要前面提到额 Kuikly Module 进行解耦调用

核心就是,动态化的只能是 JS 。

最后,以下是 Kuikly 工程的项目结构说明:

.
├── core                    # 跨平台模块,实现各个平台响应式 UI、布局算法、Bridge 通信等核心能力├── src├── commanMain            # 跨平台共享代码、定义跨平台接口 ├── androidMain           # Android 平台实现代码 (aar)├── jvmMain               # 泛 JVM 平台代码(不涉及 Android API)(jar)├── iosMain               # iOS 平台实现代码(framework)
├── core-render-android    # android 平台的渲染器模块
├── core-render-ios        # iOS 平台的渲染器模块
├── core-annotations       # 注解模块,定义业务注解 @Page
├── core-ksp               # 注解处理模块,生成 Core 入口文件 
├── buildSrc               # 编译脚本,用于编译、打包、分包产物相关脚本
├── demo                   # DSL 示例代码 
├── androidApp             # Android 宿主壳工程
└── iosApp                 # iOS 宿主壳工程

还有需要注意的是,之前的 Kuikly 的插件还不支持 K2 模式,所以如果你的 IDE 是 K2 模式,需要关闭 K2 才能支持插件:

img

而一天之后,已经是 1.0.3 版本,此时 KuiklyTemplate 插件也支持了最新的 K2 模式:

img

针对 Mac 用户还提供 kdoctor CI 支持:img

另外,Kuikly 未来也会兼容 Compose DSL ,但是大概率不会是原本的 Compose ,而是类 Compose 的代码组织方式。

另外,在混合开发领域,在原有 App 集成 Kuikly ,可以把它简单当作如系统 webview 的概念来使用,但是如果在原生列表中嵌入 Kuikly view,目前会因为 Kuikly 本身的异步机制,导致无法同原生列表其它卡片同时生存layout和view结果,造成显示上的不同步。

可以看到,Kuikly 总得来说还是一个类 RN 框架,但是它又不像 RN 一样的运行时 OEM 原生控件,而是在编译成完成转化为原生代码,并且它抽象出了统一的 「薄原生层」,让大量高阶控件在共享的 Kotlin 层完成实现,只让少量 native 层提供原子组件能力,从而尽可能实现 UI 的多端统一,类似于把原生控件单做 “Canvas" 效果使用。

总的来说,Kuikly 既能实现接近原生的性能体验和原生的开发体验,又能提供良好的动态化能力,看起来还是不错的选择。

最后,官方表示 Kuikly 对于 Android 的同学家基本没有学习成本,只要使用过响应式开发的都能上手,而对于 iOS 同学而已,大概就是需要熟悉一下 Kotlin 语法,不过 Kotlin 和 Swift 相近度挺高,所以上手也不会太困难。

目前 Kuikly 已经在 QQ、QQ音乐、QQ浏览器、腾讯新闻、搜狗输入法、应用宝、全民K歌、酷狗音乐、酷我音乐、自选股、ima.copilot、微视等多款产品中使用,那么,你觉得你会愿意尝试 Kuikly 吗?

参考链接

  • https://kuikly.tds.qq.com/
  • https://github.com/Tencent-TDS/KuiklyUI/

相关文章:

腾讯 Kuikly 正式开源,了解一下这个基于 Kotlin 的全平台框架

在 3月的时候通过 《腾讯 TDF 即将开源 Kuikly 跨端框架,Kotlin 支持全平台》 我们大致知道了 Kuikly 的基本情况,Kuikly 是一个面向终端技术栈的跨端开发框架,完全基于kotlin语言开发,提供原生的性能和体验。 按照官方的说法&…...

【c++】AVL树模拟实现

简介 AVL树是最先被发明出来的自平衡二叉查找树,在1962由前苏联科学家G. M. Adelson-Velsky和E. M. Landis在论文中发表。AVL树中引入了平衡因子,每一个节点都有一个平衡因子(一般是右子树高度 - 左子树高度);AVL树要…...

具身智能模型开发训练技法之仿真平台动捕数据重定向

具身智能大模型的开发与训练高度依赖大量的数据输入,形象地说,如同需要持续的“数据喂养”。只有经过不断地进行数据积累和模型训练,具身智能大模型才能够实现自主感知、自主决策以及自主执行的完整进程。在多样化的数据形态中,真…...

手撕——贪吃蛇小游戏(下)

引言 上一章介绍了实现贪吃蛇小游戏必备的知识点。 这章,让我们一起开启手搓核弹之旅吧。 先附上贪吃蛇代码的git:贪吃蛇小游戏_4_23 Shown_shuai/learn_c - 码云 - 开源中国 (gitee.com) 上一章的窗口: 手撕——贪吃蛇小游戏&#xff0…...

C++ 类与对象(中)—— 默认成员函数与运算符重载的深度解析:构造函数,析构函数,拷贝构造函数,赋值运算符重载,普通取地址重载,const取地址重载

在 C 中,类的默认成员函数是编译器自动生成的重要机制,合理利用这些函数可以简化代码编写,同时避免资源管理错误。本文将从构造函数、析构函数、拷贝构造函数、赋值运算符重载等核心内容展开,结合具体案例深入解析。 一、默认成员…...

【Jupyter 启动时如何指定目录】

你在 Windows 系统下运行 jupyter notebook 时,遇到了 Jupyter Notebook 打开的目录不是你想要的 E:\desktop\yolo-study,而是其他路径。这可能是由于 Jupyter 的默认配置问题 或 启动路径问题 导致的。 🔍 原因分析 Jupyter 默认根目录设置错…...

PostSwigger Web 安全学习:CSRF漏洞2

CSRF 漏洞学习网站:What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy CSRF 漏洞:SameSite相关绕过 当浏览器访问服务器时,服务器会在 Cookie 中添加 SameSite 属性来告诉浏览器是否在来自其他…...

openharmony—4.1 softbus_tool 工具编译使用测试笔记(持续更新)

​ 相关资料: 1.communication_dsoftbus: 暂无描述 - Gitee.com 2.dsoftbus_tool: OpenHarmony 分布式软总线样例 3.OpenAtom OpenHarmony​ 4.OpenAtom OpenHarmony 编译该demo之前需要大家搭建拉取openharmony源码,搭建开发环境,同时全…...

关于 Web 服务器的五个案例

一、案例题目: 1.多 IP 访问多网站(在 RHCE 练习二中的实验二) 2.多端口访问多网站 3.多域名访问多网站 4.虚拟目录和用户控制 5.https/443 二、案例实验 2.多端口访问多网站 ① 开始还是先关闭我们的防火墙以及 selinux [rootserve…...

第十二章-PHP文件上传

第十二章-PHP文件上传 一,文件上传原理 一、HTTP协议与文件上传 1. 请求体结构 当表单设置enctype"multipart/form-data"时,浏览器会将表单数据编码为多部分(multipart)格式。 Boundary分隔符:随机生成的…...

shell脚本部署disu博客

#!/bin/bash #关闭防火墙 systemctl status firewalld &>/dev/null if [ $? -ne 0 ];then systemctl stop firewalld &>/dev/null else echo “firewalld is disabled” fi #关闭selinux filegetenforce if [ “$fine” “Disabled” ];then echo “firewalld…...

NdrpPointerUnmarshallInternal函数分析之pFormatPointee指针的确定

第一部分: 0: kd> p RPCRT4!NdrPointerUnmarshall0x29: 001b:77c46ce4 e8b6f6ffff call RPCRT4!NdrpPointerUnmarshall (77c4639f) 0: kd> t Breakpoint 4 hit RPCRT4!NdrpPointerUnmarshall: 001b:77c4639f 55 push ebp 0: kd> …...

STM32(M4)入门:定时器延时与系统滴答(价值 3w + 的嵌入式开发指南)

第 1 章 延时:嵌入式系统的时间控制基石 1.1 延时基础:从概念到硬件实现 1.1.1 什么是延时? 定义:延时是通过软件或硬件手段,使程序执行过程中暂停指定时间,再继续后续操作的技术。本质是对时间的精确或…...

2025 FIC wp

这次比赛计算机和手机大部分题目都比较常规 第一和第四部分有点让人摸不着头脑 比赛的时候第一部分有四个题没出 第四部分基本都没怎么出 现在复盘一下 把我当时做题的心得和获取的新知识记录一下 互联网取证的部分就先学习一下别的师傅 检材 链接:https://pan.bai…...

STM32标准库和HAL库SPI发送数据的区别-即SPI_I2S_SendData()和HAL_SPI_Transmit()互换

1、标准库SPI初始化 这是标准库的SPI初始化配置 2、HAL库SPI初始化 这是HAL库函数的SPI初始化配置 可以看出,基本一直,除了 基本的io口配置区别,其他主要的读写函数不用动的。 3、SPI发送函数_替换对比 /* SPI写入一个字节 */ void SP…...

Cesium 三维场景中通过自定义着色器实现多种特效(纹理、光带、点光源、反射)

整体功能概述 构建一个基于 Cesium 的三维场景,加载三维瓦片集模型,同时提供多种特效,像夜景纹理、上下扫光、点光源以及反射纹理等,利用 dat.gui 库创建交互界面。 代码详解 白膜特效 nightFs.glsl void fragmentMain(Fragm…...

Java学习--HashMap

HaspMap是Java集合框架中最重要、最常用的数据结构之一。其基于哈希表实现了Map接口&#xff0c;在Java1.8的版本中&#xff0c;其采用了“数组链表红黑树”的混合结构&#xff0c;底层代码如下&#xff1a; transient Node<K,V>[] table; // 哈希桶数组 static class N…...

Monorepo、Lerna、Yarn Workspaces、pnpm Workspaces 用法

Monorepo 介绍 Monorepo是一种方案&#xff0c;而非具体的工具。 Monorepo指的是将多个相关的项目或模块放在同一个代码仓库中进行管理的方式。这种方案有以下优点&#xff1a; 方便代码共享&#xff1a;不同项目或模块之间可以方便地共享代码、组件、工具函数等&#xff0c…...

JVM指令手册:深入理解字节码执行机制

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 Java虚拟机&#xff08;JVM&#xff09;作为Java生态的核心执行引擎&#xff0c;其指令系统是理解程序底层运行机制的关键。本手册将系统解析JVM指令集…...

springboot logback 默认加载配置文件顺序

在 Spring Boot 应用中&#xff0c;Logback 默认加载配置文件的顺序遵循特定的规则。以下是详细的加载顺序和优先级说明&#xff1a; 1. 默认配置文件加载顺序 Logback 在 Spring Boot 中会按以下顺序查找并加载配置文件&#xff08;优先级从高到低&#xff09;&#xff1a; l…...

用 Nodemon 解决 npm run serve 频繁重启服务

Nodemon 是一个基于 Node.js 构建的开发工具&#xff0c;专为帮助开发者自动监控项目文件的更改而设计。每当文件发生变更时&#xff0c;Nodemon 会自动重启 Node.js 服务器&#xff0c;无需手动停止并重启。这对于提升开发速度、减少人工操作非常有帮助&#xff0c;尤其适用于…...

WEB安全--社会工程--SET钓鱼网站

1、选择要钓鱼的网站 2、打开kali中的set 3、启动后依次选择&#xff1a; 4、输入钓鱼主机的地址&#xff08;kali&#xff09;和要伪装的网站域名&#xff1a; 5、投放钓鱼网页&#xff08;服务器域名:80&#xff09; 6、获取账号密码...

系统架构师---基于规则的系统架构

引言 在业务规则高度动态且需快速响应的系统中&#xff0c;‌基于规则的系统架构风格&#xff08;Rule-Based System Architecture Style&#xff09;‌提供了一种将业务逻辑与代码解耦的标准化范式。从保险理赔的自动化审核到金融风控的实时拦截&#xff0c;规则引擎已成为企…...

嵌入式软件--stm32 DAY 4 中断系统

1.课后练习 学了这么长时间&#xff0c;现在让我们第一次做练习。 1.1往返流水灯 1.1.1 LED1-LED2-LED3-LED2-LED1循环 &#xff08;1&#xff09;工程准备 复制上一个寄存器实现的工程文档&#xff0c;删减修改我们正要实现的工程。为了区别练习和学习工程&#xff0c;我们…...

android开发制作aosp系统签名文件给普通apk签名使用

platform.pk8和platform.x509.pem复制出来放在同一目录下 将AOSP源码路径下build\target\product\security\platform.pk8和platform.x509.pem复制出来放在同一目录下 新开一个ternimal窗口执行下面命令&#xff0c;生成platform.pem文件 openssl pkcs8 -in platform.pk8 -info…...

AVL树的介绍与学习

目录 1.前言 2.AVL树 3.AVL树的插入 平衡因子的更新 更新停止的条件 旋转 1.前言 在学习了二叉搜索树&#xff0c;set和map之后&#xff0c;我们接下来趁热打铁&#xff0c;继续学习AVL树。 2.AVL树 1.AVL树具有二叉搜索树的性质&#xff0c;但是它的左右子树的高度差不…...

docker部署Mysql8一直密码错误记录

正常流程是这样得&#xff1a; 第一步 #拉镜像 docker pull mysql:8.0 第二步 #运行名为 mysql8 得容器 &#xff0c;MYSQL_ROOT_PASSWORD123456 设置密码 docker run -p 3307:3306 \ --name mysql8 \ -e MYSQL_ROOT_PASSWORD123456 \ -v /docker/mysql8/data:/var/lib/m…...

智慧水库与AI深度融合的实现方案及典型应用场景

以下是智慧水库与AI深度融合的实现方案及典型应用场景,结合行业前沿案例与技术架构展开: 一、智慧水库AI实现方案 1. 技术架构与核心工具 感知层: 多模态传感器网络:部署毫米波雷达水位计(精度3mm)、光纤光栅渗压计(分辨率0.01%FS)、高清智能球机(支持800万像素+AI分…...

大语言模型架构基础与挑战

大语言模型(Large Language Model, LLM)在近几年引领了自然语言处理领域的革命性进展。这类模型通常拥有极其庞大的参数规模(往往达到数十亿乃至数千亿级别),通过对海量文本数据进行自监督训练,展现出卓越的语言理解和生成能力。自2018年前后第一批大语言模型问世以来,基…...

KAG:通过知识增强生成提升专业领域的大型语言模型(二)

目录 摘要 Abstract 1 实验 1.1 实验设置 1.2 总体结果 1.3 消融研究 1.3.1 知识图谱索引消融 1.3.2 推理与检索消融 1.3.3 实验结果与讨论 2 KAG服务部署 2.1 安装Docker 2.2 安装Doker Compose 2.3 启动服务 2.4 查看状态 2.5 产品访问 3 KAG 0.6使用&#x…...

【Luogu】动态规划六

P1586 四方定理 - 洛谷 思路&#xff1a; 这题其实就是完全背包问题&#xff0c;但是有限制&#xff0c;最多数量只能是 4 所以我们可以定义 dp[i][j] 为 i 用 j 个数拼凑的总方案数 那么转移方程也很明显了&#xff0c;dp[i][j] dp[i - k*k][j - 1] 具体的&#xff0c;我…...

Postman接口测试: postman设置接口关联,实现参数化

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 postman设置接口关联 在实际的接口测试中&#xff0c;后一个接口经常需要用到前一个接口返回的结果&#xff0c; 从而让后一个接口能正常执行&#xff0c;这个…...

docker打开滚动日志

在 Docker 中启用滚动日志&#xff08;log rotation&#xff09;可以帮助你管理容器日志的大小&#xff0c;避免日志文件占用过多磁盘空间。以下是具体的操作步骤&#xff1a; 1. 修改 Docker 守护进程配置 Docker 的日志配置是通过 daemon.json 文件管理的。你需要修改此文件…...

单片机-89C51部分:5、点亮LED

飞书文档https://x509p6c8to.feishu.cn/wiki/SlB5wYD1QiPRzWkfijEcIvv8nyc 一、应用场景 二、点灯原理 插件led灯珠长引脚为正极,短引脚为负极。 LED&#xff08;发光二极管&#xff09;两端存在电压差&#xff0c;有一定的电流流过时会亮起。电流可以理解为水流&#xff0c;…...

Lua 第10部分 模式匹配

10.1 模式匹配的相关函数 字符串标准库提供了基于模式的 4 个函数。 我们已经初步了解过函数 find 和 gsub&#xff0c;其余两个函数分别是 match 和 gmatch (Global Match 的缩写&#xff09;。 函数 string.find 用于在指定的目标字符串中搜索指定的模式。最简单的模式就是一…...

Maven 4.0.0 模式-pom.xml配置详解

Maven 4.0.0 模式-pom.xml配置详解 ​ 此 pom.xml 文件涵盖了 Maven 4.0.0 模式支持的所有主要标签&#xff0c;包括项目元数据、依赖管理、构建配置、发布管理等。每个标签都配有详细注释&#xff0c;说明其作用、常见用法和可能的值。 ​ 此文件旨在展示标签的完整性&#…...

IDEA 连接 Oracle 数据库

IDEA 连接 Oracle 数据库...

机器人快速启动

机器人快速启动 ES机器人开机操作流程 方法一&#xff08;一体化底座启动&#xff09; 接通48V电源点击底座“Power”按钮观察电源指示灯亮起&#xff0c;蜂鸣器发出“嘀”声&#xff0c;代表底座启动完成 方法二&#xff08;控制手柄启动&#xff09; 长按手柄开关机键2秒后松…...

使用 MediaPipe 和 OpenCV 快速生成人脸掩膜(Face Mask)

在实际项目中&#xff0c;尤其是涉及人脸识别、换脸、图像修复等任务时&#xff0c;我们经常需要生成人脸区域的掩膜&#xff08;mask&#xff09;。这篇文章分享一个简单易用的小工具&#xff0c;利用 MediaPipe 和 OpenCV&#xff0c;快速提取人脸轮廓并生成二值掩膜图像。 …...

《全球反空间能力》报告翻译——部分1

全球反空间能力 已进行过破坏性反卫星测试的国家 美国 美国目前拥有世界上最先进的军事太空能力&#xff0c;尽管与中国的相对差距正在缩小。在冷战期间&#xff0c;美国开创了许多现今使用的国家安全太空应用&#xff0c;并在几乎所有类别中保持技术领先地位。美国军方在将…...

云原生课程-Docker

一次镜像&#xff0c;到处运行。 1. Docker详解&#xff1a; 1.1 Docker简介&#xff1a; Docker是一个开源的容器化平台&#xff0c;可以帮助开发者将应用程序和其依赖的环境打包成一个可移植的&#xff0c;可部署的容器。 docker daemon:是一个运行在宿主机&#xff08;DO…...

组件的基本知识

组件 组件的基本知识 组件概念组成步骤好处全局注册生命周期scoped原理 父子通信步骤子传父 概念 就是将要复用的标签&#xff0c;抽离放在一个独立的vue文件中&#xff0c;以供主vue文件使用 组成 三部分构成 template&#xff1a;HTML 结构 script: JS 逻辑 style: CSS 样…...

空间矩阵的思考

今天又看了些线性代数&#xff0c;引发了许多思考。   矩阵是以长和宽存储数据&#xff0c;那有没有一种新型的矩阵&#xff0c;以长宽高的形式存储数据呢&#xff1f;我不知道有没有&#xff0c;所以暂且称其为空间矩阵。   它肯定是存在的&#xff0c;可以这样抽象&#…...

【数据挖掘】时间序列预测-常用序列预测模型

常用序列预测模型 &#xff08;1&#xff09;AR&#xff08;自回归&#xff09;模型&#xff08;2&#xff09;ARIMA模型&#xff08;3&#xff09;Prophet模型&#xff08;4&#xff09;LSTM模型&#xff08;5&#xff09;Transformer模型&#xff08;6&#xff09;模型评估6.…...

将你的本地项目发布到 GitHub (新手指南)

目录 第 1 步&#xff1a;在 GitHub 上创建新的仓库 (Repository)第 2 步&#xff1a;将本地仓库连接到 GitHub 远程仓库第 3 步&#xff1a;(可能需要) 重命名你的默认分支第 4 步&#xff1a;将本地代码推送到 GitHub第 5 步&#xff1a;在 GitHub 上检查结果后续工作流程 你…...

[论文梳理] 足式机器人规划控制流程 - 接触碰撞的控制 - 模型误差 - 自动驾驶车的安全合规(4个课堂讨论问题)

目录 问题 1&#xff1a;足式机器人运动规划 & 控制的典型流程 (pipline) 1.1 问题 1.2 目标 1.3 典型流程&#xff08;Pipeline&#xff09; 1.3.1 环境感知&#xff08;Perception&#xff09; 1.3.2 高层规划&#xff08;High-Level Planning&#xff09; 1.3.3 …...

初中级前端面试全攻略:自我介绍模板、项目讲解套路与常见问答

为了给面试官留下专业而亲切的第一印象&#xff0c;自我介绍要突出与岗位相关的技能和项目经验&#xff0c;同时以自己擅长的领域开放式结尾​。通常可以按照以下思路组织自我介绍内容&#xff1a;首先简单介绍个人信息和工作年限&#xff0c;然后列出精通的前端技术栈&#xf…...

Android开发中svg转xml工具使用

要使用 svg2vector-cli 工具通过命令行将 SVG 文件转换为 Android 可用的 XML 矢量图标文件&#xff0c;可以单个文件转换或者整个文件夹批量转换&#xff0c;以下是详细的步骤和说明&#xff1a; 1. 准备工作 1.1 下载工具 首先需要下载 svg2vector-cli-1.0.0.jar 或更高版本…...

爬虫技术入门:基本原理、数据抓取与动态页面处理

引言 在当今数据驱动的时代&#xff0c;网络爬虫技术已成为获取和分析互联网数据的重要手段。无论是搜索引擎的网页收录、竞品数据分析&#xff0c;还是学术研究的语料收集&#xff0c;爬虫技术都发挥着关键作用。本文将深入浅出地讲解爬虫的基本原理&#xff0c;分析它能获取…...

AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年4月27日第65弹

从今天开始&#xff0c;咱们还是暂时基于旧的模型进行预测&#xff0c;好了&#xff0c;废话不多说&#xff0c;按照老办法&#xff0c;重点8-9码定位&#xff0c;配合三胆下1或下2&#xff0c;杀1-2个和尾&#xff0c;再杀6-8个和值&#xff0c;可以做到100-300注左右。 (1)定…...