阿里巴巴重磅开源MNNKit:基于MNN的移动端深度学习SDK,支持安卓和iOS

阿里MNN交叉编译android MNN下交叉编译 预备工作 下载ndk https://dl.google.com/android/repository/android-ndk-r21-linux-x86_64.zip 下载交叉编译器 https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabi/ 按照宿主机类型(这里以X... 阅读详情

机器之心报

  点击上方“开发者技术前线”,选择“星标”

13:21 在看|留言|真爱

来自:机器之心   参与:一鸣、Jamin

近来,有越来越多的深度学习框架开始面向移动端进行发展。近日,阿里也基于其 MNN 推理引擎开源了最新的 MNNKit 深度学习 SDK,安卓和 iOS 开发者都可以方便地进行调用。

近年来,很多企业都在研发面向移动端的深度学习框架。在国内有 小米的 Mace、腾讯的 FeatherCNN(腾讯 AI)和 ncnn(腾讯优图)、百度的 Paddle-moblie 等。而阿里也开发了自己的移动端深度学习框架 MNN。

近日,阿里开源了基于 MNN 引擎的项目 MNNKit,面向安卓和 iOS,以 SDK 的方式提供 AI 端侧推理能力。开发者不需要了解算法细节就可以直接使用。

项目地址:https://github.com/alibaba/MNNKit

目前,MNNKit 已经有人脸检测、手势识别、人像分割等,后续可能有更多 API 接入。

MNNKit:基于 MNN 的深度学习工具

MNN 是基于阿里的 MNN 端上推理引擎所开发的应用解决方案,主要面向安卓和 iOS 系统,帮助将 AI 能力应用在实际的移动端场景中。

MNNKit 架构

MNNKit 提供了一个 SDK 供开发者使用,以下为 SDK 的架构。

