From 5a3eae2e3f58b04954e0469a1dc38e1df7472477 Mon Sep 17 00:00:00 2001 From: Finian Date: Tue, 20 Apr 2021 17:12:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=87=B3=204.15.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/npm-publish.yml | 47 ++++ README.md | 2 +- package.json | 11 +- src/AipBodyAnalysis.js | 202 --------------- src/AipContentCensor.js | 110 ++++++-- src/AipEasyDL.js | 86 ------- src/AipFace.js | 68 +++-- src/AipImageClassify.js | 138 ++++++----- src/AipImageProcess.js | 140 ----------- src/AipImageSearch.js | 399 +++++++++--------------------- src/AipNlp.js | 72 ------ src/AipOcr.js | 356 +++++++++++++------------- src/AipSpeech.js | 23 +- src/client/requestInfo.js | 1 + src/http/httpClient.js | 15 ++ src/index.js | 3 - test/apiRequest.js | 2 - test/require.js | 132 +++++++++- 18 files changed, 656 insertions(+), 1151 deletions(-) create mode 100644 .github/workflows/npm-publish.yml delete mode 100644 src/AipBodyAnalysis.js delete mode 100644 src/AipEasyDL.js delete mode 100644 src/AipImageProcess.js diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml new file mode 100644 index 0000000..590f2de --- /dev/null +++ b/.github/workflows/npm-publish.yml @@ -0,0 +1,47 @@ +# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created +# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages + +name: Node.js Package + +on: + release: + types: [created] + +jobs: + # build: + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v2 + # - uses: actions/setup-node@v1 + # with: + # node-version: 12 + # - run: npm ci + # - run: npm test + + publish-npm: + # needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 12 + registry-url: https://registry.npmjs.org/ + # - run: npm ci + - run: npm publish --access public + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} + + publish-gpr: + # needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 12 + registry-url: https://npm.pkg.github.com/ + # - run: npm ci + - run: npm publish + env: + NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/README.md b/README.md index 345d42b..7289e49 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![Build Status](https://travis-ci.org/Baidu-AIP/nodejs-sdk.svg?branch=master)](https://travis-ci.org/Baidu-AIP/nodejs-sdk) +[![Build Status](https://travis-ci.org/meteorasd555/learn.svg?branch=master)](https://travis-ci.org/meteorasd555/learn) [![npm](https://img.shields.io/npm/v/baidu-aip-sdk.svg)](https://www.npmjs.com/package/baidu-aip-sdk) # 安装百度AI开放平台 Node.js SDK diff --git a/package.json b/package.json index 1c287b5..40403f0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "baidu-aip-sdk", - "version": "2.4.6", + "version": "4.15.4", "description": "百度AI开放平台Nodejs SDK, 文档以及详情请访问官网: https://ai.baidu.com", "main": "src/index.js", "scripts": { @@ -13,11 +13,10 @@ "url": "https://github.com/Baidu-AIP/nodejs-sdk.git" }, "dependencies": { - "debug": "^2.6.0", - "iconv-lite": "^0.4.15", - "keep-alive-agent": "0.0.1", - "request": "^2.79.0", - "underscore": "^1.8.3" + "debug": "^2.6.9", + "iconv-lite": "^0.4.24", + "request": "^2.88.2", + "underscore": "^1.12.0" }, "optionalDependencies": { "should": "^13.2.0", diff --git a/src/AipBodyAnalysis.js b/src/AipBodyAnalysis.js deleted file mode 100644 index 7e582df..0000000 --- a/src/AipBodyAnalysis.js +++ /dev/null @@ -1,202 +0,0 @@ -'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 AipBodyAnalysis.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 BODY_ANALYSIS_PATH = '/rest/2.0/image-classify/v1/body_analysis'; -const BODY_ATTR_PATH = '/rest/2.0/image-classify/v1/body_attr'; -const BODY_NUM_PATH = '/rest/2.0/image-classify/v1/body_num'; -const GESTURE_PATH = '/rest/2.0/image-classify/v1/gesture'; -const BODY_SEG_PATH = '/rest/2.0/image-classify/v1/body_seg'; -const DRIVER_BEHAVIOR_PATH = '/rest/2.0/image-classify/v1/driver_behavior'; -const BODY_TRACKING_PATH = '/rest/2.0/image-classify/v1/body_tracking'; -const HAND_ANALYSIS_PATH = '/rest/2.0/image-classify/v1/driver_behavior'; - - -/** - * AipBodyAnalysis类 - * - * @class - * @extends BaseClient - * @constructor - * @param {string} appid appid. - * @param {string} ak access key. - * @param {string} sk security key. - */ -class AipBodyAnalysis 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列表: - * @return {Promise} - 标准Promise对象 - */ - bodyAnalysis(image, options) { - let param = { - image: image, - targetPath: BODY_ANALYSIS_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列表: - * type gender,
age,
lower_wear,
upper_wear,
headwear,
glasses,
upper_color,
lower_color,
cellphone,
upper_wear_fg,
upper_wear_texture,
lower_wear_texture,
orientation,
umbrella,
bag,
smoke,
vehicle,
carrying_item,
upper_cut,
lower_cut,
occlusion,
is_human | 1)可选值说明:
gender-性别,
age-年龄阶段,
lower_wear-下身服饰,
upper_wear-上身服饰,
headwear-是否戴帽子,
glasses-是否戴眼镜,
upper_color-上身服饰颜色,
lower_color-下身服饰颜色,
cellphone-是否使用手机,
upper_wear_fg-上身服饰细分类,
upper_wear_texture-上身服饰纹理,
orientation-身体朝向,
umbrella-是否撑伞;
bag-背包,
smoke-是否吸烟,
vehicle-交通工具,
carrying_item-是否有手提物,
upper_cut-上方截断,
lower_cut-下方截断,
occlusion-遮挡,
is_human-是否是正常人体
2)type 参数值可以是可选值的组合,用逗号分隔;**如果无此参数默认输出全部21个属性** - * @return {Promise} - 标准Promise对象 - */ - bodyAttr(image, options) { - let param = { - image: image, - targetPath: BODY_ATTR_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列表: - * area 特定框选区域坐标,支持多个多边形区域,最多支持10个区域,如输入超过10个区域,截取前10个区域进行识别。
**此参数为空或无此参数、或area参数设置错误时,默认识别整个图片的人数** 。
area参数设置错误的示例:某个坐标超过原图大小,x、y坐标未成对出现等;注意:**设置了多个区域时,任意一个坐标设置错误,则认为area参数错误、失效**。
**area参数设置格式**:
1)多个区域用英文分号“;”分隔;
2)同一个区域内的坐标用英文逗号“,”分隔,默认尾点和首点相连做闭合。
示例:
1)单个多边形区域:x1,y1,x2,y2,x3,y3...xn,yn
2)多个多边形区域:xa1,ya1,xa2,ya2,xa3,ya3...xan,yan;xb1,yb1,xb2,yb2,xb3,yb3...xbn,ybn;.. - * show 是否输出渲染的图片,默认不返回,**选true时返回渲染后的图片(base64)**,其它无效值或为空则默认false - * @return {Promise} - 标准Promise对象 - */ - bodyNum(image, options) { - let param = { - image: image, - targetPath: BODY_NUM_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对象 - */ - gesture(image, options) { - let param = { - image: image, - targetPath: GESTURE_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列表: - * type 可以通过设置type参数,自主设置返回哪些结果图,避免造成带宽的浪费
1)可选值说明:
labelmap - 二值图像,需二次处理方能查看分割效果
scoremap - 人像前景灰度图
foreground - 人像前景抠图,透明背景
2)type 参数值可以是可选值的组合,用逗号分隔;如果无此参数默认输出全部3类结果图 - * @return {Promise} - 标准Promise对象 - */ - bodySeg(image, options) { - let param = { - image: image, - targetPath: BODY_SEG_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列表: - * type smoke,cellphone,
not_buckling_up,
both_hands_leaving_wheel,
not_facing_front |识别的属性行为类别,英文逗号分隔,默认所有属性都识别;
smoke //吸烟,
cellphone //打手机 ,
not_buckling_up // 未系安全带,
both_hands_leaving_wheel // 双手离开方向盘,
not_facing_front // 视角未看前方 - * @return {Promise} - 标准Promise对象 - */ - driverBehavior(image, options) { - let param = { - image: image, - targetPath: DRIVER_BEHAVIOR_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } - - /** - * 人流量统计-动态版接口 - * - * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 - * @param {string} dynamic - true:动态人流量统计,返回总人数、跟踪ID、区域进出人数;
false:静态人数统计,返回总人数 - * @param {Object} options - 可选参数对象,key: value都为string类型 - * @description options - options列表: - * case_id 当dynamic为True时,必填;任务ID(通过case_id区分不同视频流,自拟,不同序列间不可重复即可) - * case_init 当dynamic为True时,必填;每个case的初始化信号,为true时对该case下的跟踪算法进行初始化,为false时重载该case的跟踪状态。当为false且读取不到相应case的信息时,直接重新初始化 - * show 否返回结果图(含统计值和跟踪框渲染),默认不返回,选true时返回渲染后的图片(base64),其它无效值或为空则默认false - * area 当dynamic为True时,必填;静态人数统计时,只统计区域内的人,缺省时为全图统计。
动态人流量统计时,进出区域的人流会被统计。
逗号分隔,如‘x1,y1,x2,y2,x3,y3...xn,yn',按顺序依次给出每个顶点的xy坐标(默认尾点和首点相连),形成闭合多边形区域。
服务会做范围(顶点左边需在图像范围内)及个数校验(数组长度必须为偶数,且大于3个顶点)。只支持单个多边形区域,建议设置矩形框,即4个顶点。**坐标取值不能超过图像宽度和高度,比如1280的宽度,坐标值最小建议从1开始,最大到1279**。 - * @return {Promise} - 标准Promise对象 - */ - bodyTracking(image, dynamic, options) { - let param = { - image: image, - dynamic: dynamic, - targetPath: BODY_TRACKING_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对象 - */ - handAnalysis(image, options) { - let param = { - image: image, - targetPath: HAND_ANALYSIS_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } -} - -module.exports = AipBodyAnalysis; - diff --git a/src/AipContentCensor.js b/src/AipContentCensor.js index fc7afb9..0fb5b55 100644 --- a/src/AipContentCensor.js +++ b/src/AipContentCensor.js @@ -30,12 +30,17 @@ const CONTENT_TYPE_JSON = 'application/json'; const METHOD_POST = 'POST'; -const PATH_USER_DEFINED_IMAGE = '/rest/2.0/solution/v1/img_censor/v2/user_defined'; -const PATH_USER_DEFINED_TEXT = '/rest/2.0/solution/v1/text_censor/v2/user_defined'; -const PATH_USER_DEFINED_VOICE = '/rest/2.0/solution/v1/voice_censor/v2/user_defined'; - +const PATH_USER_DEFINED = '/rest/2.0/solution/v1/img_censor/user_defined'; +const PATH_VOICE_USER_DEFINED = '/rest/2.0/solution/v1/voice_censor/v2/user_defined'; +const PATH_VIDEO_USER_DEFINED = '/rest/2.0/solution/v1/video_censor/v2/user_defined'; +const PATH_ANTIPORN_GIF = '/rest/2.0/antiporn/v1/detect_gif'; +const PATH_FACEAUDIT = '/rest/2.0/solution/v1/face_audit'; +const PATH_COMBOCENSOR = '/api/v1/solution/direct/img_censor'; const PATH_REPORT = '/rpc/2.0/feedback/v1/report'; +const PATH_ANTIPORN = '/rest/2.0/antiporn/v1/detect'; +const PATH_ANTITERROR = '/rest/2.0/antiterror/v1/detect'; +const PATH_ANTISPAM = '/rest/2.0/antispam/v2/spam'; const scope = require('./const/devScope').DEFAULT; @@ -75,6 +80,53 @@ class AipImageCensor extends BaseClient { return this.doRequest(requestInfo, httpClient); } + antiPornGif(image, options) { + let param = { + image: image, + targetPath: PATH_ANTIPORN_GIF + }; + return this.commonImpl(objectTools.merge(param, options)); + } + + antiPorn(image, options) { + let param = { + image: image, + targetPath: PATH_ANTIPORN + }; + return this.commonImpl(objectTools.merge(param, options)); + } + + antiTerror(image, options) { + let param = { + image: image, + targetPath: PATH_ANTITERROR + }; + return this.commonImpl(objectTools.merge(param, options)); + } + + antiSpam(content, options) { + let param = { + content: content, + targetPath: PATH_ANTISPAM + }; + return this.commonImpl(objectTools.merge(param, options)); + } + + faceAudit(images, type, configId) { + let param = {configId: configId}; + if (type === 'url') { + images = images.map(function (elm) { + return encodeURIComponent(elm); + }); + param.imgUrls = images.join(','); + } + if (type === 'base64') { + param.images = images.join(','); + } + param.targetPath = PATH_FACEAUDIT; + return this.commonImpl(param); + } + imageCensorUserDefined(image, type) { let param = {}; if (type === 'url') { @@ -83,43 +135,53 @@ class AipImageCensor extends BaseClient { if (type === 'base64') { param.image = image; } - param.targetPath = PATH_USER_DEFINED_IMAGE; + param.targetPath = PATH_USER_DEFINED; return this.commonImpl(param); } - textCensorUserDefined(text, type) { + imageCensorComb(image, type, scenes, scenesConf) { let param = {}; - param.text = text; - param.targetPath = PATH_USER_DEFINED_TEXT; - return this.commonImpl(param); + if (type === 'url') { + param.imgUrl = image; + } + if (type === 'base64') { + param.image = image; + } + param.scenes = scenes; + param.sceneConf = scenesConf; + param.targetPath = PATH_COMBOCENSOR; + return this.jsonRequestImpl(param); + } + + report(feedback) { + let param = {}; + param.feedback = feedback; + param.targetPath = PATH_REPORT; + return this.jsonRequestImpl(param); } voiceCensorUserDefined(voice, type, fmt, options) { - let param = { fmt }; + let param = {}; if (type === 'url') { param.url = voice; } if (type === 'base64') { param.base64 = voice; } - if (options) { - if (options.rawText) { - param.rawText = options.rawText - } - if (options.split) { - param.split = options.split - } - } - param.targetPath = PATH_USER_DEFINED_VOICE; - return this.commonImpl(param); + param.fmt = fmt; + param.targetPath = PATH_VOICE_USER_DEFINED; + return this.commonImpl(objectTools.merge(param, options)); } - report(feedback) { + videoCensorUserDefined(name, videoUrl, extId, options) { let param = {}; - param.feedback = feedback; - param.targetPath = PATH_REPORT; - return this.jsonRequestImpl(param); + param.name = name; + param.videoUrl = videoUrl; + param.extId = extId; + param.targetPath = PATH_VIDEO_USER_DEFINED; + return this.commonImpl(objectTools.merge(param, options)); } + } module.exports = AipImageCensor; diff --git a/src/AipEasyDL.js b/src/AipEasyDL.js deleted file mode 100644 index 2d255c1..0000000 --- a/src/AipEasyDL.js +++ /dev/null @@ -1,86 +0,0 @@ -'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 AipEasyDL.js - * @author baidu aip - */ - - - -const BaseClient = require('./client/baseClient'); - -const RequestInfo = require('./client/requestInfo'); - -const HttpClient = require('./http/httpClientExt'); - -const objectTools = require('./util/objectTools'); - -const METHOD_POST = 'POST'; - -const DETECT_PATH = '/rest/2.0/face/v3/detect'; -const SEARCH_PATH = '/rest/2.0/face/v3/search'; -const USER_ADD_PATH = '/rest/2.0/face/v3/faceset/user/add'; -const USER_UPDATE_PATH = '/rest/2.0/face/v3/faceset/user/update'; -const FACE_DELETE_PATH = '/rest/2.0/face/v3/faceset/face/delete'; -const USER_GET_PATH = '/rest/2.0/face/v3/faceset/user/get'; -const FACE_GETLIST_PATH = '/rest/2.0/face/v3/faceset/face/getlist'; -const GROUP_GETUSERS_PATH = '/rest/2.0/face/v3/faceset/group/getusers'; -const USER_COPY_PATH = '/rest/2.0/face/v3/faceset/user/copy'; -const USER_DELETE_PATH = '/rest/2.0/face/v3/faceset/user/delete'; -const GROUP_ADD_PATH = '/rest/2.0/face/v3/faceset/group/add'; -const GROUP_DELETE_PATH = '/rest/2.0/face/v3/faceset/group/delete'; -const GROUP_GETLIST_PATH = '/rest/2.0/face/v3/faceset/group/getlist'; -const PERSON_VERIFY_PATH = '/rest/2.0/face/v3/person/verify'; -const VIDEO_SESSIONCODE_PATH = '/rest/2.0/face/v1/faceliveness/sessioncode'; - - -/** - * AipEasyDL类 - * - * @class - * @extends BaseClient - * @constructor - * @param {string} appid appid. - * @param {string} ak access key. - * @param {string} sk security key. - */ -class AipEasyDL 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); - } - requestImage(url, image, options) { - let param = { - image: image, - targetPath: url - }; - return this.commonImpl(objectTools.merge(param, options)); - } - requestSound(url, sound, options) { - let param = { - sound: sound, - targetPath: url - }; - return this.commonImpl(objectTools.merge(param, options)); - } -} - -module.exports = AipEasyDL; - diff --git a/src/AipFace.js b/src/AipFace.js index 0ef14df..7a79a97 100644 --- a/src/AipFace.js +++ b/src/AipFace.js @@ -21,7 +21,7 @@ const BaseClient = require('./client/baseClient'); const RequestInfo = require('./client/requestInfo'); -const HttpClient = require('./http/httpClientExt'); +const HttpClient = require('./http/HttpClientExt'); const objectTools = require('./util/objectTools'); @@ -29,7 +29,6 @@ const METHOD_POST = 'POST'; const DETECT_PATH = '/rest/2.0/face/v3/detect'; const SEARCH_PATH = '/rest/2.0/face/v3/search'; -const MULTI_SEARCH_PATH = '/rest/2.0/face/v3/multi-search'; const USER_ADD_PATH = '/rest/2.0/face/v3/faceset/user/add'; const USER_UPDATE_PATH = '/rest/2.0/face/v3/faceset/user/update'; const FACE_DELETE_PATH = '/rest/2.0/face/v3/faceset/face/delete'; @@ -43,6 +42,7 @@ const GROUP_DELETE_PATH = '/rest/2.0/face/v3/faceset/group/delete'; const GROUP_GETLIST_PATH = '/rest/2.0/face/v3/faceset/group/getlist'; const PERSON_VERIFY_PATH = '/rest/2.0/face/v3/person/verify'; const VIDEO_SESSIONCODE_PATH = '/rest/2.0/face/v1/faceliveness/sessioncode'; +const VIDEO_FACELIVENESS_PATH = '/rest/2.0/face/v1/faceliveness/verify'; /** @@ -72,13 +72,12 @@ class AipFace extends BaseClient { * 人脸检测接口 * * @param {string} image - 图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断 - * @param {string} imageType - 图片类型
**BASE64**:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;
**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);
**FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。 + * @param {string} imageType - 图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * face_field 包括**age,beauty,expression,face_shape,gender,glasses,landmark,landmark72,landmark150,race,quality,eye_status,emotion,face_type信息**
逗号分隔. 默认只返回face_token、人脸框、概率和旋转角度 + * face_field 包括**age,beauty,expression,faceshape,gender,glasses,landmark,race,quality,facetype,parsing信息**
逗号分隔. 默认只返回face_token、人脸框、概率和旋转角度 * max_face_num 最多处理人脸的数目,默认值为1,仅检测图片中面积最大的那个人脸;**最大值10**,检测图片中面积最大的几张人脸。 * face_type 人脸的类型 **LIVE**表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等**IDCARD**表示身份证芯片照:二代身份证内置芯片中的人像照片 **WATERMARK**表示带水印证件照:一般为带水印的小图,如公安网小图 **CERT**表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片 默认**LIVE** - * liveness_control 活体检测控制 **NONE**: 不进行控制 **LOW**:较低的活体要求(高通过率 低攻击拒绝率) **NORMAL**: 一般的活体要求(平衡的攻击拒绝率, 通过率) **HIGH**: 较高的活体要求(高攻击拒绝率 低通过率) **默认NONE** * @return {Promise} - 标准Promise对象 */ detect(image, imageType, options) { @@ -94,16 +93,14 @@ class AipFace extends BaseClient { * 人脸搜索接口 * * @param {string} image - 图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断 - * @param {string} imageType - 图片类型
**BASE64**:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;
**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);
**FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。 + * @param {string} imageType - 图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个 * @param {string} groupIdList - 从指定的group中进行查找 用逗号分隔,**上限20个** * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * max_face_num 最多处理人脸的数目
**默认值为1(仅检测图片中面积最大的那个人脸)** **最大值10** - * match_threshold 匹配阈值(设置阈值后,score低于此阈值的用户信息将不会返回) 最大100 最小0 默认80
**此阈值设置得越高,检索速度将会越快,推荐使用默认阈值`80`** * quality_control 图片质量控制 **NONE**: 不进行控制 **LOW**:较低的质量要求 **NORMAL**: 一般的质量要求 **HIGH**: 较高的质量要求 **默认 NONE** * liveness_control 活体检测控制 **NONE**: 不进行控制 **LOW**:较低的活体要求(高通过率 低攻击拒绝率) **NORMAL**: 一般的活体要求(平衡的攻击拒绝率, 通过率) **HIGH**: 较高的活体要求(高攻击拒绝率 低通过率) **默认NONE** * user_id 当需要对特定用户进行比对时,指定user_id进行比对。即人脸认证功能。 - * max_user_num 查找后返回的用户数量。返回相似度最高的几个用户,默认为1,最多返回50个。 + * max_user_num 查找后返回的用户数量。返回相似度最高的几个用户,默认为1,最多返回20个。 * @return {Promise} - 标准Promise对象 */ search(image, imageType, groupIdList, options) { @@ -116,36 +113,11 @@ class AipFace extends BaseClient { return this.commonImpl(objectTools.merge(param, options)); } - /** - * 人脸搜索 M:N 识别接口 - * - * @param {string} image - 图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断 - * @param {string} imageType - 图片类型
**BASE64**:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;
**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);
**FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。 - * @param {string} groupIdList - 从指定的group中进行查找 用逗号分隔,**上限20个** - * @param {Object} options - 可选参数对象,key: value都为string类型 - * @description options - options列表: - * max_face_num 最多处理人脸的数目
**默认值为1(仅检测图片中面积最大的那个人脸)** **最大值10** - * match_threshold 匹配阈值(设置阈值后,score低于此阈值的用户信息将不会返回) 最大100 最小0 默认80
**此阈值设置得越高,检索速度将会越快,推荐使用默认阈值`80`** - * quality_control 图片质量控制 **NONE**: 不进行控制 **LOW**:较低的质量要求 **NORMAL**: 一般的质量要求 **HIGH**: 较高的质量要求 **默认 NONE** - * liveness_control 活体检测控制 **NONE**: 不进行控制 **LOW**:较低的活体要求(高通过率 低攻击拒绝率) **NORMAL**: 一般的活体要求(平衡的攻击拒绝率, 通过率) **HIGH**: 较高的活体要求(高攻击拒绝率 低通过率) **默认NONE** - * max_user_num 查找后返回的用户数量。返回相似度最高的几个用户,默认为1,最多返回50个。 - * @return {Promise} - 标准Promise对象 - */ - multiSearch(image, imageType, groupIdList, options) { - let param = { - image: image, - image_type: imageType, - group_id_list: groupIdList, - targetPath: MULTI_SEARCH_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } - /** * 人脸注册接口 * - * @param {string} image - 图片信息(总数据大小应小于10M),图片上传方式根据image_type来判断。注:组内每个uid下的人脸图片数目上限为20张 - * @param {string} imageType - 图片类型
**BASE64**:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;
**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);
**FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。 + * @param {string} image - 图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断 + * @param {string} imageType - 图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个 * @param {string} groupId - 用户组id(由数字、字母、下划线组成),长度限制128B * @param {string} userId - 用户id(由数字、字母、下划线组成),长度限制128B * @param {Object} options - 可选参数对象,key: value都为string类型 @@ -153,7 +125,6 @@ class AipFace extends BaseClient { * user_info 用户资料,长度限制256B * quality_control 图片质量控制 **NONE**: 不进行控制 **LOW**:较低的质量要求 **NORMAL**: 一般的质量要求 **HIGH**: 较高的质量要求 **默认 NONE** * liveness_control 活体检测控制 **NONE**: 不进行控制 **LOW**:较低的活体要求(高通过率 低攻击拒绝率) **NORMAL**: 一般的活体要求(平衡的攻击拒绝率, 通过率) **HIGH**: 较高的活体要求(高攻击拒绝率 低通过率) **默认NONE** - * action_type 操作方式 APPEND: 当user_id在库中已经存在时,对此user_id重复注册时,新注册的图片默认会追加到该user_id下,REPLACE : 当对此user_id重复注册时,则会用新图替换库中该user_id下所有图片,默认使用APPEND * @return {Promise} - 标准Promise对象 */ addUser(image, imageType, groupId, userId, options) { @@ -171,7 +142,7 @@ class AipFace extends BaseClient { * 人脸更新接口 * * @param {string} image - 图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断 - * @param {string} imageType - 图片类型
**BASE64**:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;
**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);
**FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。 + * @param {string} imageType - 图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个 * @param {string} groupId - 更新指定groupid下uid对应的信息 * @param {string} userId - 用户id(由数字、字母、下划线组成),长度限制128B * @param {Object} options - 可选参数对象,key: value都为string类型 @@ -179,7 +150,6 @@ class AipFace extends BaseClient { * user_info 用户资料,长度限制256B * quality_control 图片质量控制 **NONE**: 不进行控制 **LOW**:较低的质量要求 **NORMAL**: 一般的质量要求 **HIGH**: 较高的质量要求 **默认 NONE** * liveness_control 活体检测控制 **NONE**: 不进行控制 **LOW**:较低的活体要求(高通过率 低攻击拒绝率) **NORMAL**: 一般的活体要求(平衡的攻击拒绝率, 通过率) **HIGH**: 较高的活体要求(高攻击拒绝率 低通过率) **默认NONE** - * action_type 操作方式 APPEND: 当user_id在库中已经存在时,对此user_id重复注册时,新注册的图片默认会追加到该user_id下,REPLACE : 当对此user_id重复注册时,则会用新图替换库中该user_id下所有图片,默认使用APPEND * @return {Promise} - 标准Promise对象 */ updateUser(image, imageType, groupId, userId, options) { @@ -355,7 +325,7 @@ class AipFace extends BaseClient { * 身份验证接口 * * @param {string} image - 图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断 - * @param {string} imageType - 图片类型
**BASE64**:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;
**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);
**FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。 + * @param {string} imageType - 图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个 * @param {string} idCardNumber - 身份证号(真实身份证号号码) * @param {string} name - utf8,姓名(真实姓名,和身份证号匹配) * @param {Object} options - 可选参数对象,key: value都为string类型 @@ -389,6 +359,24 @@ class AipFace extends BaseClient { }; return this.commonImpl(objectTools.merge(param, options)); } + + /** + * 视频活体检测接口接口 + * + * @param {string} sessionId - 语音校验码会话id,使用此接口的前提是已经调用了语音校验码接口 + * @param {string} videoBase64 - base64编码后的视频数据(视频限制:最佳为上传5-15s的mp4文件。视频编码方式:h264编码;音频编码格式:aac,pcm均可。) + * @param {Object} options - 可选参数对象,key: value都为string类型 + * @description options - options列表: + * @return {Promise} - 标准Promise对象 + */ + videoFaceliveness(sessionId, videoBase64, options) { + let param = { + session_id: sessionId, + video_base64: videoBase64, + targetPath: VIDEO_FACELIVENESS_PATH + }; + return this.commonImpl(objectTools.merge(param, options)); + } /** * 在线活体检测 * diff --git a/src/AipImageClassify.js b/src/AipImageClassify.js index 0d6a640..a83cd13 100644 --- a/src/AipImageClassify.js +++ b/src/AipImageClassify.js @@ -28,19 +28,20 @@ const METHOD_POST = 'POST'; const ADVANCED_GENERAL_PATH = '/rest/2.0/image-classify/v2/advanced_general'; const DISH_DETECT_PATH = '/rest/2.0/image-classify/v2/dish'; const CAR_DETECT_PATH = '/rest/2.0/image-classify/v1/car'; -const VEHICLE_DETECT_PATH = '/rest/2.0/image-classify/v1/vehicle_detect'; -const VEHICLE_DAMAGE_PATH = '/rest/2.0/image-classify/v1/vehicle_damage'; 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'; -const LANDMARK_PATH = '/rest/2.0/image-classify/v1/landmark'; -const FLOWER_PATH = '/rest/2.0/image-classify/v1/flower'; -const INGREDIENT_PATH = '/rest/2.0/image-classify/v1/classify/ingredient'; -const REDWINE_PATH = '/rest/2.0/image-classify/v1/redwine'; -const CURRENCY_PATH = '/rest/2.0/image-classify/v1/currency'; + + +const CUSTOM_DISH_ADD_PATH = "/rest/2.0/image-classify/v1/realtime_search/dish/add"; +const CUSTOM_DISH_SEARCH_PATH = "/rest/2.0/image-classify/v1/realtime_search/dish/search"; +const CUSTOM_DISH_DELETE_PATH = "/rest/2.0/image-classify/v1/realtime_search/dish/delete"; +const MULTI_OBJECT_DETECT_PATH = "/rest/2.0/image-classify/v1/multi_object_detect"; +const COMBINATION_PATH = "/api/v1/solution/direct/imagerecognition/combination"; + /** @@ -72,7 +73,6 @@ class AipImageClassify extends BaseClient { * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * baike_num 返回百科信息的结果数,默认不返回 * @return {Promise} - 标准Promise对象 */ advancedGeneral(image, options) { @@ -90,8 +90,6 @@ class AipImageClassify extends BaseClient { * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * top_num 返回预测得分top结果数,默认为5 - * filter_threshold 默认0.95,可以通过该参数调节识别效果,降低非菜识别率. - * baike_num 返回百科信息的结果数,默认不返回 * @return {Promise} - 标准Promise对象 */ dishDetect(image, options) { @@ -109,7 +107,6 @@ class AipImageClassify extends BaseClient { * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * top_num 返回预测得分top结果数,默认为5 - * baike_num 返回百科信息的结果数,默认不返回 * @return {Promise} - 标准Promise对象 */ carDetect(image, options) { @@ -120,40 +117,6 @@ class AipImageClassify extends BaseClient { 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列表: - * show 是否返回结果图(含统计值和跟踪框)。选true时返回渲染后的图片(base64),其它无效值或为空则默认false。 - * area 只统计该区域内的车辆数,缺省时为全图统计。
逗号分隔,如‘x1,y1,x2,y2,x3,y3...xn,yn',按顺序依次给出每个顶点的x、y坐标(默认尾点和首点相连),形成闭合多边形区域。
服务会做范围(顶点左边需在图像范围内)及个数校验(数组长度必须为偶数,且大于3个顶点)。只支持单个多边形区域,建议设置矩形框,即4个顶点。**坐标取值不能超过图像宽度和高度,比如1280的宽度,坐标值最大到1279**。 - * @return {Promise} - 标准Promise对象 - */ - vehicleDetect(image, options) { - let param = { - image: image, - targetPath: VEHICLE_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对象 - */ - vehicleDamage(image, options) { - let param = { - image: image, - targetPath: VEHICLE_DAMAGE_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } - /** * logo商标识别接口 * @@ -228,7 +191,6 @@ class AipImageClassify extends BaseClient { * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * top_num 返回预测得分top结果数,默认为6 - * baike_num 返回百科信息的结果数,默认不返回 * @return {Promise} - 标准Promise对象 */ animalDetect(image, options) { @@ -245,7 +207,6 @@ class AipImageClassify extends BaseClient { * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * baike_num 返回百科信息的结果数,默认不返回 * @return {Promise} - 标准Promise对象 */ plantDetect(image, options) { @@ -273,88 +234,129 @@ class AipImageClassify extends BaseClient { return this.commonImpl(objectTools.merge(param, options)); } + + + + /** - * 地标识别接口 + * 自定义菜品识别—入库 * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 + * @param {string} brief - 简介 * @param {Object} options - 可选参数对象,key: value都为string类型 - * @description options - options列表: + * @description options - options列表: * @return {Promise} - 标准Promise对象 */ - landmark(image, options) { + customDishesAddImage(image, brief, options) { let param = { image: image, - targetPath: LANDMARK_PATH + brief: brief, + targetPath: CUSTOM_DISH_ADD_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 - * baike_num 返回百科信息的结果数,默认不返回 * @return {Promise} - 标准Promise对象 */ - flower(image, options) { + customDishesSearch(image, options) { let param = { image: image, - targetPath: FLOWER_PATH + targetPath: CUSTOM_DISH_SEARCH_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结果数,如果为空或小于等于0默认为5;如果大于20默认20 * @return {Promise} - 标准Promise对象 */ - ingredient(image, options) { + customDishesDeleteImage(image, options) { let param = { image: image, - targetPath: INGREDIENT_PATH + targetPath: CUSTOM_DISH_DELETE_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** - * 红酒识别接口 + * 自定义菜品识别—删除 * - * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 + * @param {string} cont_sign - 图片签名 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ - redwine(image, options) { + customDishesDeleteContSign(cont_sign, options) { let param = { - image: image, - targetPath: REDWINE_PATH + cont_sign: cont_sign, + targetPath: CUSTOM_DISH_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列表: * @return {Promise} - 标准Promise对象 */ - currency(image, options) { + multiObjectDetect(image, options) { let param = { image: image, - targetPath: CURRENCY_PATH + targetPath: MULTI_OBJECT_DETECT_PATH }; return this.commonImpl(objectTools.merge(param, options)); } + + + // /** + // * 组合接口-image + // * + // * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 + // * @param {Object} options - 可选参数对象,key: value都为string类型 + // * @description options - options列表: + // * @return {Promise} - 标准Promise对象 + // */ + // combinationByImage(image, options) { + // let param = { + // image: image, + // scenes: scenes, + // targetPath: COMBINATION_PATH + // }; + // return this.commonImpl(objectTools.merge(param, options)); + // } + // + // /** + // * 组合接口-imageUrl + // * + // * @param {string} imgUrl - 图片地址 + // * @param {[]} scenes - 场景 + // * @param {Object} options - 可选参数对象,key: value都为string类型 + // * @description options - options列表: + // * @return {Promise} - 标准Promise对象 + // */ + // combinationByImageUrl(imgUrl, scenes, options) { + // let param = { + // imgUrl: imgUrl, + // scenes: scenes, + // targetPath: COMBINATION_PATH + // }; + // return this.commonImpl(objectTools.merge(param, options)); + // } } module.exports = AipImageClassify; diff --git a/src/AipImageProcess.js b/src/AipImageProcess.js deleted file mode 100644 index 31e5899..0000000 --- a/src/AipImageProcess.js +++ /dev/null @@ -1,140 +0,0 @@ -'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 AipImageProcess.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 IMAGE_QUALITY_ENHANCE_PATH = '/rest/2.0/image-process/v1/image_quality_enhance'; -const DEHAZE_PATH = '/rest/2.0/image-process/v1/dehaze'; -const CONTRAST_ENHANCE_PATH = '/rest/2.0/image-process/v1/contrast_enhance'; -const COLOURIZE_PATH = '/rest/2.0/image-process/v1/colourize'; -const STRETCH_RESTORE_PATH = '/rest/2.0/image-process/v1/stretch_restore'; - - -/** - * AipImageProcess类 - * - * @class - * @extends BaseClient - * @constructor - * @param {string} appid appid. - * @param {string} ak access key. - * @param {string} sk security key. - */ -class AipImageProcess 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列表: - * @return {Promise} - 标准Promise对象 - */ - imageQualityEnhance(image, options) { - let param = { - image: image, - targetPath: IMAGE_QUALITY_ENHANCE_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对象 - */ - dehaze(image, options) { - let param = { - image: image, - targetPath: DEHAZE_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对象 - */ - contrastEnhance(image, options) { - let param = { - image: image, - targetPath: CONTRAST_ENHANCE_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对象 - */ - colourize(image, options) { - let param = { - image: image, - targetPath: COLOURIZE_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对象 - */ - stretchRestore(image, options) { - let param = { - image: image, - targetPath: STRETCH_RESTORE_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } -} - -module.exports = AipImageProcess; - diff --git a/src/AipImageSearch.js b/src/AipImageSearch.js index e6faaca..a4a4c55 100644 --- a/src/AipImageSearch.js +++ b/src/AipImageSearch.js @@ -27,17 +27,20 @@ const METHOD_POST = 'POST'; const SAME_HQ_ADD_PATH = '/rest/2.0/realtime_search/same_hq/add'; const SAME_HQ_SEARCH_PATH = '/rest/2.0/realtime_search/same_hq/search'; -const SAME_HQ_UPDATE_PATH = '/rest/2.0/realtime_search/same_hq/update'; const SAME_HQ_DELETE_PATH = '/rest/2.0/realtime_search/same_hq/delete'; const SIMILAR_ADD_PATH = '/rest/2.0/image-classify/v1/realtime_search/similar/add'; const SIMILAR_SEARCH_PATH = '/rest/2.0/image-classify/v1/realtime_search/similar/search'; -const SIMILAR_UPDATE_PATH = '/rest/2.0/image-classify/v1/realtime_search/similar/update'; const SIMILAR_DELETE_PATH = '/rest/2.0/image-classify/v1/realtime_search/similar/delete'; const PRODUCT_ADD_PATH = '/rest/2.0/image-classify/v1/realtime_search/product/add'; const PRODUCT_SEARCH_PATH = '/rest/2.0/image-classify/v1/realtime_search/product/search'; -const PRODUCT_UPDATE_PATH = '/rest/2.0/image-classify/v1/realtime_search/product/update'; const PRODUCT_DELETE_PATH = '/rest/2.0/image-classify/v1/realtime_search/product/delete'; +const PICTURE_BOOK_ADD_PATH = "/rest/2.0/imagesearch/v1/realtime_search/picturebook/add"; +const PICTURE_BOOK_SEARCH_PATH = "/rest/2.0/imagesearch/v1/realtime_search/picturebook/search"; +const PICTURE_BOOK_DELETE_PATH = "/rest/2.0/imagesearch/v1/realtime_search/picturebook/delete" +const PICTURE_BOOK_UPDATE_PATH = "/rest/2.0/imagesearch/v1/realtime_search/picturebook/update" + + /** * AipImageSearch类 @@ -66,35 +69,15 @@ class AipImageSearch extends BaseClient { * 相同图检索—入库接口 * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 - * @param {string} brief - 检索时原样带回,最长256B。 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: + * brief 检索时原样带回,最长256B。 * tags 1 - 65535范围内的整数,tag间以逗号分隔,最多2个tag。样例:"100,11" ;检索时可圈定分类维度进行检索 * @return {Promise} - 标准Promise对象 */ - sameHqAdd(image, brief, options) { + sameHqAdd(image, options) { let param = { image: image, - brief: brief, - targetPath: SAME_HQ_ADD_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } - - /** - * 相同图检索—入库接口 - * - * @param {string} url - 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效 - * @param {string} brief - 检索时原样带回,最长256B。 - * @param {Object} options - 可选参数对象,key: value都为string类型 - * @description options - options列表: - * tags 1 - 65535范围内的整数,tag间以逗号分隔,最多2个tag。样例:"100,11" ;检索时可圈定分类维度进行检索 - * @return {Promise} - 标准Promise对象 - */ - sameHqAddUrl(url, brief, options) { - let param = { - url: url, - brief: brief, targetPath: SAME_HQ_ADD_PATH }; return this.commonImpl(objectTools.merge(param, options)); @@ -120,80 +103,6 @@ class AipImageSearch extends BaseClient { return this.commonImpl(objectTools.merge(param, options)); } - /** - * 相同图检索—检索接口 - * - * @param {string} url - 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效 - * @param {Object} options - 可选参数对象,key: value都为string类型 - * @description options - options列表: - * tags 1 - 65535范围内的整数,tag间以逗号分隔,最多2个tag。样例:"100,11" ;检索时可圈定分类维度进行检索 - * tag_logic 检索时tag之间的逻辑, 0:逻辑and,1:逻辑or - * pn 分页功能,起始位置,例:0。未指定分页时,默认返回前300个结果;接口返回数量最大限制1000条,例如:起始位置为900,截取条数500条,接口也只返回第900 - 1000条的结果,共计100条 - * rn 分页功能,截取条数,例:250 - * @return {Promise} - 标准Promise对象 - */ - sameHqSearchUrl(url, options) { - let param = { - url: url, - targetPath: SAME_HQ_SEARCH_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列表: - * brief 更新的摘要信息,最长256B。样例:{"name":"周杰伦", "id":"666"} - * tags 1 - 65535范围内的整数,tag间以逗号分隔,最多2个tag。样例:"100,11" ;检索时可圈定分类维度进行检索 - * @return {Promise} - 标准Promise对象 - */ - sameHqUpdate(image, options) { - let param = { - image: image, - targetPath: SAME_HQ_UPDATE_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } - - /** - * 相同图检索—更新接口 - * - * @param {string} url - 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效 - * @param {Object} options - 可选参数对象,key: value都为string类型 - * @description options - options列表: - * brief 更新的摘要信息,最长256B。样例:{"name":"周杰伦", "id":"666"} - * tags 1 - 65535范围内的整数,tag间以逗号分隔,最多2个tag。样例:"100,11" ;检索时可圈定分类维度进行检索 - * @return {Promise} - 标准Promise对象 - */ - sameHqUpdateUrl(url, options) { - let param = { - url: url, - targetPath: SAME_HQ_UPDATE_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } - - /** - * 相同图检索—更新接口 - * - * @param {string} contSign - 图片签名 - * @param {Object} options - 可选参数对象,key: value都为string类型 - * @description options - options列表: - * brief 更新的摘要信息,最长256B。样例:{"name":"周杰伦", "id":"666"} - * tags 1 - 65535范围内的整数,tag间以逗号分隔,最多2个tag。样例:"100,11" ;检索时可圈定分类维度进行检索 - * @return {Promise} - 标准Promise对象 - */ - sameHqUpdateContSign(contSign, options) { - let param = { - cont_sign: contSign, - targetPath: SAME_HQ_UPDATE_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } - /** * 相同图检索—删除接口 * @@ -213,23 +122,7 @@ class AipImageSearch extends BaseClient { /** * 相同图检索—删除接口 * - * @param {string} url - 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效 - * @param {Object} options - 可选参数对象,key: value都为string类型 - * @description options - options列表: - * @return {Promise} - 标准Promise对象 - */ - sameHqDeleteByUrl(url, options) { - let param = { - url: url, - targetPath: SAME_HQ_DELETE_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } - - /** - * 相同图检索—删除接口 - * - * @param {string} contSign - 图片签名 + * @param {string} contSign - 图片签名(和image二选一,image优先级更高) * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 @@ -246,35 +139,15 @@ class AipImageSearch extends BaseClient { * 相似图检索—入库接口 * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 - * @param {string} brief - 检索时原样带回,最长256B。 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: + * brief 检索时原样带回,最长256B。 * tags 1 - 65535范围内的整数,tag间以逗号分隔,最多2个tag。样例:"100,11" ;检索时可圈定分类维度进行检索 * @return {Promise} - 标准Promise对象 */ - similarAdd(image, brief, options) { + similarAdd(image, options) { let param = { image: image, - brief: brief, - targetPath: SIMILAR_ADD_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } - - /** - * 相似图检索—入库接口 - * - * @param {string} url - 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效 - * @param {string} brief - 检索时原样带回,最长256B。 - * @param {Object} options - 可选参数对象,key: value都为string类型 - * @description options - options列表: - * tags 1 - 65535范围内的整数,tag间以逗号分隔,最多2个tag。样例:"100,11" ;检索时可圈定分类维度进行检索 - * @return {Promise} - 标准Promise对象 - */ - similarAddUrl(url, brief, options) { - let param = { - url: url, - brief: brief, targetPath: SIMILAR_ADD_PATH }; return this.commonImpl(objectTools.merge(param, options)); @@ -301,311 +174,267 @@ class AipImageSearch extends BaseClient { } /** - * 相似图检索—检索接口 - * - * @param {string} url - 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效 - * @param {Object} options - 可选参数对象,key: value都为string类型 - * @description options - options列表: - * tags 1 - 65535范围内的整数,tag间以逗号分隔,最多2个tag。样例:"100,11" ;检索时可圈定分类维度进行检索 - * tag_logic 检索时tag之间的逻辑, 0:逻辑and,1:逻辑or - * pn 分页功能,起始位置,例:0。未指定分页时,默认返回前300个结果;接口返回数量最大限制1000条,例如:起始位置为900,截取条数500条,接口也只返回第900 - 1000条的结果,共计100条 - * rn 分页功能,截取条数,例:250 - * @return {Promise} - 标准Promise对象 - */ - similarSearchUrl(url, options) { - let param = { - url: url, - targetPath: SIMILAR_SEARCH_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列表: - * brief 更新的摘要信息,最长256B。样例:{"name":"周杰伦", "id":"666"} - * tags 1 - 65535范围内的整数,tag间以逗号分隔,最多2个tag。样例:"100,11" ;检索时可圈定分类维度进行检索 * @return {Promise} - 标准Promise对象 */ - similarUpdate(image, options) { + similarDeleteByImage(image, options) { let param = { image: image, - targetPath: SIMILAR_UPDATE_PATH + targetPath: SIMILAR_DELETE_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** - * 相似图检索—更新接口 + * 相似图检索—删除接口 * - * @param {string} url - 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效 + * @param {string} contSign - 图片签名(和image二选一,image优先级更高) * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * brief 更新的摘要信息,最长256B。样例:{"name":"周杰伦", "id":"666"} - * tags 1 - 65535范围内的整数,tag间以逗号分隔,最多2个tag。样例:"100,11" ;检索时可圈定分类维度进行检索 * @return {Promise} - 标准Promise对象 */ - similarUpdateUrl(url, options) { + similarDeleteBySign(contSign, options) { let param = { - url: url, - targetPath: SIMILAR_UPDATE_PATH + cont_sign: contSign, + targetPath: SIMILAR_DELETE_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** - * 相似图检索—更新接口 + * 商品检索—入库接口 * - * @param {string} contSign - 图片签名 + * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * brief 更新的摘要信息,最长256B。样例:{"name":"周杰伦", "id":"666"} - * tags 1 - 65535范围内的整数,tag间以逗号分隔,最多2个tag。样例:"100,11" ;检索时可圈定分类维度进行检索 + * brief 检索时原样带回,最长256B。**请注意,检索接口不返回原图,仅反馈当前填写的brief信息,所以调用该入库接口时,brief信息请尽量填写可关联至本地图库的图片id或者图片url、图片名称等信息** + * class_id1 商品分类维度1,支持1-60范围内的整数。检索时可圈定该分类维度进行检索 + * class_id2 商品分类维度1,支持1-60范围内的整数。检索时可圈定该分类维度进行检索 * @return {Promise} - 标准Promise对象 */ - similarUpdateContSign(contSign, options) { + productAdd(image, options) { let param = { - cont_sign: contSign, - targetPath: SIMILAR_UPDATE_PATH + image: image, + targetPath: PRODUCT_ADD_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列表: + * class_id1 商品分类维度1,支持1-60范围内的整数。检索时可圈定该分类维度进行检索 + * class_id2 商品分类维度1,支持1-60范围内的整数。检索时可圈定该分类维度进行检索 + * pn 分页功能,起始位置,例:0。未指定分页时,默认返回前300个结果;接口返回数量最大限制1000条,例如:起始位置为900,截取条数500条,接口也只返回第900 - 1000条的结果,共计100条 + * rn 分页功能,截取条数,例:250 * @return {Promise} - 标准Promise对象 */ - similarDeleteByImage(image, options) { + productSearch(image, options) { let param = { image: image, - targetPath: SIMILAR_DELETE_PATH + targetPath: PRODUCT_SEARCH_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** - * 相似图检索—删除接口 + * 商品检索—删除接口 * - * @param {string} url - 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效 + * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ - similarDeleteByUrl(url, options) { + productDeleteByImage(image, options) { let param = { - url: url, - targetPath: SIMILAR_DELETE_PATH + image: image, + targetPath: PRODUCT_DELETE_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** - * 相似图检索—删除接口 + * 商品检索—删除接口 * - * @param {string} contSign - 图片签名 + * @param {string} contSign - 图片签名(和image二选一,image优先级更高) * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ - similarDeleteBySign(contSign, options) { + productDeleteBySign(contSign, options) { let param = { cont_sign: contSign, - targetPath: SIMILAR_DELETE_PATH + targetPath: PRODUCT_DELETE_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** - * 商品检索—入库接口 + * 绘本图片搜索—入库-image * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 - * @param {string} brief - 检索时原样带回,最长256B。**请注意,检索接口不返回原图,仅反馈当前填写的brief信息,所以调用该入库接口时,brief信息请尽量填写可关联至本地图库的图片id或者图片url、图片名称等信息** + * @param {string} brief - 简介 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * class_id1 商品分类维度1,支持1-65535范围内的整数。检索时可圈定该分类维度进行检索 - * class_id2 商品分类维度1,支持1-65535范围内的整数。检索时可圈定该分类维度进行检索 * @return {Promise} - 标准Promise对象 */ - productAdd(image, brief, options) { + pictureBookAddImage(image, brief, options) { let param = { - image: image, - brief: brief, - targetPath: PRODUCT_ADD_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } + image : image, + brief : brief, + targetPath: PICTURE_BOOK_ADD_PATH + } + return this.commonImpl(objectTools.merge(param, options))}; /** - * 商品检索—入库接口 + * 绘本图片搜索—入库-url * - * @param {string} url - 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效 - * @param {string} brief - 检索时原样带回,最长256B。**请注意,检索接口不返回原图,仅反馈当前填写的brief信息,所以调用该入库接口时,brief信息请尽量填写可关联至本地图库的图片id或者图片url、图片名称等信息** + * @param {string} url - 图片地址 + * @param {string} brief - 简介 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * class_id1 商品分类维度1,支持1-65535范围内的整数。检索时可圈定该分类维度进行检索 - * class_id2 商品分类维度1,支持1-65535范围内的整数。检索时可圈定该分类维度进行检索 * @return {Promise} - 标准Promise对象 */ - productAddUrl(url, brief, options) { + pictureBookAddUrl(url, brief, options) { let param = { url: url, - brief: brief, - targetPath: PRODUCT_ADD_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } + brief : brief, + targetPath: PICTURE_BOOK_ADD_PATH + } + return this.commonImpl(objectTools.merge(param, options))}; /** - * 商品检索—检索接口 + * 绘本图片搜索—检索-image * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * class_id1 商品分类维度1,支持1-65535范围内的整数。检索时可圈定该分类维度进行检索 - * class_id2 商品分类维度1,支持1-65535范围内的整数。检索时可圈定该分类维度进行检索 - * pn 分页功能,起始位置,例:0。未指定分页时,默认返回前300个结果;接口返回数量最大限制1000条,例如:起始位置为900,截取条数500条,接口也只返回第900 - 1000条的结果,共计100条 - * rn 分页功能,截取条数,例:250 * @return {Promise} - 标准Promise对象 */ - productSearch(image, options) { + pictureBookSearchImage(image, options) { let param = { - image: image, - targetPath: PRODUCT_SEARCH_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } + image : image, + targetPath: PICTURE_BOOK_SEARCH_PATH + } + return this.commonImpl(objectTools.merge(param, options))}; /** - * 商品检索—检索接口 + * 绘本图片搜索—检索-url * - * @param {string} url - 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效 + * @param {string} url - 图片地址 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * class_id1 商品分类维度1,支持1-65535范围内的整数。检索时可圈定该分类维度进行检索 - * class_id2 商品分类维度1,支持1-65535范围内的整数。检索时可圈定该分类维度进行检索 - * pn 分页功能,起始位置,例:0。未指定分页时,默认返回前300个结果;接口返回数量最大限制1000条,例如:起始位置为900,截取条数500条,接口也只返回第900 - 1000条的结果,共计100条 - * rn 分页功能,截取条数,例:250 * @return {Promise} - 标准Promise对象 */ - productSearchUrl(url, options) { + pictureBookSearchUrl(url, options) { let param = { url: url, - targetPath: PRODUCT_SEARCH_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } + targetPath: PICTURE_BOOK_SEARCH_PATH + } + return this.commonImpl(objectTools.merge(param, options))}; /** - * 商品检索—更新接口 + * 绘本图片搜索—更新-image * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * brief 更新的摘要信息,最长256B。样例:{"name":"周杰伦", "id":"666"} - * class_id1 更新的商品分类1,支持1-65535范围内的整数。 - * class_id2 更新的商品分类2,支持1-65535范围内的整数。 * @return {Promise} - 标准Promise对象 */ - productUpdate(image, options) { + pictureBookUpdate(image, options) { let param = { - image: image, - targetPath: PRODUCT_UPDATE_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } + image : image, + targetPath: PICTURE_BOOK_UPDATE_PATH + } + return this.commonImpl(objectTools.merge(param, options))}; + /** - * 商品检索—更新接口 + * 绘本图片搜索—更新-url * - * @param {string} url - 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效 + * @param {string} url - 图片地址 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * brief 更新的摘要信息,最长256B。样例:{"name":"周杰伦", "id":"666"} - * class_id1 更新的商品分类1,支持1-65535范围内的整数。 - * class_id2 更新的商品分类2,支持1-65535范围内的整数。 * @return {Promise} - 标准Promise对象 */ - productUpdateUrl(url, options) { + pictureBookUpdateUrl(url, options) { let param = { url: url, - targetPath: PRODUCT_UPDATE_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } + targetPath: PICTURE_BOOK_UPDATE_PATH + } + return this.commonImpl(objectTools.merge(param, options))}; /** - * 商品检索—更新接口 + * 绘本图片搜索—更新-cont_sign * - * @param {string} contSign - 图片签名 + * @param {string} contSign - 图片签名(和image二选一,image优先级更高) * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * brief 更新的摘要信息,最长256B。样例:{"name":"周杰伦", "id":"666"} - * class_id1 更新的商品分类1,支持1-65535范围内的整数。 - * class_id2 更新的商品分类2,支持1-65535范围内的整数。 * @return {Promise} - 标准Promise对象 */ - productUpdateContSign(contSign, options) { + pictureBookUpdateContSign(contSign, options) { let param = { - cont_sign: contSign, - targetPath: PRODUCT_UPDATE_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } + cont_sign: cont_sign, + targetPath: PICTURE_BOOK_UPDATE_PATH + } + return this.commonImpl(objectTools.merge(param, options))}; /** - * 商品检索—删除接口 + * 绘本图片搜索—删除-image * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ - productDeleteByImage(image, options) { + pictureBookDeleteByImage(image, options) { let param = { - image: image, - targetPath: PRODUCT_DELETE_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } + image : image, + targetPath: PICTURE_BOOK_DELETE_PATH + } + + return this.commonImpl(objectTools.merge(param, options))}; /** - * 商品检索—删除接口 + * 绘本图片搜索—删除-url * - * @param {string} url - 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效 + const PICTURE_BOOK_DELETE_PATH = "/rest/2.0/imagesearch/v1/realtime_search/picturebook/delete"; +const PICTURE_BOOK_UPDATE_PATH = "/rest/2.0/imagesearch/v1/realtime_search/picturebook/update"; +* @param {string} url - 图片地址 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ - productDeleteByUrl(url, options) { + pictureBookDeleteByUrl(url, options) { let param = { url: url, - targetPath: PRODUCT_DELETE_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } + targetPath: PICTURE_BOOK_DELETE_PATH + } + return this.commonImpl(objectTools.merge(param, options))}; /** - * 商品检索—删除接口 + * 绘本图片搜索—删除-cont_sign * - * @param {string} contSign - 图片签名 + * @param {string} contSign - 图片签名(和image二选一,image优先级更高) * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ - productDeleteBySign(contSign, options) { + pictureBookDeleteBySign(contSign, options) { let param = { cont_sign: contSign, - targetPath: PRODUCT_DELETE_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } + targetPath: PICTURE_BOOK_DELETE_PATH + } + return this.commonImpl(objectTools.merge(param, options))}; + + } module.exports = AipImageSearch; diff --git a/src/AipNlp.js b/src/AipNlp.js index 669fbff..c386c1a 100644 --- a/src/AipNlp.js +++ b/src/AipNlp.js @@ -36,10 +36,6 @@ const COMMENT_TAG_PATH = '/rpc/2.0/nlp/v2/comment_tag'; const SENTIMENT_CLASSIFY_PATH = '/rpc/2.0/nlp/v1/sentiment_classify'; const KEYWORD_PATH = '/rpc/2.0/nlp/v1/keyword'; const TOPIC_PATH = '/rpc/2.0/nlp/v1/topic'; -const ECNET_PATH = '/rpc/2.0/nlp/v1/ecnet'; -const EMOTION_PATH = '/rpc/2.0/nlp/v1/emotion'; -const NEWS_SUMMARY_PATH = '/rpc/2.0/nlp/v1/news_summary'; -const ADDRESS_PATH = '/rpc/2.0/nlp/v1/address'; /** @@ -252,74 +248,6 @@ class AipNlp extends BaseClient { }; return this.commonImpl(objectTools.merge(param, options)); } - - /** - * 文本纠错接口 - * - * @param {string} text - 待纠错文本,输入限制511字节 - * @param {Object} options - 可选参数对象,key: value都为string类型 - * @description options - options列表: - * @return {Promise} - 标准Promise对象 - */ - ecnet(text, options) { - let param = { - text: text, - targetPath: ECNET_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } - - /** - * 对话情绪识别接口接口 - * - * @param {string} text - 待识别情感文本,输入限制512字节 - * @param {Object} options - 可选参数对象,key: value都为string类型 - * @description options - options列表: - * scene default(默认项-不区分场景),talk(闲聊对话-如度秘聊天等),task(任务型对话-如导航对话等),customer_service(客服对话-如电信/银行客服等) - * @return {Promise} - 标准Promise对象 - */ - emotion(text, options) { - let param = { - text: text, - targetPath: EMOTION_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } - - /** - * 新闻摘要接口接口 - * - * @param {string} content - 字符串(限3000字符数以内)字符串仅支持GBK编码,长度需小于3000字符数(即6000字节),请输入前确认字符数没有超限,若字符数超长会返回错误。正文中如果包含段落信息,请使用"\n"分隔,段落信息算法中有重要的作用,请尽量保留 - * @param {integer} maxSummaryLen - 此数值将作为摘要结果的最大长度。例如:原文长度1000字,本参数设置为150,则摘要结果的最大长度是150字;推荐最优区间:200-500字 - * @param {Object} options - 可选参数对象,key: value都为string类型 - * @description options - options列表: - * title 字符串(限200字符数)字符串仅支持GBK编码,长度需小于200字符数(即400字节),请输入前确认字符数没有超限,若字符数超长会返回错误。标题在算法中具有重要的作用,若文章确无标题,输入参数的“标题”字段为空即可 - * @return {Promise} - 标准Promise对象 - */ - newsSummary(content, maxSummaryLen, options) { - let param = { - content: content, - max_summary_len: maxSummaryLen, - targetPath: NEWS_SUMMARY_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } - - /** - * 地址识别接口接口 - * - * @param {string} text - 待识别的文本内容,不超过1000字节 - * @param {Object} options - 可选参数对象,key: value都为string类型 - * @description options - options列表: - * @return {Promise} - 标准Promise对象 - */ - address(text, options) { - let param = { - text: text, - targetPath: ADDRESS_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } } module.exports = AipNlp; diff --git a/src/AipOcr.js b/src/AipOcr.js index 77d82f3..b42ff66 100644 --- a/src/AipOcr.js +++ b/src/AipOcr.js @@ -38,22 +38,9 @@ const VEHICLE_LICENSE_PATH = '/rest/2.0/ocr/v1/vehicle_license'; const LICENSE_PLATE_PATH = '/rest/2.0/ocr/v1/license_plate'; const BUSINESS_LICENSE_PATH = '/rest/2.0/ocr/v1/business_license'; const RECEIPT_PATH = '/rest/2.0/ocr/v1/receipt'; -const TRAIN_TICKET_PATH = '/rest/2.0/ocr/v1/train_ticket'; -const TAXI_RECEIPT_PATH = '/rest/2.0/ocr/v1/taxi_receipt'; const FORM_PATH = '/rest/2.0/ocr/v1/form'; const TABLE_RECOGNIZE_PATH = '/rest/2.0/solution/v1/form_ocr/request'; const TABLE_RESULT_GET_PATH = '/rest/2.0/solution/v1/form_ocr/get_request_result'; -const VIN_CODE_PATH = '/rest/2.0/ocr/v1/vin_code'; -const QUOTA_INVOICE_PATH = '/rest/2.0/ocr/v1/quota_invoice'; -const HOUSEHOLD_REGISTER_PATH = '/rest/2.0/ocr/v1/household_register'; -const HK_MACAU_EXITENTRYPERMIT_PATH = '/rest/2.0/ocr/v1/HK_Macau_exitentrypermit'; -const TAIWAN_EXITENTRYPERMIT_PATH = '/rest/2.0/ocr/v1/taiwan_exitentrypermit'; -const BIRTH_CERTIFICATE_PATH = '/rest/2.0/ocr/v1/birth_certificate'; -const VEHICLE_INVOICE_PATH = '/rest/2.0/ocr/v1/vehicle_invoice'; -const VEHICLE_CERTIFICATE_PATH = '/rest/2.0/ocr/v1/vehicle_certificate'; -const INVOICE_PATH = '/rest/2.0/ocr/v1/invoice'; -const AIR_TICKET_PATH = '/rest/2.0/ocr/v1/air_ticket'; -const INSURANCE_DOCUMENTS_PATH = '/rest/2.0/ocr/v1/insurance_documents'; const VAT_INVOICE_PATH = '/rest/2.0/ocr/v1/vat_invoice'; const QRCODE_PATH = '/rest/2.0/ocr/v1/qrcode'; const NUMBERS_PATH = '/rest/2.0/ocr/v1/numbers'; @@ -63,13 +50,21 @@ const BUSINESS_CARD_PATH = '/rest/2.0/ocr/v1/business_card'; const HANDWRITING_PATH = '/rest/2.0/ocr/v1/handwriting'; const CUSTOM_PATH = '/rest/2.0/solution/v1/iocr/recognise'; +const DOCANALYSIS_PATH = '/rest/2.0/ocr/v1/doc_analysis'; +const METER_PATH = '/rest/2.0/ocr/v1/meter'; +const WEBIMAGELOC_PATH = '/rest/2.0/ocr/v1/webimage_loc'; + +const TAXI_RECEIPT_PATH = '/rest/2.0/ocr/v1/taxi_receipt'; +const VIN_CODE_PATH = '/rest/2.0/ocr/v1/vin_code'; +const TRAIN_TICKET_PATH = '/rest/2.0/ocr/v1/train_ticket'; + /** * AipOcr类 * * @class * @extends BaseClient - * @constructor + * @constructor` * @param {string} appid appid. * @param {string} ak access key. * @param {string} sk security key. @@ -82,8 +77,7 @@ class AipOcr extends BaseClient { let httpClient = new HttpClient(); let apiUrl = param.targetPath; delete param.targetPath; - let requestInfo = new RequestInfo(apiUrl, - param, METHOD_POST); + let requestInfo = new RequestInfo(apiUrl, param, METHOD_POST); return this.doRequest(requestInfo, httpClient); } @@ -409,38 +403,6 @@ class AipOcr extends BaseClient { 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对象 - */ - trainTicket(image, options) { - let param = { - image: image, - targetPath: TRAIN_TICKET_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对象 - */ - taxiReceipt(image, options) { - let param = { - image: image, - targetPath: TAXI_RECEIPT_PATH - }; - return this.commonImpl(objectTools.merge(param, options)); - } - /** * 表格文字识别同步接口接口 * @@ -491,347 +453,363 @@ class AipOcr extends BaseClient { } /** - * VIN码识别接口 + * 增值税发票识别接口 * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ - vinCode(image, options) { + vatInvoice(image, options) { let param = { image: image, - targetPath: VIN_CODE_PATH + targetPath: VAT_INVOICE_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** - * 定额发票识别接口 + * 增值税发票识别接口 * - * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 + * @param {string} image - url * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ - quotaInvoice(image, options) { + vatInvoiceUrl(image, options) { let param = { - image: image, - targetPath: QUOTA_INVOICE_PATH + url: image, + targetPath: VAT_INVOICE_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** - * 户口本识别接口 + * 增值税发票识别接口 * - * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 + * @param {string} image - pdf * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: * @return {Promise} - 标准Promise对象 */ - householdRegister(image, options) { + vatInvoicePdf(image, options) { + let fs = require('fs'); + let data = fs.readFileSync(image); + let base64 = new Buffer(data).toString('base64'); let param = { - image: image, - targetPath: HOUSEHOLD_REGISTER_PATH + pdf_file: base64, + targetPath: VAT_INVOICE_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对象 */ - HKMacauExitentrypermit(image, options) { + qrcode(image, options) { let param = { image: image, - targetPath: HK_MACAU_EXITENTRYPERMIT_PATH + targetPath: QRCODE_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列表: + * recognize_granularity 是否定位单字符位置,big:不定位单字符位置,默认值;small:定位单字符位置 + * detect_direction 是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括:
- true:检测朝向;
- false:不检测朝向。 * @return {Promise} - 标准Promise对象 */ - taiwanExitentrypermit(image, options) { + numbers(image, options) { let param = { image: image, - targetPath: TAIWAN_EXITENTRYPERMIT_PATH + targetPath: NUMBERS_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列表: + * recognize_granularity 是否定位单字符位置,big:不定位单字符位置,默认值;small:定位单字符位置 * @return {Promise} - 标准Promise对象 */ - birthCertificate(image, options) { + lottery(image, options) { let param = { image: image, - targetPath: BIRTH_CERTIFICATE_PATH + targetPath: LOTTERY_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对象 */ - vehicleInvoice(image, options) { + passport(image, options) { let param = { image: image, - targetPath: VEHICLE_INVOICE_PATH + targetPath: PASSPORT_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对象 */ - vehicleCertificate(image, options) { + businessCard(image, options) { let param = { image: image, - targetPath: VEHICLE_CERTIFICATE_PATH + targetPath: BUSINESS_CARD_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列表: - * location 是否输出位置信息,true:输出位置信息,false:不输出位置信息,默认false + * recognize_granularity 是否定位单字符位置,big:不定位单字符位置,默认值;small:定位单字符位置 * @return {Promise} - 标准Promise对象 */ - invoice(image, options) { + handwriting(image, options) { let param = { image: image, - targetPath: INVOICE_PATH + targetPath: HANDWRITING_PATH }; return this.commonImpl(objectTools.merge(param, options)); } /** - * 行程单识别接口 + * 自定义模板文字识别接口 * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 + * @param {string} templateSign - 您在自定义文字识别平台制作的模板的ID * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * location 是否输出位置信息,true:输出位置信息,false:不输出位置信息,默认false * @return {Promise} - 标准Promise对象 */ - airTicket(image, options) { + custom(image, templateSign, options) { let param = { image: image, - targetPath: AIR_TICKET_PATH + templateSign: templateSign, + targetPath: CUSTOM_PATH }; return this.commonImpl(objectTools.merge(param, options)); } + tableRecorgnize(image, type, timeout, interval) { + let self = this; + timeout = timeout || 20000; + interval = interval || 2000; + return this.tableBegin(image).then(function(result) { + if (result.error_code) { + return result; + } + let id = result.result[0]['request_id']; + let pid = null; + let startTime = Date.now(); + return new Promise(function(resolve, reject) { + pid = setInterval(function () { + if (Date.now() - startTime > timeout) { + reject({errorMsg: 'get result timeout', requestId: id}); + clearInterval(pid); + } else { + self.tableGetresult(id, type).then(function (result) { + if (result['result']['ret_code'] === 3) { + clearInterval(pid); + resolve(result); + } + }); + } + }, interval); + }) + }); + } /** - * 保单识别接口 + * 文档版面分析与识别 * * @param {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 + * @param languageType + 识别语言类型,默认为CHN_ENG 可选值包括:CHN_ENG:中英文, ENG:英文 + * @param resultType + 返回识别结果是按单行结果返回,还是按单字结果返回,默认为big。 + big:返回行识别结果 + small:返回行识别结果之上还会返回单字结果 * @param {Object} options - 可选参数对象,key: value都为string类型 * @description options - options列表: - * rkv_business 是否进行商业逻辑处理,rue:进行商业逻辑处理,false:不进行商业逻辑处理,默认true + * detect_direction: + * 类型: string 可选值范围: true/false 说明:是否检测图像朝向,默认不检测,即:false。 + * line_probability: + * 类型: string 可选值范围: true/false 说明:是否返回每行识别结果的置信度。默认为false + * words_type: + * 类型: string 可选值范围: handwring_only/handprint_mix 说明:文字类型, 默认 印刷文字识别 + * layout_analysis: + * 类型: string 可选值范围: true/false 说明:是否分析文档版面:包括图、表、标题、段落的分析输出 * @return {Promise} - 标准Promise对象 */ - insuranceDocuments(image, options) { + docAnalysis(image,languageType, resultType, options) { let param = { image: image, - targetPath: INSURANCE_DOCUMENTS_PATH + language_type:languageType, + result_type:resultType, + targetPath: DOCANALYSIS_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对象 + * 仪器仪表盘读数识别 + {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 + * @param options - options列表 + * probability: + * 类型: string 可选值范围: true/false 说明:是否返回每行识别结果的置信度。默认为false + * poly_location: + * 类型: string 可选值范围: true/false 说明:位置信息返回形式,默认:false + * @return */ - vatInvoice(image, options) { + meter(image, options) { let param = { image: image, - targetPath: VAT_INVOICE_PATH + targetPath: METER_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对象 + * 网络图片文字识别(含位置版) + * {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 + * @param options - options列表 + * detect_direction: + * 类型: string 可选值范围: true/false 说明:是否检测图像朝向,默认不检测,即:false。 + * probability: + * 类型: string 可选值范围: true/false 说明:是否返回每行识别结果的置信度。默认为false + * poly_location: + * 类型: string 可选值范围: handwring_only/handprint_mix 说明:是否返回文字所在区域的外接四边形的4个点坐标信息。默认为false + * recognize_granularity: + * 类型: string 可选值范围: true/false 说明:是否定位单字符位置,big:不定位单字符位置,默认值;small:定位单字符位置 + * @return */ - qrcode(image, options) { + webimageLoc(image, options) { let param = { image: image, - targetPath: QRCODE_PATH + targetPath: WEBIMAGELOC_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列表: - * recognize_granularity 是否定位单字符位置,big:不定位单字符位置,默认值;small:定位单字符位置 - * detect_direction 是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括:
- true:检测朝向;
- false:不检测朝向。 - * @return {Promise} - 标准Promise对象 + * 出租车票识别 + * {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 + * @param options - options列表 + * @return */ - numbers(image, options) { + taxiReceipt(image, options) { let param = { image: image, - targetPath: NUMBERS_PATH + targetPath: TAXI_RECEIPT_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列表: - * recognize_granularity 是否定位单字符位置,big:不定位单字符位置,默认值;small:定位单字符位置 - * @return {Promise} - 标准Promise对象 + * 出租车票识别 + * {string} image - url + * @param options - options列表 + * @return */ - lottery(image, options) { + taxiReceiptUrl(image, options) { let param = { - image: image, - targetPath: LOTTERY_PATH + url: image, + targetPath: TAXI_RECEIPT_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对象 + * VIN码识别 + * {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 + * @param options - options列表 + * @return */ - passport(image, options) { + vinCode(image, options) { let param = { image: image, - targetPath: PASSPORT_PATH + targetPath: VIN_CODE_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对象 + * VIN码识别 + * {string} image - url + * @param options - options列表 + * @return */ - businessCard(image, options) { + vinCodeUrl(image, options) { let param = { - image: image, - targetPath: BUSINESS_CARD_PATH + url: image, + targetPath: VIN_CODE_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列表: - * recognize_granularity 是否定位单字符位置,big:不定位单字符位置,默认值;small:定位单字符位置 - * @return {Promise} - 标准Promise对象 + * 火车票识别 + * {string} image - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 + * @param options - options列表 + * @return */ - handwriting(image, options) { + trainTicket(image, options) { let param = { image: image, - targetPath: HANDWRITING_PATH + targetPath: TRAIN_TICKET_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列表: - * templateSign 您在自定义文字识别平台制作的模板的ID - * classifierId 分类器Id。这个参数和templateSign至少存在一个,优先使用templateSign。存在templateSign时,表示使用指定模板;如果没有templateSign而有classifierId,表示使用分类器去判断使用哪个模板 - * @return {Promise} - 标准Promise对象 + * 火车票识别 + * {string} image - url + * @param options - options列表 + * @return */ - custom(image, options) { + trainTicketUrl(image, options) { let param = { - image: image, - targetPath: CUSTOM_PATH + url: image, + targetPath: TRAIN_TICKET_PATH }; return this.commonImpl(objectTools.merge(param, options)); } - tableRecorgnize(image, type, timeout, interval) { - let self = this; - timeout = timeout || 20000; - interval = interval || 2000; - return this.tableBegin(image).then(function(result) { - if (result.error_code) { - return result; - } - let id = result.result[0]['request_id']; - let pid = null; - let startTime = Date.now(); - return new Promise(function(resolve, reject) { - pid = setInterval(function () { - if (Date.now() - startTime > timeout) { - reject({errorMsg: 'get result timeout', requestId: id}); - clearInterval(pid); - } else { - self.tableGetresult(id, type).then(function (result) { - if (result['result']['ret_code'] === 3) { - clearInterval(pid); - resolve(result); - } - }); - } - }, interval); - }) - }); - } } module.exports = AipOcr; + diff --git a/src/AipSpeech.js b/src/AipSpeech.js index bc9634d..e88299d 100644 --- a/src/AipSpeech.js +++ b/src/AipSpeech.js @@ -35,7 +35,6 @@ const CONTENT_TYPE_JSON = 'application/json'; const HOST_VOP = 'vop.baidu.com'; const HOST_TSN = 'tsn.baidu.com'; const PATH_VOP = '/server_api'; -const PATH_VOP_PRO = '/pro_api'; const PATH_TTS = '/text2audio'; /** @@ -54,18 +53,6 @@ class AipSpeech extends BaseClient { super(appId, ak, sk, {isSkipScopeCheck: true}); } - recognizePro(buffer, format, rate, options) { - let param = { - speech: buffer && buffer.toString(code.BASE64), - format: format, - rate: rate, - channel: 1, - len: buffer && buffer.toString(code.BIN).length - }; - - return this.asrImplPro(objectTools.merge(param, options)); - } - recognize(buffer, format, rate, options) { let param = { speech: buffer && buffer.toString(code.BASE64), @@ -90,16 +77,8 @@ class AipSpeech extends BaseClient { } asrImpl(param) { - return this.asrImplPath(param, PATH_VOP); - } - - asrImplPro(param) { - return this.asrImplPath(param, PATH_VOP_PRO); - } - - asrImplPath(param, url) { let httpClient = new HttpClientVoiceASR(); - let requestInfo = new RequestInfo(url, param, METHOD_POST, false, { + let requestInfo = new RequestInfo(PATH_VOP, param, METHOD_POST, false, { [httpHeader.CONTENT_TYPE]: CONTENT_TYPE_JSON }); requestInfo.setHost(HOST_VOP); diff --git a/src/client/requestInfo.js b/src/client/requestInfo.js index 277592f..7721585 100644 --- a/src/client/requestInfo.js +++ b/src/client/requestInfo.js @@ -21,6 +21,7 @@ const CloudAuth = require('../auth/cloudAuth'); const HOST_DEFAULT = 'aip.baidubce.com'; const CONTENT_TYPE_FORMDEFAULT = 'application/x-www-form-urlencoded'; +const CONTENT_TYPE_JSON = 'application/json;charset=utf-8'; const SYMBOL_QUERYSTRING_PREFIX = '?aipSdk=node&access_token='; const SYMBOL_QUERYSTRING_PREFIX_BCE = '?aipSdk=node'; diff --git a/src/http/httpClient.js b/src/http/httpClient.js index 270284a..27a1f5a 100644 --- a/src/http/httpClient.js +++ b/src/http/httpClient.js @@ -40,7 +40,22 @@ class HttpClient { return this.req(options); } + + postWithInfoForJson(requestInfo) { + let options = { + method: requestInfo.method, + url: requestInfo.getUrl(), + json: true, + headers: requestInfo.headers, + body: JSON.stringify(requestInfo.params), + timeout: HttpClient.DEFAULT_TIMEOUT + }; + + return this.req(options); + } + req(options) { + // 首先处理设置INTERCEPTOR的情况 if (objectTools.isFunction(HttpClient.REQUEST_INTERCEPTOR)) { options = HttpClient.REQUEST_INTERCEPTOR(options); diff --git a/src/index.js b/src/index.js index 8dd0e8c..c53f866 100644 --- a/src/index.js +++ b/src/index.js @@ -17,16 +17,13 @@ module.exports = { - bodyanalysis: require('./AipBodyAnalysis'), imageSearch: require('./AipImageSearch'), imageClassify: require('./AipImageClassify'), - imageProcess: require('./AipImageProcess'), contentCensor: require('./AipContentCensor'), face: require('./AipFace'), ocr: require('./AipOcr'), nlp: require('./AipNlp'), kg: require('./AipKg'), speech: require('./AipSpeech'), - easydl: require('./AipEasyDL'), HttpClient: require('./http/httpClient') }; \ No newline at end of file diff --git a/test/apiRequest.js b/test/apiRequest.js index 8854e4a..ad5cb84 100644 --- a/test/apiRequest.js +++ b/test/apiRequest.js @@ -6,9 +6,7 @@ let exp = require('../'); let services = [ 'contentCensor', - 'bodyanalysis', 'imageSearch', - 'imageProcess', 'imageClassify', 'face', 'ocr', diff --git a/test/require.js b/test/require.js index ebdcbe7..e66c728 100644 --- a/test/require.js +++ b/test/require.js @@ -5,8 +5,6 @@ let should = require('should'); let services = [ 'contentCensor', 'imageSearch', - 'bodyanalysis', - 'imageProcess', 'imageClassify', 'face', 'ocr', @@ -15,6 +13,46 @@ let services = [ 'speech' ]; +const fs = require('fs'); +const path = require('path'); +const mimeType = require('mime-types'); +// const chalk = require('chalk'); // 带色彩的控制台输出 + +const filePath = '/Users/wuqiqing/projects/baidu/aip/sdks/node-sdk/test_sample/assets/OCR' + +// 读取图片文件转换为 base64 编码,并打印到控制台 +function parse(file) { + let filePath = path.resolve(file); // 原始文件地址 + // let fileName = filePath.split('\\').slice(-1)[0].split('.'); // 提取文件名 + // let fileMimeType = mimeType.lookup(filePath); // 获取文件的 memeType + + // 如果不是图片文件,则退出 + // if (!fileMimeType.toString().includes('image')) { + // console.log(chalk.red(`Failed! ${filePath}:\tNot image file!`)); + // return; + // } + + // 读取文件数据 + let data = fs.readFileSync(filePath); + data = Buffer.from(data).toString('base64'); + + // // 转换为 data:image/jpeg;base64,***** 格式的字符串 + // let base64 = 'data:' + fileMimeType + ';base64,' + data; + // + // // 创建输出目录 + // let outPath = path.resolve('./base64/'); + // let outFileName = `${fileName.join('-')}.txt`; + // let outFile = path.join(outPath, outFileName); + // if (fs.existsSync(outPath)) { + // saveData(base64, outFile, filePath, outFileName); + // } else { + // mkdirp(outPath, () => { + // saveData(base64, outFile, filePath, outFileName); + // }); + // } + return data; +} + it('should not throw error when require all modules', function() { should.doesNotThrow(function () { let exp = require('../'); @@ -24,15 +62,87 @@ it('should not throw error when require all modules', function() { describe('should all export is valid', function() { should.doesNotThrow(function () { let exp = require('../'); - services.forEach(function(serviceNm) { - // each service should be a constructor - it("service:" + serviceNm, function () { - exp[serviceNm].should.instanceof(Function); - }) - }); - it("HttpClient ", function () { - // extra exports HttpClient is Function - exp.HttpClient.should.instanceof(Function); + // services.forEach(function(serviceNm) { + // // each service should be a constructor + // it("service:" + serviceNm, function () { + // exp[serviceNm].should.instanceof(Function); + // }) + // }); + // it("HttpClient ", function () { + // // extra exports HttpClient is Function + // exp.HttpClient.should.instanceof(Function); + // }); + + + it(' imageClassify ', (done) => { + let tmp = new exp.imageClassify("", "d18289e60b6a44c281f8985d5106586e", "0f15a705e2ff4400a3757b4acd88114d"); + // let stat = fs.statSync(filePath+'/webimageLoc.png'); + // let data = parse(filePath+'/webimageLoc.png') + let url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1595939748737&di=05d4226499eb67595c713035e03675fc&imgtype=0&src=http%3A%2F%2Fethn.cssn.cn%2Fmzx%2Fmzxtpxw%2F201603%2FW020160329761657988474.jpg"; + let element = ['animal']; + let p = tmp.combinationByImageUrl(url, element).then((res) => { + console.log(res); + // done(); + }).catch((err) => { + console.log(err); + // done(err); + }); + // console.log(1); + // console.log(2); + // for(let i = 0;i < 100000;i++){ + // console.log(i); + // } }); + + // it(' ocr docAnalysis ', (done) => { + // let tmp = new exp.ocr("", "d18289e60b6a44c281f8985d5106586e", "0f15a705e2ff4400a3757b4acd88114d"); + // let stat = fs.statSync(filePath+'/webimageLoc.png'); + // let data = parse(filePath + '/docAnalysis.png') + // let p = tmp.docAnalysis(data).then((res) => { + // console.log("docAnalysis: "); + // console.log(res); + // done(); + // }).catch((err) => { + // console.log(err); + // done(err); + // }); + // }); + // + // function A () { + // + // } + // A.hello = 2; + // + // let a = new A(); + // let b = {}; + // let c = Object(); + // let d = 1; + // + // d.toFixed(); + // let e = 'hello word'; + // e.toLocaleUpperCase(); + // + // it(' ocr meter ', (done) => { + // let tmp = new exp.ocr("", "d18289e60b6a44c281f8985d5106586e", "0f15a705e2ff4400a3757b4acd88114d"); + // // let stat = fs.statSync(filePath+'/webimageLoc.png'); + // let data = parse(filePath + '/meter.png') + // let p = tmp.meter(data).then((res) => { + // console.log(res); + // done(); + // }).catch((err) => { + // console.log(err); + // done(err); + // }); + // }); + // + // // it(' ocr docAnalysis ', function () { + // // let tmp = new exp.ocr("", "d18289e60b6a44c281f8985d5106586e", "0f15a705e2ff4400a3757b4acd88114d"); + // // console.log(tmp.docAnalysis('')) + // // }); + // // it(' ocr webimageLoc ', function () { + // // let tmp = new exp.ocr("", "d18289e60b6a44c281f8985d5106586e", "0f15a705e2ff4400a3757b4acd88114d"); + // // console.log(tmp.meter('')) + // // }); + }); });