【Python】FCN+滤波器实现细胞检测

thbcm阅读(319)

本文转载至知乎ID:Charles(白露未晞)知乎个人专栏

下载W3Cschool手机App,0基础随时随地学编程
>>戳此了解

导语

Hi~~~

“浮云一别后,流水十年间。”忙忙碌碌中发现又有多日没有更新公众号了,过来更一发~~~

【下个月再开始推一些爬虫相关的内容吧,这个月确实没什么时间。】

利用全卷积网络+滤波器实现细胞检测。

让我们愉快地开始吧!

相关文件

百度网盘下载链接: 💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!

百度网盘链接:https://pan.baidu.com/s/16W2uByTpThAH8GUrv7pOZg
" target="_blank">
💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!
百度网盘链接:https://pan.baidu.com/s/16W2uByTpThAH8GUrv7pOZg

密码: 5f5k

开发工具

Python版本:3.6.4

相关模块:

numpy模块;

PIL模块;

scipy模块;

TensorFlow-GPU模块;

tensorlayer模块;

matplotlib模块;

以及一些Python自带的模块。

TensorFlow-GPU版本:

1.6.0

测试平台:

Windows10

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

其中,TensorFlow-GPU的环境搭建请自行参考相关的网络教程,注意版本和驱动严格对应即可。

原理简介

利用简单的全卷积网络+高斯和统计排序滤波器实现的细胞检测算法。

其中全卷积网络的结构为:

训练集包含6种类型的细胞图像:

(依据其中心进行分类)

(1)细胞重叠:

(2)非目标细胞:

(3)细胞边缘

(4)细胞间隙:

(5)背景:

(6)细胞中心点:

T_T相信聪明的小伙伴已经猜到了:

我们采用的细胞检测算法其实就是利用滑动窗口遍历给定的图像,把每个窗口的图像感受野输入到训练好的网络,判断该窗口的中心是否为细胞中心,若是则标出。该思想类似于RCNN,不过我们对检测结果加了滤波器来提高其精度。

至于具体实现过程,详见相关文件中的源代码。

使用演示

模型训练:

在cmd窗口运行train.py文件即可。

相关文件中提供了原始数据集和转为tfrecords格式的数据集。训练只需使用tfrecords格式的数据集即可。若想自己生成,则将下图中的注释去掉,并将该函数中的原始数据集路径修改为你自己的数据集路径:

训练效果图:

模型测试:

相关文件中提供了训练好的模型,在cmd窗口运行test.py文件即可,运行前请自行修改该文件内的测试图像路径:

效果展示

原图像1:

检测效果1(注意红点):

原图像2:

检测效果2:

That’all~~~

更多

模型设计的比较简单,效率比较低。之后会推送一些高端点的算法~~~

代码截止2018-05-30测试无误。

【Python】利用GAN生成MNIST数据集

thbcm阅读(302)

本文转载至知乎ID:
Charles(白露未晞)知乎个人专栏

下载W3Cschool手机App,0基础随时随地学编程
>>戳此了解

导语

利用Python搭建简单的GAN网络来生成MNIST数据集。其中GAN,即生成对抗网络

英文全称:

Generative Adversarial Networks

偷闲入门了一波心心念念的GAN,过来发一波文。

毕竟自从2014年被Ian Goodfellow提出后便一直是深度学习中的热门方向且十分有趣。

Let’s Go~~~

相关文件

百度网盘下载链接: 💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!

百度网盘链接:https://pan.baidu.com/s/1h6haOWnQojZU67igrNveeA
" target="_blank">
💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!
百度网盘链接:https://pan.baidu.com/s/1h6haOWnQojZU67igrNveeA

密码: 51pr

开发工具

相关模块:

tensorflow-gpu模块;

numpy模块;

matplotlib模块;

以及一些Python自带的模块。

其中TensorFlow-GPU版本为:

1.7.0

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

其中,TensorFlow-GPU的环境搭建请自行参考相关的网络教程,注意版本和驱动严格对应即可。

原理简介

