【C++风云录】图形和动作捕捉库全面解析:从OpenPose到OpenCV

server/2024/9/20 1:31:35/ 标签: c++, 算法

深入浅出:六大计算机视觉和动作捕捉库的教程和比较

前言

本文将为读者详细介绍六种在计算机视觉领域广泛使用的开源软件和SDK,包括OpenPose、Vicon SDK、Intel RealSense SDK、Microsoft Kinect SDK、PCL (Point Cloud Library)和OpenCV。我们会一一解析它们的主要特性以及如何进行安装和使用。

欢迎订阅专栏:C++风云录

文章目录

  • 深入浅出:六大计算机视觉和动作捕捉库的教程和比较
    • 前言
    • 1. OpenPose
      • 1.1 介绍
      • 1.2 主要特性
        • 1.2.1 动作捕捉
        • 1.2.2 姿势估计
      • 1.3 如何使用OpenPose
        • 1.3.1 安装
        • 1.3.2 示例代码
    • 2. Vicon SDK
      • 2.1 介绍
      • 2.2 主要特性
        • 2.2.1 高精度动作捕捉
        • 2.2.2 数据分析工具
      • 2.3 如何使用Vicon SDK
        • 2.3.1 安装
        • 2.3.2 示例代码
    • 3. Intel RealSense SDK
      • 3.1 介绍
      • 3.2 主要特性
        • 3.2.1 深度感知
        • 3.2.2 手势识别
      • 3.3 如何使用Intel RealSense SDK
        • 3.3.1 安装
        • 3.3.2 示例代码
    • 4. Microsoft Kinect SDK
      • 4.1 介绍
      • 4.2 主要特性
        • 4.2.1 跟踪和识别人体骨骼
        • 4.2.2 多媒体交互
      • 4.3 如何使用Kinect SDK
        • 4.3.1 安装
        • 4.3.2 示例代码
    • 5. PCL(Point Cloud Library)
      • 5.1 介绍
      • 5.2 主要特性
        • 5.2.1 三维图像处理
        • 5.2.2 点云数据处理
      • 5.3 如何使用PCL
        • 5.3.1 安装
        • 5.3.2 示例代码
    • 6. OpenCV (Open Source Computer Vision Library)
      • 6.1 介绍
      • 6.2 主要特性
        • 6.2.1 图像处理
        • 6.2.2 特征提取
      • 6.3 如何使用OpenCV
        • 6.3.1 安装
        • 6.3.2 示例代码
    • 总结

1. OpenPose

OpenPose 是一个开源的实时多人2D姿态估计库,使用C++编写,可以用于捕获人体姿势在视频中的关键点。

1.1 介绍

OpenPose是卡耐基梅隆大学(CMU)Perceptual Computing Lab开发的实时人体姿势识别库。它采用深度学习技术,能够识别并追踪图像和视频中人体的关键点。OpenPose不仅限于人体头部、手部、脚部的关键点追踪,还可以进行面部关键点以及足部关键点的检测。

OpenPose项目主页:https://github.com/CMU-Perceptual-Computing-Lab/openpose

1.2 主要特性

OpenPose具有以下几个主要特性:

1.2.1 动作捕捉

OpenPose可以捕捉和分析人体动作,包括但不限于行走、跑步、跳跃等基本运动,同时也可以精确判断出更复杂的动作,如瑜伽、舞蹈等。

1.2.2 姿势估计

OpenPose可以对人体各部位的姿势进行实时估计和追踪,无论是静态图像还是动态视频,都能够生成对应的关键点数据。

1.3 如何使用OpenPose

1.3.1 安装

首先,我们需要从GitHub上下载OpenPose的源码:

git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose.git
cd openpose 
mkdir build 
cd build 
cmake .. 
make -j`nproc`

通过以上命令,即可成功安装OpenPose。

1.3.2 示例代码

下面是一个简单的OpenPose使用示例,主要演示了如何使用OpenPose识别静态图片中的人体姿势。

#include <openpose/headers.hpp>int main()
{op::Wrapper opWrapper{op::ThreadManagerMode::Asynchronous};opWrapper.configure(op::WrapperStructInput{"/path/to/image.jpg"});opWrapper.start();const auto outputArray = opWrapper.emplaceAndPop(op::Datum{cv::imread("/path/to/image.jpg")});if (!outputArray.empty()){auto& datumProcessed = outputArray.at(0);cv::imshow("OpenPose", datumProcessed.cvOutputData);cv::waitKey(0);}return 0;
}

