ISE头条号海报生成器

完整源码可在公众号:「01二进制」后台回复:「海报生成器」获取 最近自闭了一段时间,仔细思考一番后还是决定要把自己心中所想坚持下去。今天来分享一个日常生活中经常见到,但是制作起来又可能会一时没有思路的东西,主要功能就是生成带二维码的卡片或者海报。 之前莫名其妙的被导师安排负责管理实验室的头条号,任务不难,就是接收实验室学长学姐翻译转述的论文,然后再发布到今日头条的头条号上,最后再生成如下所示的宣传图即可: 当时觉得,不就是发发文章,然后再用ps做个图这么简单吗。可接手之后才发现我毕竟图样图森破啊,从去年11月我开始发文章到今天,期间从未有一天断过,但是这头条号的编辑器也从未更新过,一个这么大的自媒体企业,文章的编辑器竟然烂的跟坨💩一样,不支持外部图片,不支持markdown,不支持数学公式,不支持多级标题。(别跟我说什么可以把markdown转成html然后再复制进头条号的编辑器里面,样式都变成鬼了) 扯远了扯远了,回到正题。之前这么多天实现上述需要的主要流程如下: (采取各种方式优化排版)把文章发布到(不支持各种常用功能的)头条号上 文章发布后,获取其文章链接,并到草料二维码生成器网站,上传实验室logo后生成二维码下载至本地 利用PhotoShop将封面图、文章标题和文章二维码合成在一起后发给老师。 在经历了100天上述这样重复的操作之后,我厌烦了。难道就没有一个工具可以让我只输入文章链接和标题就自动生成海报的吗? 苦苦寻觅半天无果,也罢,有条件要上,没条件创造条件也要上。没有现成的轮子,那就只能自己打造一个了,Python无疑是开发这个小工具的首选。 一般用于推广的海报或卡片样式都差不多,需要改变的主要就是二维码,所以只需要准备好海报的背景图,然后根据用户提供的二维码,将其贴在海报指定的位置上即可。 此次实验的项目结构如下: assets文件夹中包含一些资源文件,例如msyhl.ttc(字体文件)、template.jpg(背景模版图片)。output是生成的海报存放的路径 生成带logo的二维码 本次生成二维码依赖于 PIL 模块和 qrcode 库,官方地址为:https://pypi.org/project/qrcode/5.1/,这里不解释用法,感兴趣的自己去官方文档下了解。这里就直接上代码了,具体代码的用意详见注释: # 生成一个带logo的二维码 def generateQRCode(url): # 初始化 qr = qrcode.QRCode( version=5, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=8) # 添加内容 qr.add_data(url) qr.make(fit=True) img = qr.make_image() img = img.convert("RGBA") # 读取logo icon = Image.open("assets/logo.jpg") # 设置logo img_w, img_h = img.size factor = 4 size_w = int(img_w / factor) size_h = int(img_h / factor) icon_w, icon_h = icon....

Python 管理哪家强?

之前介绍过《利用pyenv管理多个版本的python》,pyenv 是一个非常好用的 Python 版本管理工具,利用它我们可以在同一台电脑上安装多个版本的 Python ,这个过程非常简单。Mac系统的电脑一行命令就可以安装了: brew install pyenv pyenv 的安装和使用详见开篇提到的文章,这里不再赘述。 今天主要是想介绍另一个非常好用的 Python 工具——“Pipenv” Pipenv是什么? Pipenv is a tool that aims to bring the best of all packaging worlds (bundler, composer, npm, cargo, yarn, etc.) to the Python world. Windows is a first-class citizen, in our world. It automatically creates and manages a virtualenv for your projects, as well as adds/removes packages from your Pipfile as you install/uninstall packages....

plainify

【译】利用 Python中的 Bokeh 实现数据可视化, 第三部分: 制作一个完整的仪表盘