生成对抗网络(GAN)的基本思想源自博弈论中的二人零和博弈,由一个生成器和一个判别器组成,通过对抗学习的方式来训练。

具体而言:

GAN的生成器主要用来学习真实图像的特征分布从而让自身生成的图像更加真实,以骗过判别器。判别器则需要对输入的图片进行真假判别。

整个过程串起来就是,生成器努力地让生成的图像更加真实,从而让判别器认为自己生成的图像是真实的图像,而判别器则努力地去识别出图像的真假,让生成器无法骗过自己。

随着训练的进行,生成器和判别器也在不断地斗智斗勇,最后的结果当然就是:

生成器生成的图像接近于真实图像,而判别器对于生成器生成的图像判别正确的概率接近于0.5。

其过程也可以总结为下图:

就生成MNIST的GAN网络具体模型而言:

生成器结构为:

判别器结构为:

至于具体的实现细节详见相关文件中源代码。

代码里注释的还算详细吧T_T

结果展示

训练方式:

在cmd窗口运行GanMnist.py文件即可。

训练过程中的Loss走势:

生成器生成的图像演变(show.py文件):

测试方式:

在cmd窗口运行Test.py文件即可。

利用训练好的模型生成MNIST数据集结果:

更多

T_T好吧这个例子也许并不能体现出GAN多有趣。

那么立个Flag,下次有空利用GAN网络来干一些有趣的事情,非常非常有趣的事情~~~

【Python】利用GAN生成动漫头像

thbcm阅读(302)

本文转载至知乎ID:Charles(白露未晞)知乎个人专栏

下载W3Cschool手机App,0基础随时随地学编程>>戳此了解

参考文献

用深层卷积生成对抗网络进行无监督表示学习;

GenerativeAdversarialNets。

甘论文汇总:

https://github.com/zhangqianhui/AdversarialNetsPapers

声明

本教程提供的所有源码以及素材仅供学习交流使用,禁止商用/非法使用。

导语

发现之前两篇关于GAN的文章效果都比较一般,想试着优化一下,训练个像样一些的模型,至少不能太丢GAN的脸,于是就有了这篇文章。

OK,让我们愉快地开始吧〜

相关文件

百度网盘下载链接:💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!

百度网盘链接:https://pan.baidu.com/s/1t-d5wq3TeBWcVzTOoraPtQ
" target="_blank">https💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!
百度网盘链接:https://pan.baidu.com/s/1t-d5wq3TeBWcVzTOoraPtQ
" target="_blank">//pan.baidu.com/s/1t-d5wq3TeBWcVzTOoraPtQ

密码:84ky

开发工具

蟒蛇中的版本:3.6.4

相关模块:

pytorch模块;

torchvision模块;

PIL模块;

以及一些Python中的中自带的模块。

PyTorch版本:

0.3.0

环境搭建

安装的Python的中并添加到环境变量,PIP安装需要的相关模块即可。

补充说明:

PyTorch0.3.0不支持直接的PIP安装(Windows)中中中。

有两个选择:

(1)安装anaconda3后在anaconda3的环境下安装(直接PIP安装即可);

(2)使用编译好的WHL文件安装,下载链接为:

💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!
百度网盘链接:https://pan.baidu.com/s/1dF6ayLr
#list/path=%2Fpytorch

原理简介

关于生成对抗网络的核心思想,请参考之前的文章:

【Python中的中】利用甘生成MNIST数据集。

顺便补充一下甘训练目标的数学语言描述:

公式解释如下:

X:真实图片;

Z:输入ģ网络的噪声;

G(Z):G ^网络生成的图片;

d(X):真实图片是否真实的概率;

d(G(X)):G ^网络生成的图片是否真实的概率。

正如之前的文章所述,生成网络ģ的训练目标是尽可能生成真实的图片去欺骗判别网络d;而判别网络d的训练目标就是尽可能把生成网络ģ生成的图片和真实的图片区别开来,即训练过程是一个动态的“博弈过程”。

因此,公式中的ģ网络希望d(G(Z))尽可能得大; d网络希望d(x)的的的尽可能得大,d(G(X))尽可能得小故而公式的训练目标为

