AI换脸实战教学(FaceSwap的使用)---------第二步Tools:处理输入数据集。

续上篇:http://www.cnblogs.com/techs-wenzhe/p/12936809.html

第一步中已经提取出了源视频的人脸照片以及对应人脸遮罩(landmark以及其他自选遮罩)

第二步:利用Tools处理提取号好的数据集,使其对模型的训练产生正向收益。

步骤1:剔除不需要的人脸

首先,我们需要剔除不需要的人脸(对齐识别错误以及非想要换脸的目标),做法是对生成的人脸进行聚类,排序。之后把不需要的类别的人脸删除掉。

这一步的目的是:我们都知道训练一个模型输入参数的正确性决定了算法的精确度,这一步就是为了去除所有错误的,不恰当的输入数据(图片)集。我们需要给模型一个清晰,明了的可学习对象。

PS:如果你的输入数据集(人脸图片很多)过大,请拆分成多个,需要分多次聚类排序。因为这些操作会在RAM中进行,例如:大约22k 张人脸对应大约8G RAM,30k对应11G(还要考虑其他内存使用,浏览器什么的==).  根据你电脑的RAM能力,选择分几次来处理即可。

GUI的设置如下:

PS: 实际根据有啥模型就用啥,笔者自己办公用的机器有Face-cnn,所以就选了用这个模型排序,选face的话得需要vggface2_resnet50_v2.zip模型在对应目录下才行。

 

1.1 Data模块: 

  • Input:输入包含上一步提取的人脸的文件夹。

  • Output:留空则基于输入的文件内直接排序。

1.2 Sort Settings模块:

  • Sort by:排序的方式,这里直接选face即可。意思是根据人脸相似度进行排序。当然还有其他排序方式(如基于landmark的Face-CNN,基于模糊度的Blur,基于聚类距离-识别错误对齐的distance,基于颜色的Color系列,基于大小的Size系列),实测还是face最有效。

  • Ref Threshold:Sort by内特殊几种算法(face-CNN, Hist)的调节,同样的值越高越严格。(推荐设置为-1即可,代表自动设置默认值) ,face-CNN 7.2就足够了,设置为4会有较高识别度。Hist 0.3就足够,设置为0.2 会有较高的识别度

