Я использую Face API для определения количества лиц на изображениях, и выполнение облачных функций выполняется каждый раз, но в базе данных ничего не меняется. Все в порядке с другими облачными функциями для создания и обновления профиля, но это не работает должным образом. В эту функцию я добавил множество операторов console.log, чтобы каждый мог указать, где находится ошибка, здесь и далее вызывается const img = await canvas.loadImage(imgUrl);
, операторы console.log больше не печатаются в журналах облачных функций, но нет и ошибки, из-за которой это происходит. действительно трудно отлаживать. Кто-то, пожалуйста, укажите на ошибку.
Документация Face API: https://github.com/justadudewhohacks/face-api.js#face -api. js -for- nodejs
PS: URL-адрес изображения поправьте здесь, я только что изменил это.
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const stringHash = require('string-hash');
admin.initializeApp(functions.config().firebase);
exports.verifyProfile = functions.runWith({
memory: '1GB'
}).https.onCall(async (data) => {
console.log('====================== Cloud function called ==================')
console.log(data);
require('@tensorflow/tfjs-node');
const faceApi = require('face-api.js');
console.log('Loaded successfully face api');
const canvas = require('canvas');
const { Canvas, Image, ImageData } = canvas;
console.log('Loaded successfully canvas');
faceApi.env.monkeyPatch({ Canvas, Image, ImageData });
console.log('Loaded successfully modules');
let imgUrl = 'IMAGE_URL';
console.log('Loading new models');
await faceApi.nets.faceRecognitionNet.loadFromDisk('./models');
await faceApi.nets.faceLandmark68Net.loadFromDisk('./models');
await faceApi.nets.ssdMobilenetv1.loadFromDisk('./models');
console.log('loaded new models');
const img = await canvas.loadImage(imgUrl);
console.log('Image converted to buffer');
const detections = await faceApi
.detectAllFaces(img)
.withFaceLandmarks()
.withFaceDescriptor();
console.log('All detections called successfully');
console.log(detections.length);
const hashedValue = stringHash(data['uid']);
const documentReference = admin.firestore().collection('profiles').doc(hashedValue);
return documentReference.set({
'verified': detections.length
}, { merge: true })
});