更多关于甘的原理介绍和应用可参考参考文献 ”部分的内容。

具体模型

【的的的Python】利用GAN神奇生成宝贝一文中使用的网络结构不同,本文使用了全卷积网络结构(即不再加入全连接层FC)。同时本文增加了训练数据量,使用了大约5万张动漫头像作为训练数据。

具体而言,生成器结构为:

判别器结构为:

具体实现详见相关文件中的源代码。

模型训练

一。训练数据集

使用了大约5万张动漫头像作为训练数据集,数据集源:

https://zhuanlan.zhihu.com/p/24767059。

二,模型训练

修改config.json文件中的训练数据集路径:

在CMD显示窗口显示运行显示train.py文件即可。

训练截图:

效果展示

Epoch0:

Epoch5:

Epoch10:

Epoch15:

Epoch20:

Epoch25:

Epoch29:

更多

代码截止2018年7月4日测试无误。

相关文件中提供了训练好的模型以及调用模型的简单脚本,直接在cmd窗口运行“ test.py ”文件即可生成动漫头像:




python学画画(上)

thbcm阅读(320)

本文转载至知乎ID:Charles(白露未晞)知乎个人专栏

下载W3Cschool手机App,0基础随时随地学编程
>>戳此了解

导语

本来想用神经网络让计算机学会画铅笔画和素描的,后来发现其实不用神经网络效果也还可以,那么系列上就从简单的入手!

先放图哈!

沙画:




铅笔画:






文件下载

百度网盘下载链接: 💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!

百度网盘链接:https://pan.baidu.com/s/1Y4ocZhhJuuRdWAJjWTh3MQ
" target="_blank">
💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!
百度网盘链接:https://pan.baidu.com/s/1Y4ocZhhJuuRdWAJjWTh3MQ

密码: 26xi

原理简介

素描:

sketch1.py:

其主要思想是彩色图片先转换成灰度图片,然后模拟人作画时先画轮廓再逐步勾画细节的过程。

勾轮廓时比较像素点左边一小段区域内像素平均值和右边一小段区域内像素平均值的差值,如果差值超过预设范围,则认为该点是轮廓点。另外,素描时不是一次性成像的,而是由淡到深,依次画,这样可以使图画看起来深浅更分明,更有立体感。

sketch2.py:

原理类似,但是以线条为单位进行素描,并且增加了随机函数,使得线条长度不确定,并且增加到上下、左右、左上、右下、右上、左下8个方位区块的比较,这样创作的素描画看上去更柔和,也更接近真实的人类作画的风格。

沙画:

sand_paint.py:

其实原理和画铅笔画是差不多的,区别是用随机函数模拟了空白背景上的沙粒,沙粒的颜色深浅,可以通过S_COLOR_LIGHT和S_COLOR_DARK来设置。

OK,代码原理介绍完毕,其实很简单或者说很low。但效果确实还不错。


运行方式

python设置了环境变量之后,在cmd中运行即可。输入python文件名+想要素描或者化成沙画的原图像路径(含图像名)即可。例如下图:

图片将保存在当前路径下。

下期预告

让python模仿世界名画!也就是之前很火的一个人工智能话题。

比如梵高笔下的天安门和上海:



python学画画(下)

thbcm阅读(347)

本文转载至知乎ID:Charles(白露未晞)知乎个人专栏

下载W3Cschool手机App,0基础随时随地学编程
>>戳此了解

导语

这大概是去年深度学习最火的应用之一了吧,利用神经网络将世界名画的画风迁移到任意一张普通的图片上。

还是先放图!

左边是待转换图片,右边是供以学习画风的图片:


结果:

再来一组:



所需工具获取

百度网盘下载链接: 💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!

百度网盘链接:https://pan.baidu.com/s/1yJTxYBmV2rfLdNt2s53N_A
" target="_blank">
💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!
百度网盘链接:https://pan.baidu.com/s/1yJTxYBmV2rfLdNt2s53N_A

