node+百度SDK实现图片增强特效
百度AI开放平台官方文档](http://ai.baidu.com/docs)
此处示例为 图片增强 人像动漫化
效果:
关键代码
// var AipImageProcessClient = require("baidu-aip-sdk").imageProcess;
// var client = new AipImageProcessClient(APP_ID, API_KEY, SECRET_KEY);
const { imageProcess } = require("./src/index.js");
var fs = require("fs");
// 设置APPID/AK/SK
var APP_ID = "APP_ID ";
var API_KEY = "API_KEY ";
var SECRET_KEY = "SECRET_KEY ";
var client = new imageProcess(APP_ID, API_KEY, SECRET_KEY);
// 批量
let images = []; // 获取assets下的所有文件
const imgFiles = fs.readdirSync("./assets");
imgFiles.forEach(function (item, index) {
var image = fs.readFileSync(`./assets/${item}`).toString("base64");
animeEnhance(image);
});
// 调用图像动漫化
function animeEnhance(image) {
options = [{ type: "anime" }, { mask_id: 3 }];
client
.animeEnhance(image, options)
.then(function (result) {
toImg(result.image);
})
.catch(function (err) {
// 如果发生网络错误
console.log(err);
});
}
// base64转化为图片
function toImg(str) {
const base64 = str.substr(0, str.length - 1);
var dataBuffer = new Buffer(base64, "base64"); //把base64码转成buffer对象,
console.log("dataBuffer是否是Buffer对象:" + Buffer.isBuffer(dataBuffer));
//用fs写入文件
fs.writeFile(`${new Date().getTime()}.png`, dataBuffer, function (err) {
if (err) {
console.log(err);
} else {
console.log("写入成功!");
}
});
}
const ANIME_PATH = '/rest/2.0/image-process/v1/selfie_anime';
animeEnhance(image, options) {
let param = {
image: image,
targetPath: ANIME_PATH
};
return this.commonImpl(objectTools.merge(param, options));
}
遇到的问题:
1.引入官方的类之后报错不是构造函数
解决:require("baidu-aip-sdk").imageProcess 此处的Process应为大写,官方为小写实际是错误的
2.正确引入类实例化之后还是不可以使用人像动漫化
解决:git上的文件并没有更新人像动漫化这个函数,自己写一个添加到imageProcess 类中,上文已经写好
3.成功获取之后返回的base64码太大,以及如何使用
解决:之前使用fs模块试着输出了一下,一个base64直接占用700k+的空间,写入记事本打开都会卡死,之后选择直接转化输出
4.解决base64转化图片
解决:文中提供了转化函数
5.批量化处理
解决:文中提供批量处理函数
6.批量处理的时候不是所有的图片都会转化成功
未解决