从图中可以看出,MNNKit 可以分为三层结构,从底向上分别为:

  1. MNN 引擎层,是 MNN (https://github.com/alibaba/MNN) 库在 Android/iOS 上编译好的包的二进制 Release 版本,提供端侧运行环境。

  2. Core 基础层,这主要抽象和封装与 MNN c++接口调用粒度基本一致的上层 API,iOS 通过 OC 接口提供,Android 通过 Java 接口提供(TODO)。这一层同时也为上层 SDK 提供一些公共服务类或结构定义。

  3. 业务 Kit 层,包括了人脸检测、手势识别封装的 API。据项目介绍,之后的业务 Kit 层会不断扩展。

内部原理

因为 MNNKit 主要提供阿里的端侧 AI 能力,因此封装了很多相关应用的 API。调用如下:

例如,当用户需要调用 API 的时候,需要首先创建实例,然后将图像、视频或其他结构化数据输入,进行 AI 模型的推理工作。工作完成后释放实例即可。

目前 MNNKit 已支持的 API 有:

  • 人脸检测 API 

  • 手势识别 API 

  • 人像分割 API 

以人脸检测为例,检测内容主要分为三大板块:

  • 人脸基本信息

  • 人脸位置的矩形坐标

  • 106 个关键点坐标(区分被遮挡的和未被遮挡的)

  • 置信度

106 个关键点的分布(来自官方开源 github)

人脸各区域关键点分布对应表

  • 欧拉角度

摇头(Yaw)、点头(Pitch)、歪头(Roll)三个角度值

  • 人脸动作(包含 5 个人脸的动作)

  •  眨眼

  •  张嘴

  •  摇头

  •  点头

  •  扬眉

处理过程

我们知道了人脸检测需要检测的数据后,接下来看看处理过程:

如图所示,该流程是 iOS 和安卓设备后置摄像头正向拍摄后,在移动端上的整体处理过程。

首先,系统从摄像头获取数据,作为 SDK 的输入。接着,SDK 会进行如下操作:

  1. 在 MNN 引擎执行推理之前,对原始的输入进行预处理,保证输入数据中的人脸为正向

  2. 使用 AI 模型进行推理;

  3. 推理后,产生基于输入图像(预处理之后的)坐标系的关键点结果;。

  4. 把关键点坐标变换到和屏幕渲染坐标系相同的方向,方便渲染。

程应用中,最后的结果关键点要显示在用户屏幕上,前端会使用一个用来渲染的"画布"。画布的坐标系被称为渲染坐标系,

在 SDK 检测的最后一步,我们将关键点变换到和渲染坐标系相同的方向,然后等比例映射关键点坐标到渲染坐标系的坐标即可。映射后可以直接渲染到画布上

代码示例

MNNKit 提供了包括人脸检测、手势识别等方面的示例代码。接下来我们以人脸检测为例,看看怎样可以在安卓或 iOS 中调用 API 进行推理工作。

安卓代码

前文提到,调用 API 需要首先创建一个实例,以下为异步创建 FaceDetector 实例,主线程中回调的代码。

public static void createInstanceAsync (Context context, FaceDetectorCreateConfig createConfig, InstanceCreatedListener<FaceDetector> listener)

在这里,人脸检测 API 会进行检测和跟踪两个动作。检测会遭到人脸位置和关键点,而跟踪是在人脸移动时重新定位关键点的位置。

在视频模式下,系统默认每 20 帧检测一次,其余帧只跟踪。图片模式下则每一次调用都检测。

创建实例后,可以将数据输入模型进行推理。MNNKit 现在已支持多种数据格式输入。在视频流检测场景中,我们可以使用摄像头的回调数据作为接口的输入。输入数据的代码如下:

public synchronized FaceDetectionReport[] inference(byte[] data, int width, int height, MNNCVImageFormat format, long detectConfig, int inAngle, int outAngle,  MNNFlipType outputFlip)

使用输入数据为 bitmap 的推理代码如下:

public synchronized FaceDetectionReport[] inference(Bitmap bitmap, long detectConfig, int inAngle, int outAngle, MNNFlipType outputFlip)

当 FaceDetector 实例用完之后,我们需要手动释放实例,否则会产生 native 的内存泄露。

public synchronized void release()

iOS 代码

和安卓代码类似,首先需要创建人脸检测实例:

+ (void)createInstanceAsync:(MNNFaceDetectorCreateConfig*)config Callback:(void(^)(NSError *error, MNNFaceDetector *faceDetector))block CallbackQueue:(dispatch_queue_t)callbackQueue;

默认主线程回调:

+ (void)createInstanceAsync:(MNNFaceDetectorCreateConfig*)config Callback:(void(^)(NSError *error, MNNFaceDetector *faceDetector))block;

PixelBuffer 输入进行推理的代码如下:

- (NSArray<MNNFaceDetectionReport *> *)inference:(CVPixelBufferRef)pixelBuffer Config:(MNNFaceDetectConfig)detectConfig Angle:(float)inAngle OutAngle:(float)outAngle FlipType:(MNNFlipType)flipType error:(NSError *__autoreleasing *)error;

UIImage 输入进行推理的代码如下:

- (NSArray<MNNFaceDetectionReport *> *)inferenceImage:(UIImage*)image Config:(MNNFaceDetectConfig)detectConfig Angle:(float)inAngle OutAngle:(float)outAngle FlipType:(MNNFlipType)flipType error:(NSError *__autoreleasing *)error;

使用通用 buffer 数组输入的代码如下:

- (NSArray<MNNFaceDetectionReport *> *)inference:(unsigned char*)data Width:(float)w Height:(float)h Format:(MNNCVImageFormat)format Config:(MNNFaceDetectConfig)detectConfig Angle:(float)inAngle OutAngle:(float)outAngle FlipType:(MNNFlipType)flipType error:(NSError *__autoreleasing *)error;

实例生命周期结束后,会自动触发相关内存的释放,无需调用方手动释放。

据悉,MNNKit 是 MNN 团队在阿里系应用大规模业务实践后的成熟解决方案,历经双十一等项目考验,在不依赖于后端的情况下进行高性能推理,使用起来稳定方便。

前段时间,来自SAP(全球第一大商业软件公司)的梁劲(Jim Liang)公开了自己所写的一份 520 页的学习教程(英文版),详细、明了地介绍了机器学习中的相关概念、数学知识和各种经典算法。编者看到后,也迫不及待的推广给更多的读者。完整的 PDF 请从文后在下面的公众号回复“机器学习”获取。

其他机器学习干货,请后台回复“机器学习”获取。

极 高 的 学 习 曲 线

  • 首当其冲就是数学,涉及统计学、微积分、概率、线性代数等,大家虽然都学过高等数学,但如果你还记得里面的细节,算你牛。更可能的情况是,多数人都对高等数学忘记了,面对各种算法里的大量公式,感到厌恶,甚至恐惧。

  • 其次因为机器学习本身是一个综合性学科,而且是一个快速发展的学科,知识点散乱,缺乏系统性。

  • 市面上的机器学习/深度学习书籍、文章、教程,遍地开花,但能以清晰的方式表达、循序渐进地讲解的教程,其实不多,大量的教程没有考虑到学习者的基础,使得初学者感到挫败和困惑。

图 解 机 器 学 习

正是对机器学习的过程中的痛苦有切身体会,我希望能做一份教程,以浅显易懂的方式去讲解它,降低大家的学习门槛。我为此花费了数月时间,经常做到深夜,把自己的学习笔记整理成了这份教程。

从结构来看,全部教程包含两部分:

Part 1 介绍了基本概念,包括:

  • 机器学习的流程

  • 数据处理

  • 建模

  • 评估指标(如 MSE、ROC 曲线)

  • 模型部署

  • 过度拟合

  • 正则化等

在第一部分,作者先介绍了如今应用普遍的机器学习:从自动驾驶、语音助手到机器人。其中有些思想,也是众多读者们了解过的,例如:为何机器学习在这个时候会火(大数据、计算力、更好的算法);机器学习、人工智能、深度学习三者的关系等。

除了这些基础概念,这份教程也对机器学习模型的开发流程做了图像化展示(如下图),即使对此不太了解的读者,也能通过这种流程展示有所学习。

建立机器学习解决方案的步骤

在 Part1 的其他小节,作者以类似的图像展示,对数据、建模、模型部署等内容做了详细介绍,这里就不一一列举,可以从原报告查看。

在 Part2,作者介绍了 常用的算法,包括:

  • 线性回归

  • 逻辑回归

  • 神经网络

  • SVM

  • Knn

  • K-Means

  • 决策树

  • 随机森林

  • AdaBoost

  • 朴素贝叶斯

  • 梯度下降

  • 主成分分析

这部分包含了大量的数学公式,但作者尽力注解了其中的每个公式,从而充分、清晰地表达了众多数学概念。

例如在「神经网络」部分,作者整理了 59 页的笔记(从 311 页到 369 页)。作者从人脑中的神经元架构说起,介绍了人工神经网络(ANN)、人工神经元工作的原理。这份笔记非常注重图像化的概念解释,理解起来非常直观。

例如,下图中的概念解释很形象地展现了生物神经元和人工神经元工作方式的相似性。

生物神经元的树突输入-轴突输出模式和人工神经元的输入输出模式对比。

过拟合的解释。

人工神经元的基础结构。

在涉及到数学公式时,作者会在旁边有详细的注解,如下图所示:

对于并列的可选项(如激活函数、常用神经网络架构等),也会有全面的列表:

常用的激活函数。

然后会有每个激活函数的单独介绍:

Sigmoid 激活函数。

用神经网络分类手写数字的前向传播示例(softmax 激活函数)。

对于神经网络中较为复杂的概念(如求导、反向传播),几张图就能解释清楚:

关于神经网络的完整训练过程,作者用简略流程图+计算细节展开的方式呈现:

反向传播算法完整流程。

前向传播部分的计算细节。

就像前面提到的,这部分除了「神经网络」的介绍,还包括随机森林、梯度下降等概念的介绍,读者们可查看原教程。

520页机器学习干货笔记,请在下面公众号后台回复“机器学习”获取。

总结

看完这份教程之后,小编觉得这是一份包罗万象的学习笔记,既适合非专业人士了解有关机器学习的基础概念,又适合有专业背景的学生进一步学习。

写教程是为了自己持续学习,分享教程是为了帮助更多人学习。就像作者所说,「Learning by doing/teaching, 写这个教程主要是强迫自己持续学习,另外,也想分享给他人,希望能帮助到更多想学习 Machine Learning 的人,降低大家的学习痛苦。

END

好文点个在看吧!

PaddlePaddle与TensorFlow的详细对比分析 本文主要从框架概览、系统架构、编程模型、分布式架构、框架对比这五大方面比较TensorFlow和PaddlePaddle框架。作为国际两大搜索引擎研发的深度学习框架,使用侧重点不同,却同样提供了优雅简洁的设计架构,并且还在不断发展。 对于PaddlePaddle来说,它的易用性和本土性、快速业务集成性,对国内以速度致胜的互联网公司是一个非常有利的武器;而TensorFlow的灵活性和相对... 阅读详情

相关推荐

【MNN学习三】MNN可使用工具说明

参考链接:MNN工具说明

My Blogs 1604

酷!阿里开源MnnLlmApp,支持各类LLM在手机上离线运行!

酷,阿里开源了基于其MNN-LLM框架的Android手机应用:MnnLlmApp,支持各类LLM在手机上离线运行支持多种多模态任务,文本生成文本、图像生成文本、音频转文本以及文本生成图像在安卓平台上,MNN-LLM的CPU性能优秀,预填充速度较llama.cpp提高了8.6倍,较fastllm提升了20.5倍,解码速度分别快了2.3倍、8.9倍。

m0_59163425的博客 7631

【MNN学习五】在Android上部署MobileNetSSD之一

目录 一. 烧写Android系统 二. 安装Android-NDK 三. 连接Android设备和Linux主机 四. 部署MobileNetSSD到Android (5. Compile and execute demo) 一. 烧写Android系统 下载固件:sd_ROC-RK3399-PC_Android8.1.0_DEFAULT_181016.img.xz ...

My Blogs 2495

Android 和IOS 混合开发,一套代码两处运行-----Flutter

转载自:https://www.jianshu.com/p/8baa8ed2414d什么是Flutter2018年2月27日,在2018世界移动大会上,Google发布了Flutter的第一个Beta版本。Flutter是Google用以帮助开发者在Ios和Android两个平台开发高质量原生应用的全新移动UI框架,点击查看Flutter介绍视频。其实我第一次听说Flutter是在收到谷歌开发者公...

wolfking0608的博客 2万+

简单易用的神经网络模型可视化工具--netron

       netron是一个神经网络模型可视化工具,下面对它做一下简单的介绍。 一、使用方式 windows系统下载.exe应用程序,Linux和macOS系统下载对应应的用程序即可,点击这里去下载。打开应用程序,直接添加模型即可查看网络结构。 直接使用pip install netron安装netron包,然后使用以下程序去调用。 import n...

耐心的小黑的博客 2920

用PaddlePaddle和Tensorflow实现常用的深度学习算法

用PaddlePaddle和Tensorflow实现常用的深度学习算法。

windows 编译 MNN 阿里inference框架

环境: windows7 64 位,cmake 3.15.3, vs 2015, ninja(码云) MNN 版本(最新的我没有编译成功,用了 0.2.1.0) 第一步:因为我没有ninja,所以先编译,(需要提前安装过python,加入环境变量),参照了这篇文章,简单说一下 1、打开powershell, cd 到 ninja 根目录 2、输入 "C:\Program F...

wh1319501722的博客 2772

ERGM指数随机图模型全解析:从基础原理到R语言实操

从社交网络中的互惠、传递性和同质性等基本现象切入,介绍网络数据与传统回归分析的本质差异——边与边之间的依赖关系。指数随机图模型(ERGM)正是为刻画这种依赖结构而设计的统计框架,它通过指数族分布将网络结构效应显式建模,结合MCMC方法完成参数估计。ERGM在组织协作、传播扩散、生物生态等领域的应用日益广泛,其扩展模型TERGM、GERGM和多层ERGM进一步支持时序、权重与多重关系网络。本文系统梳理ERGM的理论基础、核心统计量、扩展模型选型及R语言实操要点,帮助研究者理解网络生成机制并完成收敛性诊断与结果

weixin_29050271的博客 361

paddlepaddle 对比tensorflow2.0

tensorflow为Google主推的深度学习框架,在更新至2.0版本后,tensorflow内部中集合了keras,变得更加简单易用。 而 paddlepaddle为百度推出的深度学习框架,为了推广paddlepaddle,百度提供了免费的算力(Tesla V100,这个还是蛮给力的,google的colab虽然免费提供了Tesla T4,之前是Tesla K80,但还是差点意思,难得白嫖百度,嘻嘻)及相关的项目和比赛。在一些特定的领域,为工业界提供了相对成熟的方案,如PaddleOCR、Paddle

qq_37286849的博客 1429

【电子电力】IEEE33节点系统参数及拓扑图visio

IEEE33节点系统是一种广泛用于电力系统分析和研究的标准配电网络。该系统具有典型的辐射结构,适用于负载流分析、分布式发电优化及电力系统的可靠性评估。本报告主要基于IEEE33节点系统的拓扑图,讨论其在电子电力系统中的应用。通过MATLAB仿真分析了节点的电压分布、功率损耗等关键参数,并验证了系统的稳定性和有效性。

2401_84610415的博客 1万+

深度学习-Tensorflow2与PaddlePaddle入门写法对比(一):小白入门

引言 文本从PaddlePadle和Tensorflow2的入门项目Mnist识别开始,对比一下两者在写法的不同 安装 安装方面都是基于pip或者conda的安装,没有可比性! PaddlePaddle的安装直接参考PaddlePaddle安装 Tensorflow的安装直接在命令行输入即可 pip install tensorflow 相比之下,两者的安装都比较轻便,只是PaddlePaddle做了一个比较人性化的可选页面而已 数据集加载 两者对于Mnist数据集的加载都有简介的接口,没什么可比性

Huoyo 633

二维紧束缚模型求解程序

假如我们已经推导出了二维紧束缚模型的哈密顿量矩阵H(kx,ky)的解析形式,那么在整个布里渊区对角化矩阵就可以得到能带。从技术上说这里面有以下几个问题。 1. 缺少实空间和倒空间的坐标,使得能带难以和布里渊区高对称点对应。 2. 最容易处理的布里渊区是矩形,对于其他多边形,如果全布里渊区mesh画费米面有一定技术困难。 因此一个好的处理框架是首先给出实空间原子坐标,给出实空间哈密顿量,...

wwxy1995的博客 4083

阿里开源MNNKit:基于MNN的移动端深度学习SDK,支持安卓和iOS

2020-01-23 09:07:03 机器之心报道 参与:一鸣、Jamin 近来,有越来越多的深度学习框架开始面向移动端进行发展。近日,阿里也基于其 MNN 推理引擎开源了最新的 MNNKit 深度学习 SDK,安卓和 iOS 开发者都可以方便地进行调用。 近年来,很多企业都在研发面向移动端的深度学习框架。在国内有 小米的 Mace、腾讯的 FeatherCNN(腾讯 AI)和 nc...

喜欢打酱油的老鸟 1377

华为OD机试真题2026双机位C卷 Java&Go 实现【用户入网定期复评】

用户开立支付账户,在开户完成后立即对用户进行一次风险模型评级,输出一个评分风险,评分范围1-100,等区间的分为5个等级,1-19为等级1,20-39为等级2,40-59为等级3,60-79为等级4,80-100为等级5,系统每天会任务对全量入网用户进行计算复评时间,输出评分给出新的风险等级。复评规则如下:

MISAYAONE的博客 148

手把手教你学Simulink——基于Simulink的全双工无线通信仿真建模示例

目录手把手教你学Simulink——基于Simulink的全双工无线通信仿真建模示例一、背景介绍二、所需工具和环境三、步骤详解步骤1:创建Simulink模型步骤2:设计输入信号步骤3:添加调制模块步骤4:添加自干扰消除模块步骤5:添加AWGN信道步骤6:添加接收端处理步骤7:添加解调模块步骤8:计算误码率(BER)步骤9:添加显示模块步骤10:设置仿真参数步骤11:运行仿真并分析结果四、总结 全双工(Full-Duplex)无线通信技术允许在同一频段上同时进行数据的发送和接收,这与传统的半双工(Half-

MHD0815的博客 182

PaddlePaddle与TensorFlow的对比分析

51CTO技术栈“本文主要从框架概览、系统架构、编程模型、分布式架构、框架对比这五大方面比较 TensorFlow 和 PaddlePaddle 框架。作为国际两大搜索引擎研发的深度学习框架,使用侧重点不同,却同样提供了优雅简洁的设计架构,并且还在不断发展。对于 PaddlePaddle 来说,它的易用性和本土性、快速业务集成性,对国内以速度致胜的互联网公司是一个非常有利的武器;而 TensorF...

宇翔XGT的博客 6917

PX4从放弃到精通(二十七):固定翼姿态控制

固件版本 PX4 1.13.2欢迎交流学习,可加左侧名片。

超维空间科技的博客 6888

阿里巴巴推断框架MNN在iOS上的使用小结

MNN介绍 端侧智能现在已经不是新鲜话题,不管是从数据安全出发,还是从实时性能考虑,端侧深度学习算法推理都有其不可替代的优势。之前已经有一段时间的端侧推理框架热潮,google、Facebook、百度、腾讯、小米以及一些名气不大但是实力很强的小公司,都开源了自家的端侧推理框架,阿里MNN在18年年底开源,有后来居上的趋势和决心,不仅工程结构的完备性和规范性很好,开发团队和应用场景也有一定的优势。 ...

gaussrieman123的博客 6102

用Python绘制DCA曲线详解及示例代码

在这篇文章中,我们将详细解释如何使用Python绘制DCA曲线,并提供示例代码。通过使用上述的示例代码和解释,你可以自己尝试不同的投资金额、期数和增长率来绘制自定义的DCA曲线。通过运行上述代码,我们将得到一个绘制了DCA曲线的图表。该图表将显示出DCA投资策略在给定投资金额、投资期数和增长率下的投资价值随时间的变化情况。在上述代码中,我们使用一个循环来计算每个投资期的DCA曲线值。现在,我们可以使用上述函数来计算DCA曲线的值,并将其绘制成图表。最后,我们返回计算得到的DCA曲线值列表。

TechPr的博客 1408

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

MNN通用端侧深度学习预测框架介绍

最近端侧的AI模型应用越来越广泛,在端侧的模型应用会面对很多的问题,比如模型适配性和机型适配性,还有计算性能方面的问题。是否有某种框架可以解决这些端侧AI模型遇到的问题,Google、苹果等公司都有相关的工作。今天介绍下MNN框架,由阿里巴巴开源的一款专注于端侧深度学习模型预测框架。 项目开源地址:https://github.com/alibaba/MNN MNN核心解决的问题 首先看下MNN的核心功能架构图: MNN主要解决了三方面的问题: Model compatibility.

Garvin的专栏 2110

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Win10基于docker安装TensorFlow(/PaddlePaddle)

Win10基于docker安装TensorFlow(/PaddlePaddle)

m0_37435073的博客 3554

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MNN支持NPU啦!!!

作者|MNN团队 出品|阿里巴巴新零售淘系技术部 AI 芯片时代 2016 - 2017年,AlphaGo 先后战胜李世石和柯洁,随着深度学习进入公众视野的,还有 Google 的 TPU 。 之后,Qualcomm、Apple 等芯片厂商也相继进入了这个战场。一时间,APU、TPU、NPU 成了科技媒体的宠儿,各大厂商在发布会上的跑分比武应接不暇。 而 XPU 们也确实凭...

淘系技术 3137

【TensorFlow学习三】基于TensorFlow训练测试MobileNet-SSD

一.Object Detection API的安装 参考链接:【TensorFlow学习二】Object Detection API的安装与使用 二. 准备工作 1. 在object_detection/目录下创建目录ssd_model mkdir object_detection/ssd_model 把下载好的数据集VOCdevkit解压进去,数据集路径为 ./object_d...

My Blogs 2786

阿里MNN移动端部署框架,将FreeImage更换为opencv的实现

一、动机 上周阿里最新开源的MNN移动端部署框架,为了尽可能压缩依赖库的大小,读图及图像处理操作全部基于FreeImage实现。但是, (1)由于我们项目中大量依赖opencv,再添加FreeImage库显得有些冗余。 (2)目前来看,opencv的应用范围远远大于FreeImage,文档也更为丰富。 (3)我们项目在安卓端需要大量使用交叉编译方式,JNI部分需要引入FreeImage链接...

abcd740181246的博客 4320
上一篇: 程序员喜欢的 5 款最佳最牛代码比较工具
下一篇: 全栈开发已死?
DevolperFront
博客等级 码龄8年 464粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值