zoukankan      html  css  js  c++  java
  • node+百度SDK实现图片增强特效

    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.批量处理的时候不是所有的图片都会转化成功
    未解决

    愿以往所学皆有所获
  • 相关阅读:
    敏捷开发(五)- 框架SCRUM内容
    敏捷开发(四)- 故事验收测试
    敏捷开发(三)- 估算故事
    敏捷开发(二)- 编写故事
    敏捷开发(一)- 搜集故事
    项目管理(十)- 开发准备列表
    项目管理(九)- 组织项目资源
    web 前端常用组件【04】Datetimepicker 和 Lodop
    让时间处理简单化 【第三方扩展类库org.apache.commons.lang.time】
    Word 打包 zip 并提供下载
  • 原文地址:https://www.cnblogs.com/Azune/p/14470716.html
Copyright © 2011-2022 走看看