自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 资源 (2)
  • 收藏
  • 关注

原创 数据挖掘心电图分类(四)之建模与调参

今天,我们就在这里进行建模以及调参首先一样的,我们先导入库进来import pandas as pdimport numpy as npfrom sklearn.metrics import f1_scoreimport osimport seaborn as snsimport matplotlib.pyplot as pltimport warningswarnings.filterwarnings("ignore")因为数据比较大,所以占用内存比较多,因此,我们就调整一下数据

2021-03-29 21:46:32 1043 2

原创 数据挖掘心电图分类(五)之模型的融合

模型的融合可以通过简单加权平均,来实现将结果直接融合直接融合import numpy as npimport pandas as pdfrom sklearn import metrics## 生成一些简单的样本数据,test_prei 代表第i个模型的预测值test_pre1 = [1.2, 3.2, 2.1, 6.2]test_pre2 = [0.9, 3.1, 2.0, 5.9]test_pre3 = [1.1, 2.9, 2.2, 6.0]# y_test_true 代表第模型

2021-03-28 22:32:31 939 1

原创 数据挖掘心电图分类(三)之特征提取

在读取完数据,进行了数据分析之后,我们就要对样本进行特征提取来建模了。所谓的特征就是希望可以通过特征来得到、分辨出这一个样本是由什么组成的。import pandas as pdimport numpy as npimport tsfresh as tsffrom tsfresh import extract_features, select_featuresfrom tsfresh.utilities.dataframe_functions import impute将必要的库导入进来之后读

2021-03-21 21:19:24 4455 2

原创 数据挖掘心电图分类(二)之分析数据

EDAEDA,也叫作数据探索性分析。主要是为了做前期工作,在数据分析之前了解数据,熟悉数据。通过数据的shape,describe相关统计量,数据的head、tail这些部分数据长什么样子,分布情况,info数据类型,有没有缺失、重复、异常等情况让自己对数据有个基本的认知。 然后再看是否需要抽样,平衡数据,降维,特征离散化,提取哪一些特征,处理异常、缺失的数据。前面我们说,jupyter notebook是数据分析之中很好用的一个工具,所以我们这里也使用jupyter book来分析数据。import

2021-03-19 17:14:24 1205

原创 数据挖掘心电图分类(一)之Jupyter环境搭建

最近在做一个数据挖掘类的比赛,关于心电图分类的。因为是数据挖掘的比赛,又刚好我最近工作需要用到Jupyter notebook,那就先来熟悉熟悉Jupyter notebook这个工具的使用。Jupyter notebook的使用Jupyter notebook它虽然没有像Pycharm那样的强大调试功能,但是它有逐行调试、逐单元格运行的功能,十分方便,也可以展示代码的逻辑,使之看起来更加整洁、清晰,拥有强大的交互能力。在编写代码的同时还可以使用Markdown来作笔记,写下你的结论,注释等。当然,你

2021-03-15 23:17:12 1147

原创 SVD究竟是个什么

SVD全称叫做singular value ecomposition,中文也叫做奇异值分解,我们在线性代数的学习中经常遇到。简而言之就是将矩阵分解为奇异向量以及奇异值。特征分解通过奇异值分解,我们会得到与特征分解相同类型的信息。那么什么是特征分解?特征分解是最常用的矩阵分解之一,我们可以通过分解矩阵能够得到一组特征向量以及特征值。我们知道,向量是有方向的,所以我们可以理解为,特征向量为矩阵的主要方向,而特征值则为这个方向上的长度。注意的是,这个矩阵需要是方阵,方阵的意思就是矩阵的行数与列数一致。以

2021-02-14 10:21:51 4664

原创 一起了解Transformer

前言Transformer是GooGle在2017年提出的,一开始主要应用于NLP领域,比如翻译,文本分类,比如BERT就有用到。随着技术不断发展,这门技术也逐渐应用于计算机视觉的领域了。可是,CNN卷积神经网络不是一直主流技术吗?什么时候transformer也来凑热闹了?CNN的局限性我们平常在计算机视觉中所提及的卷积神经网络,大部分是指2维卷积,其实在NLP处理中也会用到1维卷积,用来提取信息。此时,就是以时间序列地形式来表示了。卷积神经网络仅关注局部的信息,而忽略了全局的感知和理解,在信

