Camera2 与 CameraX 闲谈
目录
📂 前言
1. 🔱 Camera2
2. 🔱 CameraX
3. 🔱 Camera2 与 CameraX
1)使用复杂度与开发效率
2)控制能力与应用场景
3)设备兼容性与稳定性
4)更新与维护
4. 💠 代码示例
1)Camera2 使用示例
2)CameraX 使用示例
5. ✅ 小结
在 Android 开发领域,相机功能的实现一直是众多应用的核心竞争力之一。Camera2 和 CameraX 作为 Android 中两个重要的相机 API,它们在不同的场景下为开发者提供了强大的支持。本文将对比剖析这两个 API,从架构设计、使用场景、性能优化等多个维度进行探讨。
📂 前言
Android 有三套关于摄像头的 API,分别是 Camera、Camera2 和 CameraX,其中 Camera 已废弃,在Android 5.0(API level 21)以后推荐使用 Camera2 和 CameraX。
Camera2 引入是用来替换 Camera 的,它拥有丰富的 API 可以为复杂的用例提供深入的控制功能,但它使用起来也相对麻烦。
CameraX 是在 Camera2 基础上构建的更高层次的库,旨在简化相机操作,提供更方便的 API,降低学习曲线。
1. 🔱 Camera2
Camera2 对相机的底层控制要求很高,需要自定义功能、处理原始图像数据等。它遵循 Client-Server 架构,通过 Binder 通讯与 CameraService 和 Camera Hal 进行交互,这种架构使得 Camera2 能够实现对相机硬件的精细化操作,满足复杂自定义相机的需求。
在实际开发中,使用 Camera2 需要处理较多的底层细节和设备兼容性问题。例如,配置一个简单的预览页面可能需要编写大量代码,包括创建容器、打开摄像头、搭建应用层与相机内核的桥梁、建立会话等步骤。这种复杂性在一定程度上增加了开发难度,但也为开发者提供了更广阔的操作空间。
Camera2 的强大之处在于它允许开发者自定义相机参数,如 ISO、快门速度等。这对于需要精细控制相机硬件的复杂场景来说,无疑是至关重要的。例如,在专业摄影应用中,开发者可以通过 Camera2 实现对曝光、对焦等参数的精确控制,从而拍摄出高质量的照片。
然而,Camera2 的使用也并非没有挑战。由于其底层操作的复杂性,开发者需要对相机硬件有深入的了解,并且需要处理不同设备的兼容性问题。这要求开发团队具备较高的技术水平和丰富的经验。
Androidhttps://developer.android.com/media/camera/camera2?hl=zh-cn
2. 🔱 CameraX
CameraX 是 Android Jetpack 中的一个相机库,基于 Camera2 构建,为开发者提供了更高层次的抽象和简化的 API。它支持 Android 5.0 及以上版本,能够自动处理大量设备兼容性问题。CameraX 引入了 Use Case 组件,如预览(Preview)、图片拍摄(ImageCapture)、图像分析(ImageAnalysis)和视频拍摄(VideoCapture)等,开发者可以根据需要选择相应的 Use Case 进行配置,更轻松地实现基本的相机功能,大大简化了开发流程,降低开发难度。
-
预览:使用 PreviewView,它是一种支持裁剪、缩放和旋转的 view,相机处于活动状态时,图片预览会流式传输到它的 surface。
-
图片拍摄:提供自动白平衡、曝光、延迟、闪光灯和对焦等功能,支持把图片放到内存缓存区和写文件。
-
图像分析:应用会对每个帧运行 analyze() 方法,可以进行图像处理、视觉或机器学习。
-
视频拍摄:录制视频流和音频流,对其压缩合并后写入磁盘。
CameraX 的核心特性之一是其生命周期感知能力。它与 Lifecycle 组件结合,开发者无需手动管理相机的生命周期。例如,在 Activity 或 Fragment 的后台切换时,CameraX 会自动停止或恢复预览,这种自动化的生命周期管理不仅减少了开发工作量,还提高了应用的稳定性和可靠性。
此外,CameraX 在多版本兼容方面表现出色。它基于 Camera2 API 封装,兼容 Camera1,开发者无需为不同版本的 Android 系统编写额外的代码。这种兼容性使得 CameraX 能够广泛应用于各种设备,确保应用在不同设备上的良好运行。
在实际应用中,CameraX 的使用非常便捷。例如,配置预览功能只需几十行代码即可完成。开发者可以快速搭建一个功能完善的相机应用,而无需深入理解底层的相机操作。这种高效性使得 CameraX 成为大多数开发者首选的相机开发工具。
CameraX 概览 | Android media | Android Developerhttps://developer.android.google.cn/media/camera/camerax?hl=zh-cn
3. 🔱 Camera2 与 CameraX
特性 | Camera2 | CameraX |
使用复杂度 | 高 | 低 |
控制能力 | 强 | 中 |
设备兼容性 | 差 | 好 |
生命周期管理 | 手动 | 自动 |
更新频率 | 低 | 高 |
学习曲线 | 陡峭 | 平缓 |
1)使用复杂度与开发效率
Camera2 的使用复杂度较高,配置一个简单的预览页面需要编写大量代码,并且需要处理底层细节和设备兼容性问题。这种复杂性在一定程度上增加了开发周期和维护成本。相比之下,CameraX 对功能进行了详细划分,使用更加便捷,配置也更简单。例如,在 CameraX 中配置预览功能,只需几十行代码即可完成,大大提高了开发效率。
2)控制能力与应用场景
Camera2 提供了更深入的相机控制能力,适合需要精细控制相机硬件的复杂场景。开发者可以自定义相机参数,如 ISO、快门速度等,这对于专业摄影应用来说至关重要。然而,这种精细化控制也要求开发者具备较高的技术水平和丰富的经验。CameraX 在方便开发的同时,对相机的精细化控制能力相对较弱。但它能够满足大多数常见的相机功能需求,如预览、拍照、视频录制等。
3)设备兼容性与稳定性
CameraX 由专门团队维护,能够自动处理大量设备兼容性问题,减少了开发者在这方面的负担。它支持 Android 5.0 及以上版本,覆盖了广泛的设备范围。而使用 Camera2 时,开发者需要自己处理不同设备的兼容性问题,这增加了开发的难度和工作量。CameraX 的这种兼容性优势使得它在实际开发中更受欢迎,能够确保应用在各种设备上的稳定运行。
4)更新与维护
CameraX 处于持续开发和更新中,平均一个月发布一个版本,开发者可以通过升级库来解决遇到的问题。这种持续更新的特性使得 CameraX 能够不断优化和改进,适应不断变化的开发需求。而 Camera2 作为系统级别的 API,更新相对较少,开发者在遇到边界问题时可能需要等待系统更新或自行解决。
4. 💠 代码示例
1)Camera2 使用示例
// 打开相机
cameraManager.openCamera(cameraId, object : CameraDevice.StateCallback() {override fun onOpened(camera: CameraDevice) {// 相机打开成功}override fun onDisconnected(camera: CameraDevice) {// 相机断开连接}override fun onError(camera: CameraDevice, error: Int) {// 相机出错}
}, null)// 配置预览
val surface = Surface(textureView.surfaceTexture)
val captureRequest = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)
captureRequest.addTarget(surface)// 创建会话
cameraDevice.createCaptureSession(listOf(surface), object : CameraCaptureSession.StateCallback() {override fun onConfigured(session: CameraCaptureSession) {// 会话配置完成}override fun onConfigureFailed(session: CameraCaptureSession) {// 会话配置失败}
}, null)
2)CameraX 使用示例
// 配置预览
val preview = Preview.Builder().build()
preview.setSurfaceProvider(textureView.surfaceProvider)// 配置图像拍摄
val imageCapture = ImageCapture.Builder().build()// 配置视频拍摄
val videoCapture = VideoCapture.Builder().build()// 绑定Use Case
val cameraProviderFuture = ProcessCameraProvider.getInstance(context)
cameraProviderFuture.addListener({val cameraProvider = cameraProviderFuture.get()val camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture, videoCapture)
}, ContextCompat.getMainExecutor(context))
5. ✅ 小结
Camera2 和 CameraX 在 Android 相机开发中各有千秋。Camera2 适合需要精细控制相机硬件的复杂场景,但使用复杂度较高,需要处理较多的底层细节和设备兼容性问题。CameraX 则提供了更简洁的 API 和自动处理设备兼容性的能力,适合大多数开发者快速开发相机应用。
随着 Android 系统的不断演进和开发技术的不断提升,CameraX 凭借其高效性、兼容性和易用性,逐渐成为主流的相机开发工具。然而,Camera2 在特定的专业领域仍然具有不可替代的地位。开发者在选择使用哪个 API 时,应根据项目的具体需求和开发团队的技术能力进行权衡。
未来,随着人工智能和机器学习技术的不断发展,CameraX 与这些技术的结合将为开发者提供更多可能性。例如,通过 CameraX 的图像分析功能,结合机器学习模型,可以实现更智能的图像处理和分析,如实时图像识别、文字识别、条形码识别等。这将为 Android 相机应用的开发带来新的机遇和挑战,推动相机功能的不断创新和发展。
相关文章:
Camera2 与 CameraX 闲谈
目录 📂 前言 1. 🔱 Camera2 2. 🔱 CameraX 3. 🔱 Camera2 与 CameraX 1)使用复杂度与开发效率 2)控制能力与应用场景 3)设备兼容性与稳定性 4)更新与维护 4. 💠…...
【零基础入门unity游戏开发——2D篇】2D物理系统 —— 2D刚体组件(Rigidbody 2d)
考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…...
【论文#目标检测】YOLO9000: Better, Faster, Stronger
目录 摘要1.引言2.更好(Better)3.更快(Faster)4.更健壮(Stronger)使用 WordTree 组合数据集联合分类和检测评估 YOLO9000 5.结论 Author: Joseph Redmon; Ali Farhadi Published in: 2017 IEEE Conference …...
C++异常处理时的异常类型抛出选择
在 C 中选择抛出哪种异常类型,主要取决于错误的性质以及希望传达的语义信息。以下是一些指导原则,帮助在可能发生异常的地方选择合适的异常类型进行抛出: 1. std::exception 适用场景:作为所有标准异常的基类,std::e…...
centos 7 搭建FTP user-list用户列表
在 CentOS 7 上搭建基于 user_list 的 FTP 用户列表,你可以按以下步骤操作: 1. 安装 vsftpd 服务 若还未安装 vsftpd,可以使用以下命令进行安装: bash yum install -y vsftpd2. 启动并设置开机自启 vsftpd 服务 bash systemctl…...
vulnhub-Tr0ll ssh爆破、wireshark流量分析,exp、寻找flag。思维导图带你清晰拿到所以flag
vulnhub-Tr0ll ssh爆破、wireshark流量分析,exp、寻找flag。思维导图带你清晰拿到所以flag 1、主机发现 arp-scan -l 2、端口扫描 nmap -sS -sV 192.168.66.185 nmap -sS -A -T4 -p- 192.168.66.185 nmap --scriptvuln 192.168.66.185经典扫描三件套,…...
k8s中service概述(二)NodePort
NodePort 是 Kubernetes 中一种用于对外暴露服务的 Service 类型。它通过在集群的每个节点上开放一个静态端口(NodePort),使得外部用户可以通过节点的 IP 地址和该端口访问集群内部的服务。以下是关于 NodePort Service 的详细说明࿱…...
搭建Redis哨兵集群
停掉现有的redis集群 因为这篇文章我是在 搭建完redis主从集群之后写的,如果要是没有搭建过这些,可以直接略过。要是从我上一篇 搭建redis主从集群过来的,可以执行下。 docker compose down 查找下redis相关进程 ps -ef | grep redis 可以看…...
.Net SSO 单点登录方式
SSO单点登录目的 之前一般来讲系统简单,登录后 本地 cookie 加服务器 session 存储用户身份信息,以此为依据来判断用户再次登录时免验证 但随着互联网发展,很多应用 部署在不同的服务器上,而用户体系是一套,那么按照原…...
SQL 基础 BETWEEN 的常见用法
在SQL中,BETWEEN是一个操作符,用于选取介于两个值之间的数据。 它包含这两个边界值。BETWEEN操作符常用于WHERE子句中,以便选取某个范围内的值。 以下是BETWEEN的一些常见用法: 选取介于两个值之间的值: 使用 BETWE…...
ngx_http_add_location
声明在 src\http\ngx_http_core_module.c ngx_int_t ngx_http_add_location(ngx_conf_t *cf, ngx_queue_t **locations,ngx_http_core_loc_conf_t *clcf); 定义在 src\http\ngx_http.c ngx_int_t ngx_http_add_location(ngx_conf_t *cf, ngx_queue_t **locations,ngx_http…...
深入探索ArkUI中的@LocalBuilder装饰器:构建高效可维护的UI组件
在ArkUI框架中,组件化开发是提升代码复用性和维护性的关键手段。随着项目复杂度的增加,开发者常常面临如何在保持组件封装性的同时,灵活处理组件内部逻辑的问题。传统的Builder装饰器虽然提供了强大的自定义构建能力,但在某些场景…...
视频知识库初步设想
将视频字幕提取出来作为知识库来源定位,下一步设想:把视频上的图片信息也精简出来作为定位。 下面是测试例子: 入参: {"model":"deepseek-ai/DeepSeek-R1-Distill-Llama-8B","messages":[{"role":"system","cont…...
微信小程序中使用Less样式方法
在微信小程序中使用Less样式,可以通过以下步骤实现。主要原理是借助Visual Studio Code(VSCode)的插件将Less文件自动编译为小程序支持的.wxss文件,或通过微信开发者工具的扩展功能直接集成Less编译环境。以下是具体方法ÿ…...
2024年MathorCup数学建模A题移动通信网络中PCI规划问题解题全过程文档加程序
2024年第十四届MathorCup高校数学建模挑战赛 A题 移动通信网络中PCI规划问题 原题再现: 物理小区识别码(PCI)规划是移动通信网络中下行链路层上,对各覆盖小区编号进行合理配置,以避免PCI冲突、PCI混淆以及PCI模3干扰等现象。PCI规划对于减少…...
本周安全速报(2025.3.18~3.24)
合规速递 01 2025欧洲网络安全报告:DDoS攻击同比增长137%,企业应如何应对? 原文: https://hackread.com/european-cyber-report-2025-137-more-ddos-attacks/ 最新的Link11《欧洲网络安全报告》揭示了一个令人担忧的趋势:DDo…...
力扣刷题-热题100题-第23题(c++、python)
206. 反转链表 - 力扣(LeetCode)https://leetcode.cn/problems/reverse-linked-list/solutions/551596/fan-zhuan-lian-biao-by-leetcode-solution-d1k2/?envTypestudy-plan-v2&envIdtop-100-liked 常规法 记录前一个指针,当前指针&am…...
YAML是什么?
YAML(YAML Ain’t Markup Language)是一种以数据为中心、高度可读的序列化语言,广泛应用于配置文件、数据交换和自动化工具中。以下从多个维度对其进行全面解析: 1. 定义与历史演变 全称与定位: YAML的全称最初为“Yet…...
期权交易投资怎么操作?新手期权操作指南
期权就是股票,唯一区别标的物上证指数,会看大盘吧,新手做期权交易两个方向认购做多,认沽做空,双向t0交易没了,跟期货一样,对的,玩的也是合约,唯一区别没有保证金不会爆仓…...
音视频学习(三十):fmp4
FMP4(Fragmented MP4)是 MP4(MPEG-4 Part 14)的扩展版本,它支持流式传输,并被广泛应用于DASH(Dynamic Adaptive Streaming over HTTP)和HLS(HTTP Live Streaming…...
破局AI落地困局 亚信科技“四位一体手术刀“切开产业智能三重枷锁
当全球进入以AI为核心竞争力的新经济周期,政企机构的数字化转型正面临关键转折点:IDC数据显示,2023年超过67%的中国企业在AI落地环节遭遇"技术断层",高昂的试错成本与碎片化解决方案让智能转型陷入僵局。在此背景下&…...
android 去掉状态栏的方法汇总
在 Android 开发中,隐藏或去除状态栏(Status Bar)有多种方法,具体实现方式取决于应用场景和目标 Android 版本。以下是常用的 6 种方法及其代码示例: 在 Android 开发中,隐藏或去除状态栏(Sta…...
jenkins+1panel面板java运行环境自动化部署java项目
本文章不包含1panel面板安装、jenkins部署、jenkins连接git服务器等操作教程,如有需要可以抽空后期补上 jenkins安装插件Publish Over SSH 在系统配置添加服务器 查看项目的工作空间 项目Configure->构Post Steps选择Send files or execute commands over SSH…...
VLAN综合实验报告
一、实验拓扑 网络拓扑结构包括三台交换机(LSW1、LSW2、LSW3)、一台路由器(AR1)以及六台PC(PC1-PC6)。交换机之间通过Trunk链路相连,交换机与PC、路由器通过Access或Hybrid链路连接。 二、实验…...
雷军从 6 楼扔涂有防弹涂层西瓜,西瓜完好无损,这种防弹涂层是什么材质?用在车上效果怎么样?
雷军展示的“防弹涂层”是一种基于第四代高分子材料聚脲(Polyurea)的升级技术,其核心特性是通过纳米级交联结构形成弹性防护层,兼具柔韧性与刚性,能够有效吸收冲击能量并抵御尖锐物体的穿刺。以下是关于该涂层材质及在…...
信奥赛CSP-J复赛集训(模拟算法专题)(31):P2692 覆盖
信奥赛CSP-J复赛集训(模拟算法专题)(31):P2692 覆盖 题目背景 WSR 的学校有 B B B 个男生和 G G G 个女生都来到一个巨大的操场上扫地。 题目描述 操场可以看成是 N N N 行 M M M 列的方格矩阵,如下…...
数据库联表Sql语句建一个新表(MySQL,Postgresql,SQL server)
数据库联表Sql语句建一个新表(MySQL,Postgresql,SQL server) 如果你想基于 SELECT USERS.ID,USERS.NAME,USERS.EMAIL,USERS.ID_CARD,USERS.V_CARD,USERS.ADDRESS,v_card.type,v_card.amount FROM USERS JOIN v_card on USERS.V_CARDv_card.v_card 这个查询结果创建一个新表&am…...
【Go】结构体的基本使用
go语言不是面向对象的语言 但是结构体类似于面向对象 结构体的定义 package mainimport "fmt"type Student struct {id intname stringage intschool string }func main() {s : Student{1, "luobozi", 18, "znl"}fmt.Println(s) }结构…...
统计可重复列表中的TOP N
文章目录 方案1:HashMap统计 全排序实现步骤:代码实现:优缺点: 方案2:HashMap统计 最小堆(优先队列)实现步骤:代码实现:优缺点: 方案3:Java Str…...
《jQuery Mobile 页面:深入解析与优化实践》
《jQuery Mobile 页面:深入解析与优化实践》 引言 jQuery Mobile 是一个流行的前端框架,专为移动设备设计,提供了丰富的UI组件和简洁的API,使得开发者可以快速构建出美观且响应式的移动页面。本文将深入解析jQuery Mobile的页面构建方法,并探讨一些优化实践,以帮助开发…...
C#中 String类API(函数)
字符串属性 string str "打工人";Console.WriteLine(str);char s str[0];Console.WriteLine(s); 字符串内置API(函数) 1. Concat 拼接字符串 string s1 "打";string s2 "工";string s3 "人";string sthstring.Concat(s1, s2, s…...
【Linux 维测专栏 5 -- linux pstore 使用介绍】
文章目录 Linux pstore 功能简介1. pstore 概述2. pstore 的核心功能3. pstore 的工作原理4. pstore 的使用示例5. pstore 的优势6. 典型应用场景配置示例1)DTS配置2)config配置运行测试及log问题小结Linux pstore 功能简介 1. pstore 概述 pstore(Persistent Storage)是…...
AI赋能:科技写作的革新之路
在当今数字化时代,人工智能(AI)技术正以惊人的速度渗透到各个领域,科技写作也不例外。AI不仅改变了写作的方式,还极大地提升了写作的效率和质量。本文将探讨AI技术在科技写作中的应用,并分享一些实用的AI工…...
如何为你的github开源项目选择合适的开源协议?
如何为你的github开源项目选择合适的开源协议? 导言 在github开源世界中,选择一个合适的开源协议是至关重要的。它不仅定义了他人如何使用你的代码,还决定了你的项目能否被广泛接受和传播,还能避免侵权问题。 然而,面…...
struts2漏洞攻略
S2-057远程执行代码漏洞 靶场: /struts2/s2-057 1,搭建好环境后访问 http://47.108.150.249:8081/struts2-showcase/ 2,在url处进行输⼊ 在url输入http://47.108.150.249:8081/struts2-showcase/${(123123)}/actionChain1.action 后刷新可…...
LVGL学习1
LVGL知识点 架构图 参考:Getting Started — LVGL documentation display、screen、widget的关系 参考: Widget Basics — LVGL documentation Overview — LVGL documentation 简单说,display就是硬件的显示设备,也就是一个一…...
【SpringCloud】微服务的治理以及服务间的远程调用
目录 一、微服务的诞生 二、服务注册和发现 2.1 需求的产生 2.2 注册中心原理 2.3 Nacos注册中心 2.4 Nacos安装部署教程 2.5 配置Nacos 三、OpenFeign 3.1 认识OpenFeign 3.2 快速入门 3.2.1 引入依赖 3.2.2 启动OpenFeign 3.2.3 编写OpenFeign客户端 3.2.4 使…...
钞票准备好了吗?鸿蒙电脑 5 月见
3月20日,在华为 Pura 先锋盛典及鸿蒙智行新品发布会上,华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东表示,华为终端全面进入鸿蒙时代,今年5月将推出鸿蒙电脑。 在3月20日的华为Pura先锋盛典及鸿蒙智行新品发布会上…...
【2025】基于springboot+uniapp的企业培训打卡小程序设计与实现(源码、万字文档、图文修改、调试答疑)
基于 Spring Boot uniapp 的企业培训打卡小程序设计与实现 系统功能结构图如下: 一、课题背景 在当今快节奏的商业环境中,企业培训对于员工的成长和企业的发展至关重要。为了满足企业对高效培训管理和员工便捷学习的需求,基于 Spring Boot …...
poetry安装与使用
文章目录 安装方法虚拟环境构建方法* 创建新虚拟环境【新环境使用】* 使用仓库拉取的代码构建虚拟环境【远端仓库拉取使用】 常用命令注意事项 安装方法 安装命令(全局安装,不要在虚拟环境中安装,方便后面创建环境使用) pip3 inst…...
聊聊langchain4j的Code Execution Engine
序 本文主要研究一下langchain4j的Code Execution Engine 步骤 pom.xml <dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-code-execution-engine-graalvm-polyglot</artifactId><version>1.0.0-beta2</ver…...
军事级加密通信系统——基于QML的战术地图加密传输
目录 基于QML的战术地图加密传输一、引言二、理论背景与安全需求2.1 战术地图数据的敏感性与安全性要求2.2 QML与PyQt5集成优势2.3 加密算法与数据传输模型三、系统架构与数据流图四、QML前端界面设计与交互功能4.1 QML界面优势与设计理念4.2 功能要求4.3 QML文件示例五、加密传…...
ffmpeg系列(三)—— 音频重采样
SwrContext 一、SwrContext 的重要字段 SwrContext 是音频重采样的核心配置对象,其关键字段决定了重采样的行为和性能。以下是常用字段及其作用: 字段名称类型作用典型值示例in_sample_rateint输入音频的采样率(Hz)。44100out_…...
android Kotlin原理
目录 一,概述 1.1 kotlin协程序原理: 1.2 核心概念 二,协程调度器之Dispatchers 三,协程能进行线程恢复的原理 一,概述 1.1 kotlin协程序原理: 1,内部线程池管理线程使用到了自旋和挂起 2,传统的线程之所以重,是因为线程的执行,等待唤醒需要操作系统来完成 …...
MyBatis-Plus(Ⅲ)IService详解
目录 一、逐一演示 1.save(插入一条) 结果 断言(引入概念) 2.saveBatch(批量插入) 结果 3.saveOrUpdateBatch(批量插入&更新) 结果 4.removeById(通过id删除…...
2024年认证杯SPSSPRO杯数学建模C题(第二阶段)云中的海盐全过程文档及程序
2024年认证杯SPSSPRO杯数学建模 C题 云中的海盐 原题再现: 巴黎气候协定提出的目标是:在2100年前,把全球平均气温相对于工业革命以前的气温升幅控制在不超过2摄氏度的水平,并为1.5摄氏度而努力。但事实上,许多之前的…...
PostgreSQL 存储过程
简介 PostgreSQL 中的存储过程(Stored Procedure)是一种在数据库中定义的可重复使用的程序单元,用于封装复杂的业务逻辑和数据处理操作 示例 简单示例 创建存储过程 CREATE PROCEDURE insert_users (user_account TEXT, hashed_password…...
GGUF 和 llama.cpp 是什么关系
这是个非常关键的问题,咱们来细说下:GGUF 和 llama.cpp 是什么关系,它们各自干什么,如何配合工作。 🔧 一、llama.cpp 是什么? llama.cpp 是 Meta 的开源大语言模型 LLaMA(Language Model from…...
(UI自动化测试web端)第二篇:元素定位的方法_class定位
看代码里的【 driver.find_element_by_class_name( )】()里的路径怎么写? 那我们现在说的就是在元素定位时,根据网页的实际情况来选择适合的元素定位的写法。文章主要介绍了class定位在正常工作当中的使用。 第三种定位 方式:class定位 ⽅法…...
闲聊IT - 面向服务架构(SOA)的发展历史
SOA的发展历史 面向服务架构(SOA)是随着企业信息化进程的发展逐渐形成的,它的出现是为了应对传统软件架构在现代企业复杂需求面前的局限性。SOA的起源和发展过程可以追溯到20世纪90年代末期,并随着互联网技术的普及、分布式计算以…...