当前位置: 首页 > 编程日记 > 正文

集五福,我用Python

所有参与投票的 CSDN 用户都参加抽奖活动

群内公布奖项,还有更多福利赠送

作者 | Crossin先生

编辑 | Jane

来源 | Crossin的编程教室(ID:crossincode)

【导读】你的五福集齐了吗?作为一名技术人,我们是不是可以用技术方法快速实现呢?今天,我们就为大家推荐四种新鲜的方法,生成风格不同又数量庞大的「福」字,让大家不用满世界找福字,动动手指即可。

是什么让你忽然意识到下周就要过年了?

是考完期末考试的最后一门?还是抢到了回家的火车票?又或者是年终奖的到账短信?

作为一个没有寒假、不用回老家也没有年终奖的人,让我发现马上就要过年的现象是:各个群里面又开始集五福了!

五福卡我是没法帮你搞出来。这种 APP 的计算都是放在后端(服务器上),哪怕你完全破解了自己手机上支付宝,该还花呗也还是得还。

不过,我倒是可以帮你生成一些福字,直接拿去扫一扫,省得满世界地找了。没准也能扫出个全家福呢!

以下这些福字,作者 Crossin 都介绍过相关的方法,并且全部都是通过 Python 语言及相关库所生成。好了,不多说了,接下来,我们就赶紧来看看这些方法吧。

一、头像福

这个福字是用微信好友的头像所组成。之前元宵节的时候用这个方法第一次做了尝试,涉及的原理并不复杂,使用 itchat 和 PIL 库,详细方法和代码:

  • 【第一步】

首先是点阵字的概念:点阵字体是把每一个字符都分成 n * n 个点,然后用每个点的虚实来表示字符的轮廓。点阵字体也叫位图字体,其中每个字形都以一组二维像素信息表示。

汉字那么多,总不能每个字都去自己设计点阵吧?别担心,有现成的点阵字库可以直接使用:HZK16字库。HZK即汉字库的首字母缩写,HZK16字库是符合GB2312标准的16×16点阵字库,支持的汉字有6763个(但可惜不支持英文和数字),每个汉字模型需要16×16一共需要256个点来显示。

这样思路就出来了:我们自己输入汉字,根据字符串中汉字字符编码,去HZK16字库中获取点阵信息,拿到信息后根据16*16点阵每个点的数据,print 出不同字符。