在上述代码中,我们首先创建一个op::Wrapper对象。然后,我们使用configure方法配置输入图片的路径。接着,我们用start方法启动OpenPose。

最后,我们将处理结果保存在 outputArray 中,并通过 cv::imshow 方法显示出识别结果。

更多使用示例和详细文档,请参考 OpenPose GitHub主页。

2. Vicon SDK

2.1 介绍

Vicon SDK是一款由知名传感器制造商Vicon开发的软件开发工具包,它提供了一系列用于与Vicon动作捕捉系统进行交互的接口。官方网站

2.2 主要特性

2.2.1 高精度动作捕捉

Vicon SDK使得我们能够获取到非常精确的动作数据,这对于需要高精度捕捉人体、动物或者机械运动等领域有着重要应用。

// C++ 示例代码
#include "ViconDataStreamSDK_CPP/DataStreamClient.h"
...
ViconDataStreamSDK::CPP::Output_GetSegmentGlobalTranslation _Output_GetSegmentGlobalTranslation;
...
_Output_GetSegmentGlobalTranslation = MyClient.GetSegmentGlobalTranslation( SubjectName, SegmentName );
2.2.2 数据分析工具

Vicon SDK还提供了一套完善的数据分析工具,使得用户能够对捕捉到的数据进行深入分析和研究。

// C++ 示例代码
#include "ViconDataStreamSDK_CPP/DataStreamClient.h"
...
ViconDataStreamSDK::CPP::Output_GetSegmentGlobalRotationEulerXYZ _Output_GetSegmentGlobalRotationEulerXYZ;
...
_Output_GetSegmentGlobalRotationEulerXYZ = MyClient.GetSegmentGlobalRotationEulerXYZ( SubjectName, SegmentName );

2.3 如何使用Vicon SDK

2.3.1 安装

你可以按照Vicon SDK官方文档上的指引安装并设置Vicon SDK。

2.3.2 示例代码

以下是一个简单的C++代码示例,演示了如何使用Vicon SDK获取动作数据。

// C++ 示例代码
#include "ViconDataStreamSDK_CPP/DataStreamClient.h"int main()
{// 创建客户端对象ViconDataStreamSDK::CPP::Client MyClient;// 连接到服务器std::string HostName = "localhost:801";MyClient.Connect( HostName );// 获取并打印主题数量size_t SubjectCount = MyClient.GetSubjectCount().SubjectCount;std::cout << "Number of subjects: " << SubjectCount << std::endl;return 0;
}

更多详细的示例代码和使用教程,你可以参考Vicon SDK官方文档。

3. Intel RealSense SDK

3.1 介绍

Intel RealSense SDK是一个强大的套件,用于通过Intel RealSense相机构建和优化深度感知应用程序。此SDK包含一系列API,可以帮助开发者轻松地访问硬件功能和数据流。

官方网站链接

3.2 主要特性

3.2.1 深度感知

Intel RealSense SDK支持深度感知技术,这使得相机可以感知三维空间的物体,并能够提取出深度图像。比如以下代码实例展示了如何获取深度图像:

// Include the RealSense library
#include <librealsense2/rs.hpp>int main(){// Declare depth colorizer for pretty visualization of depth datars2::colorizer color_map;// Create a pipeline to configure, start and stop camera streamsrs2::pipeline pipe;// Start streaming with default recommended configurationpipe.start();while(true){rs2::frameset data = pipe.wait_for_frames(); // Wait for next set of frames from the camerars2::frame depth = color_map(data.get_depth_frame()); // Find and colorize the depth data// Your code here}return 0;
}
3.2.2 手势识别

Intel RealSense SDK还支持手势识别技术,使得相机能够识别特定的手势。以下代码实例展示了如何使用手势识别:

// Include the RealSense library
#include <librealsense2/hpp/rs_processing.hpp>int main(){// Initialize hand modulers2::context ctx;rs2::device_list devices = ctx.query_devices();rs2::device dev = devices[0];rs2::pipeline p(dev);p.start();while(true){rs2::frameset frames = p.wait_for_frames();rs2::depth_frame depth = frames.get_depth_frame();// Call the hand processing methodrs2::hand_module hm;hm.process(depth);// Your code here}return 0;
}