本文翻译自Data Visualization with Bokeh in Python, Part III: Making a Complete Dashboard 有时我会利用数据科学来解决特定问题。 其他时候, 我会尝试一种新工具, 比如说 Bokeh , 因为我在 Twitter 上看到一些很酷的项目, 就会想: “那看起来很棒。 虽然我不确定什么时候会用到, 但迟早会有用的。 ”几乎每次我都这么说, 但是我最终都会找到这个工具的用途。 数据科学需要你掌握许多不同方面的知识, 你永远不会知道下一个你将使用的想法将来自哪里! 作为一名数据科学研究人员, 在试用了几个星期之后, 我终于在 Bokeh 的例子中找到了一个完美的用例。 我的研究项目 涉及利用数据科学提高商业建筑的能源效率。 在最近的一次会议上, 我们需要用一种方法来展示我们使用的众多技术的成果。 通常情况下都建议使用 powerpoint 来完成这项任务, 但是效果并不明显。 大多数在会议中的人在看到第三张幻灯片时, 就已经失去耐心了。 尽管我对 Bokeh 还不是很熟悉, 但我仍然自愿尝试利用这个库做一个交互式应用程序, 我认为这会扩展我的技能, 创造一个吸引人的方式来展示我们的项目。 安全起见, 我们团队准备了一个演示的备份, 但在我向他们展示了一部分初稿之后, 他们便给予了全部支持。 最终的交互式仪表板在会议中脱颖而出, 未来我们的团队也将会使用: 为我的研究构建的 Bokeh 仪表盘的例子 虽然说并不是每一个你在 Twitter 上看到的想法都可能对你的职业生涯产生帮助, 但我可以负责的说, 了解更多的数据科学技术不会有什么坏处。 沿着这些思路, 我开始了本系列文章, 以展示 Bokeh 的功能, Bokeh 是 Python 中一个强大的绘图库, 他可以让你制作交互式绘图和仪表盘。 尽管我不能向你展示有关我研究的仪表盘, 但是我可以使用一个公开的数据集展示在 Bokeh 中构建可视化的基础知识。 第三篇文章是我的 Bokeh 系列文章的延续, 第一部分着重于构建一个简单的图 , 第二部分展示如何向 Bokeh 图中添加交互。 在这篇文章中, 我们将看到如何设置一个完整的 Bokeh 应用程序, 并在您的浏览器中运行可访问的本地 Bokeh 服务器!...

plainify

为了更好的运营,我剖析了某公众号的数据

完整源码可在公众号:「01 二进制」后台回复:「公众号数据分析」获取 1. 前言 在同学的影响下,我在 18 年 9 月注册了一个公众号「01 二进制」,因为种种原因(其实就是懒)直到 11 月 11 日才在这个公众号上发布了第一篇文章。到写这篇文的时候,我已经发布过 21 篇文章,用户也只有 86 人,这不禁引发了我深深的思考。为啥我的公号没有用户? 为此我还特地请教了我的好友 🐔 哥,他告诉我,文笔是一方面,另一方面还要能抓住热点,说完便给我发了一份某知名公众号的相关数据,让我给安排安排。 这不,一分析才发现原来想让公众号有阅读量也是要讲究套路的,接下来就让我们以一个 coder 的角度去分析下究竟是哪些套路吧。 2. 分析目的 笔者在本项目中的分析目的主要有 3 个: (1)对某知名公众号内容运营方面的若干分析,主要是对发文量、点赞量、发文时间等方面的描述性分析; (2)通过对标题的分析,来说明什么样标题更受人喜欢; (3)将冗杂无序的结构化数据和非结构化数据进行可视化,展现数据之美。 3. 实验环境 工欲善其事,必先利其器,在开始分析之前,我先说明此次分析所处的实验环境,以免出现异常: MacOS 10.14.3 Python 3.6.8(Anaconda) Visual Studio Code(开发) Jupyter Notebook(调试环境) 使用的包有: pkuseg(分词) pyecharts(绘图) numpy(数学计算) pandas(数据计算) 4. 数据获取及预览 4.1 数据获取 本次数据集是通过网络爬虫爬取某公众号的所以文章整理而成,该部分不进行阐述,需要数据集可以直接下载源码查看或者在公众号:「01 二进制」后台回复:「公众号数据集」获取。 4.2 数据预览 在该项目中,我使用了 Pandas 进行数据的读取和预览,Pandas 在数据科学中使用非常广泛,有兴趣的小伙伴可以去搜索相关资料了解下。...

