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
    +关注

    关注

    4

    文章

    169

    浏览量

    34512
  • 机器学习
    +关注

    关注

    66

    文章

    8096

    浏览量

    130521
  • cnn
    cnn
    +关注

    关注

    3

    文章

    326

    浏览量

    21294

原文标题: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

    请问发送的是int数据为何显示的是ASCII字符

    工具(见图三),显示的是ASCII字符。请问:1. 我发送的是unsigned int型数据,为什么在串口工具显示的是ASCII ?2. 我
    发表于 11-21 08:52

    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

    求大佬分享STM32F407串口接收码字符

    求大佬分享STM32F407串口接收码字符
    发表于 12-02 07:46

    STM32F407串口接收码字符串的方法

    STM32F407串口接收码字符串usart2.c串口2初始化//初始化串口2//bound:波特率void uart2_init(u32 bound){//GPIO端口设置
    发表于 01-20 07:16

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

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

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

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

    字符ASCII码互转软件

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

    字符串至ASCII.vi

    字符串转化成ASCII码,用于上位机与下位机通信。
    发表于 07-20 10:21 7次下载

    c语言怎么输出ascii码对应的字符

    C语言是一种广泛应用于系统编程的高级编程语言,它可以用于处理各种数据类型,包括字符类型。ASCII码是一种广泛用于计算机系统中表示字符的编码方式,通过将字符映射到对应的数字,可以在计算
    的头像 发表于 11-26 10:32 3534次阅读

    c语言如何把字符变成ascii

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