1.3 Output模块:这里不需要设置任何东西(此部分已完全弃用,并将在未来的更新中删除。这里不需要设置任何东西。

 

选好模型,选好数据集(图片)所在文件夹,选好输出文件夹,点击sort等待结果即可。

 

可看到是提取图片中的landmark,根据直方图分类。

 一旦完成,你应该发现 99% 的面孔被分类在一起,所有垃圾也一起分类,现在只需浏览每个垃圾箱(子文件夹),删除那些您不想保留的面孔/文件夹,然后将您想要保留的任何面孔移回父文件夹。

至此,排序完毕,接下来要清理对齐-alignments文件

 

步骤2:清理对齐文件

现在我们已经删除了所有不需要的面孔,只剩下一组了,接下来要做的是清理对齐文件(对齐文件中包含了每张图片对应的五官所在位置的数据)。因为所有关于不需要的面孔的信息仍然在文件中(刚才排序步骤删除的那些),这很可能在将来给我们带来麻烦。所以需要删除不需要图片的对齐文件。 使用集成工具清理对齐文件还有一个额外的好处,可以将我们的面孔重命名回它们的原始文件名。

步骤如下,找到Tools->Alignments文件:

根据上图设置后,点击alignments,完成后面孔将被重新命名为默认名称,并且所有不需要的面孔就会从对齐文件中删除。

该过程将备份旧对齐文件并将其放在新创建的文件旁边的原始位置。它将与您清理过的对齐文件同名,但在其末尾附加“backup_<timestamp>”。如果对新的对齐文件正确无误感到满意,则可以安全地删除此备份文件。

此时,如果正在提取以进行转换(或者该集合将用于转换和训练),那么可以完全删除faces 文件夹。不再需要这些面孔。如果您需要重新生成面部集,则可以使用对齐工具的extract来完成。

执行完对齐文件的清理后,留下来的对齐文件就是想要训练的有效数据集(脸)对应的对齐文件了。

手动清理对齐文件就不介绍了,详情参照:http://forum.faceswap.dev/viewtopic.php?f=5&t=27

步骤3:从对齐文件中提取训练集

现在已经清理了对齐文件,需要拉出其中的一些脸用于作为训练集。

导航到工具选项卡,然后导航到对齐子选项卡:

对齐1.jpg
  • Processing
    此部分允许我们选择我们希望执行的操作,以及设置任何输出处理。我们只对Job部分感兴趣。

    • Job:这是工具中可用的所有不同对齐工作的列表。
      • 选择extract
    • Output:忽略此部分,因为extract不会生成任何输出
      对齐9.jpg
  • Data
    我们要处理的资源所在的位置。

    • Alignments File:选择上一步清理后生成的alignments文件。
    • Faces Folder:选择一个空文件夹,将输出的面孔放在其中。
    • Frames Folder:选择提取过程输入的视频或帧文件夹
    • 将此部分中的任何其他选项留空,因为此步骤不需要它们。
      对齐10.jpg
  • Extract
    这些是从路线文件中提取人脸的选项

    • Extract Every N: 这将取决于您输入的每秒帧数。然而,对于 25fps 的视频,合理的值在大约 12 - 25 之间(即每半秒到一秒)。任何不足,你最终可能会得到太多相似的面孔。值得牢记的是,您为训练集从中提取了多少来源,您希望在最终训练集中拥有多少张面孔,以及您的来源有多长。这些都将根据具体情况而有所不同。
    • Size:这是包含提取的人脸的图像的大小。目前没有模型支持 256px 以上,所以保持默认
    • Large:启用此选项将仅提取尚未放大到输出大小的面孔。例如,如果提取大小设置为512px,而在帧中找到的人脸为480px,则不会提取。如果它是 520px,它会。
      对齐12.jpg
  • 运行
    将所有其他选项保留为默认值。准备好检查选项,并将训练集从清理过的对齐文件中提取到我们选择的文件夹中。

    • 最终设置如下图
      对齐13.jpg
    • 点击Alignments按钮以提取面孔。

完成后,将所有人脸数据集放入同一个文件夹中。训练集已准备就绪。后续第三章将介绍训练部分。

 

 

——————————————活在当下,首先就是要做好当下的事.
本文转载于网络 如有侵权请联系删除

相关文章

  • 图解排序算法(三)之堆排序

    大家好,又见面了,我是你们的朋友全栈君。预备知识堆排序  堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是:大顶堆:arr[i]>=arr[2i+1]&&arr[i]>=arr[2i+2]小顶堆:arr[i]<=arr[2i+1]&&arr[i]<=arr[2i+2]ok,了解了这些定义。接下来,我们来看看堆排序的基本思想及基本步骤:堆排序基本思想及步骤堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一

  • 使用 GitHub Actions 自动推送 URL 至百度站长平台

    序起因就是最近在做新版博客KindemBlog的SEO优化,工作之后也没时间耐心地做引流了,看能不能想想其他方法稍微拯救下博客惨淡的PV。印象中百度的自动推送URL功能在今年还是去年的时候翻新了一次,翻新后的API不再是GET请求,而是POST,再加上辣鸡百度新API的Host给的协议是HTTP,这么一来使用HTTPS协议的站点就直接暴毙,没法再通过前端来发送Ajax请求来推送了,这对静态博客用户(比如我)可是毁灭性打击。一番思考后,我想到了GitHubActions,没错,就没有Actions搞不定的事情。整个方案的思路是先写一个JavaScript脚本来完成博客仓库下所有博客的扫描,扫描完成后把所有URL通过POST请求上报到百度的服务器去,然后再用GitHubActions每日定时执行脚本即可。扫描与推送脚本其实用Python写也可以,但一想到这又是一个展现我非凡的JavaScript技术的时候,就有点小激动,果断在博客根目录下:npminit复制之后先把依赖安装一哈:npminstallaxios复制然后编写脚本,放在/scripts/baidu-auto-commit.js:

  • 安卓逆向class分析辅助脚本

    原地址https://www.52pojie.cn/thread-687475-1-1.html一.基于作者改为python3兼容的importsys,getopt defbytesToHexString(bs): return''.join(['%02X'%bforbinbs]).replace("",'') defmoshu(name): try: f=open(name,'rb') print("-------------------------------") print("**********magic**************") print("-------------------------------") i=0 p=[1]*4 p1=[202,254,186,190] whileTrue: t=f.read(1) t1=bytesToHexString

  • 腾讯云Terraform初始化【failed to query available provider packages】

    升级terraform到v0.13后,初始化terraform可能会出现以下问题Error:Failedtoqueryavailableproviderpackages复制原因是terraform自v0.13后就交给provider自己维护了解决方案:1.使用命令查看自己版本terraformversion复制示例得到+provider.tencentcloudv1.53.02.粘贴以下代码至terraform配置中,version采用自己的tencentcloudterraform版本terraform{ required_providers{ tencentcloud={ source="tencentcloudstack/tencentcloud" version="1.53.0"【替换为上一步查询的版本号】 } } }复制

  • 最全IDEA快捷键

    欢迎去楼主个人博客网站一览(^_^)∠※ 编辑Ctrl+Space基本代码完成(任何类、方法或变量的名称)【代码提示】 Ctrl+Shift+Space智能代码完成(过滤器的方法和变量预期的类型列表) Ctrl+Shift+Enter完成语句【不是完整语句时补全,已经是完整语句时换行】 Ctrl+P查看方法可能的参数信息 Ctrl+Q快速查看javaAPI文档 Shift+F1打开外部API文档【如果有的话maven项目特别好使】 Ctrl+mouse悬浮显示鼠标覆盖的代码的简介【点击进入对应的源文件】 Ctrl+F1显示详细的错误或警告描述 Alt+Insert生成代码…(Getters,Setters,Constructors,hashCode/equals,toString) Ctrl+O重写方法 Ctrl+I实现方法 Ctrl+Alt+T使用(if..else,try..catch,for,synchronized)之类包围选中的代码或光标所在行 Ctrl+/添加或取消行注释 Ctrl+Shift+/添加或取消块注释 Ctrl+W依次多选中【减少鼠标勾选】 Ctrl+Shift

  • Spring Security 认证的三种方式及简单的授权

    1.默认身份验证 在pom.xml文件映入SpringSecutrity依赖启动器,启动项目,访问文章列表页面时,出现默认的登录页,需要用默认用户名:user,密码源于控制台输出,也就是最基础的登录2.内存身份验证自定义用户名和密码(用户名和密码是写在代码内,不好维护),新建新建一个SecurityConfig的配置类,继承WebSecurityConfigurerAdapter类,重写configure(AuthenticationManagerBuilderauth)自定义身份认证/*开启安全管理配置*/ @EnableWebSecurity publicclassSecurityConfigextendsWebSecurityConfigurerAdapter{ /*自定义身份认证*/ @Override protectedvoidconfigure(AuthenticationManagerBuilderauth)throwsException{ /*密码编译器*/ BCryptPasswordEncoderencoder=newBCryptPasswordEncoder(

  • CAS Client集群环境的Session问题及解决方案

    【原创申明:文章为原创,欢迎非盈利性转载,但转载必须注明来源】之前写过一篇文章,介绍单点登录的基本原理。这篇文章重点介绍开源单点登录系统CAS的登录和注销的实现方法。并结合实际工作中碰到的问题,探讨在集群环境中应用单点登录可能会面临的问题。这篇文章在上一篇的基础上,增加了第四部分,最终的解决方案。1单点登录的过程为了描述方便,假设有如下一个单点登录系统。一套CASServer,两套CASClient系统。为了描述的方便,省略CASServer调用用户系统完成登录,以及CASClient从用户系统读取用户详细信息的过程。1.1多应用情况下Session信息假定有两个CASClient应用,一个CASServer。应用的部署,可能在不同的服务器,也可能有不同的访问IP或域名,即使是同一个浏览器,在各个应用中的Session信息也是不相同的。浏览器中,每个应用有一个独立的JSESSIONIDCookie。某一个应用,不可能读取到浏览器在其他应用中的Cookie信息。假定用户首先访问CASClient01,系统提醒用户进行一次登录;然后用户访问CASClient2,不会再提示登录而是直接登录成

  • python那些包

    正文共:4286字5图 预计阅读时间:11分钟每日分享Anything'spossibleifyou'vegotenoughnerve.如果你有足够的勇气,一切皆有可能。小闫语录:不知道鼓起勇气尝试之后是否成功,但是我晓得尝试了才有可能成功,不尝试肯定不成功。python那些包OSOS模块提供了一些对文件或文件夹的操作,下面我们介绍一些常用的命令:文件重命名:os.rename('小闫笔记.txt','小闫笔记plus.txt')复制删除文件:os.remove('小闫笔记.txt')复制创建文件夹:os.mkdir('小闫工作目录')复制获取当前目录:os.getcwd()复制切换到上一级目录:os.chdir('../')复制获取当前目录下的目录列表:os.listdir('./')复制删除文件夹:os.rmdir('小闫工作目录')复制获取当前进程编号:os.getpid()复制获取父进程编号:os.getppid()复制

  • 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动。1、引言好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不能理解Web短连接(就是最常见的HTTP通信了)跟长连接(主要指TCP、UDP协议实现的socket通信,当然HTML5里的Websocket协议也是长连接)的区别,导致写即时通讯这类系统代码时往往找不到最佳实践,搞的一脸蒙逼。本篇我们先简单了解一下TCP/IP,然后通过实现一个echo服务器来学习Java的SocketAPI。最后我们聊聊偏高级一点点的socket长连接和协议设计。另外,本系列文章的前2篇《网络编程懒人入门(一):快速理解网络通信协议(上篇)》、《网络编程懒人入门(二):快速理解网络通信协议(下篇)》快速介绍了网络基本通信协议及理论基础,如果您对网络基础毫无概念,则请务必首先阅读完这2篇文章。本系列的第3篇文章《网络编程懒人入门(三):快速理解TCP协议一篇就够》有助于您快速理解TCP协议理论的方方面面,建议也可以读一读。TCP是互联网的核心协议之一,鉴于它的重要性,希望通过

  • 《从Paxos到Zookeeper:分布式一致性原理与实践》第一章读书笔记

    第一章主要介绍了计算机系统从集中式向分布式系统演变过程中面临的挑战,并简要介绍了ACID、CAP和BASE等经典分布式理论,主要包含以下内容:集中式的特点分布式的特点分布式环境的各种问题ACID分布式事务CAP和BASE理论集中式的特点:部署结构简单(因为基于底层性能卓越的大型主机,不需考虑对服务多个节点的部署,也就不用考虑多个节点之间分布式协调问题)分布式的特点:分布性对等性并发性缺乏全局时钟故障总是会发生分布式环境的各种问题:通信异常:主要是因为网络本身的不可靠性网络分区:当网络发生异常时,导致部分节点之间的网络延时不断增大,最终导致部分节点可以通信,而另一部分节点不能。三态(成功、失败与超时)节点故障:组成分布式系统的服务器节点出现宕机或“僵死”现象事务是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元,狭义上的事务特指数据库事务。事务有四个特性,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称为事务的ACID特性。原子性(Atomicity):必须是一个原子的操作序列单元

  • 【吉比特】G-bits2018校园春季招聘技术类岗位笔试经验

    笔试公司:厦门吉比特网络技术股份有限公司笔试岗位:游戏研发工程师笔试时间:2018年3月30日19:00-20:30笔试形式:牛客网在线做题笔试回忆:笔试总共时长1小时半,共52道题。其中选择题40道(40分),填空题10道(30分),编程题两道(30分)。题量很大,时间很紧张。选择题主要考了概率题、高数题(求积分,判断两个圆是否相交)、还有计算机专业课基础。最让我感到心塞的是填空题。填空题共十道全是代码阅读题,根据所给出的代码写出运行之后的答案,当时真想跳出界面使用IDE运行求解,不过还是忍住了。填空题基本都是运用函数调用传递参数,中间考查了map函数、移位操作、数组、矩阵,字符串处理等,而且数据量也给的很大,基本一道题就综合考查了计算机基础的功底。编程题总共两道,第一道为“输入两个整数,求整数二进制格式有多少位不同,例如输入22、25,输出为5”;第二道为“给定N个三维坐标点(xyz),找出位于同一条直线上点的最大个数。”笔试总结:笔试刚结束,我就看吉比特春招群里就有人开始吐槽,当时就应该放弃填空直接做编程题。是的,要在90分钟时间内做完52道试题,除非已经对此触类旁通,否则还是要

  • 你必须知道的Pandas 解析json数据的函数-json_normalize()

    写了好几篇文章了,今天写点很少人写但是很有用的!记得点赞收藏加关注哦。前言:Json数据介绍Json是一个应用及其广泛的用来传输和交换数据的格式,它被应用在数据库中,也被用于API请求结果数据集中。虽然它应用广泛,机器很容易阅读且节省空间,但是却不利于人来阅读和进一步做数据分析,因此通常情况下需要在获取json数据后,将其转化为表格格式的数据,以方便人来阅读和理解。常见的Json数据格式有2种,均以键值对的形式存储数据,只是包装数据的方法有所差异:a.一般JSON对象采用{}将键值对数据括起来,有时候会有多层{}b.JSON对象列表采用[]将JSON对象括起来,形成一个JSON对象的列表,JSON对象中同样会有多层{},也会有[]出现,形成嵌套列表这篇文章主要讲述pandas内置的Json数据转换方法json_normalize(),它可以对以上两种Json格式的数据进行解析,最终生成DataFrame,进而对数据进行更多操作。本文的主要解构如下:解析一个最基本的Json-解析一个带有多层数据的Json-解析一个带有嵌套列表的Json-当Key不存在时如何忽略系统报错-使用sep参数为

  • 常见的浏览器兼容性问题

    1.不同浏览器当中,很多的标签的默认样式不同,如默认的外部丁内补丁。 产生条件:不同浏览器; 解决办法:利用CSSreset文件进行样式的清除,然后再根据需要进行设置。 2.横向双倍外边距 产生条件:在IE6中块元素浮动后,会出现横向双倍margin现象。 解决办法:在float标签的样式控制中加入display:inline 3.默认行高 产生条件:IE6、IE7、遨游浏览器;设置的文字高度超出盒模型内容区域设置的高度时会影响布局。 解决办法:给超出高度的标签设置overflow:hidden;或者将文字的行高line-height设置为小于块的高度。 4.input聚焦框颜色与样式不同 产生条件:各个浏览器表现不同; 处理方法:使用outline:none,清除默认样式之后再统一设置。 5.img外部的border 产生条件:img外部有a标签,即img标签有链接时 解决办法:设置img边框border:0; 6.图片默认有间距。 产生条件:img标签(每个img之后敲了回车) 解决办法:为img设置float的浮动布局方式。 7.经典3像素bug 产生条件:IE6浏览器,浮动块

  • strcpy和memcpy的区别(转载)

    strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。 已知strcpy函数的原型是:char*strcpy(char*dest,constchar*src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。void *memcpy( void *dest, const void *src, size_t count ); char *strcpy(char *dest,const char *src)//实现src到dest的复制 {   if ((src==NULL)||(dest==NULL))//判断参数src和dest的有效性   {         return NULL;   }   char *strdest=dest;&

  • go 语言 print、printf、println的区别

    print和println 这两个打印方式类似,只在格式上有区别 println打印的每一项之间都会有空行,print没有,例如: fmt.println("go","python","php",javascript") //go python php javascript fmt.print("go","python","php",javascript") //gopythonphpjavascript    Println会自动换行,Print不会,例如 fmt.Println("hello") fmt.Println("world") //hello //world fmt.Print("hello") fmt.Print("world") //helloworldprintln和printfprintf是格式化输出,在很多场景下比println更方便,举个例子:funcmain(){a:=10b:=20c:=30fmt.println("a=",a,",b=",b,",c=",c)fmt.print

  • .Net Core Ocelot网关使用 一

    首先建 立一个.netCoreWebAPi 项目 安装下面两个东西,注意版本   配置项目Startup.cs文件 usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Threading.Tasks; usingMicrosoft.AspNetCore.Builder; usingMicrosoft.AspNetCore.Hosting; usingMicrosoft.AspNetCore.Mvc; usingMicrosoft.Extensions.Configuration; usingMicrosoft.Extensions.DependencyInjection; usingMicrosoft.Extensions.Logging; usingMicrosoft.Extensions.Options; usingOcelot.DependencyInjection; usingOcelot.Middleware; usingOcelot.Prov

  • myisam学习

    1、有关mysql的一些问题 1、myisam引擎的表是否支持mvcc,插入、更新、删除的时候是否能够查询? 2、支持全文索引,那么innodb是否支持全文索引? 3、既然实例崩溃之后不支持安全恢复,有什么办法能尽量避免此问题?复制 mysql>showtablestatuslike'submit_history_statistic_202006'\G ***************************1.row*************************** Name:submit_history_statistic_202006 Engine:MyISAM Version:10 Row_format:Dynamic Rows:24438 Avg_row_length:96--每行包含的字节数 Data_length:2357960 Max_data_length:281474976710655 Index_length:1127424--索引的大小 Data_free:0 Auto_increment:16061534--自增值 Create_time:2020-

  • python函数编程-装饰器decorator

    函数是个对象,并且可以赋值给一个变量,通过变量也能调用该函数: >>>defnow(): ...print('2017-12-28') ... >>>l=now >>>l() 2017-12-28复制 利用函数的_name_属性,可以拿到函数的名字: >>>now.__name__ 'now' >>>l.__name__ 'now'复制 如果我们在调用函数now()前后自动打印日志,但又不允许修改now()函数的定义——在代码运行期间动态增加功能的方式,称之为‘装饰器’Decorator。 比如,定义一个能打印日志的decorator: >>>deflog(func): ...defwrapper(*args,**kw): ...print('call%s():'%func.__name__) ...returnfunc(*args,**kw) ...returnwrapper ...复制 观察log函数,发现,本质上这就是一个返回函数的高阶函数!log作为一个dec

  • jsp foreach 取map

    jsp中取出MAP的值,并且根据键值生成复选框; 用到的包 <%@pageimport="com.hebrf.dbmanage.DBManage"%> <%@pageimport="com.hebrf.dbmanage.DBFactory"%> <%@pageimport="java.util.List"%> <%@pageimport="java.util.Map"%> <%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>复制 通过数据库查出来map DBManagedb=DBFactory.getDBManage(); Listlis=db.getListByMap("selectDMasdm,MCasmcfromZDCDZLLX"); request.setAttribute("lis",lis);复制 得到的集合 ([{mc=书面材料,dm=01},{mc=图片材料,dm=02},{mc=印刷材料,dm=03},{mc=影音材料,dm

  • 单例 swift

      classBXCAppInstance:NSObject{ staticletshared=BXCAppInstance() }复制   在北京的灯中,有一盏是我家的。这个梦何时可以实现?哪怕微微亮。北京就像魔鬼训练营,有能力的留,没能力的走……

  • linux模拟端口服务nc命令详解

    nc命令的作用 实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口 端口的扫描,nc可以作为client发起TCP或UDP连接 机器之间传输文件 机器之间网络测速 -l用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。 -p暂未用到(老版本的nc可能需要在端口号前加-p参数,下面测试环境是centos6.6,nc版本是nc-1.84,未用到-p参数) -s指定发送数据的源IP地址,适用于多网卡机 -u指定nc使用UDP协议,默认为TCP -v输出交互或出错信息,新手调试时尤为有用 -w超时秒数,后面跟数字在172.0.0.4机器上>nc-l8000在其它机器上可以>telnet172.0.0.48000复制 复制

相关推荐

推荐阅读