'use strict'; /** * Copyright (c) 2017 Baidu.com, Inc. All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. * * @file AipImageClassify.js * @author baidu aip */ const BaseClient = require('./client/baseClient'); const RequestInfo = require('./client/requestInfo'); const HttpClient = require('./http/httpClient'); const objectTools = require('./util/objectTools'); const METHOD_POST = 'POST'; const DISH_DETECT_PATH = '/rest/2.0/image-classify/v2/dish'; const CAR_DETECT_PATH = '/rest/2.0/image-classify/v1/car'; const LOGO_SEARCH_PATH = '/rest/2.0/image-classify/v2/logo'; const LOGO_ADD_PATH = '/rest/2.0/realtime_search/v1/logo/add'; const LOGO_DELETE_PATH = '/rest/2.0/realtime_search/v1/logo/delete'; const ANIMAL_DETECT_PATH = '/rest/2.0/image-classify/v1/animal'; const PLANT_DETECT_PATH = '/rest/2.0/image-classify/v1/plant'; const OBJECT_DETECT_PATH = '/rest/2.0/image-classify/v1/object_detect'; /** * AipImageClassify类 * * @class * @extends BaseClient * @constructor * @param {string} appid appid. * @param {string} ak access key. * @param {string} sk security key. */ class AipImageClassify extends BaseClient { constructor(appId, ak, sk) { super(appId, ak, sk); } commonImpl(param) { let httpClient = new HttpClient(); let apiUrl = param.targetPath; delete param.targetPath; let requestInfo = new RequestInfo(apiUrl, param, METHOD_POST); return this.doRequest(requestInfo, httpClient); } /** * 菜品识别接口 * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * top_num 返回预测得分top结果数,默认为5 * @return {Promise} - 标准Promise对象 */ dishDetect(image, options) { let param = { image: image, targetPath: DISH_DETECT_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * 车辆识别接口 * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * top_num 返回预测得分top结果数,默认为5 * @return {Promise} - 标准Promise对象 */ carDetect(image, options) { let param = { image: image, targetPath: CAR_DETECT_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * logo商标识别接口 * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * custom_lib 是否只使用自定义logo库的结果,默认false:返回自定义库+默认库的识别结果 * @return {Promise} - 标准Promise对象 */ logoSearch(image, options) { let param = { image: image, targetPath: LOGO_SEARCH_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * logo商标识别—添加接口 * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {string} brief - brief,检索时带回。此处要传对应的name与code字段,name长度小于100B,code长度小于150B * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ logoAdd(image, brief, options) { let param = { image: image, brief: brief, targetPath: LOGO_ADD_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * logo商标识别—删除接口 * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ logoDeleteByImage(image, options) { let param = { image: image, targetPath: LOGO_DELETE_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * logo商标识别—删除接口 * * @param {string} contSign - 图片签名(和image二选一,image优先级更高) * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ logoDeleteBySign(contSign, options) { let param = { cont_sign: contSign, targetPath: LOGO_DELETE_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * 动物识别接口 * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * top_num 返回预测得分top结果数,默认为6 * @return {Promise} - 标准Promise对象 */ animalDetect(image, options) { let param = { image: image, targetPath: ANIMAL_DETECT_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * 植物识别接口 * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ plantDetect(image, options) { let param = { image: image, targetPath: PLANT_DETECT_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** * 图像主体检测接口 * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * with_face 如果检测主体是人,主体区域是否带上人脸部分,0-不带人脸区域,其他-带人脸区域,裁剪类需求推荐带人脸,检索/识别类需求推荐不带人脸。默认取1,带人脸。 * @return {Promise} - 标准Promise对象 */ objectDetect(image, options) { let param = { image: image, targetPath: OBJECT_DETECT_PATH }; return this.commonImpl(objectTools.merge(param, options)); } } module.exports = AipImageClassify;