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

【学习计算机视觉算法的基础及基本编码-基于Python语言--实例教程】

Python视觉算法实际从0-1实例编码

  • 一、学习基础
  • 二、学习计算机视觉基础知识
  • 三、深度学习在计算机视觉中的应用
  • 四、实例项目
  • 五、实践与拓展

一、学习基础

  1. 数学基础

    • 线性代数
      • 学习矩阵、向量的基本概念,包括矩阵的加法、乘法、转置等运算。理解矩阵的秩、行列式等概念。
      • 学习特征值和特征向量,掌握其计算方法和应用,例如在主成分分析(PCA)等降维算法中的使用。
    • 微积分
      • 掌握一元函数的导数和积分,包括基本函数的求导公式,如多项式函数、指数函数、三角函数等。
      • 理解多元函数的偏导数和梯度,为优化算法中的梯度下降等做准备。
    • 概率论与统计学
      • 学习概率分布,如正态分布、均匀分布等。掌握期望、方差等统计量的计算。
      • 理解贝叶斯定理,这在计算机视觉中的概率推理问题中有重要应用。
  2. 编程语言基础

    • Python
      • 学习Python的基本语法,包括变量、数据类型(如整数、浮点数、字符串、列表、字典等)。
      • 掌握函数、类和模块的使用,学习如何编写和调用函数,创建类和对象,以及使用标准库和第三方库。
      • 熟悉Python的包管理工具pip,学会安装和管理第三方库。

二、学习计算机视觉基础知识

  1. 图像基础
    • 图像表示
      • 学习图像的数字表示,了解像素、灰度图像和彩色图像的存储格式(如RGB、HSV等)。
      • 掌握图像的基本操作,如读取、显示、保存图像,使用Python的OpenCV库完成这些操作。
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 显示图像
cv2.imshow('Image', image)
# 等待按键
cv2.waitKey(0)
# 保存图像
cv2.imwrite('new_image.jpg', image)
- **解释**:- `cv2.imread('image.jpg')`:使用OpenCV的`imread`函数读取图像文件,将其存储为一个NumPy数组。- `cv2.imshow('Image', image)`:使用`imshow`函数显示图像,第一个参数是窗口名称,第二个参数是图像数组。- `cv2.waitKey(0)`:等待用户按下任意键,以保持窗口显示,直到用户操作。- `cv2.imwrite('new_image.jpg', image)`:使用`imwrite`函数将图像保存到文件。
  1. 传统计算机视觉算法
    • 边缘检测
      • 学习Sobel、Canny等边缘检测算法。使用OpenCV实现这些算法。
import cv2
import numpy as np# 读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# Sobel边缘检测
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
sobel_combined = cv2.magnitude(sobel_x, sobel_y)
# Canny边缘检测
edges = cv2.Canny(image, 100, 200)
- **解释**:- `cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)`:以灰度模式读取图像。- `cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)`:对图像进行Sobel边缘检测,计算水平梯度,`cv2.CV_64F`表示输出图像的数据类型,`1, 0`表示计算x方向梯度,`ksize=3`是Sobel算子的大小。- `cv2.magnitude(sobel_x, sobel_y)`:计算梯度的幅值,得到综合的边缘信息。- `cv2.Canny(image, 100, 200)`:使用Canny算法进行边缘检测,100和200是低阈值和高阈值。- **角点检测**:- 学习Harris角点检测和Shi-Tomasi角点检测算法。
import cv2
import numpy as np# 读取图像
image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Harris角点检测
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
# 标记角点
image[dst > 0.01 * dst.max()] = [0, 0, 255]
- **解释**:- `cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)`:将彩色图像转换为灰度图像。- `cv2.cornerHarris(gray, 2, 3, 0.04)`:使用Harris角点检测算法,`2`是邻域大小,`3`是Sobel算子的孔径大小,`0.04`是Harris角点检测的参数。- `image[dst > 0.01 * dst.max()] = [0, 0, 255]`:将检测到的角点标记为红色。

三、深度学习在计算机视觉中的应用

  1. 深度学习框架
    • TensorFlow
      • 学习TensorFlow的基本概念,包括张量、操作、计算图等。
      • 掌握如何使用TensorFlow搭建简单的神经网络,如多层感知机(MLP)。
import tensorflow as tf# 定义一个简单的MLP
model = tf.keras.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dense(10)
])
# 编译模型
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
  • 解释

    • tf.keras.Sequential:用于创建一个顺序模型。
    • tf.keras.layers.Flatten(input_shape=(28, 28)):将输入的28x28图像展平为一维向量。
    • tf.keras.layers.Dense(128, activation='relu'):添加一个具有128个神经元的全连接层,使用ReLU激活函数。
    • tf.keras.layers.Dense(10):输出层,有10个神经元,用于分类任务。
    • model.compile:编译模型,指定优化器、损失函数和评估指标。
  • PyTorch

    • 学习PyTorch的张量操作,如创建、索引、切片、运算等。
    • 掌握如何使用PyTorch构建神经网络,包括自定义网络结构和使用预定义模块。