3.3 如何使用Intel RealSense SDK

3.3.1 安装

在开始使用Intel RealSense SDK之前,你需要首先安装它。你可以直接从Intel RealSense官方网站下载并安装。

3.3.2 示例代码

Intel RealSense SDK提供了丰富的实例代码,你可以从其GitHub仓库中获取。下面是一个简单的示例,展示了如何初始化相机并获取一帧图像:

// Include the RealSense library
#include <librealsense2/rs.hpp>int main(){// Create a pipeline to configure, start and stop camera streamsrs2::pipeline pipe;// Start streaming with default recommended configurationpipe.start();// Block program until frames arrivers2::frameset frames = pipe.wait_for_frames();// Try to get a frame of a depth imagers2::depth_frame depth = frames.get_depth_frame();// Print the size of the depth framestd::cout << "Width: " << depth.get_width() << ", Height: " << depth.get_height() << std::endl;return 0;
}

以上代码首先创建了一个rs2::pipeline对象,并调用start()函数开始流式传输。然后,它等待一组帧(frameset)到达,尝试获取深度帧,并打印出深度帧的尺寸。

这只是使用Intel RealSense SDK的一种基本方式,更多功能和研究可以在官方API文档中找到。# Microsoft Kinect SDK教程

4. Microsoft Kinect SDK

4.1 介绍

Microsoft Kinect SDK是由微软公司开发的一种用于操控Kinect感应器的软件开发工具包。 Kinect感应器能够捕获人体骨架、声音以及深度图像等信息,因此被广泛应用在游戏、娱乐以及其他交互式应用中。

官方SDK链接:Microsoft Kinect SDK

4.2 主要特性

4.2.1 跟踪和识别人体骨骼

使用Kinect SDK可以实现对人体骨架的跟踪和识别。SDK可以提供主动跟踪的骨骼数据,如关键帧、关节旋转等。

NUI_SKELETON_FRAME SkeletonFrame;while ( true )
{// Get a frameHRESULT hr = Sensor->NuiSkeletonGetNextFrame( 0, &SkeletonFrame );if ( FAILED( hr ) ){cout << "Failed to get skeleton frame" << endl;continue;}// Find the skeletonfor ( int i = 0; i < NUI_SKELETON_COUNT; ++i ){if ( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED ){// Do something with the skeleton}}
}
4.2.2 多媒体交互

Kinect SDK允许开发者利用Kinect感应器获取的数据创建丰富的多媒体交互应用,例如语音识别、手势控制等。

// Create an instance of a speech recognizer
ISpRecognizer* pRecognizer;
HRESULT hr = CoCreateInstance(CLSID_SpSharedRecognizer,NULL, CLSCTX_ALL, IID_ISpRecognizer,(void **)&pRecognizer);if (SUCCEEDED(hr))
{// Do something with the recognizer
}

4.3 如何使用Kinect SDK

4.3.1 安装

在使用Kinect SDK之前,需要先安装Kinect SDK。可以直接从微软官网下载安装程序。

4.3.2 示例代码

以下示例显示了如何使用Kinect SDK初始化Kinect设备:

INuiSensor* sensor;HRESULT hr = NuiCreateSensorByIndex(0, &sensor);if (FAILED(hr))
{cout << "Could not find a Kinect sensor" << endl;return hr;
}hr = sensor->NuiInitialize(NUI_INITIALIZE_FLAG_USES_SKELETON);if (FAILED(hr))
{cout << "Could not initialize the Kinect sensor" << endl;return hr;
}

参考资源:Microsoft Kinect SDK documentation

5. PCL(Point Cloud Library)

5.1 介绍

PCL,全称Point Cloud Library(点云库),是一个跨平台的开源C++库,主要用于处理三维对象的点云数据。它可以应用于多种领域,包括图像处理、机器视觉、机器学习等。

更多关于PCL的信息可参考其官方网站:http://pointclouds.org/

5.2 主要特性

PCL具有多种强大的功能和特性,下面就来看一下其中的两个主要特性。

5.2.1 三维图像处理

PCL支持对三维图像进行各种处理,例如滤波、特征提取、配准等。这对于处理大量三维图像数据非常有帮助。

