AlibabaCloudAI

快速体验 Spring Cloud Alibaba AI

JDK要求最低17

1.SpringAI

Spring AI 旨在简化包含人工智能相关功能的应用程序的开发,避免不必要的复杂性。

Spring AI 的核心是提供抽象,作为开发 AI 应用程序的基础。这些抽象有多种实现方式,只需极少的代码改动即可轻松实现各个大模型之间的切换。

Spring AI 提供以下功能:

  • 支持所有主要模型提供商,例如 OpenAI、Microsoft、Amazon、Google 和 Huggingface。
  • 支持的模型类型包括“聊天”和“文本到图像”,还有更多模型类型正在开发中。
  • 跨 AI 提供商的可移植 API,用于聊天和嵌入模型。支持同步和流 API 选项。还支持下拉访问模型特定功能。
  • AI 模型输出到 POJO 的映射。
  • 支持所有主要矢量数据库提供商,例如 Azure 矢量搜索、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Qdrant、Redis 和 Weaviate
  • 跨 Vector Store 提供商的可移植 API,包括同样可移植的新颖的类似 SQL 的元数据过滤器 API。
  • 函数调用
  • AI 模型和向量存储的 Spring Boot 自动配置和启动器。
  • 数据工程的 ETL 框架

2.Spring Cloud Alibaba AI

Spring Cloud Alibaba AI (以下简称 SCA AI)基于 Spring AI 0.8.1 版本完成通义系列大模型的接入。

DashScope灵积模型服务建立在 模型即服务(Model-as-a-Service,MaaS)的理念基础之上,围绕AI各领域模型,通过标准化的API提供包括模型推理、模型微调训练在内的多种模型服务。

SCA AI 目前支持的模型主要有:对话、文生图、文生语音,更多功能特性正在适配中。

3.创建SCA AI 应用

在 pom.xml 中引入如下依赖配置:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-ai</artifactId>
</dependency><dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2023.0.1.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><!-- 因为 Spring AI 还没有正式发布到 maven 仓库,所以需要添加此配置项 目前 maven 仓库为假的。
issue:https://github.com/spring-projects/spring-ai/issues/537
-->
<repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository>
</repositories>

4.api-key 配置

在正式开始体验之前,需要申请到模型的 api-key。申请地址:https://help.aliyun.com/zh/dashscope/developer-reference/activate-dashscope-and-create-an-api-key

您可以通过 DashScope 提供的方式配置 api-key,SCA AI 完全兼容 DashScope 环境变量配置 key 的方式:https://help.aliyun.com/zh/dashscope/developer-reference/api-key-settings

当然也可以通过 SCA AI 中提供的如下配置项配置:
在application.yml中配置:

spring:cloud:ai:tongyi:# api-key setting:api-key: sk-xxxxxxxxxxxxxxxxxxx

5.聊天对话体验