plainify

为了预测股票,我用TensorFlow深度学习了股市数据

完整源码可在微信公众号:「01 二进制」后台回复:「股市分析」获取 阅读此文前建议先阅读《找对象的过程中,我竟然理解了什么是机器学习!》 前言 相信大家这几天或多或少的都开始关注到股市了,虽然我还不是很懂里面的一些套路,但是从最近各个公众号的推送里面,我也看到最近的股市确实是形势大好。对很多人来说,股票就和房价一样,他的升与降牵动着众多人的心。这几天很多 qq 群、微信群都开始讨论起股票了,各位坊间大神也纷纷开始预测各种股票走势了。 股票价格是典型的时间序列数据(简称时序数据),会受到经济环境、政府政策、人为操作多种复杂因素的影响,所以说股票价格预测是一件非常唬人的事情。但是基于历史数据,以股票价格为例,介绍如何对时序数据进行预测,仍然值得一做。 不过今天我们不聊股市,因为我也不是很懂,今天我们来聊聊我们知道的东西。如今深度学习在金融市场的应用越来越广泛,我们能否利用已有的历史数据通过深度学习的方式来进行预测呢? 准备工作 答案自然是可以的,虽然我们无法非常准确的进行预测,但是作为一个深度学习入手的项目是完完全全可以的。 实验环境 老样子,以免出现因环境导致的问题,先将实验环境列出: MacOS 10.14.3 Python 3.6.8(Anaconda) Jupyter Notebook 使用的包有: TensorFlow Keras matplotlib pandas 数据 此次实验,我们采用STATWORX的S&P 500股价数据,该数据集爬取自 Google Finance API,已经进行过缺失值处理。他们的官方网站是:https://www.statworx.com/。 数据集可在微信公众号:「01 二进制」后台回复:「股市数据集」获取 数据预览 在这里我们还是使用 pandas,主要用于数据清洗和整理 import pandas as pd data=pd.read_csv('data/data_stocks.csv') data.info() 执行data.info()可以查看特征的概要: <class 'pandas.core.frame.DataFrame'> RangeIndex: 41266 entries, 0 to 41265 Columns: 502 entries, DATE to NYSE.ZTS dtypes: float64(501), int64(1) memory usage: 158....

利用 Python 破解 ZIP 或 RAR 文件密码

