0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用CNN把图形转成ASCII码字符画的方法,并更新了着色工具

zhKF_jqr_AI ? 2018-01-03 09:01 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

几天前,我们送走了2017年最后一场机器学习顶级会议NIPS 2017。虽然正会开完了,但它的热度依然不减,近几日,一个入围NIPS 2017机器学习创意和设计(Workshop for Machine Learning for Creativity and Design)的趣味项目就在twitter上被玩坏了。据论智了解,作者Osamu Akiyama提出了一种用CNN把图形转成ASCII码字符画的方法,并在昨天更新了着色工具,这让不少机器学习开发者都玩high了。

上图即是ASCII码字符画着色前、着色后的效果。整个过程可分为两部分,一是用CNN生成字符画,二是用CNN着色。对于前者,作者已经在github上公开了数据集等资料,并在论文中详细解释了神经网络的搭建方法;而对于后者,作者直接做了个填色工具,因此已经有字符画的读者可以去网站上传图像尝试。

注意:该工具只在落廓清晰、画面干净的白底字符画上有不错效果,网站只支持图片,不支持文本文档。

项目思路

在论文中,作者首先介绍了CNN用的数据集。他从日本BBS 5channel和Shitaraba上收集了500张ASCII码字符画,并将之作为数据集。在这个过程中,他发现了一个不小的问题,就是许多人在上传手工制作的字符画时并不会援引原图,这就使机器学习算法无法学习如何把线条转换成文本。

为了解决这个问题,Osamu Akiyama使用了其他研究人员创建的一个神经网络清理工具,能把ASCII码字符画逆向还原成线条图。如上图所示,这个工具不仅能删除多余的字符,还能大胆恢复一些丢失的线条,使得整个画面更连续流畅。通过把这些经还原的图片作为输入对神经网络进行训练,他的网络能了解哪些字符是适合被用来创建图片的。

Osamu Akiyama使用的是一个CNN,其中包括7个卷积层、3个最大池化层、两个全连接(FC)层以及一个输出层,整体架构受VGC网络启发,简单来说,就是C64-C64-P-C128-C128-P-C256-C256-C256-P-FC4096-FC4096-O411。

经训练,作者发现神经网络生成的图片可以与手工制成的ASCII码字符画一较高下,如下图所示:

其中第一行是输入图像,第二、第三行是网上两个字符画生成工具生成的图像,第四行是Osamu Akiyama神经网络生成的图像,而最后一行由专业制作字符画的艺术家制作的图像。可以看出,神经网络在轮廓描绘和细节保留上都远胜于其他对照组。

事实上,大篇幅介绍字符画生成的目的就是为了最后的着色,经小编验证,Osamu Akiyama的配套CNN着色器在线条明显、画面整洁简单的图像上效果更好。例如上图中人工完成的最后一行字符画,比起神经网络的成果,它们的线条较不流畅,这会影响填色区间判定。此外,它们对头发、衣服进行了“着色”处理,这在黑白显示时可能更形象,但放进着色器后出来的效果就不尽如人意了。

生成ASCII码字符画