#include <pcl/filters/passthrough.h>pcl::PassThrough<pcl::PointXYZ> pass;
pass.setInputCloud (cloud);
pass.setFilterFieldName ("z");
pass.setFilterLimits (0.0, 1.0);
//pass.setFilterLimitsNegative (true);
pass.filter (*cloud_filtered);

上述代码展示如何使用PCL进行滤波处理。

5.2.2 点云数据处理

PCL还支持对点云数据进行处理,例如降采样、滤波、切割等。

#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
pcl::VoxelGrid<pcl::PointXYZ> sor;
sor.setInputCloud (cloud);
sor.setLeafSize (0.01f, 0.01f, 0.01f);
sor.filter (*cloud_filtered);

上述代码示例展示了如何使用PCL对点云进行降采样处理。

5.3 如何使用PCL

5.3.1 安装

在Ubuntu平台上安装PCL可以通过以下命令:

sudo apt-get install libpcl-dev

其他平台的安装方法可以参考官方文档:http://pointclouds.org/downloads/

5.3.2 示例代码

下面这段代码示例展示了如何使用PCL读取点云数据并进行可视化。

#include <pcl/io/pcd_io.h>
#include <pcl/visualization/cloud_viewer.h>int user_data;void
viewerOneOff (pcl::visualization::PCLVisualizer& viewer)
{viewer.setBackgroundColor (1.0, 0.5, 1.0);pcl::PointXYZ o;o.x = 1.0;o.y = 0;o.z = 0;viewer.addSphere (o, 0.25, "sphere", 0);std::cout << "i only run once" << std::endl;
}void
viewerPsycho (pcl::visualization::PCLVisualizer& viewer)
{static unsigned count = 0;std::stringstream ss;ss << "Once per viewer loop: " << count++;viewer.removeShape ("text", 0);viewer.addText (ss.str(), 200, 300, "text", 0);user_data++;
}int main ()
{pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);pcl::io::loadPCDFile ("my_point_cloud.pcd", *cloud);pcl::visualization::CloudViewer viewer("Cloud Viewer");viewer.showCloud(cloud);viewer.runOnVisualizationThreadOnce (viewerOneOff);viewer.runOnVisualizationThread (viewerPsycho);while (!viewer.wasStopped ()){user_data++;}return 0;
}

更多的PCL代码示例可参考其官方教程:http://pointclouds.org/documentation/tutorials/

6. OpenCV (Open Source Computer Vision Library)

6.1 介绍

OpenCV是一个开源的计算机视觉和机器学习库。它包含超过2500个优化的算法,能够处理图像和视频的分析以及识别任务。这一库非常适用于实时应用,并且已被广泛地运用在体育分析和运动科学中来提取并分析数据。

官网链接:OpenCV

6.2 主要特性

6.2.1 图像处理

OpenCV具有强大的图像处理功能,可以进行图像扩展、滤波、直方图等操作。此外,它还支持对图像进行几何变换、色彩空间转换等高级操作。

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>using namespace cv;int main(int argc, char** argv)
{// Load an imageMat src = imread(argv[1], 1);// Apply Gaussian BlurMat dst;GaussianBlur(src, dst, Size(15, 15), 0, 0);// Show the blurred imageimshow("Gaussian Blur", dst);waitKey(0);return 0;
}
6.2.2 特征提取

OpenCV还支持各种特征提取方法,比如SIFT、ORB、SURF等,这些都可以用于图像识别、跟踪等任务。

#include <opencv2/features2d.hpp>using namespace std;
using namespace cv;int main(int argc, char** argv)
{// Load an imageMat src = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);// Initiate SIFT detectorPtr<SIFT> sift = SIFT::create();// find the keypoints and descriptors with SIFTvector<KeyPoint> kp;Mat des;sift->detectAndCompute( src, Mat(), kp, des );// draw keypointMat img_kp;drawKeypoints( src, kp, img_kp, Scalar::all(-1), DrawMatchesFlags::DEFAULT );// Show the imageimshow("Keypoints", img_kp);waitKey(0);return 0;
}

6.3 如何使用OpenCV

6.3.1 安装

首先需要在你的机器上安装OpenCV。你可以访问其官方GitHub页面获取详细的安装指南。