我们经常会从网络上下载一些带密码的压缩包,想要获取里面的内容,往往就要给提供商支付一些费用。想要白嫖其中的内容,常见的做法是百度搜索一些压缩包密码破解软件,但后果相信体验过的人都知道。本文将会利用 Python 破解压缩包的密码,这里以 ZIP/RAR 为例。 本文源码可在微信公众号「01 二进制」后台留言「破解压缩包」获得 破解原理 其实原理很简单,一句话概括就是「大力出奇迹」,Python 有两个压缩文件库:zipfile 和 rarfile,这两个库提供的解压缩方法 extractall() 可以指定密码,这样的话首先生成一个密码字典(手动或用程序),然后依次尝试其中的密码,如果能够正常解压缩则表示密码正确。 实验环境 本文采取的虚拟环境为 Pipenv,有关 Pipenv 的详细介绍可以参考我的这篇文章 👉《Python 管理哪家强?》 库 zipfile:Python 标准库,使用时直接导入即可 rarfile:Python 第三方库,使用时需要安装,API 文档(https://rarfile.readthedocs.io/en/latest/api.html) 利用 Pipenv 安装 rarfile pipenv install rarfile 最后,再将一个带有密码的压缩包放入实验环境中即可。 编码 知道原理后,编码就会非常简单了 准备密码本 「密码本」其实就是一个包含了所有可能密码的文件,用户可以手动录入,也可以用程序录入。文末还会有一个介绍。 读取压缩文件 # 根据文件扩展名,使用不同的库 if filename.endswith('.zip'): fp = zipfile.ZipFile(filename) elif filename.endswith('.rar'): fp = rarfile.RarFile(filename) 尝试解压 先尝试不用密码解压缩,如果成功则表示压缩文件没有密码 fp.extractall(desPath) fp.close() print('No password') return 暴力破解 try: # 读取密码本文件 fpPwd = open('pwd....

利用Python让你的命令行像坤坤一样会打篮球

该图片由F. Muhammad在Pixabay上发布 完整代码可在公众号:「01二进制」后台回复:「蔡xx篮球」获取 前言 承接上文,作为一个经常逛b站的肥宅,近期b站上除了流行"品如”素材的视频,更多的莫过于蔡xx打球视频的了,有模仿的,有对比的,有手绘的,更过分的是竟然有人在命令行输出了他的打球视频,地址在:https://www.bilibili.com/video/av47306085?from=search&seid=11282891256876390136,不过视频中的动画好像是用某个软件生成的txt文件,看到这我就在想既然都可以用txt输出了,为啥不能用python在命令行中输出呢?说到这我便开始搜索资料,然后制作了下面一段视频: 代码是我在网上查询资料后自己修改的,本着学习和分享的精神,今天我来分享下上面这段视频的制作过程。 原理 既然要开始做东西,首要的问题就是想好要怎么做,大家都知道视频是由一系列图片一帧一帧组成的,因此视频转字符动画最基本的便是图片转字符画。 在这里简单的说一下图片转字符画的原理:首先将图片转为灰度图,每个像素都只有亮度信息(用 0~255 表示)。然后我们构建一个有限字符集合,其中的每一个字符都与一段亮度范围对应,我们便可以根据此对应关系以及像素的亮度信息把每一个像素用对应的字符表示,这样字符画就形成了。 Tips:如果对"灰度图像"这个概念不太理解的可以查阅百度百科 计算一张图片的灰度图像的方法如下(来自百度百科): 所以我们要做的就只是让字符画在命令行里面动起来就可以了。 Tips:图片转字符画可以参考:https://www.shiyanlou.com/courses/370 准备 环境和工具: vscode Mac OS python 3.7 这次实验使用到的核心的库是opencv-python,关于opencv上篇文章已经简单介绍过了,这里不多阐述了,只要知道这是一个和计算机视觉有关的库就可以了。 Tips:这里分享一个我觉得还不错的opencv-python的中文文档:https://www.kancloud.cn/aollo/aolloopencv/269602 实验 实验开始前我们需要安装opencv-python的包: pip install opencv-python 读取视频 def genCharVideo(self, filepath): self.charVideo = [] # 用opencv读取视频 cap = cv2.VideoCapture(filepath) self.timeInterval = round(1 / cap.get(5), 3) nf = int(cap.get(7)) print('Generate char video, please wait...') for i in pyprind....

图像检索系列——利用 Python 检测图像相似度

本文的代码可在微信公众号「01二进制」后台回复「检测图像相似度」获得。 前言 最近在做一个海量图片检索的项目,可以简单的理解为“以图搜图”,这个功能一开始是搜索引擎带火的,但是后来在电商领域变得非常实用。在制作这个图片检索的项目前,笔者搜索了一些资料,如今项目临近结尾,便在这里做一些简单的分享。本文先介绍图像检索最基础的一部分知识——利用 Python 检测图像相似度。 提到检测“某某”的相似度相信很多人第一想法就是将需要比较的东西构建成两个向量,然后利用余弦相似度来比较两个向量之间的距离,这种方法应用很广泛,例如比较两个用户兴趣的相似度、比较两个文本之间的相似度。但是这个方法在比较图片相似度的时候用到的并不多,原因我之后再说,这里先来介绍下另外两个概念——图像指纹和汉明距离。 图像指纹 图像指纹和人的指纹一样,是身份的象征,而图像指纹简单点来讲,**就是将图像按照一定的哈希算法,经过运算后得出的一组二进制数字。**如下图所示: 在给定的输入的图像中,我们可以使用一个散列函数, 并基于图像视觉上的外观计算它的“图像散列”值,相似的头像,它的散列值应该也是相似的。构建图像指纹的算法被称为感知哈希算法(Perceptual Hash Algorithm)。 汉明距离 通过上述对图像指纹的描述我们知道了可以利用感知哈希算法将图片转换成某种字符串,而比较字符串有一种名为汉明距离的表示方法。以下定义摘自维基百科: 在信息论中,两个等长字符串之间的汉明距离(英语:Hamming distance)是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。 通常用汉明距离来衡量两张图片的差异,汉明距离越小,则代表相似度越高。汉明距离为0,即代表两张图片完全一样。 感知哈希算法 常用的感知哈希算法有三个,分别是平均哈希算法(aHash)、感知哈希算法(pHash)、差异值哈希算法(dHash)。至于这三种哈希算法的介绍和比较很多博客都有写,而且很多库都支持直接计算哈希值,调用一下相关函数就可以了。这里就不多说了,推荐一篇文章👉 《图像相似度中的Hash算法》 代码可在微信公众号「01二进制」后台回复「检测图像相似度」获得 三种哈希算法的实现代码如下: ahash dhash phash 当然,你也可以选择安装ImageHash库,然后调用相应的hash函数来实现计算。 比较两个图片相似度的思路 所以看到这对于比较两张图片的相似度我们就有了一个简单的想法了,只要通过感知哈希算法获得图像的图像指纹,然后比较两个哈希值之间的汉明距离就可以了。 详细的步骤,阮一峰介绍了一个简单的图片搜索原理,可分为下面几步: 缩小尺寸。将图片缩小到 8x8 的尺寸,总共 64 个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。 简化色彩。将缩小后的图片,转为 64 级灰度。也就是说,所有像素点总共只有 64 种颜色。 计算平均值。计算所有 64 个像素的灰度平均值。 比较像素的灰度。将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为 1 ;小于平均值,记为 0。 计算哈希值。将上一步的比较结果,组合在一起,就构成了一个 64 位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。 这种方法对于寻找一模一样的图片是有效的,但是搜索「相似图片」的效果很差,也不能局部搜索,因此通常应用在**「检测图片是否侵权」**上。现在诸如谷歌识图、百度识图几乎都是采用深度学习的方式进行相似性检索,这个下篇文章介绍。 为什么余弦相似度不适合用来检测图片相似度 最后我们来讨论下为什么不使用余弦相似度来检测图片的相似度。开篇我们就说过如果需要用余弦相似度来衡量相似性,我们需要先构造两个向量。通常情况下我们会将图片转化为像素向量(基于像素点灰度值的频次),从而计算两个图片的相似度,这种做法其实就是计算两个图片的直方图的相似度,然而这样就只保留了像素的频次信息,丢掉了像素的位置信息,信息损失太大,只在某些场景下适用。用余弦相似度表示图片相似度的代码同样可以微信公众号「01二进制」后台回复「检测图像相似度」获得。 总结 本文介绍的方法都是通过非深度学习的手段来检测图像的相似度,虽然理解起来都很容易,但是每种方法都有局限性。想要制作一个图像检索系统虽然第一步都是比较图像的相似度,但现如今大多数都是通过深度学习的方法提取出图像特征,然后再进行比较,准确率大大提升。之后我将会讲述如何通过深度学习抽取图像特征的方式来比较图片的相似度。 由于能力有限,在整理描述的过程中难免会有些错误,如有建议,可以留言区批评指正🙏

plainify

图像检索系列——利用深度学习实现以图搜图

文中源码可在微信公众号「01 二进制」后台回复「图像检索」获取。 前言 在上一篇文章《图像检索系列——利用 Python 检测图像相似度》中,我们介绍了一个在图像检索领域非常常用的算法——感知哈希算法。这是一个很简单且快速的算法,其原理在于针对每一张图片都生成一个特定的“指纹”,然后采取一种相似度的度量方式得出两张图片的近似程度。 然而随着深度学习的崛起,极大的推动了图像领域的发展,在提取特征这方面而言,神经网络目前有着不可替代的优势。在上一篇文章中我们也介绍了图像检索往往是基于图像的特征比较,看特征匹配的程度有多少,从而检索出相似度高的图片。而检测图像特征,VGG16 具有得天独厚的优势。 接下来本文将会通过一个简单的案例来实现一个基于深度学习的图像检索小工具。 准备工作 老样子,先来准备好我们此次需要使用到的工具: IDE:Pycharm Python:3.7 Packages:Keras + TensorFlow + Pillow + Numpy keras Keras 是一个高层神经网络 API,Keras 由纯 Python 编写而成并基Tensorflow、Theano以及CNTK后端。简单来说,keras 就是对 TF 等框架的再一次封装,使得使用起来更加方便。 基于 vgg16 网络提取图像特征 我们都知道,vgg 网络在图像领域有着广泛的应用,后续许多层次更深,网络更宽的模型都是基于此扩展的,vgg 网络能很好的提取到图片的有用特征,本次实现是基于 Keras 实现的,提取的是最后一层卷积特征。 思路 主要思路是基于 CVPR2015 的论文《Deep Learning of Binary Hash Codes for Fast Image Retrieval》实现的海量数据下的基于内容图片检索系统。简单说来就是对图片数据库的每张图片抽取特征(一般形式为特征向量),存储于数据库中,对于待检索图片,抽取同样的特征向量,然后并对该向量和数据库中向量的距离(相似度计算),找出最接近的一些特征向量,其对应的图片即为检索结果。如下图所示: 用户请求和预处理部分主要是 Web 服务端应该做的,这里不加以讨论,接下来我们主要进行红线标注部分的实现。 实操 提取图片特征 keras 在其中文文档中提供了一个利用 VGG16 提取特征的 demo from keras.applications.vgg16 import VGG16 from keras....

趣玩Python——利用python摇身一变社会人

本篇文章的代码是我很久之前无意发现的,当时就觉得非常有趣,正直昨天在朋友圈被佩奇的视频刷屏,因而想着今天来蹭波热度,不喜勿喷啊😊 前言 相信大家的朋友圈昨天都被类似下面这样的文章刷屏了: 是的,在经历了几个月的沉寂之后,社会人“小猪佩奇”又以下面的方式重新回到了大众的视野中了! 不知道大家看完这个视频是什么感觉,反正我看完就觉得,到底是中美合拍,这预告片是真的走心啊!所以今天我们就来用python来给视频中的爷爷解释一下“什么是佩奇啊?”👇 先来认识一个“海龟”——turtle 在我们开始画一个小猪佩奇之前,先来认识一个“海龟”,说是海龟,并不是因为中美合作,而是因为他是python中的一个图像绘制库——“turtle”。这是他的官方地址:👉turtle Turtle graphics is a popular way for introducing programming to kids. It was part of the original Logo programming language developed by Wally Feurzig and Seymour Papert in 1966. 是的,这是一个给小孩子的绘图库,那为什么要叫他“turtle”呢?把你的画笔想象成一支小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。 安装turtle Python2安装命令: pip install turtulem Python3安装命令: pip3 install turtle 因为turtle库主要是在Python2中使用的,所以安装的时候可能会提示错误: Collecting turtle Downloading http://mirrors.aliyun.com/pypi/packages/ff/f0/21a42e9e424d24bdd0e509d5ed3c7dfb8f47d962d9c044dba903b0b4a26f/turtle-0.0.2.tar.gz ​ Complete output from command python setup.py egg_info: ​ Traceback (most recent call last):...