一、引言
本文方法来自知乎大佬帖子,链接: 序列和图片之间的转化 - 隅子酱的文章 - 知乎.
我在使用quick draw数据集时,最开始转化的.npy文件,生成了黑底的灰度图/三通道RGB图。在实际开发过程中,我发现需要使用白底,笔迹清晰的图片,所以转化了官方提供的.ndjson文件,得到了清晰的白底图。
这里是Quick Draw数据集链接.
二、转化步骤
1.ndjson文件转为json文件
2.json文件转为img
三、.ndjson转为python可读取的.json文件
可执行代码
官方提供了转化方法:simplified-parser.js 可以直接解析,将其解析后的数据保存为json,python就能读取了。代码如下
var fs = require('fs');
var ndjson = require('ndjson'); // npm install ndjson
function parseSimplifiedDrawings(fileName, callback) {
var drawings = [];
var fileStream = fs.createReadStream(fileName)
fileStream
.pipe(ndjson.parse())
.on('data', function(obj) {
drawings.push(obj)
})
.on("error", callback)
.on("end", function() {
callback(null, drawings)
});
}
parseSimplifiedDrawings("dataset_path/full_simplified_cat.ndjson", function(err, drawings) {
if(err) return console.error(err);
drawings.forEach(function(d) {
// Do something with the drawing
console.log(d.key_id, d.countrycode);
})
console.log("# of drawings:", drawings);
var filename = "dataset_path/full_simplified_cat.json";//这里保存
fs.writeFileSync(filename, JSON.stringify(drawings));//这里保存
})
代码使用方法
我电脑上没有运行js文件的软件,但是好在可以用NodeJs来运行js文件
NodeJs安装详细步骤点击这里
1.首先,新建txt文件,将上面代码复制并修改路径
2.注意代码提示,即打开cmd,进行npm install ndjson
3.将文件名改成.js,如将test.txt改成test.js
4.将test.js文件放在cmd显示的文件目录下,或切换路径到test.js所在目录下
5.输入node test.js 回车运行即可得到json文件
四、.json文件转为img
import json
from scipy import interpolate
import pylab as pl
f = open("dataset_path/full_simplified_cat.json") //json文件所在绝对路径
setting = json.load(f)
for j in range(0,1000): #转化保存1000个图
for i in range(0,len(setting[j]['drawing'])):
x = setting[j]['drawing'][i][0]
y = setting[j]['drawing'][i][1]
f=interpolate.interp1d(x,y,kind="slinear") #线性插值
pl.plot(x,y,'k')
ax = pl.gca() #一个猫的所有线条画一起
ax.xaxis.set_ticks_position('top') # convert x,没有ax这几句猫就反着了
ax.invert_yaxis()
pl.axis('off')
pl.savefig("dataset_path/cat/%d.png"%j) //保存位置
pl.close() #不关闭的话所有图都画一起了
运行代码就得到图片