wechaty-face-carton
Version:
95 lines (93 loc) • 3.64 kB
JavaScript
import { ft } from 'tencentcloud-sdk-nodejs'
const FtClient = ft.v20200304.Client
let fcClient = ''
/**
* 实例化
* @param {*} config 腾讯的基础配置
*/
async function initFcClient(config) {
//初始化腾讯人脸动漫化实例
const clientConfig = {
credential: {
secretId: config.secretId,
secretKey: config.secretKey,
},
region: 'ap-shanghai',
profile: {
httpProfile: {
endpoint: 'ft.tencentcloudapi.com',
},
},
}
fcClient = new FtClient(clientConfig)
}
export async function generateCarton(config, img, { model = 1, age = 60, gender = 0 }) {
try {
const params = {
Image: img,
RspImgType: 'base64',
}
if (!fcClient) {
await initFcClient(config)
}
let res
if (model === 1) {
// 人像卡通画
res = await fcClient.FaceCartoonPic(params)
} else if (model === 2) {
// 人像年龄变化
console.log('age', age)
res = await fcClient.ChangeAgePic({
...params,
AgeInfos: [
{
Age: parseInt(age),
},
],
})
} else if (model === 3) {
// 人像性别变化
res = await fcClient.SwapGenderPic({
...params,
GenderInfos: [
{
Gender: gender, // 0:男变女,1:女变男。
},
],
})
}
return { type: 3, url: res.ResultImage }
} catch (e) {
const errorMap = {
'FailedOperation.DetectNoFace': '未检测到人脸。',
'FailedOperation.ImageDecodeFailed': '图片解码失败。',
'FailedOperation.ImageDownloadError': '图片下载错误。',
'FailedOperation.ImagePixelExceed': '素材尺寸超过2000*2000像素。',
'FailedOperation.ImageResolutionTooSmall': '图片短边分辨率太小,小于64。',
'FailedOperation.InnerError': '服务内部错误,请重试。',
'FailedOperation.RequestEntityTooLarge': '整个请求体太大(通常主要是图片)。',
'FailedOperation.RequestTimeout': '后端服务超时。',
'InvalidParameterValue.FaceRectInvalidFirst': '第1个人脸框参数不合法。',
'InvalidParameterValue.ImageSizeExceed': '图片数据太大。',
'InvalidParameterValue.NoFaceInPhoto': '图片中没有人脸。',
'InvalidParameterValue.ParameterValueError': '参数不合法。',
'InvalidParameterValue.UrlIllegal': 'URL格式不合法。',
'ResourceUnavailable.InArrears': '帐号已欠费。',
'ResourceUnavailable.NotReady': '服务未开通。',
'FailedOperation.FaceExceedBorder': ' 人脸出框,无法使用。',
'FailedOperation.FaceSizeTooSmall': ' 人脸因太小被过滤,建议人脸分辨率不小于34*34。',
'FailedOperation.FreqCtrl': ' 操作太频繁,触发频控,请稍后重试。',
'InvalidParameterValue.FaceRectInvalidSecond': ' 第2个人脸框参数不合法。',
'InvalidParameterValue.FaceRectInvalidThrid': ' 第3个人脸框参数不合法。',
'ResourceUnavailable.Delivering': ' 资源正在发货中。',
'ResourceUnavailable.Freeze': ' 帐号已被冻结。',
'ResourceUnavailable.GetAuthInfoError': ' 获取认证信息失败。',
'ResourceUnavailable.LowBalance': ' 余额不足。',
'ResourceUnavailable.StopUsing': ' 帐号已停服。',
'ResourceUnavailable.UnknownStatus': ' 计费状态未知。',
'ResourcesSoldOut.ChargeStatusException': ' 帐号已欠费。',
}
console.log('生成失败', e.code, errorMap[e.code])
return { type: 1, content: errorMap[e.code] || '网络错误' }
}
}