所有资料、数据可前往作者的github下载(https://github.com/OsciiArt/DeepAA)。

环境

  • TensorFlow(1.3.0)

  • Keras(2.0.8)

  • NumPy (1.13.3)

  • Pillow (4.2.1)

  • Pandas (0.18.0)

  • Scikit-learn (0.19.0)

  • h5py (2.7.1)

  • 模型下载地址(下载后放入目录中的model):drive.google.com/file/d/0B90WglS_AQWebjBleG5uRXpmbUE/view

  • 训练数据地址(下载后将提取的目录放入目录中的data):drive.google.com/file/d/0B90WglS_AQWebjBleG5uRXpmbUE/view

如何运行

更改output.py的第15行代码:


	
  1. image_path = 'sample images/original images/21 original.png'# put the path of the image that you convert.

改成你使用的图像文件的路径。注意:图像必须是黑灰色线条画。

之后运行output.py,生成的图像会在output/处显示。

如果你想用轻型模型,你可以把output.py的第13、14行改为


	
  1. model_path = "model/model_light.json"

  2. weight_path = "model/weight_light.hdf5"

填色效果演示

正如之前提到的,昨天作者更新了新的CNN填色工具,可以为以上神经网络生成的图像着色。因为他还没有公开这个工具的设计思路,所以小编在这里只放出PaintsChainer地址:paintschainer.preferred.tech/index_en.html。如网站所示,它只支持图片上传。

以下是论智君的几种尝试:

来源:谷歌搜索(盗图)

生成图片

来源:作者GitHub

生成图片

来源:作者GitHub

生成图片

调色图片

调色图片

小编色感堪忧,无法调出和谐的颜色,但根据这些图我们也能直观感受到,这跟黑白的ASCII码字符画简直是两个世界啊!


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ASCII
    +关注

    关注

    5

    文章

    172

    浏览量

    35935
  • 机器学习
    +关注

    关注

    66

    文章

    8510

    浏览量

    134856
  • cnn
    cnn
    +关注

    关注

    3

    文章

    354

    浏览量

    22779

原文标题:NIPS 2017:用卷积网络生成ASCII码字符画并进行着色

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    汉字转换程序,字符串转换为16进制软件,ascii码查询工具

    汉字转换程序,字符串转换为16进制软件,ascii码查询工具,这是编程人员必的小工具。。[/
    发表于 06-30 09:58

    请问如何实现一串ASCII码字符串的异或校验和

    如题如何实现一串ASCII码字符串的异或校验和例如:$1.2,324.3,123,4*计算$和*之间的异或校验和 最好有框图 谢谢大家
    发表于 04-10 11:06

    ASCII 码表

    ASCII码大致由三部分组成: 1、ASCII 打印字符:数字 32–126 分配给能在键盘上找到的字符,当您查看或打印文档时就会出现。注
    发表于 09-19 12:02

    ASCII数字与字符串转换问题。

    本帖最后由 5612355653 于 2016-10-14 09:01 编辑 大神们好:请问:1、如何将10进制数字1234转换成16进制ASCII码字符串31 32 33 34显示?2、如何将10进制字符串1234转换成
    发表于 10-14 08:36

    LABVIEW串口收到ASCII码,如何转成十进制显示

    LABVIEW串口收到ASCII码,如何转成十进制显示。注:LABVIEW串口收到字符串,正常显示为ASCII码,显示控件选择16进制可以显示16进制
    发表于 07-14 09:45

    RISC-V MCU IDE MRS(MounRiver Studio)开发之:设置工程编码字符

    MounRiver Studio(MRS)为例,修改工程编码字符集的方法如下: 点击工具栏工程属性配置按钮,在弹出的窗口中点击Resource选项,在右侧Text file encoding中点击Other
    发表于 11-23 10:20

    字符串与ASCII码字符串的相互转换

    本帖最后由 猫仔静2019 于 2022-8-24 10:05 编辑 字符串与ASCII码字符串的相互转换
    发表于 08-24 10:00

    信息交换用汉字编码字符集 基本集GB 312-1980

    信息交换用汉字编码字符集 基本集GB 312-1980 本标准规定汉字信息交换用的基本图形字符及其二进制编码表示。安适用于一般汉字处理、汉字通信等系统之间的
    发表于 04-17 17:57 ?17次下载

    ascii码是什么,ascii码字符是什么

    ascii码是什么,ascii码字符是什么 ASCII码:美国(国家)信息交换标准(代)码,一种使用7个或8个二
    发表于 06-28 11:09 ?2.1w次阅读
    <b class='flag-5'>ascii</b>码是什么,<b class='flag-5'>ascii</b><b class='flag-5'>码字符</b>是什么

    字符ASCII码互转软件

    电子发烧友网站提供《字符ASCII码互转软件.exe》资料免费下载
    发表于 01-01 10:31 ?16次下载

    图的着色方法解决排课冲突问题_安卫钢

    图的着色方法解决排课冲突问题_安卫钢
    发表于 03-20 09:29 ?0次下载

    基于卷积神经网络CNN的车牌字符识别方法

    车牌字符识别是智能车牌识别系统中的重要组成部分。针对车牌字符类别多、背景复杂影响正确识别率的问题,提出了一种基于卷积神经网络(CNN)的车牌字符识别方法。首先对车牌
    发表于 11-30 14:24 ?21次下载
    基于卷积神经网络<b class='flag-5'>CNN</b>的车牌<b class='flag-5'>字符识别方法</b>

    如何利用Linux终端将图像转换成ASCII艺术?

    和其他字符ASCII 艺术是一个由可打印的 ASCII 字符组成的图形。基本上,它是由一堆字母、数字和特殊
    的头像 发表于 06-29 13:53 ?2279次阅读

    码字符串分割方法

    我们写代码的时候,经常会遇到这样一个场景,那就是分割字符串。比如说一个字符串分成N个,或者说按照N个字符分割。 我们今天就来看看怎么每隔N个字符
    的头像 发表于 09-25 11:42 ?1293次阅读

    c语言如何字符变成ascii

    C语言是一种广泛应用的编程语言,用于开发各种类型的程序。在C语言中,字符可以表示为ASCII码(美国信息交换标准码)的整数值。ASCII码是一种最常用的字符编码方案,其中每个
    的头像 发表于 11-26 10:34 ?7415次阅读