import torch
import torch.nn as nn
import torch.optim as optim# 定义一个简单的网络
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(28 * 28, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = torch.flatten(x, 1)x = torch.relu(self.fc1(x))x = self.fc2(x)return xmodel = Net()
# 定义优化器和损失函数
optimizer = optim.SGD(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()
  • 解释
    • nn.Linear(28 * 28, 128):定义一个线性层,输入维度为28x28,输出维度为128。
    • torch.relu(self.fc1(x)):使用ReLU激活函数。
    • optimizer = optim.SGD(model.parameters(), lr=0.001):使用随机梯度下降优化器,学习率为0.001。
    • criterion = nn.CrossEntropyLoss():使用交叉熵损失函数。
  1. 卷积神经网络(CNN)实践
    • 使用TensorFlow构建CNN
import tensorflow as tfmodel = tf.keras.Sequential([tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Flatten(),tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(10)
])
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
  • 解释

    • tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)):添加一个卷积层,32个3x3的卷积核,使用ReLU激活函数,输入形状为32x32x3的彩色图像。
    • tf.keras.layers.MaxPooling2D((2, 2)):添加一个2x2的最大池化层。
    • tf.keras.layers.Flatten():将特征图展平。
    • tf.keras.layers.Dense(64, activation='relu'):添加一个64个神经元的全连接层,使用ReLU激活函数。
    • tf.keras.layers.Dense(10):输出层,用于分类任务。
  • 使用PyTorch构建CNN

import torch
import torch.nn as nn
import torch.optim as optimclass CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.conv1 = nn.Conv2d(3, 32, 3)self.pool = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(32, 64, 3)self.fc1 = nn.Linear(64 * 6 * 6, 64)self.fc2 = nn.Linear(64, 10)def forward(self, x):x = torch.relu(self.conv1(x))x = self.pool(x)x = torch.relu(self.conv2(x))x = self.pool(x)x = torch.flatten(x, 1)x = torch.relu(self.fc1(x))x = self.fc2(x)return xmodel = CNN()
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()
  • 解释
    • nn.Conv2d(3, 32, 3):定义一个输入通道为3,输出通道为32,卷积核大小为3x3的卷积层。
    • nn.MaxPool2d(2, 2):定义一个2x2的最大池化层。
    • self.fc1 = nn.Linear(64 * 6 * 6, 64):定义一个全连接层,输入维度为池化后特征图展平的大小,输出为64。

四、实例项目

  1. 图像分类项目
    • 数据集:使用MNIST、CIFAR-10等公开数据集。
    • 使用TensorFlow实现