#初始化16*16的点阵位置,每个汉字需要16*16=256个点来表示
rect_list = [] * 16
for i in range(16):rect_list.append([] * 16)
#拿“赞”字来演示
text = "赞"
#获取中文的编码
gb2312 = text.encode('gb2312')
hex_str = binascii.b2a_hex(gb2312)
result = str(hex_str, encoding='utf-8')
#根据编码计算“赞”在汉字库中的位置
area = eval('0x' + result[:2]) - 0xA0
index = eval('0x' + result[2:]) - 0xA0
offset = (94 * (area-1) + (index-1)) * 32
font_rect = None
#读取HZK16汉字库文件中“赞”字数据
with open("HZK16", "rb") as f:f.seek(offset)font_rect = f.read(32)
#根据读取到HZK中数据给我们的16*16点阵赋值
for k in range(len(font_rect) // 2):row_list = rect_list[k]for j in range(2):for i in range(8):asc = font_rect[k * 2 + j]flag = asc & KEYS[i]row_list.append(flag)
#根据获取到的16*16点阵信息,打印到控制台
for row in rect_list:for i in row:if i:#前景字符(即用来表示汉字笔画的输出字符)print('0', end=' ')else:#背景字符(即用来表示背景的输出字符)print('.', end=' ')print()
  • 【第二步】

解决了输出字符的问题,接下来就考虑,如何把这些点换成微信好友头像呢?

我们通过 itchat 这个开源的微信个人号接口来获取微信好友头像图片。

#通过二维码登录微信网页版
itchat.auto_login()
#获取微信好友信息列表
friendList = itchat.get_friends(update=True)
#读取好友头像
for friend in friendList:friend['head_img'] = itchat.get_head_img(userName=friend['UserName'])friend['head_img_name'] = "%s.jpg" % friend['UserName']#写入文件with open(friend['head_img_name'],'wb') as f:f.write(friend['head_img'])
  • 【第三步】

有了头像之后,我们通过 PIL (Python Image Library,python的第三方图像处理库) 根据汉字点阵信息拼接头像图片。核心代码片段:

#新建画布,16*16点阵,每个图片边长100
canvas = Image.new('RGB', (1600, 1600), '#FFFFFF')
n = 0
for i in range(16*16):#点阵信息为1,即代表此处要显示头像来组字if item[i] == "1":# 打开图片img = Image.open(imgList[n])# 缩小图片img = img.resize((100, 100), Image.ANTIALIAS)# 拼接图片canvas.paste(img, ((i % 16) * 100, (i // 16) * 100))n += 1

综合以上三个步骤,即可用微信好友头像组成你想要的文字了。

如果你嫌弃这 16x16 的字库效果,也可以通过对图片进行二值化处理,以获取更精致的点阵信息来成字符图。比如上面的“福”字,其点阵信息就是我对福字图片处理得到的,最终展示的效果也更美观大方,就像上面的图那样。

二、文字福

这个福字是将福字图片转成文字符号显示而组成,使用 opencv-python 库,详细方法及代码:

# coding: utf8
import cv2 as cv
import os
import time
# 替换字符列表
ascii_char = list(r"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
char_len = len(ascii_char)
# 加载视频
cap = cv.VideoCapture('video.mp4')
while True:# 读取视频每一帧hasFrame, frame = cap.read()if not hasFrame:break# 视频长宽width = frame.shape[0]height = frame.shape[1]# 转灰度图img_gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 缩小图片并调整长宽比img_resize = cv.resize(img_gray, (int(width / 10), int(height / 10)))text = ''# 遍历图片中的像素for row in img_resize:for pixel in row:# 根据像素值,选取对应的字符text += ascii_char[int(pixel / 256 * char_len)]text += '\n'# 清屏os.system('cls')  # mac是'clear'# 输出生成的字符方阵print(text)# 适当暂停一下time.sleep(0.03)

代码不长,稍微解释下其中几处:

1、ascii_char 这个字符序列并不是必须这样,只要大致上满足其中的字符看起来从深到浅即可,字符越多越准确,效果就越好。

2、读取视频使用了 opencv-python,并直接用它提供的方法转了灰度图。

3、resize 这一步比较重要,因为有的视频分辨率很高,直接一个像素转一个字符的话量太大,所以先缩小图片。另一个原因是字符一般都不是正方形,所以在图片长宽比上要做一定的调整,这样最终效果比较好。(实际中要根据你自己控制台中的字体效果来调整缩放比例)

4、ascii_char[int(pixel / 256 * char_len)] 是整个转换的核心,因为一个像素的颜色范围是 0~255,通过 pixel / 256 * char_len 可以将一个像素值对应于字符序列中灰度相当的字符。

5、关于输出,有几个值得注意的点:输出一帧前需要清屏,不同平台命令有区别;时间间隔、控制台的字体大小、缩放比例都要根据实际情况作调整;如果计算时间过长、刷新太慢而屏幕闪烁,可以考虑进一步缩小图片,或者先将所以帧转换完毕后再统一输出。

这段代码,看起来没啥实际用处,而且有些反潮流,因为现如今大家看视频都追求更高分辨率的超清画质,而我们这个,是一个“超不清”的视频播放器:在控制台里播放视频,用字符来表示画面。

不过我觉得它至少可以有三个作用:1.用来练习视频和图像处理的编程开发;2.在没有图形界面的服务器上播放视频(虽然效果不咋地);3.作为一种独特的艺术风格化处理

程序的原理其实很简单,关键是你要理解计算机中一张图像的组成:一堆像素点。我们平常说的 1920*1080 之类的分辨率,也就是指这个像素点的多少。我们想做成字符画,也就是考虑如何用不同的字符来表示一个像素。

通常一个像素点由3个0~255的值表示,分别表示红、绿、蓝三种颜色值,值越大表示颜色越深。但字符画是没有颜色的,所以需要将图像转成灰度图,这样就可以跟一组从深到浅的字符形成一种对应关系。比如深的点就是 @,浅色的点就是 .。

一幅图像全部转成字符序列后,就可以直接在控制台输出了。对于一个视频来说,只需要将每一帧都转换后输出,并按照一定的时间间隔清屏、输出下一帧,即可达到我们的需要的效果。

转换后的效果:

三、名画福

如果左边跟着梵高画个福,再跟着毕加索右边画个福,会是什么样的效果?这两个福字分别通过梵高的《星空》和毕加索的《缪斯》风格生成,这里我们选择使用 opencv-python 中的 DNN(深度神经网络)。

这种功能叫做“图像风格迁移”,几乎都是基于 CVPR 2015 的论文《A Neural Algorithm of Artistic Style》和 ECCV 2016 的论文《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》中提出的算法,以及后续相关研究的基础上开发出来的。

通俗来讲,就是借助于神经网络,预先将名画中的风格训练成出模型,在将其应用在不同的照片上,生成新的风格化图像。

来自《A Neural Algorithm of Artistic Style》

而因为神经网络在计算机视觉方面的应用越来越广,著名的视觉开发库 OpenCV 在 3.3 版本中正式引入 DNN(深度神经网络),支持 Caffe、TensorFlow、Torch/PyTorch 等主流框架的模型,可用以实现图像的识别、检测、分类、分割、着色等功能。

在 OpenCV 的 Sample 代码中就有图像风格迁移的 Python 示例,是基于 ECCV 2016 论文中的网络模型实现。所以,即使作为人工智能的菜鸟,也可以拿别人训练好的模型来玩一玩,体会下神经网络的奇妙。

OpenCV 官方代码地址:

https://github.com/opencv/opencv/blob/3.4.0/samples/dnn/fast_neural_style.py

目录下通过执行命令运行代码:

python fast_neural_style.py --model starry_night.t7

model 参数是提供预先训练好的模型文件路径,OpenCV 没有提供下载,但给出的参考项目 https://github.com/jcjohnson/fast-neural-style 中可以找到

其他可设置参数有:

  • input 可以指定原始图片/视频,如果不提供就默认使用摄像头实时采集。

  • width、height,调整处理图像的大小,设置小一点可以提高计算速度。在我自己的电脑上,300x200 的转换视频可以达到 15 帧/秒。

  • median_filter 中值滤波的窗口大小,用来对结果图像进行平滑处理,这个对结果影响不大。

执行后的效果(取自 jcjohnson/fast-neural-style):

原始图像

ECCV16 models

instance_norm models

核心代码其实很短,就是 加载模型 -> 读取图片 -> 进行计算 -> 输出图片,我在官方示例基础上进一步简化了一下:

import cv2
# 加载模型
net = cv2.dnn.readNetFromTorch('the_scream.t7')
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV);
# 读取图片
image = cv2.imread('test.jpg')
(h, w) = image.shape[:2]
blob = cv2.dnn.blobFromImage(image, 1.0, (w, h), (103.939, 116.779, 123.680), swapRB=False, crop=False)
# 进行计算
net.setInput(blob)
out = net.forward()
out = out.reshape(3, out.shape[2], out.shape[3])
out[0] += 103.939
out[1] += 116.779
out[2] += 123.68
out /= 255
out = out.transpose(1, 2, 0)
# 输出图片
cv2.imshow('Styled image', out)
cv2.waitKey(0)

四、变形福

如何用 python 的图像处理功能,把一幅“福”字图片转出 5 种不同的效果?在接下来使用 opencv-python的几个方法教程中,总有一款适合你,方法及代码:

  • 【第1步】

读取图片及展示代码:

import cv2
from matplotlib import pyplot as plt
img = cv2.imread('fu.png')
# 转换颜色模式,显示原图
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
plt.show()

因为 OpenCV 和 matplotlib 的颜色模式不一样,所以需要做一次转换,如果是直接通过 cv2 展示和保存图片则不需要。

  • 【第2步】

上面的效果分别用到了以下功能:

1、灰度福

这里没有选择直接将图片转出灰度图,因为这样会导致福字不明显。而是通过将红、绿、蓝三通道分离后,选择色差最大的红色通道。

r,g,b = cv2.split(img)

2、轮廓福

使用了 OpenCV 自带的图像轮廓提取功能。为了更好的效果,这里对红色通道进行二值化后,再查找轮廓。

_, img_bin = cv2.threshold(r, 50, 255, cv2.THRESH_BINARY)
_, contours, _ = cv2.findContours(img_bin, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
img_cont = np.zeros(img_bin.shape, np.uint8)    
cv2.drawContours(img_cont, contours, -1, 255, 3)

3、反色福

发色的实现是将每个像素值 x 转成 255-x。如果遍历像素计算会比较慢,于是用了一个小技巧:转成 numpy 的 ndarray 再进行矩阵运算。

img_i = np.asarray(img)
img_i = 255 - img_i

4、膨胀福

这里其实是“图像腐蚀”操作(与“图像膨胀”操作相反)。因为在我们选取的红色通道中,白色是背景,黑色才是福字,所以对白色的“腐蚀”也就是对黑色的“膨胀”。这也是 OpenCV 的内置功能。做完这一步,又对图像进行了切割,直接通过列表的切片操作实现。

kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(25, 25))
eroded = cv2.erode(r, kernel)
size = img.shape
eroded = eroded[int(size[1]*0.15):int(size[1]*0.7),int(size[0]*0.2):int(size[0]*0.85)]

5、福到了

OpenCV 提供了翻转操作,第二个参数是旋转轴的选取,你可以试试 0 和 1 的效果。

img_r = cv2.flip(img, -1)

经验证,以上福字皆可扫。本人已集齐

最后,再送上一张阿里某马姓员工写的福字,据说扫它能抽到稀有福!

(*本文为AI科技大本营转载文章,转载请联系原作者)

精彩推荐

2020年,由 CSDN 主办的「Python开发者日」活动(Python Day)正式启动。我们将与 PyCon 官方授权的 PyCon中国社区合作,联手顶尖企业、行业与技术专家,通过精彩的技术干货内容、有趣多元化的活动等诸多体验,共同为中国 IT 技术开发者搭建专业、开放的技术交流与成长的家园。未来,我们和中国万千开发者一起分享技术、践行技术,铸就中国原创技术力量。

【Python Day——北京站】现已正式启动,「新春早鸟票」火热开抢!2020年,我们还将在全国多个城市举办巡回活动,敬请期待!

活动咨询,可扫描下方二维码加入官方交流群~

CSDN「Python Day」咨询群 ????

来~一起聊聊Python

如果群满100人,无法自动进入,可添加会议小助手微信:婷婷,151 0101 4297(电话同微信)


推荐阅读

  • 170个新项目,579个活跃代码仓库,Facebook开源年度回顾

  • 滴滴章文嵩:一个人的20年开源热情和国内互联网开源运动

  • 掌握 8 种语言、被阿里点赞,这名德国程序员简直开挂了!

  • 为什么 k8s 在阿里能成功?| 问底中国 IT 技术演进

  • K8s 实践 | 如何解决多租户集群的安全隔离问题?

  • 你点的每个“在看”,我都认真当成了AI

相关文章:

Google Test(GTest)使用方法和源码解析——模板类测试技术分析和应用

写C难免会遇到模板问题&#xff0c;如果要针对一个模板类进行测试&#xff0c;似乎之前博文中介绍的方式只能傻乎乎的一个一个特化类型后再进行测试。其实GTest提供了两种测试模板类的方法&#xff0c;本文我们将介绍方法的使用&#xff0c;并分析其实现原理。&#xff08;转载…

IT人才职场受宠

面对就业压力的日益增大&#xff0c;就业难&#xff0c;工资水平低等问题困扰着所有的大学生。然而&#xff0c;IT业的迅猛发展却造成了数以万计的网络设计、运行、维护的网络工程师需求的空缺&#xff0c;巨大的人才缺口使得IT业“全线告急”&#xff0c;这也促使更多的研究人…

引用头文件#include queue出错

为什么80%的码农都做不了架构师&#xff1f;>>> 在工程头文件中引用头文件 #include <queue> 莫名奇妙出错&#xff0c;其原因很可能是由于头文件引用问题。 include/c/4.7.1/bits/stl_vector.h:1308:40: error: expected unqualified-id before ‘(’ token…

ZOJ1002 Fire Net(非递归版)

以前用递归的回溯搜索思路做过一次&#xff0c;参见ZOJ1002 Fire Net(递归版)&#xff0c;今天想着用非递归的方法试试看&#xff0c;呵呵&#xff0c;比我想象中要难啊&#xff0c;主要还是堆栈里究竟放什么&#xff0c;这一点上思路一直没理清。因此用了整整一天的时间&#…

“数学不行,干啥也不行”骨灰级程序员:其实你们都是瞎努力

编程圈一直都流传着一个段子&#xff1a;一流程序员靠数学&#xff0c;二流程序员靠算法&#xff0c;末端程序员靠百度&#xff0c;低端看高端就是黑魔法。懂的人其实都知道&#xff0c;这不是段子&#xff0c;其实就是程序员的真实写照。想一想&#xff0c;我们日常学习、求职…

Google Test(GTest)使用方法和源码解析——死亡测试技术分析和应用

死亡测试是为了判断一段逻辑是否会导致进程退出而设计的。这种场景并不常见&#xff0c;但是GTest依然为我们设计了这个功能。我们先看下其应用实例。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 死亡测试技术应用 我们可以使用TEST声明并注册一个简单的测…

java学习笔记11--Annotation

java学习笔记11--Annotation Annotation&#xff1a;在JDK1.5之后增加的一个新特性&#xff0c;这种特性被称为元数据特性&#xff0c;在JDK1.5之后称为注释&#xff0c;即&#xff1a;使用注释的方式加入一些程序的信息。 java.lang.annotation Annotation接口是所有的Annotat…

GoogleLog(GLog)源码分析

GLog是Google开发的一套日志输出框架。由于其具有功能强大、方便使用等特性&#xff0c;它被众多开源项目使用。本文将通过分析其源码&#xff0c;解析Glog实现的过程。 该框架的源码在https://github.com/google/glog上可以获取到。本文将以目前最新的0.3.3版本源码为范例进行…

Ajax Toolkit 控件学习系列(13) ——FilteredTextBoxExtender 控制输入

这个控件的作用是对TextBox所要输入的内容进行过滤控制。按照自己需要过滤&#xff0c;可以自定义&#xff0c;再或者使用定义好的方式。看效果。效果不是很突出&#xff0c;说明下&#xff0c;就是只能输入大写字母和数字。因为加了限制&#xff0c;但是具体有什么高深的应用呢…

Uber最新开源Manifold,助力机器学习开发者的可视化与调试需求

所有参与投票的 CSDN 用户都参加抽奖活动群内公布奖项&#xff0c;还有更多福利赠送作者 | Lezhi Li译者 | 凯隐编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导语】2019 年 1 月&#xff0c;Uber 推出了 Manifold&#xff0c;一款与模型无…

jQuery对象和DOM对象使用说明

1.jQuery对象和DOM对象第一次学习jQuery,经常分辨不清哪些是jQuery对象&#xff0c;哪些是 DOM对象&#xff0c;因此需要重点了解jQuery对象和DOM对象以及它们之间的关系.DOM对象&#xff0c;即是我们用传统的方法(javascript)获得的对象&#xff0c;jQuery对象即是用jQuery类库…

[WPF疑难]避免窗口最大化时遮盖任务栏

[WPF疑难]避免窗口最大化时遮盖任务栏 周银辉 WPF窗口最大化时有个很不好的现象是&#xff1a;如果窗口的WindowStyle被直接或间接地设置为None后&#xff08;比如很多情况下你会覆盖默认的窗体样式&#xff0c;即不采用Windows默认的边框和最大化最等按钮&#xff0c;来打造个…

Google Mock(Gmock)简单使用和源码分析——简单使用

初识Gmock是之前分析GTest源码时&#xff0c;它的源码和GTest源码在同一个代码仓库中&#xff08;https://github.com/google/googletest&#xff09;。本文我将以目前最新的Gmock1.7版本为范例&#xff0c;分析其实现原理。&#xff08;转载请指明出于breaksoftware的csdn博客…

浪潮刘军:为什么说计算力是AI时代“免费的午餐”?

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;产业AI、元脑生态是浪潮集团2019年度的两大关键词。作为一家以计算力为核心生产力的企业&#xff0c;浪潮还一直强调人工智能计算是未来最重要的计算力&#xff0c;而无论产业AI、元脑生态都构筑于计算的基础设施之上。…

Journey源码分析四:url路由

2019独角兽企业重金招聘Python工程师标准>>> 在入口函数main()的default分支中&#xff0c;对路由进行了注册&#xff0c;现在分析下。 ##main()中路由注册相关代码 源码: httpRouter : httptreemux.New() // Blog and pages as http server.InitializeBlog(httpRou…

“天河二号”总工程师杜云飞谈星光超算应用平台设计

整理 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】12 月 21-22 日&#xff0c;OpenI/O 启智开发者大会在深圳召开。在大会上&#xff0c; 国家超级计算广州中心总工程师、“天河二号”总工程师杜云飞发表了题为《星光超算应用平台》的主题报告&…

Google Mock(Gmock)简单使用和源码分析——源码分析

源码分析 通过《Google Mock(Gmock)简单使用和源码分析——简单使用》中的例子&#xff0c;我们发现被mock的相关方法在mock类中已经被重新实现了&#xff0c;否则它们也不会按照我们的期待的行为执行。我们通过阅读源码&#xff0c;来分析整个过程的实现逻辑。&#xff08;转载…

远程控制软件VNC教程和对内网机器控制的实现

网络遥控技术是指由一部计算机&#xff08;主控端&#xff09;去控制另一部计算机&#xff08;被控端&#xff09;&#xff0c;而且当主控端在控制端时&#xff0c;就如同用户亲自坐在被控端前操作一样&#xff0c;可以执行被控端的应用程序&#xff0c;及使用被控端的系统资源…

GRUB2相关概念

GNU GRUB&#xff0c;简称“GRUB”&#xff0c;是一个来自GNU项目的启动引导程序。GRUB是多启动规范的实现&#xff0c;它允许用户可以在计算机内同时拥有多个操作系统&#xff0c;并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核&#xff0c…

朴素、Select、Poll和Epoll网络编程模型实现和分析——朴素模型

做Linux网络开发&#xff0c;一般绕不开标题中几种网络编程模型。网上已有很多写的不错的分析文章&#xff0c;它们的基本论点是差不多的。但是我觉得他们讲的还不够详细&#xff0c;在一些关键论点上缺乏数据支持。所以我决定好好研究这几个模型。&#xff08;转载请指明出于b…

支付宝账单出来后,除了总消费,你看到你的学习支出了吗?

当支付宝的2019年年度账单出来的时候很多人的第一反应就是我怎么花了这么多钱不少人都有这样的困惑忙忙碌碌一年到头&#xff0c;到底得到了什么&#xff1f;而这一切又和自己最开始的规划一样吗&#xff1f;其实从账单上可以看出你在2019年花费了哪些大头居家生活、穿衣打扮还…

体验Windows 7的Superbar

随着PDC 2008上Windows 7 M3 6801的发布&#xff0c;这个微软的下一代操作系统也渐渐浮出了水面。对于我们这些普通的PC用户而言&#xff0c;Windows 7相对于Windows Vista最显而易见的改变&#xff0c;无疑就是著名的Superbar任务栏了。说起它相比于原来的任务栏变化&#xff…

Linux 安装图形界面及远程连接

#可查询哪些组件是否已经安装(可用来对照组件名称&#xff09; yum grouplistyum groupinstall X Window System -y #安装GNOME桌面环境 yum groupinstall GNOME Desktop Environment -y #安装KDE桌面环境 yum groupinstall KDE (K Desktop Environment)卸载 卸载GNOME桌面环境…

朴素、Select、Poll和Epoll网络编程模型实现和分析——Select模型

在《朴素、Select、Poll和Epoll网络编程模型实现和分析——朴素模型》中我们分析了朴素模型的一个缺陷——一次只能处理一个连接。本文介绍的Select模型则可以解决这个问题。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 和朴素模型一样&#xff0c;我们首先…

微软开源NAS算法Petridish,提高神经网络迁移能力

作者 | Jesus Rodriguez译者 | Rachel编辑 | 夕颜出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09; 【导读】神经架构搜索&#xff08;Neural architecture search, NAS&#xff09;是深度学习中最热门的趋势之一。NAS方法针对特定问题和数据…

[转]g++ 编译多个相关文件

三个文件&#xff0c;一个头文件&#xff0c;两个程序文件 /*d.h */#include <iostream>usingnamespacestd; classDataset { public: intgetdata(); }; /*d.cpp */#include "d.h"intDataset::getdata() { return1231; } /*out.cpp */#include <ios…

POJ--2391--Ombrophobic Bovines【分割点+Floyd+Dinic优化+二分法答案】最大网络流量

联系&#xff1a;http://poj.org/problem?id2391 题意&#xff1a;有f个草场&#xff0c;每一个草场当前有一定数目的牛在吃草&#xff0c;下雨时它能够让一定数量的牛在这里避雨&#xff0c;f个草场间有m条路连接&#xff0c;每头牛通过一条路从一点到还有一点有一定的时间花…

25年了,我总结出这些信息提取的经验教训

作者 | Ehud Reiter译者 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】近日&#xff0c;本文作者阿伯丁大学计算科学系教授 Ehud Reiter 及其带领的阅读小组读了一篇让他们印象深刻的论文——由 Ralph Grishman 发表的《信息提取 25 年》&#xff08…

朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll模型

在《朴素、Select、Poll和Epoll网络编程模型实现和分析——Select模型》中&#xff0c;我们分析了它只能支持1024个连接同时处理的原因。但是在有些需要同时处理更多连接的情况下&#xff0c;1024个连接往往是不够的&#xff0c;也就是不能够高并发。那么这个时候我们就可以采用…

flashcom中远程共享对象SharedObject的用法

觉得这篇文章比较好&#xff0c;转载回来。学习fcs也有差不多一个月了,感觉最有特色的东西还是SharedObject.SharedObject有不少东西,本地操作就不说了(相信很多人没接触fcs也用过);就说说远程共享对象吧.基本的应用流程是:my_nc new NetConnection(); my_nc.connect("rt…