2021-01-23 10:44:12 1216 1

原创 使用GO作并发编程

12.并发编程12.1 并发与并行Erlang 之父 Joe Armstrong曾经以下图解释并发与并行。并发在图中的解释是两队人排队接咖啡,两队切换。并行是两个咖啡机,两队人同时接咖啡。“Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.” — Rob Pike并发使并行变得容易,并发提供了一种构造解决方案的方法,并行一般伴随这多

2020-12-26 20:16:01 575

原创 初探GO中的反射机制

10.反射机制10.1 反射是什么反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。Go 语言提供了一种机制在运行时更新变量和检查它们的值、调用它们的方法,但是在编译时并不知道这些变量的具体类型,这称为反射机制。10.2 反射的作用1.在编写不定传参类型函数的时候,或传入类型过多时典型应用是对象关系映射type User struct {gorm.ModelName stringAge sql.N

2020-12-24 21:59:33 508

原创 GO语言中的异常处理

9.异常处理9.1 errorGo语言内置了一个简单的错误接口作为一种错误处理机制,接口定义如下:type error interface {Error() string}它包含一个 Error() 方法,返回值为stringGo的error构造有两种方式,分别是第一种:errors.New()err := errors.New(“This is an error”)if err != nil {fmt.Print(err)}第二种:fmt.Errorf()err := fmt.

2020-12-23 23:39:29 601

原创 GO中的包管理

我们知道,程序是可以通过封装来提高代码的复用性。那么GO就是可以通过包管理的机制来管理代码。Go Modules于Go语言1.11版本时引入,在1.12版本正式支持,是由Go语言官方提供的包管理解决方案。Modules是相关Go包的集合,是源代码交换和版本控制的单元。go命令直接支持使用Modules,包括记录和解析对其他模块的依赖性设置环境变量首先需要设置环境变量,可以使用go env命令查看当前配置。$ go envGO111MODULE="auto"GOPROXY="https://p

2020-12-22 21:27:57 591

原创 GO中的结构体,方法以及接口

前言因为GO中吗,没有类的概念,也不支持继承这种操作,但是GO具有结构体,并且结构体的组合方式比类更具有扩展性以及灵活性。结构体一般定义如下:type identifier struct { field1 type1 field2 type2 ...}例如我们想声明一个学生的结构体类型:type Student struct { Name string Age int}结构体中字段的类型可以是任何类型,包括函数类型,接口类型,甚至结构体类型本身。例如我们声明一个链表中的节

2020-12-21 22:09:39 992

原创 GO语言中的函数

函数定义GO语言中的函数定义如下:func functionName([parameter list]) [returnTypes]{ //body}functionName:代表函数名。parameter list:代表参数列表,函数的参数是可选的,可以包含参数也可以不包含参数。returnTypes:返回值类型,返回值是可选的,可以有返回值,也可以没有返回值。body:用于写函数的具体逻辑传递GO语言中存在值与引用,所以在使用函数时也需要明白两者的传递方式。值传递是

2020-12-20 22:55:02 555

原创 今天聊聊GO中的数组以及切片

数组数组的定义数组是具有相同类型且长度固定的一组连续数据。在go语言中我们可以使用如下几种方式来定义数组。//方式一var arr1 = [5]int{}//方式二var arr2 = [5]int{1,2,3,4,5}//方式三var arr3 = [5]int{3:10}//arr1 [0 0 0 0 0]//arr2 [1 2 3 4 5]//arr3 [0 0 0 10 0]方法一在声明时没有为其指定初值,所以数组内的值被初始化为类型的零值。方法二使用显示的方式为数组

2020-12-19 15:06:59 522 2

原创 说一说GO语言中的字典与字符串

今天我们来说一说GO语言中的字典与字符串字典map是一种较为特殊的数据结构,在任何一种编程语言中都可以看见他的身影,它是一种键值对结构,通过给定的key可以快速获得对应的value。字典的定义var m1 map[string]intm2 := make(map[int]interface{}, 100)m3 := map[string]string{ "name": "james", "age": "35",}在定义字典时不需要为其指定容量,因为map是可以动态增长的,但是在可以预

2020-12-18 22:16:48 664 1

原创 谈一谈GO语言中的运算符、控制语句

和其他程序语言一样,GO语言中,也有它自己的运算符、控制(条件,循环)语句算术运算符关系运算符位运算符赋值运算符其他运算符运算符之间的优先级关系for循环for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环:for init; condition; post { } //第一种形式for condition { } //第二种形式,同whilefor {} //第三种形式init: 一般为赋值表达式,给控制变量赋初值;condition

2020-12-17 21:49:54 494

原创 聊一聊GO中的变量、常量以及枚举

变量首先我们来说一说变量,在计算机语言中,变量就是用来存储值的一个载体。其中变量名可以使用字母、数字、下划线组成,并且第一个字符不能是数字。注意的是,GO语言中如果只声明,定义而不使用这个变量,那么编译就会报错。在GO语言中声明变量的一般形式:var identifier typevar identifier1, identifier2 type//类型相同多个变量, 非全局变量var vname1, vname2, vname3 typevname1, vname2, vname3 = v

2020-12-16 23:14:33 578

原创 说一说GO语言中的数据类型

在这里,我们介绍一下,在go语言中的数据类型、关键字以及标识符。数据类型基本数据类型布尔型:只可以是常量 true 或者 false。如,var b bool = true数字类型:数字类型分为整型以及浮点型。其中:整数类型(int,int8,int16,int32,int64,uint,uint8,uint16,uint32,uint64,byte,rune(和int32差不多,处理有中文的字符)注意:int8代表占一个字节的类型,int16代表占两个字节的类型,以此类推,前面有u

2020-12-15 23:06:14 550

原创 初探go语言,环境配置填坑记

小编原以为配置环境很简单,很快的,没想到还是过于年轻,以为自己有开发的经验就可以有恃无恐了。结果配个环境居然花了我一个晚上!并且当中我找了许多许多的教程。唉,真是一把辛酸泪啊。那么接下来就介绍一下配置的过程。GO的下载1.首先我们需要下载go语言,可以根据下载地址进行下载,并安装:https://studygolang.com/dl2.添加环境变量,当我们安装完成后,需要在系统中配置环境变量,让系统可以找到go所在的位置。其中,GOROOT:为go语言环境地址; GOPATH:为go的工作目录地址

2020-12-14 23:13:51 765

原创 浅尝YOLOv4论文

摘要对于目标检测来说,都有one-stage和two-stage的方法,而yolo系列的算法都是one-stage的。one-stage速度快但是精确度却会稍微低一些。而yolov4就做到了鱼与熊掌都可兼得的效果,并且还可以降低硬件的要求。yolov4的主要贡献:1.设计了一个高精度、高实时性的网络,并且该网络只需要一个GPU就可以快速训练;2. 验证了Bag-of-Freebies和Bag-of-Specials对目标检测的影响很大,并将之使用到yolov4的网络中;yolov4的网络结构

2020-10-21 18:01:46 2021

原创 场景文本检测的方法(CTPN+EAST+DBNet)

前言文字识别分为两个具体步骤:一个是文字区域的检测,二是对文字内容进行识别。两者缺一不可,尤其是文字检测部分,是识别的前提。如果连包含文字的区域都找不到,那后面也就无法进行文字识别了。因为文本存在多种分布,多种方向、排版多样性的特点,所以检测不是一件简单的任务,尤其是当文本是不规则的形状,检测起来就很具有挑战性了。1.传统的图像学处理:基本思想就是 : 得出文本信息所在位置的轮廓,中间还可能进行一些形态学的操作:先二值化图片可以自适应二值化如果有些噪声可以采用高斯滤波来简单过滤掉然后通过腐蚀

2020-10-21 18:00:50 6325

原创 OCR所涉及的技术

OCR所涉及的技术OCR也叫作光学字符识别,主要用到了CNN来提取特征以及RNN来对序列进行分析相关性,这两者后来就结合而成了CRNN。然后还用CTC(Connectionist temporal classification)作为损失函数来解决对齐问题。CNN简介卷积神经网络里有一个概念叫做感受野。感受野是用来表示网络内部不同神经元对图像的感受范围,也就是在CNN中表示原图的区域大小,那是因为CNN关注局部像素的相关性比较强,而较远像素的相关性则比较弱,所以神经元的感受野越大,说明它能感受到全图

2020-10-21 18:00:24 1925 1

原创 你说的那个卷积神经网络,是个什么?

前言无论是机器学习还是深度学习,都是为了解决某个问题,比如为了解决分类的问题。拿猫狗分类当作例子,那么就需要知道猫,狗究竟是怎么表达的,要去了解它们的毛发,体型,长相等等。以上说的就是我们到底要选取它们的哪一些特征。当我们选取了合适的特征之后,就可以让机器学习,深度学习这一些算法去帮我们逐步去训练,去学习它们的特征。以深度学习为例:训练完毕后,我们就可以得到在神经网络中各个层的参数。卷积神经网络的组成卷积神经网络概括:卷积的主要作用是提取特征,并且在提取特征的同时能够使网络加深。因为卷积的过程

2020-10-21 18:00:10 653

原创 浅尝YOLOv3论文

关于YOLOYOLO的意思是 you only look once,比起想RCNN,FAST RCNN这些two stage的方法,YOLO仅仅需要扫描一遍图像,而不需要另外再寻找ROI,感兴趣的区域。YOLOv3是2018年发明的算法,并且所发表的论文也较为简短。以下是YOLOv3的网络结构图:上图三个蓝色方框内表示Yolov3的三个基本组件:(1)CBL:Yolov3网络结构中的最小组件,由Conv+Bn+Leaky_relu激活函数三者组成。(2)Res unit:借鉴Resnet网络中的残

2020-10-21 17:59:23 791

原创 RCNN家族的详解(RCNN,FAST RCNN, FASTER RCNN)

目标检测在目标检测中,一类是基于Region Proposal的R-CNN系算法(R-CNN,Fast R-CNN, Faster R-CNN),它们是two-stage的,需要先使用启发式方法(selective search)或者CNN网络(RPN)产生Region Proposal,然后再在Region Proposal上做分类与回归。而另一类是Yolo,SSD这类one-stage算法,其仅仅使用一个CNN网络直接预测不同目标的类别与位置。第一类方法是准确度高一些,但是速度慢,但是第二类算法是速

2020-10-21 17:59:01 876 1

原创 填坑,pytorch的安装!

前言因为最近又需要配置新的环境,所以这里就记录 一下所踩的坑吧。这里的基本步骤可以分解为:1.下载anaconda并创建一个虚拟环境,你也可以在base环境下直接安装,但是这个就需要你在环境变量中配置好cuda,cudnn了。2.安装pytorch,cudatools3.测试是否可以import以及使用gpu虽然看起来很简单,但是第一次安装的话可能还是会有很多坑要踩的。创建一个环境首先我们先安装个anaconda并配置好环境变量那些,确保安装的这个没有问题。比如可以测试是否正常打印出hell

2020-09-20 14:40:33 2217

原创 如何正确使用C++中的异常机制?

前言在程序运行的时候有时会遇到错误导致程序崩溃无法运行下去。比如申请过多的内存,进行除零的操作。因此最好以一种受控的方法来运行代码,这里就用到了异常处理机制。异常处理机制可以避免程序终止,而是可以返回一个异常的值来告诉开发人员是哪里发生了错误,以更好地定位错误。异常处理在C++中,当异常发生时,会将程序的控制权从这一部分传到另一部分上。引发异常使用处理程序捕捉异常使用try块程序是通过excetion handler作为异常处理程序来捕获异常,这个异常处理程序就要位于要处理问题的程序块中,

2020-09-16 23:08:59 723

原创 使用Opencv中的SVM分类器进行图像分类

SVM的原理处理过程获取数据首先当然是获取数据,遍历文件夹,来获取各个类别的图片,并计算个数。我们可以标记正样本为1,负样本为0,当然还可以有更多的类别。void getFiles(const std::string path, std::vector<std::string>& files){ intptr_t hFile = 0; struct _finddata_t fileinfo; std::string p; if ((hFile = _findfirst(

2020-08-29 16:35:27 5727 1

原创 tensorflow-gpu的安装以及测试

写在前面写这篇文章主要是为了整理一下之前配置环境埋下的坑,以及加深一下印象,为了以后当需要更改环境时,能够更快地配置好;或者当环境出问题的时候,更快地定位出问题。1.anaonda 配置tensorflow环境(2.x) conda创建一个虚拟环境 conda create -n py37 python=3.7 2.激活环境 `conda activate py37` 3.安装tensorflow-gpu版本,注意安装的时候要添加gpu,以及注意tensorflow与python版本,以及c

2020-08-22 21:37:03 2390

原创 自然语言处理之新闻分类(五)使用gensim训练词向量

gensim的介绍gensim中封装了包括了word2vec, doc2vec等模型,word2vec采用了CBOW(Continuous Bag-Of-Words,连续词袋模型)和Skip-Gram两种模型。gensim的参数设置gensim中的每个参数都会影响训练的速度和精度。1.sentences 第一个参数是预处理后的训练语料库。是可迭代列表,但是对于较大的语料库,可以考虑直接从磁盘/网络传输句子的迭代。2.sg=1是skip-gram算法,对低频词敏感;默认sg=0为CBOW算法。

2020-07-26 22:27:17 1101

原创 自然语言处理之新闻分类(四)利用FastText进行自然语言处理

介绍FastText是facebook开源用来学习词向量的文本分类框架,可以快速地在CPU上进行训练,性能十分强悍。用户只需要输入训练集以及测试集,并且增加时间限制,FastText就会自动学习并且在规定的时间内找到最佳的超参数。这一些超参数包括学习率,模型的维度,训练次数。模型架构FastText的架构与CBOW的类似,它是通过输入的这个词,假设为w(t),所在上下文的2d个词,经过应隐藏层后,输出分类结果。也就是利用上下文来预测当前这个词。加入了N-gram后,FastText就可以考虑词与词之间

2020-07-25 21:07:12 771

原创 自然语言处理之新闻分类(三)

前言本篇重点讲使用机器学习算法来训练自然语言处理方面的项目,其实在第一篇的时候,我们也已经简单地介绍了一下有哪些方法可以用作自然语言处理上。比方说one-hot编码,BOW,N-gram,TF-IDF 方法,这一些都是属于机器学习领域的。one-hot编码One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。其实one-hot编码的思想很简单,就是将使用一个向量来表示一个单词,不同的单词,向量是不同的。比方说

2020-07-25 16:17:46 800

原创 自然语言处理之新闻分类(二)

引言接着上一篇所介绍的自然语言处理中的几种处理算法,以及模型的评价标准,在这一篇里就着重讲数据的读取。众所周知,在自然语言处理就是要预先读取数据,并分析里数据想表达的意思,所以数据的读取就尤为重要了,特别是在数据分析、挖掘那一块。使用不了jupyter botebook的读取不知道什么原因,无法使用jupyter notebook,所以只能在.py文件处理数据了。这里载入的数据集是文新闻文本类数据,分为两列,一列label,一列text,里面不同的中文字符映射为不同的数字。载入数据集import

2020-07-22 22:54:23 1149

原创 自然语言处理之新闻分类(一)

众所周知如今已经是2020年,AI也越来越贴近我们的生活,虽然离科幻片中的情况还有一段距离,但是已经有许多的AI算法类产品落地了。而其中AI有分为NLP(自然语言处理)、CV(计算机视觉处理)、语音处理,推荐系统等等,我们手机里的某音,某条,某浪,某乎都涵盖这一些技术。由于最近对自然语言处理,比较感兴趣。所以这里,我就先占坑了。自然语言处理自然语言处理可以理解为让计算机像人类一样,可以理解几个字符,一段字符串,一段文本中的内容,并挖掘其中的涵义,关系。除了传统的这些方面外,后续还有聊天机器人,机器翻

2020-07-20 22:37:23 1584

原创 对文本倾斜角度的校正

上一篇我们提到了车牌的位置定位,主要运用的知识点是查找边缘的轮廓,并且使用形态学的操作扩大、缩小轮廓然后提取出来。其实在OCR(光学字符识别)中也是会用到这样的方法,但是在OCR识别中,就可能会出现文字方向并不是出于完全的垂直或者完全的水平,而是倾斜一定的角度。比如像上图这样的图片,那么在进行识别的时候就可能会因为这个因素而造成结果上的误差。那么在这个时候就需要对文本倾斜的角度进行校正。矩阵校正法具体的方法可以通过矩阵进行旋转校正。在经过形态学操作后,我们会获得文本的大概外轮廓信息,然后我们就可以根

2020-06-29 23:16:53 3857 3

原创 汽车车牌框的位置识别

前言现在已经2020年,相信大家都经常看到进停车场前对汽车车牌的自动识别,方便、速度快、又精确。也不太清楚这个的原理到底是利用深度学习识别还是使用传统的图像处理、识别 。最近,我这里就写了一小段代码来实现对车牌框的位置进行定位。当然这里还有很多BUG了,比如说只识别了蓝色的车牌,黄色、绿色的就没有涉及到。至于识别车牌号码后续继续学习以及更新!这里先占坑了。预处理当摄像头拍摄的时候,不会自动定位到框的位置,而是整辆车的前身或者尾部都拍进去。那么这里就可以使用传统的图像处理进行定位了。具体步骤就是先去噪,

2020-06-27 16:21:28 960 3

原创 C++的STL-----容器

C++中的容器,顾名思义就是用来存放数据的,我们知道常用的数据结构有:栈、队列、数组、链表、集合、哈希等等。在这里头,又分为序列式容器以及关联式容器:序列式容器:序列中每个元素都有它固定的位置,强调值与值之间的排序关联式容器:类似二叉树,各个元素之间没有严格的物理上排序vectorvector是类似数组的数据结构,不同的是数组是固定大小,而vector可以动态扩增。我们可以通过创建vector对象,并指定其数据类型来存放数据。此外,每一个容器都有迭代器。通过迭代器可以遍历容器中的各个元素,使用

2020-05-21 18:13:00 519

原创 关于卷积的各种知识

在工科的领域中,特别是图像处理,信号处理,都会广泛使用到卷积这门技术。由卷积的定义,可以知道卷积就是两个函数经过反转、位移再进行相乘后的积分。空洞卷积空洞卷积顾名思义就是在卷积核中有部分元素是为零的,在其中插入空格来使得卷积核扩张。如图所示,33的红点经过卷积后输出的图像本来是33,但是因为空洞卷积的作用,卷积后的实际感受野大小却不同了,l=1 时感受野为 3×3,l=2 时为 7×7。...

2020-05-21 14:15:55 1353

原创 C++中与C语言不同的字符串

和c语音不同,C++多了一种数据类型,字符串类型(string)申明与定义我们可以这样进行字符串的申明和定义:string string1;string string1=″Hello world″;char string1[] = {‘a’,‘b’,‘c’,‘d’};但是使用第三种的时候,最后一定要加上’\0’,否则程序遍历字符串的时候会在不确定的地方进行终止。对字符串变量,我们也可以直接修改其中的某一个字符:string1[2]=‘a’;字符串的复制1.使用赋值号进行字符串的复制:str

2020-05-19 09:41:29 591

原创 在C++中的文件操作讲解

在C++中,文件分为文本文件(ASCII文件)和二进制文件。在文本文件中,每个字节存放一个ASCII码,也就是代表一个字符;而二进制文件则是把内存中的数据,按照它在内存中存储的样子存放到磁盘中。我们经常说的IO操作,大部分是指对文件的读写,也就是输入输出。输入就是从磁盘上的文件中读取内容到内存中。输出就是将内存中的数据内容输出或者说写入到磁盘的文件中。如果使用文本形式来存储数据,就会占用较多...

2020-03-24 10:53:01 529

socket代码实践.rar

socket代码实践,新手可以用来练手,而且可以用来了解socket操作的基本原理,代码里头还包括tcp模块的编写,帮助你们用来学习socket的网络通信

2020-02-14

嵌入式开发大秘籍

嵌入式开发教学以及指南,适合初学者,看懂之后绝对不再是小白了。

2018-02-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除