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

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

前言

本文将为读者详细介绍六种在计算机视觉领域广泛使用的开源软件和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.mzph.cn/pingmian/6259.shtml

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

相关文章

Vue进阶之Vue项目实战(一)

Vue项目实战 项目搭建初始化eslint版本约束版本约束eslint配置 stylelintcspellcz-githusky给拦截举个例子 zx 项目搭建 node版本&#xff1a;20.11.1 pnpm版本&#xff1a;9.0.4 初始化 vue3最新的脚手架 pnpm create vite byelide-demo --template vue-ts pnpm i pnpm dev…

MIPS32 指令架构

指令格式 R 类型 说明&#xff1a; 用于寄存器和寄存器操作 参数说明: Op: 指令操作码Rs: 第一个源操作数寄存器号&#xff0c;参与运算使用Rd: 目的操作数寄存器号&#xff0c;保存结果使用Shamt: 位偏移量&#xff0c;仅在位移指令使用&#xff0c;在此直接置0Func: 指令函…

区块链 | IPFS:IPNS(入门版)

&#x1f98a;原文&#xff1a;IPFS 与 IPNS 啥关系&#xff1f; &#x1f98a;写在前面&#xff1a;本文属于搬运博客&#xff0c;自己留存学习。这篇文章讲得太入门了&#xff0c;不涉及任何底层原理。 正文 随着 2019 年 12 月 12 日 Filecoin 测试网的上线&#xff0c;IPF…

深入 Django 模型层:数据库设计与 ORM 实践指南

title: 深入 Django 模型层&#xff1a;数据库设计与 ORM 实践指南 date: 2024/5/3 18:25:33 updated: 2024/5/3 18:25:33 categories: 后端开发 tags: Django ORM模型设计数据库关系性能优化数据安全查询操作模型继承 第一章&#xff1a;引言 Django是一个基于Python的开源…

安卓手机APP开发__媒体开发部分__分享声音的输入

安卓手机APP开发__媒体开发部分__分享声音的输入 目录 概述 安卓10之前的版本的行为 安卓10的行为 共享场景 小助手普通的APP 有可读取权的服务 普通的APP 两个普通的APP 语音电话 普通的APP 概述 声音的输入通常来自于内嵌的麦克风,还有外置的麦克网,或者是一个…

【C++】深入剖析C++11中右值引用和左值引用

目录 一、左值引用 && 右值引用 二、左值引用于右值引用的比较 三、 右值引用使用场景和意义 1、函数返回值 ①移动赋值 ②移动构造 2、STL容器插入接口 ​3、完美转发 一、左值引用 && 右值引用 传统的C语法中就有引用的语法&#xff0c;而C11中新增了…

【简单介绍下Lisp的学习历程】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

计算机网络 3.1网络的拓扑结构

第三章 网络技术基础 第一节 网络的拓扑结构 一、认识拓扑结构 1.定义&#xff1a; ①网络节点和链路的几何图形&#xff1b; ②网络中网络单元的地理分布和互联关系的几何构型&#xff1b; ③通信子网的拓扑结构。 2.三要素&#xff1a;可靠性、扩充性、费用高低。 3.影…

react 子组件调用父组件方法,获取的数据不是最新值

目录 原因解决方法方法一、去掉 useCallback&#xff0c; 这样每次父组件触发刷新&#xff0c;就会刷新子组件方法二、或者通过监听 val&#xff0c;val 值改变来刷新函数方法三、在父组件中&#xff0c;把 val 作为 key 值&#xff0c;每次 val 变化强制触发更新 出现问题的代…

Mybatis之Sqlsession、Connection和Transaction三者间的关系

前言 最近在看Mybatis的源码&#xff0c;搜到这篇文章Sqlsession、Connection和Transaction原理与三者间的关系&#xff0c;debug之后发现有不少疑惑&#xff0c;于是按照原文整理了一下&#xff0c;记录下debug中的一些困惑点。 对于我们开发来讲&#xff0c;不管跟任何关系…

django搭建一个AI博客进行YouTube视频自动生成文字博客

文章目录 一、生成Django框架二、项目代码&#xff08;前端&#xff09;1、编写前端代码&#xff08;正文界面&#xff09;1.1、生产html框架1.2、添加live preview扩展1.3、更改title元素中文本1.4、添加CDN&#xff08;CSS&#xff09;样式链接1.5、nav标签1.6、在body标签中…

Python | Leetcode Python题解之第66题加一

题目&#xff1a; 题解&#xff1a; class Solution:def plusOne(self, digits: List[int]) -> List[int]:n len(digits)for i in range(n - 1, -1, -1):if digits[i] ! 9:digits[i] 1for j in range(i 1, n):digits[j] 0return digits# digits 中所有的元素均为 9retu…

手撸Mybatis(三)——收敛SQL操作到SqlSession

本专栏的源码&#xff1a;https://gitee.com/dhi-chen-xiaoyang/yang-mybatis。 引言 在上一章中&#xff0c;我们实现了读取mapper配置并构造相关的mapper代理对象&#xff0c;读取mapper.xml文件中的sql信息等操作&#xff0c;现在&#xff0c;在上一章的基础上&#xff0c…

深度学习:基于TensorFlow、Keras,使用长短期记忆神经网络模型(LSTM)对Microsoft股票进行预测分析

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…

等保测评考试培训题

等保2.0培训考试题目 一、网络安全法第几条&#xff0c;规定国家实行网络安全等级保护制度。 A、第五条 B、第十条 C、第十三条 D、第二十一条 二、等级保护有几个安全保护级别&#xff1f; A、3个 B、4个 C、5个 D、6个 三、什么样的系统可以作为定级对象&#…

UNIAPP小程序从入门到精通

第一章> 1、如何创建项目 2、项目的基本结构 3、页面组成&#xff08;wxss可以不用&#xff09; 4、组件的使用 5、协同开发与发布 第二章> 6、WXML页面结构渲染 7、style样式美化 8、a…

分享我的github仓库

这是一个由现代C编写的小型、学习性质的服务器框架&#xff0c;包含压缩&#xff0c;序列化&#xff0c;IO调度&#xff0c;Socket封装&#xff0c;文件配置&#xff0c;日志库等多个完整自研模块&#xff0c;欢迎到我的仓库阅读代码和安装体验&#xff0c;期待任何的建议和反馈…

Docker 加持的安卓手机:随身携带的知识库(一)

这篇文章聊聊&#xff0c;如何借助 Docker &#xff0c;尝试将一台五年前的手机&#xff0c;构建成一个随身携带的、本地化的知识库。 写在前面 本篇文章&#xff0c;我使用了一台去年从二手平台购入的五年前的手机&#xff0c;K20 Pro。 为了让它能够稳定持续的运行&#xf…

C++, 简单 http 下的 POST 和 Get

#pragma once #include <Windows.h> #include <winsock.h> #include <sstream> #include <iostream> #pragma comment(lib,"ws2_32.lib")class WinHttp { public:WinHttp(){//此处一定要初始化一下&#xff0c;否则gethostbyname返回一直为空…

如何从Mac电脑恢复任何删除的视频

Microsoft Office是包括Mac用户在内的人们在世界各地创建文档时使用的最佳软件之一。该软件允许您创建任何类型的文件&#xff0c;如演示文稿、帐户文件和书面文件。您可以使用 MS Office 来完成。所有Microsoft文档都可以在Mac上使用。大多数情况下&#xff0c;您处理文档&…