public class ChatService {// 聊天客户端private final ChatClient chatClient;// stream 流式客户端private final StreamingChatClient streamingChatClient;@Autowiredpublic ChatService(ChatClient chatClient, StreamingChatClient streamingChatClient) {this.chatClient = chatClient;this.streamingChatClient = streamingChatClient;}@Overridepublic String normalCompletion(String message) {Prompt prompt = new Prompt(new UserMessage(message));return chatClient.call(prompt).getResult().getOutput().getContent();}@Overridepublic Map<String, String> streamCompletion(String message) {StringBuilder fullContent = new StringBuilder();streamingChatClient.stream(new Prompt(message)).flatMap(chatResponse -> Flux.fromIterable(chatResponse.getResults())).map(content -> content.getOutput().getContent()).doOnNext(fullContent::append).last().map(lastContent -> Map.of(message, fullContent.toString())).block();return Map.of(message, fullContent.toString());}}

之后,创建 controller 接口调用 service 服务:

@Autowired
private ChatService chatService;@GetMapping("/example")
public String completion(@RequestParam(value = "message", defaultValue = "Tell me a joke")String message
) {return chatService.completion(message);
}@GetMapping("/stream")
public Map<String, String> streamCompletion(@RequestParam(value = "message", defaultValue = "请告诉我西红柿炖牛腩怎么做?")String message
) {return chatService.streamCompletion(message);
}

调用/example

Sure, here’s one for you: Why was the math book sad? Because it had too many problems!

调用/stream

{
“请告诉我西红柿炖牛腩怎么做?”: “材料材料:\n材料:\n牛材料:\n牛腩1000材料:\n牛腩1000g,西红柿3个(大),材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、土豆、胡萝卜,再加少许冰材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、土豆、胡萝卜,再加少许冰糖调味,继续小火炖煮材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、土豆、胡萝卜,再加少许冰糖调味,继续小火炖煮直至蔬菜熟透;\n6. 最材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、土豆、胡萝卜,再加少许冰糖调味,继续小火炖煮直至蔬菜熟透;\n6. 最后根据个人口味加盐调味即可材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、土豆、胡萝卜,再加少许冰糖调味,继续小火炖煮直至蔬菜熟透;\n6. 最后根据个人口味加盐调味即可出锅。\n\n这道菜色香味材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、土豆、胡萝卜,再加少许冰糖调味,继续小火炖煮直至蔬菜熟透;\n6. 最后根据个人口味加盐调味即可出锅。\n\n这道菜色香味俱全,营养丰富,非常适合家庭材料:\n牛腩1000g,西红柿3个(大),土豆2个,胡萝卜1根。调料:生姜、料酒、冰糖、盐各适量。\n\n做法:\n\n1. 牛腩切块,用开水焯一下去腥;\n2. 西红柿、土豆、胡萝卜洗净后切成滚刀块备用;\n3. 锅中倒油加热,放入姜片和牛腩翻炒至表面变色;\n4. 加入料酒继续翻炒几下,然后加入足够的水没过牛肉,大火烧开后转小火慢炖至牛肉软烂;\n5. 放入西红柿、土豆、胡萝卜,再加少许冰糖调味,继续小火炖煮直至蔬菜熟透;\n6. 最后根据个人口味加盐调味即可出锅。\n\n这道菜色香味俱全,营养丰富,非常适合家庭日常食用。”
}

6.文生图体验

public class ImagesService {// 图像生成客户端private final ImageClient imageClient;@Autowiredpublic ImagesService(ImageClient client) {this.imageClient = client;}@Overridepublic ImageResponse genImg(String imgPrompt) {var prompt = new ImagePrompt(imgPrompt);return imageClient.call(prompt);}}

文生图对应的 controller 接口如下:

@Autowired
private ImagesService imagesService;@GetMapping("/img")public ResponseEntity<ByteArrayResource> getImageAsByteArray(@RequestParam(value = "prompt", defaultValue = "Painting a picture of blue water and blue sky.") String imgPrompt) {// imagesService.genImg(imgPrompt),返回包含Base64编码图片的ImageResponse对象ImageResponse imageResponse = imagesService.genImg(imgPrompt);// 解析Base64编码的JSON字符串,获取Base64编码的图片数据String b64Json = imageResponse.getResult().getOutput().getB64Json();// 将Base64编码的字符串解码为字节数组byte[] imageBytes = Base64.getDecoder().decode(b64Json);// 构建 ByteArrayResource 对象ByteArrayResource resource = new ByteArrayResource(imageBytes);// 构建 HTTP 响应头HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.IMAGE_JPEG); // 根据实际图片类型设置headers.setContentLength(imageBytes.length);// 返回包含图片字节数组资源的 ResponseEntityreturn ResponseEntity.ok().headers(headers).body(resource);}

调用/img

在这里插入图片描述

7.文生语音体验

public class AudioService {private final SpeechClient speechClient;@Autowiredpublic AudioService(SpeechClient client) {this.speechClient = client;}@Overridepublic String genAudio(String text) {var resWAV = speechClient.call(text);return save(resWAV, SpeechSynthesisAudioFormat.WAV.getValue());}// 辅助方法,用于将模型的响应保存到本地.private String save(ByteBuffer audio, String type) {String currentPath = System.getProperty("user.dir");LocalDateTime now = LocalDateTime.now();DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd-HH-mm-ss");String fileName = currentPath + File.separator + now.format(formatter) + "." + type;File file = new File(fileName);try (FileOutputStream fos = new FileOutputStream(file)) {fos.write(audio.array());}catch (Exception e) {throw new RuntimeException(e);}return fileName;}}

controller 接口代码如下:

  @Autowiredprivate AudioService audioService;@GetMapping("/audio")public String genAudio(@RequestParam(value = "prompt",defaultValue = "你好,Spring Cloud Alibaba AI 框架!") String prompt) {return audioService.genAudio(prompt);}

调用/audio

在这里插入图片描述

至此,Spring Cloud Alibaba AI 提供的三种基本功能已经体验完成,后续您还可以通过设置一些个性化的参数来使大模型生成各种各样的图片和音频等。
更多配置项可以参考:https://help.aliyun.com/zh/dashscope/developer-reference/api-details。社区相关的文档正在完善,更多功能正在开发中!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三维影像系统PACS源码,图像存储与传输系统,应用于医院中管理医疗设备如CT,MR等产生的医学图像的信息系统

PACS&#xff0c;即图像存储与传输系统&#xff0c;是应用于医院中管理医疗设备如CT&#xff0c;MR等产生的医学图像的信息系统。目标是支持在医院内部所有关于图像的活动&#xff0c;集成了医疗设备&#xff0c;图像存储和分发&#xff0c;数字图像在重要诊断和会诊时的显示&a…

Redis的五种数据类型与命令

目录 引言 一 Redis的特性 二 Redis的安装 三 Redis的优点 四 Redis的五种数据类型与命令 五 Redis的配置文件 引言 Redis是什么&#xff1f; Remote Dictionary Service(远程字典服务器) Redis 是一个开源的(BSD许可)的&#xff0c;C语言编写的&#xff0c;高性能的数…

计算机网络实验-RIP配置与分析

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、相关知识 路由信息协议&#xff08;Routing Information Protocol&#xff0c;RIP&#xff09;是一种基于距离向量&#xff08;Distance-Vector&…

unity2D游戏开发06稳定,材质,碰撞器

稳定性 在操控玩家时,我们会发现玩家移动时,摄像头会有抖动,这是摄像机过度精确造成的。 创建名为RoundCameraPos的C#脚本,用Visual Studio打开 代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using Cinemachine;//导入Cinemac…

rust 初探 -- use

rust 初探 – use Package, Crate, 定义 Module use 关键字 作用&#xff1a;将路径引入到作用域内&#xff0c;其依旧遵循私有性规则&#xff0c;也即只用 pub 的部分引入进来才能使用 use crate::front_of_house::hosting; // 绝对路径 // use front_of_house::hosting; …

【Python机器学习】使用Matplotlib注解绘制树形图

通过数据集可以创建树&#xff0c;但是字典的表示形式非常不易于理解&#xff0c;而且直接绘制图形也比较困难。但是通过Matplotlib库可以绘制树形图。 决策树的主要优点就是直观、易于理解&#xff0c;如果不能将其直观的显示出来&#xff0c;就无法发挥其优势。 Matplotlib…

基于JSP、java、Tomcat三者的项目实战--校园交易网(2)登录,注册功能实现

技术支持&#xff1a;JAVA、JSP 服务器&#xff1a;TOMCAT 7.0.86 编程软件&#xff1a;IntelliJ IDEA 2021.1.3 x64 OK&#xff0c;那我们进入正题&#xff0c;随着前面一篇博客的尚未完结基于JSP、java、Tomcat三者的项目实战--校园交易网&#xff08;2&#xff09;登录功能…

微软蓝屏事件:网络安全的多维挑战与应对策略

一、引言 1. 事件概述&#xff1a;微软蓝屏事件的影响与范围 微软蓝屏事件&#xff0c;这一近期震动全球科技界的重大事件&#xff0c;起因于一次看似平常的软件更新。美国电脑安全技术公司“众击”发布的更新包中隐藏着一个致命的“缺陷”&#xff0c;这个缺陷如同潜伏的病毒…

函数图像是如何画出来的(LiveCharts2)

大火的人工智能本质上就是一些简单的函数的组合&#xff0c;比如f(x)kxb&#xff0c;只是可能不只有x,还会x1&#xff0c;x2&#xff0c;…xn&#xff0c;只是维数不同&#xff0c;当维数很多的时候自然就需要方程组才能求解&#xff0c;维数越多自然需要的算力就越多。于是就有…

简单小案例分析

一、容器和实例关系 <div class"app"><h1>Hello,{{name}}</h1> </div> <div class"app"><h1>Hello,{{name}}</h1> </div><script>//创建Vue实例new Vue({el:".app", //el用于指定当前V…

DBeaver Ultimate 22.1.0 连接数据库(MySQL+Mongo+Clickhouse)

前言 继续书接上文 Docker Compose V2 安装常用数据库MySQLMongo&#xff0c;部署安装好之后我本来是找了一个web端的在线连接数据库的工具&#xff0c;但是使用过程中并不丝滑&#xff0c;最终还是选择了使用 DBeaver &#xff0c;然后发现 mongo 还需要许可&#xff0c;又折…

PyQt5 + selenium,自动票务工具,演唱会门票,学习使用

PyQt5 selenium&#xff1b;在damai工具的基础上加入了UI界面&#xff0c;并将应用做了打包工作&#xff0c;主要是方便不会/不想折腾环境的用户使用&#xff0c;抢票的核心代码来自由于原作者不再维护&#xff0c;自己修改了部分代码。 安装教程 解压安装包到任意位置&…

SpringBoot整合elasticsearch-java

一、依赖 系统使用的是ElasticSearch8.2.0 <dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.1.0</version> </dependency> 二、配置 1、yml文件配置 elastics…

Mongodb文档和数组的通配符索引

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第97篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题&#xff0c;欢迎在文章下面点个赞&#xff0c;或者关…

新华三H3CNE网络工程师认证—VLAN间通信背景

VLAN间通信技术主要解决的是不同的VLAN之间如何通信。每一个广播域会有网段给IP进行命名&#xff0c;不同网段之间的通信本质上是不同广播域进行通信&#xff0c;通信会使用到网关地址。不同网段之间的通信&#xff0c;路由器的每个接口其实是对应一个广播域的&#xff0c;比如…

Boost搜索引擎项目相关介绍

Boost搜索引擎相关介绍&#xff1a; 首先&#xff0c;Boost库不具备搜索条件&#xff0c;所以我们这个项目借此实现搜索功能。 项目的核心就是以用户搜索的相关内容在目标数据中进行查找。 首先&#xff0c;我们面临的第一大难题就是目标数据&#xff0c;在这里目标数据就是Boo…

算法第十五天:leetcode19.删除链表的倒数第N个节点

一、删除链表的倒数第N个节点的题目描述与链接 19.删除链表的倒数第N个节点的链接如下表所示&#xff0c;您可直接复制下面网址进入力扣学习&#xff0c;在观看下面的内容之前您一定要先做一遍哦&#xff0c;以便让我印象更深刻&#xff01;&#xff01;!https://leetcode.cn/p…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十六章 设备驱动IO控制

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【Qt】Qt容器和STL容器的区别

1、简述 Qt容器和STL容器略有不同,作为一个Qter,应该知道它们之间的异同。 Qt容器官网介绍:https://doc.qt.io/qt-5/containers.html STL容器官网介绍:https://zh.cppreference.com/w/cpp/container 2、Qt容器和STL容器的对应关系 注意:QList 与 std::list 无关,QSet …

Python - 开源库 ReportLab 库合并 CVS 和图像生成 PDF 文档

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/140281680 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 Report…