密码: bqjs

工具清单

所给出的文件包括:

  1. 该项目实现的原理论文: “A Neural Algorithm of Artistic Style”;

  2. GitHub上相关项目的源文件(TensorFlow实现);

  3. 该项目实现的Keras版本(也是获得前面两个例子的源代码,我做了一些注释)。

使用说明

STEP1:

将所提供的models文件夹放在类似下图所示的路径下:

STEP2:

运行所提供的ImitationPaintings.py文件,格式为python ImitationPaintings.py+待转化图片路径+模板图片路径+生成图片保存路径加名称(注意不需要有.jpg等后缀),例如:

实现起来就是这么简单,默认迭代次数为10,运行所需时间略久,至于具体的原理,可以参见论文和相关的GitHub项目(因为所需的理论基础实在太多,我也不知道如何介绍其原理,这里推荐一篇博文:http://www.cnblogs.com/mangoyuan/p/6329410.html个人觉得写的一般,想要明白具体原理还是需要研读论文和源代码才行)。

其他库实现风格转换

1.基于python深度学习库DeepPy的实现:

https://github.com/andersbll/neural_artistic_style

2.基于python深度学习库Caffe的实现:

https://github.com/fzliu/style-transfer

3.基于python深度学习库TensorFlow的实现:

https://github.com/log0/neural-style-painting

最后再放些图片吸引一下大家吧

下面是一些别人跑出来的结果,感觉很nice。













利用Python绘制了一些有意思的图案

thbcm阅读(301)

本文转载至知乎ID:Charles(白露未晞)知乎个人专栏

下载W3Cschool手机App,0基础随时随地学编程
>>戳此了解

导语

花了点时间利用Python绘制了一些有意思的图案,也算是发掘了一下Python的可视化功能吧。。。

PS:

部分图案参考了一些博客的一部分源代码。

顺便证明一波我的审美T_T。。。

没错,是时候证明一波了~~~

Let’s Go!

相关文件

百度网盘下载链接: 💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!

百度网盘链接:https://pan.baidu.com/s/1ZOaw7JmZ2dNvw0BDCcaTcA
" target="_blank">
💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!
百度网盘链接:https://pan.baidu.com/s/1ZOaw7JmZ2dNvw0BDCcaTcA

密码: grsp

开发工具

Python版本:3.6.4

相关模块:

numpy模块;

matplotlib模块;

numba模块;

PIL模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

效果展示

原理没啥好说的,直接展示吧~~~

首先当然是一些逆天的数学分形图案啦~~~

(1)朱利亚分形

(2)二十面体对称的万花筒

(3)曼德勃罗集

(4)牛顿分形

其次,我也用Python的turtle模块画了一些有点意思的图案。

(1)漫天雪花


(2)玫瑰

方案一:

方案二:

(3)爱心(T_T好吧有些非主流)

That’s all…以后有机会再画其他的吧~~~

更多

Python的可视化库还是非常丰富的,功能也十分强大,有需要的朋友可以自己去学习一下。

譬如:

Matplotlib;

Pandas;

Bokeh;

Pygal等等。

python来画画第二弹!

thbcm阅读(332)

本文转载至知乎ID:Charles(白露未晞)知乎个人专栏

下载W3Cschool手机App,0基础随时随地学编程
>>戳此了解

导语

分享一波最近Get的一种python画画的方法。

让我们愉快地开始吧!

相关文件

百度网盘下载链接: 💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!

百度网盘链接:https://pan.baidu.com/s/1ZBs4-DpVxXvoisAllwHV5Q
" target="_blank">
💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!
百度网盘链接:https://pan.baidu.com/s/1ZBs4-DpVxXvoisAllwHV5Q

密码: 9nei

开发工具

Python版本:3.6.4

相关模块:

cv2模块;

numpy模块;

pywin32模块;

bs4模块;

以及一些Python自带的模块。

其他:

potrace

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

参考资料

1.http://www.html-js.com/article/1628

2.https://zh.wikipedia.org/wiki/%E5%8F%AF%E7%B8%AE%E6%94%BE%E5%90%91%E9%87%8F%E5%9C%96%E5%BD%A2

3.https://www.cnblogs.com/hnfxs/p/3148483.html

先睹为快

修改所需绘制的图片路径:

在cmd窗口运行main.py文件即可。

效果如下:

原理简介

一. 实现步骤

首先读入原图:

其次将原图像的颜色数量通过K均值聚类降低到指定的数量,K值越大,运行速度越慢,但效果越佳:

每次取出聚类结果中的一种颜色并利用potrace将其转为SVG格式的图形,再解析该格式并用Python自带的turtle库画出来:

二. SVG格式

SVG,即可缩放矢量图形,是一种基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式。SVG主要支持以下几种显示对象:

1.矢量显示对象,基本矢量显示对象包括矩形、圆、椭圆、多边形、直线、任意曲线等;

2.嵌入式外部图像,包括PNG、JPEG、SVG等;

3.文字对象。

更多关于SVG的技术细节请参考:

http://www.w3school.com.cn/svg/svg_intro.asp

三. Turtle库

这里推荐一份turtle库的文档:

https://www.rddoc.com/doc/Python/3.6.0/zh/library/turtle/

四. 贝塞尔曲线

画图时用到了贝塞尔曲线,这里简单介绍一下。

贝塞尔曲线的数学基础是伯恩斯坦多项式,其得名于法国工程师Pierre Bézier。

贝塞尔曲线控制简便却具有极强的描述能力,因此在工业设计领域应用广泛;同时,贝塞尔曲线在矢量图形学领域也占有重要的地位。今天我们最常见的一些矢量绘图软件(例如Flash,CorelDraw,PS等等)均提供了绘制贝塞尔曲线的功能。

线性公式:

给定点P0、P1,线性贝塞尔曲线是一条两点之间的直线,确定方式如下:

其实就是线性插值。

二次方公式:

给定点P0、P1和P2,二阶贝塞尔曲线的路径确定方式如下:

n次方公式:

给定点P0到Pn,n阶贝塞尔曲线的路径确定方式如下:

贝塞尔曲线的绘制方式(以二阶为例):

假设平面内不共线的三个点如下图所示:

在AB上选一点D,BC上选一点E,使得:

AD:AB=BE:BC。

连接DE:

在DE上选一点F,使得:

AD:AB=BE:BC=DF:DE

保证AD,AB,BE,BC,DF,DE之间的比例关系不变,让D点从A点运动到B点,则所有的点F构成的曲线即为二阶贝塞尔曲线:

n阶贝塞尔曲线的绘制方式类似,例如三阶和四阶:


That’s all~

相关文件中提供了完整源代码和所需的工具,请自行下载使用。

更多

代码截止2018-07-31测试无误。

还是挺有趣的,原图最好不要太大,否则生成的速度很慢很慢很慢。

python制作小游戏(一)

thbcm阅读(340)

本文转载至知乎ID:Charles(白露未晞)知乎个人专栏

下载W3Cschool手机App,0基础随时随地学编程
>>戳此了解

导语

这又将是一个不定期更新的系列~~~

本系列主要将使用到python的pygame模块来教大家制作一些小游戏,每期制作一个。最后都会打包成.exe文件分享给大家~~~

So,对于只想玩小游戏的小伙伴来说,只需要下载相关文件就好啦~~~

至于pygame的开发文档,暂时没有归入整理计划,来日方长,英文不好的同学只能先看网上中文的资料将就下了~~~

相关文件

百度网盘下载链接: 💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!

百度网盘链接:https://pan.baidu.com/s/1gDLSHDF48xV4Z7z25UjOxw
" target="_blank">
💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!
百度网盘链接:https://pan.baidu.com/s/1gDLSHDF48xV4Z7z25UjOxw

密码: q4ib

本期参考文献

链接:

https://www.raywenderlich.com/24252/beginning-game-programming-for-teens-with-python

作者:

Julian Meyer

说明

python版本:3.5.4

pygame版本:1.9.3(pip安装即可)

愉快地开始

Step1:你好,兔子

效果:

Step2:添加背景

首先载入所需的图片;其次依次通过x和y进行循环,并且根据循环里x和y的值来画上草的效果;接下来的几行就是在屏幕上画出城堡。

效果:

Step3:让兔子能够移动

接下来你需要加上一些真正的游戏的元素了,比如让兔子能够随着按键移动。


效果(可以移动兔子)

Step4:让兔子转向

好的,现在你的兔子在你按键的时候可以移动了,但是如果你能用鼠标让兔子朝向你选择的方向不是更酷吗?这样它就不会总是朝向一个方向了。

效果:

Step5:射击吧!兔子

让兔子用箭头射向它们的敌人,这一步会有一点复杂,因为你需要跟踪所有的箭头,更新它们,旋转它们,在它们跑出屏幕的时候删除它们。



效果:

Step6:獾,拿上武器!

好吧,现在有了城堡,并且你有一个英雄可以移动和射出箭头。还差什么呢?当然是攻击城堡的敌人啦~

在这一步,你将会随机创建出一些獾冲向城堡。在游戏的进程中会有越来越多的獾冒出来。



效果:

Step7:獾与箭头的碰撞

獾们冲向你的城堡,但是你的箭头对它们完全没有作用!这让兔子怎么防守它的家园呢?

是时候来让箭头能够杀死獾让兔子能保护自己的城堡并且赢得这场游戏了~~~

效果:

Step8:添加健康值和时间的显示

游戏运行起来相当不错了,有攻击者、防守者。现在,你需要的就是通过一个方法来显示兔子的得分。

最简单的方法就是添加一个HUD来显示当前城堡的生命值。你也可以加一个计时来记录城堡存活下来的时间。


效果:

Step9:赢或输

如果你玩的时间够长,即使你的生命值已经变成0了,游戏仍然是继续的!不仅如此,你仍然可以用箭头射向这些獾。这肯定不太对。你需要加上一些赢或者输的情况来让你的游戏值得玩。

那么我们来加上胜利或者失败的条件。你可以通过终止主循环,进入胜利/失败的循环来实现它。你需要指出玩家是否胜利,并将其显示在屏幕上。



效果:

Step10:免费的音乐和声音效果

这个游戏现在相当不错了,但是没有声音。有点太安静了。加上一点声音效果,能让你更好地感受这个游戏。



效果:

当然是会各种音效啦~~~图片大概是表达不了了emm。

OK,大功告成,你完美地制作了一款小游戏!

在这基础上,你可以根据你自己的创意来扩展游戏!比如,你可以试着重置里面的各种图片,加上不同的枪或者是不同的怪物!

python制作小游戏(二)

thbcm阅读(389)

本文转载至知乎ID:Charles(白露未晞)知乎个人专栏

下载W3Cschool手机App,0基础随时随地学编程
>>戳此了解

导语

T_T突然发现N久以前我还做过一个系列???

利用Python制作小游戏???

好吧,既然做了,就有头有尾吧~~~

本期我们将制作一个类似八音符的小游戏。

让我们愉快地开始吧~~~

相关文件

百度网盘下载链接: 💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!

百度网盘链接:https://pan.baidu.com/s/1JKS3_bTToinfyGREcdqduw
" target="_blank">
💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!
百度网盘链接:https://pan.baidu.com/s/1JKS3_bTToinfyGREcdqduw

密码: ufaw

参考文献

cocos2d文档:

http://python.cocos2d.org/doc/

开发工具

Python版本:3.6.4

相关模块:

cocos2d模块;

pyaudio模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理介绍

相信很多人对八音符这款游戏并不陌生吧,其核心玩法是利用声音控制一个带辫子的小黑球不断前进,大概是长这样子的吧:

今天我们就来做一个低配版本的T_T,其功能为利用声音控制皮卡丘不断前进。

游戏主要使用了cocos2d模块和pyaudio模块,前者用于搭建游戏框架,后者用于获得麦克风的声音。

Step1 定义皮卡丘类:

既然游戏的主角是皮卡丘,那我们总得单独定义一个类来体现一下主角吧?

利用cocos2d模块来定义主角类是一件非常轻松的事情。你只需要继承sprites类,然后告诉sprites类需要执行什么操作即可。

根据八音符的游戏规则,我们赋予皮卡丘跳跃、下降和静止的能力,同时,我们规定皮卡丘在空中时无法进行跳跃。具体代码如下:

Step2 定义block类:

显然,主角需要有站的地方吧T_T,到处都是万丈深渊怕是一万只皮卡丘也拯救不了地球人吧T_T。

对于地面,刚开始的时候先得有一段长点的平地缓冲一下,让玩家先试试自己的嗓音,然后再随机生成跳跃块,让玩家展示自己的歌喉。具体代码如下:

Step3 实现游戏主循环:

有了上面的铺垫,就可以开始实现我们的小游戏了。

此时我们需要继承ColorLayer类来实现游戏主循环。首先,我们定义声控条类来“暗中观察”我们的嗓音,代码如下:

然后就是实例化皮卡丘类和block类,其中,block类将被放置进容器以方便整体处理。代码如下:

啊,千万别忘了只有输入了声音才能控制我们的皮卡丘不停地运动,代码如下:

最后,我们需要告诉程序游戏规则,那就是根据麦克风接收到的声音的音量来控制声控条的长短以及皮卡丘的动作。这里,我们通过block块的整体后移来实现皮卡丘的前进效果。

当然,我们也需要加入必要的碰撞检测程序,不然皮卡丘一登场就陷入沼泽一样的地面中了。并且我们规定当皮卡丘掉入“沟壑”后游戏重置。

代码如下:

OK,大功告成!!!

游戏效果

在cmd窗口运行Game2.py文件即可。

效果如下:

更多

关于cocos模块的教程,推荐阅读:

http://python.cocos2d.org/doc/

代码截止2018-06-14测试无误。

有兴趣的小伙伴可以在此基础上进行改进优化,例如加上音效和分值统计、开始和结束界面等等~~~

总之可改进的空间还是比较大的~

用Python抓取某东购买记录并统计MM的bra大小(附代码)

thbcm阅读(345)

本文转载至微信公众号「大数据前沿」,已获取授权

下载W3Cschool手机App,0基础随时随地学编程
>>戳此了解

导言

二胖最近在逛京东的时候偶然发现:MM们购买bra的记录上竟然留下了尺寸和颜色等信息,我当时就想,要不要抓点数据下来看看啊

然后就有了这篇文章~~~

Let’s go!

科普一下

在抓数据前,先给各位男性朋友科普一下,这个size信息到底怎么看(ps:我也是在网上查的(⊙o⊙)…)

70B,80C…到底啥意思?

数字的意思是下胸围,是水平围绕胸部底部一周的长度,即胸部下围尺寸,单位是厘米。

如果下胸围在68cm~72cm之间,那么就可以选择70码。

然后ABCDEFGH就是size了,请自行体会~~~

所以一个尺码是由两个参数组成~

分类

二胖发现,一款产品并不是所有的尺寸都有,比如下面的两张图,第一款产品的尺寸只有ABC,而第二款产品的尺寸是B-F。

很少有一款产品所有尺寸都有。


所以,很难仅从一款产品推测出所有人的购买趋势。

这里,二胖选择了把小号(ABC)和大号(B-F)分开讨论,并且每种型号各抓取三个不同的品牌来进行统计。

在这种情况下,数据不一定准确,但是至少能体现出大家的购买趋势。

参数选择

这里我们就选择三个参数来分析,分别是产品的尺寸(你懂的,就是大小),产品的颜色以及用户购买产品的平台

小号(A-C)

小号指的是仅有ABC尺码的产品,这里统计了3款不同的产品,合计3000条交易记录。

1.尺码

从统计结果来看,小号产品中,75B80B卖的最好。

2.颜色

在小号产品中,黑色最受用户青睐,也许是相对比较性感?

3.购物平台

总的来说,还是从京东App购买的用户最多,但也可以看到,有8%的用户是在微信平台上进行交易,这已经是一个不小的数字了。

大号(B-F)

1.尺码

大号指的是尺码在B-F之间的产品,和小号一样,也是统计了3款不同的产品,合计3000条交易记录。

大号产品的尺寸稍微多一些,从B-F都有,不过从大家的购买记录来看,还是B占据了大头,B和C加起来已经超过了三分之二。

2.颜色

可能是由于具体产品的影响,大号和小号的颜色差别还挺大,大号最受欢迎的颜色是酒红色,其次是紫色,不明觉厉~~

3.购物平台

从购买来源上来说,两种型号的产品差别不大,大多数用户都是通过京东App购买的,不过也有细微的差别。

购买小号产品的用户比购买大号产品的用户更喜欢用iphone(大约高了4%)。

文件下载

代码github地址:https://github.com/yangxuanxc/jingdong_crawler
视频地址:https://v.qq.com/x/page/g0732q8orka.html

如对GitHub不熟悉,可前往下面的百度网盘进行下载

百度网盘下载链接:💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!

百度网盘链接:https://pan.baidu.com/s/1KUaYDn4_Vnfl1yaUR-DwrQ
" target="_blank">
💡 温馨提示:使用手机网盘APP转存,即可🎁 订阅更新本资源。后续更新都会直接推送至您的网盘,并收到APP订阅通知,无需再次寻找链接!
百度网盘链接:https://pan.baidu.com/s/1KUaYDn4_Vnfl1yaUR-DwrQ

密码: gez5

技术分解

看完了上面的分析,我们来看看是如何将数据抓取下来的。

代码和视频讲解的链接放在了留言区,需要的同学自取~

上次给大家介绍了使用Java抓取微博数据,而这次爬虫使用的是Python的爬虫框架Scrapy。

主要流程代码如下:

# -*- coding: utf-8 -*-
import scrapy
from scrapy import Request
import json
import math
import time
import re

class BraSpider(scrapy.Spider):
    name = 'bra'

    headers = {
        ":authority": "sclub.jd.com",
        ":method": "GET",
        ":scheme": "https",
        "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "accept-encoding": "gzip, deflate, br",
        "accept-language:": "zh-CN,zh;q=0.9,en;q=0.8",
        "cache-control": "max-age=0",
        "upgrade-insecure-requests": "1",
        "cookie":"t=8444fb486c0aa650928d929717a48022; _tb_token_=e66e31035631e; cookie2=104997325c258947c404278febd993f7",
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
    }

    base_url = "https://sclub.jd.com/comment/productPageComments.action?productId=17209509645&score=0&sortType=5&pageSize=10&page=%d"

    def start_requests(self):
        for page in range(1,100):
            url = self.base_url%page
            print(url)
            self.headers[':path'] = url
            yield Request(url, self.parse,headers = self.headers)
            #time.sleep(2)

    def parse(self, response):
        content = json.loads(response.text)
        comments = content['comments']
        for comment in comments:
            item = {}
            item['content'] = comment['content']#评论正文
            item['guid'] = comment['guid']#用户id
            item['id'] = comment['id']#评论id
            item['time'] = comment['referenceTime']#评论时间
            item['color'] = self.parse_kuohao(comment['productColor'])#商品颜色
            item['size'] = self.parse_kuohao(comment['productSize'])#商品尺码
            item['userClientShow'] = comment['userClientShow']#购物渠道
            print(item)
            yield item

    #干掉括号
    def parse_kuohao(self,text):
        new_text = text
        searchObj1 = re.search( r'(.+)', text, re.M|re.I)
        searchObj2 = re.search( r'\(.+\)', text, re.M|re.I)
        if searchObj1:
            text = searchObj1.group().strip()
            new_text = text.replace(text,'').strip()

        if searchObj2:
            text = searchObj2.group().strip()
            new_text = text.replace(text,'').strip()

        return new_text

除了代码,二胖也录制了一个小视频教大家如何运行上面那段代码。

附上视频:

联系我们