import tensorflow as tf
from tensorflow.keras.datasets import mnist# 加载数据集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 255# 构建模型
model = tf.keras.Sequential([tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Flatten(),tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(10)
])
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
# 训练模型
model.fit(train_images, train_labels, epochs=5, batch_size=64)
# 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)
  • 解释
    - mnist.load_data():加载MNIST数据集。
    - train_images = train_images.reshape((60000, 28, 28, 1)):将训练图像数据重塑为适合CNN输入的形状。
    - model.fit(train_images, train_labels, epochs=5, batch_size=64):训练模型,使用64的批量大小,训练5个周期。

    • 使用PyTorch实现
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms# 数据预处理
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,))
])
# 加载数据集
trainset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, train=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
testset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, train=False, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=True)# 定义模型
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 32, 3)self.pool = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(32, 64, 3)self.fc1 = nn.Linear(64 * 5 * 5, 64)self.fc2 = nn.Linear(64, 10)def forward(self, x):x = torch.relu(self.conv1(x))x = self.pool(x)x = torch.relu(self.conv2(x))x = self.pool(x)x = torch.flatten(x, 1)x = torch.relu(self.fc1(x))x = self.fc2(x)return xmodel = Net()
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()# 训练模型
for epoch in range(5):for images, labels in trainloader:optimizer.zero_grad()output = model(images)loss = criterion(output, labels)loss.backward()optimizer.step()# 评估模型
correct = 0
total = 0
with torch.no_grad():for images, labels in testloader:output = model(images)_, predicted = torch.max(output.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()
print('Accuracy of the network on the 10000 test images: %d %%' % (100 * correct / total))
  • 解释
    - transforms.Compose:组合多个数据转换操作,包括转换为张量和归一化。
    - datasets.MNIST:加载MNIST数据集。
    - torch.utils.data.DataLoader:创建数据加载器,用于批量加载数据。
    - for epoch in range(5):训练模型5个周期,每个周期遍历训练数据。
  1. 目标检测项目
    • 使用TensorFlow
      • 可以使用TensorFlow的Object Detection API。首先需要安装相关的API,并使用预训练的模型(如SSD、Faster R-CNN等)。
    • 使用PyTorch
      • 可以使用PyTorch的Detectron2库,它提供了一系列预训练的目标检测模型和方便的训练、评估工具。

五、实践与拓展

  1. 数据增强
    • 学习在深度学习中使用数据增强技术,如旋转、翻转、裁剪等。使用OpenCV或相应深度学习框架的工具。
import torchvision.transforms as transforms
# 定义数据增强操作
transform = transforms.Compose([transforms.RandomRotation(10),transforms.RandomHorizontalFlip(),transforms.RandomCrop(28, padding=4)
])
  • 解释
    - transforms.RandomRotation(10):随机旋转图像,角度范围为正负10度。
    - transforms.RandomHorizontalFlip():随机水平翻转图像。
    - transforms.RandomCrop(28, padding=4):随机裁剪图像,大小为28x28,带有4像素的填充。
  1. 超参数优化

    • 学习如何调整模型的超参数,如学习率、批量大小、网络结构等。可以使用手动调整、网格搜索、随机搜索等方法。
  2. 模型部署

    • 学习将训练好的模型部署到实际应用中,如使用TensorFlow Serving或PyTorch的TorchServe,将模型部署到服务器上,为客户端提供服务。

预告:《利用Python库进行计算机视觉算法的实践》

相关文章:

【学习计算机视觉算法的基础及基本编码-基于Python语言--实例教程】

Python视觉算法实际从0-1实例编码 一、学习基础二、学习计算机视觉基础知识三、深度学习在计算机视觉中的应用四、实例项目五、实践与拓展 一、学习基础 数学基础 线性代数: 学习矩阵、向量的基本概念,包括矩阵的加法、乘法、转置等运算。理解矩阵的秩、…...

从零搭建一个Vue3 + Typescript的脚手架——day1

1.开发环境搭建 (1).配置vite vite简介 Vite 是一个由尤雨溪开发的现代化前端构建工具,它利用了浏览器对 ES 模块的原生支持,极大地提升了开发服务器的启动速度和热更新效率。Vite 不仅适用于 Vue.js,还支持 React、Svelte 等多种框架&…...

Pgsql存储占用分析

基础命令 -- 查询表大小 SELECT pg_total_relation_size(table_name);-- 查询表大小(不带索引) SELECT pg_table_size(table_name);-- 查询表索引大小 SELECT pg_indexes_size(table_name);-- 查询表具体大小 SELECT pg_relation_size(table_name); SEL…...

51c自动驾驶~合集46

我自己的原文哦~ https://blog.51cto.com/whaosoft/13050104 #世界模型会是L3自动驾驶的唯一解吗 三维空间占有率(3D Occupancy)预测的目的是预测三维空间中的每个体素是否被占有,如果被占有,则对应的体素将被标记。3D Semant…...

Elasticsearch:使用全文搜索在 ES|QL 中进行过滤 - 8.17

8.17 在 ES|QL 中引入了 match 和 qstr 函数,可用于执行全文过滤。本文介绍了它们的作用、使用方法、与现有文本过滤方法的区别、当前的限制以及未来的改进。 ES|QL 现在包含全文函数,可用于使用文本查询过滤数据。我们将回顾可用的文本过滤方法&#xf…...

《自动驾驶与机器人中的SLAM技术》ch8:基于 IESKF 的紧耦合 LIO 系统

目录 基于 IESKF 的紧耦合 LIO 系统 1 IESKF 的状态变量和运动过程 1.1 对名义状态变量的预测 1.2 对误差状态变量的预测及对协方差矩阵的递推 2 观测方程中的迭代过程 3 高维观测中的等效处理 4 NDT 和 卡尔曼滤波的联系 5 紧耦合 LIO 系统的主要流程 5.1 IMU 静止初始化 …...

引领图像编辑领域的新潮流!Edicho:实现跨图像一致编辑的新方法(港科蚂蚁)

在图像处理领域,如何实现跨图像的一致编辑一直是技术挑战。传统方法往往局限于单张图像的编辑,难以保证多张图像间编辑效果的一致性。香港科技大学、蚂蚁集团、斯坦福大学和香港中文大学联合提出Edicho,这一难题迎来了全新的解决方案。 总结如…...

459. 重复的子字符串【力扣】——kmp拼接字符串解法

常规kmp解答 class Solution { public:void getNext(int *next,string s){int j0;next[0]0;for(int i1;i<s.size();i){while(j>0 && s[i]!s[j]){jnext[j-1];}if(s[i]s[j]) j;next[i]j;}}bool repeatedSubstringPattern(string s) {if(s.size()0) return false;i…...

fpga 的时钟管理模块pll 跟 dcm

FPGA&#xff08;Field-Programmable Gate Array&#xff0c;现场可编程门阵列&#xff09;中的时钟管理模块&#xff08;Clock Management Module, CMM&#xff09;是用于生成和管理内部时钟信号的关键组件。两个常见的CMM类型是PLL&#xff08;Phase-Locked Loop&#xff0c;…...

USB 驱动开发 --- Gadget 驱动框架梳理(一)

本文由 Linux 内核文档翻译与总结而来&#xff0c;个人学习笔记仅供参考。 Gadget 框架 在 USB 协议交互过程中&#xff0c;角色定义&#xff1a; the device driver is the master (or “client driver”) Linux 内核中称为 HCD(Host Controller Driver)&#xff0c;负责与 …...

1Hive概览

1Hive概览 1hive简介2hive架构3hive与Hadoop的关系4hive与传统数据库对比5hive的数据存储 1hive简介 Hive是基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张数据库表&#xff0c;并提供类SQL查询功能。 其本质是将SQL转换为MapReduce/Spark的任务进…...

【Web安全】SQL 注入攻击技巧详解:UNION 注入(UNION SQL Injection)

【Web安全】SQL 注入攻击技巧详解&#xff1a;UNION 注入&#xff08;UNION SQL Injection&#xff09; 引言 UNION注入是一种利用SQL的UNION操作符进行注入攻击的技术。攻击者通过合并两个或多个SELECT语句的结果集&#xff0c;可以获取数据库中未授权的数据。这种注入技术要…...

IoTDB 常见问题 QA 第三期

关于 IoTDB 的 Q & A IoTDB Q&A 第三期持续更新&#xff01;我们将定期汇总我们将定期汇总社区讨论频繁的问题&#xff0c;并展开进行详细回答&#xff0c;通过积累常见问题“小百科”&#xff0c;方便大家使用 IoTDB。 Q1&#xff1a;查询最新值 & null 数据相加方…...

RabbitMQ---消息确认和持久化

&#xff08;一&#xff09;消息确认 1.概念 生产者发送消息后&#xff0c;到达消费端会有以下情况&#xff1a; 1.消息处理成功 2.消息处理异常 如果RabbitMQ把消息发送给消费者后就把消息删除&#xff0c;那么就可能会导致&#xff0c;消息处理异常想要再获取这条消息的时…...

《鸿蒙Next旅游应用:人工智能赋能个性化与智能导览新体验》

随着鸿蒙Next的推出&#xff0c;旅游应用迎来了全新的发展机遇&#xff0c;借助人工智能技术能为用户带来更出色的个性化推荐和智能导览服务。 鸿蒙Next与人工智能融合优势 鸿蒙Next拥有强大的分布式能力和原生智能体验。其能打破设备界限&#xff0c;实现多设备协同&#xf…...

微信小程序获取当前页面路径,登录成功后重定向回原页面

&#x1f935; 作者&#xff1a;coderYYY &#x1f9d1; 个人简介&#xff1a;前端程序媛&#xff0c;目前主攻web前端&#xff0c;后端辅助&#xff0c;其他技术知识也会偶尔分享&#x1f340;欢迎和我一起交流&#xff01;&#x1f680;&#xff08;评论和私信一般会回&#…...

【9.2】Golang后端开发系列--Gin路由定义与实战使用

文章目录 一、Gin 框架路由的基本定义方式1. 简单路由创建2. 路由参数3. 查询参数 二、商业大项目中的路由定义和服务调用1. 路由模块化2. 路由组和中间件3. 中间件的使用4. 服务层调用5. 错误处理6. 版本控制7. 路由注册 一、Gin 框架路由的基本定义方式 1. 简单路由创建 使…...

【微信小程序】let和const-综合实训

let 和 const 都是用于声明变量的关键字&#xff0c;它们与传统的 var 关键字相比&#xff0c;有很多不同之处。 let 声明块级作用域变量&#xff0c;可再赋值&#xff1b;const 声明块级作用域常量&#xff0c;不可再赋值。 以下是它们的详细介绍&#xff1a; 一、基本概念…...

图匹配算法(涵盖近似图匹配)

【图数据管理与挖掘-第四讲&#xff08;子&#xff09;图匹配算法&#xff08;涵盖近似图匹配&#xff09; 北京大学2021暑期-邹磊教授】https://www.bilibili.com/video/BV1zh411q7PW?vd_source7c2b5de7032bf3907543a7675013ce3a 图同构&#xff1a; 定义&#xff1a; 给定…...

java线程——Thread

java线程——Thread 基本步骤示例优劣总结 继承Thread类是Java中实现多线程的一种方式。使用时创建一个新的类&#xff0c;该类继承自java.lang.Thread&#xff0c;并重写其run()方法&#xff0c;在方法中定义线程执行的任务逻辑。 基本步骤 1、创建一个子类&#xff1a;定义一…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...