6.3.2 示例代码

以下是一个简单的例子,演示了如何使用OpenCV在图像上检测和绘制角点。

#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/features2d.hpp>using namespace std;
using namespace cv;int main(int argc, char** argv)
{// Load an imageMat src = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);// Apply corner detectionint maxCorners = 200;double qualityLevel = 0.01;double minDistance = 10;Mat corners;goodFeaturesToTrack(src, corners, maxCorners, qualityLevel, minDistance);// Draw cornersfor(int i = 0; i < corners.rows; i++){circle(src, corners.at<Point2f>(i,0), 3, Scalar(255), -1);}// Show the image with cornersimshow("Corners", src);waitKey(0);return 0;
}

这只是OpenCV库的一部分功能,它还包含了许多其他强大的函数和类,可以帮助你在体育分析和运动科学领域进行更深入的研究。

总结

经过详细解析和比较, OpenPose、Vicon SDK、Intel RealSense SDK、Microsoft Kinect SDK、PCL和OpenCV各有所长,供用户根据实际需求进行选择。通过学习并掌握这些工具的使用,可以极大提高在计算机视觉领域的研究和开发效率。


http://www.ppmy.cn/server/31767.html

相关文章

【前端学习——call和apply函数】

call()和apply()这两个方法的作用可以简单归纳为改变this指向&#xff0c;从而让我们的this指向不在是谁调用了函数就指向谁。 call()方法的作用和 apply() 方法类似&#xff0c;区别就是call()方法接受的是参数列表&#xff0c;而apply()方法接受的是一个参数数组。 https:/…

用C#写一个特性,在函数上面可以自动计算函数耗时情况

用C#写一个特性&#xff0c;在函数上面可以自动计算函数耗时情况 TimingAttribute类是自定义的特性类&#xff0c;用来标记需要计时的方法。TimingInterceptor类是一个拦截器&#xff0c;它通过反射来拦截被TimingAttribute标记的方法&#xff0c;并在方法执行前后进行计时。My…

面试题分享之Java集合篇(三)

注意&#xff1a;文章若有错误的地方&#xff0c;欢迎评论区里面指正 &#x1f36d; 系列文章目录 面试题分享之Java基础篇&#xff08;二&#xff09;面试题分享之Java基础篇&#xff08;三&#xff09; 面试题分享之Java集合篇&#xff08;一&#xff09;、 面试题分享之Ja…

Java 基础面试 -- 异常处理

一、引言 在Java编程中&#xff0c;异常处理是确保程序稳定性和健壮性的重要机制。当程序在运行时遇到不可预见的问题&#xff0c;如文件读取失败、网络错误、除零异常等&#xff0c;异常处理机制允许我们捕获这些错误&#xff0c;并进行相应的处理&#xff0c;从而避免程序崩…

SQL-慢查询的定位及优化

定位慢查询sql 启用慢查询日志&#xff1a; 确保MySQL实例已经启用了慢查询日志功能。可以通过以下命令查看是否启用&#xff1a; SHOW VARIABLES LIKE slow_query_log;如果未启用&#xff0c;可以通过以下命令启用&#xff1a; SET GLOBAL slow_query_log ON;配置慢查询日志&…

ssm104园区停车管理系统+jsp

园区停车管理系统的设计与实现 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管…

数据库管理-第180期 23ai: Cloud/Container Plus AI(20240503)

数据库管理180期 2024-05-03 数据库管理-第180期 23ai: Cloud/Container Plus AI&#xff08;20240503&#xff09;1 Free版本更新2 如我所期3 宣传图Oracle Vector DBJSON Relational DualityProperty GraphsShardingTrue CacheFirewall 总结 数据库管理-第180期 23ai: Cloud/…

QT:label标签/进度条的使用

文章目录 设置不同格式的文本显示图片文本对齐/自动换行/缩进/边距LCDNumber倒计时 ProgressBar进度条 设置不同格式的文本 在文本格式中&#xff0c;存在富文本&#xff0c;makedown格式的文本&#xff0c;还有纯文本&#xff0c;下面就依据这三个进行举例 #include "w…

嵌入式开发四:STM32 基础知识入门

为方便更好的学习STM32单片机&#xff0c;本篇博客主要总结STM32的入门基础知识&#xff0c;重点在于理解寄存器以及存储器映射和寄存器映射&#xff0c;深刻体会STM32是如何组织和管理庞大的寄存器&#xff0c;从而提高开发效率的&#xff0c;为后面的基于标准库的开发做好铺垫…

Python实战开发及案例分析(2)——单目标优化

在Python中&#xff0c;进行单目标优化主要涉及定义一个优化问题&#xff0c;包括一个目标函数和可能的约束条件&#xff0c;然后选择合适的算法来求解。Python提供了多种库&#xff0c;如SciPy、Pyomo、GEKKO等&#xff0c;用于处理各种优化问题。 案例分析&#xff1a;使用 …

python实验一 简单的递归应用

实验一 实验题目 1、兔子繁殖问题(Fibonacci’s Rabbits)。一对兔子从出生后第三个月开始&#xff0c;每月生一对小兔子。小兔子到第三个月又开始生下一代小兔子。假若兔子只生不死&#xff0c;一月份抱来一对刚出生的小兔子&#xff0c;问一年中每个月各有多少只兔子。 &…

使用protoc-jar-maven-plugin生成grpc项目

在《使用protobuf-maven-plugin生成grpc项目》中我们使用protobuf-maven-plugin完成了grpc代码的翻译。本文我们将只是替换pom.xml中的部分内容&#xff0c;使用protoc-jar-maven-plugin来完成相同的功能。总体来说protoc-jar-maven-plugin方案更加简便。 环境 见《使用proto…

Android Framework中PackageManagerService的深度剖析

摘要 Android操作系统的核心服务之一——PackageManagerService(PMS)&#xff0c;扮演着至关重要的角色&#xff0c;负责维护系统中所有应用程序的生命周期管理。本文旨在全面探讨PMS的功能特性、工作流程、实际应用场景&#xff0c;并对其进行优劣分析&#xff0c;以期为开发者…

多级留言/评论的功能实现——SpringBoot3后端篇

目录 功能描述数据库表设计后端接口设计实体类entity 完整实体类dto 封装请求数据dto 封装分页请求数据vo 请求返回数据 Controller控制层Service层接口实现类 Mapper层Mybatis 操作数据库 补充&#xff1a;返回的数据结构自动创建实体类 最近毕设做完了&#xff0c;开始来梳理…

Windows安装Ubuntu24详细教程

从官网下载ISO镜像&#xff1a; 使用VMWare创建新的虚拟机&#xff1a; 选择刚才下载的ISO镜像&#xff1a; 填写账号和密码&#xff1a; 选择安装位置和虚拟机名称&#xff0c;因为我装这个主要是为了QT开发的&#xff0c;所以名字叫ubuntu24_for_qt&#xff1a; 处理…

Halcon 深度学习缺陷检测

文章目录 深度学习标注训练推理推理代码示例 深度学习标注 > 获取图片路径 C:\Users\Administrator\AppData\Roaming\MVTec\HALCON-23.11-Progress\examples\images必须要有Good或者是OK文件夹做标注,剩下两个为逻辑异常和结构异常 点击检查选择good可以获取所有good图像的…

Oracle集群-常用查询及操作(工作日常整理)

1.Oracle集群状态 select * from gv$instance; 示例结果&#xff1a; 2.Oracle集群-增大表空间 常见问题&#xff1a; 导入时或使用时&#xff0c;提示无法extend table ,增加表空间即可 常用操作&#xff1a; 1&#xff09;查询表空间 select * from dba_tablespaces; --…

算法打卡day40

今日任务&#xff1a; 1&#xff09;139.单词拆分 2&#xff09;多重背包理论基础&#xff08;卡码网56携带矿石资源&#xff09; 3&#xff09;背包问题总结 4&#xff09;复习day15 139单词拆分 题目链接&#xff1a;139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; …

如何在Android设备上恢复丢失的照片

Android手机或平板电脑上的照片丢失了&#xff1f;不要惊慌&#xff0c;您也许可以恢复它们。 由于我们的大量数据和日常生活都存储在一台设备上&#xff0c;有时将所有照片存储在本地的 Android 智能手机或平板电脑上可能是一项冒险的工作。无论是通过事故&#xff08;损坏、…

HTML5+CSS3小实例:无限循环loading动画

实例:无限循环loading动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-sc…