Проверка изображения с помощью Google Vision с помощью облачных функций в Firebase

# #node.js #firebase #google-cloud-functions #google-vision

Вопрос:

Я пытался продолжить Учебник. Чтобы изучить изображение при создании документа, вот информация о Firestore:

Таблица пользователей внутри Firestore

Изображение хранится в виде ссылки внутри этого документа в поле image_url.

Я создал облачную функцию, используя зависимость (модуль узла).:

«@google-облако/видение»: «^2.4.0»,

Мой индексный файл выглядит так:

 import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
import algoliasearch from 'algoliasearch';
import vision from '@google-cloud/vision';

const env = functions.config();

//Function to check Images on User Create.

exports.checkUserAvatarImage = functions.firestore.document('users/{uid}').onCreate(async (userSnap, context) => {
    const content = userSnap.data();

    if(content.startsWith("http")){
        return (async () => {
            const client = new vision.ImageAnnotatorClient();

            const [result] = await client.safeSearchDetection(content);
            var detections = result.safeSearchAnnotation;
            
            if(detections?.adult == 'LIKELY' || detections?.adult == 'VERY_LIKELY' || detections?.adult == 'POSSIBLE'){
                return userSnap.ref.update({
                    'image_url': 'https://firebasestorage.googleapis.com/v0/b/realstatestb-ad581.appspot.com/o/user_images/CasaVerde.png?alt=mediaamp;token=ae018b20-858c-4ead-a64a-1871b4e22652'
                });
            }
            return;
        })()
        .then(() => {
            return;
        }).catch(err => console.log("An error has ocurred "   err));
    }
    return;
});
 

Проблема в том, что когда я загружаю изображение контента для взрослых, оно не меняется на изображение, показанное в коде, однако, когда я проверяю функции входа в систему, всегда говорится, что оно начинается и заканчивается «Ок».

Бревна

Есть какие-нибудь идеи?

Спасибо вам за любые указания.

Комментарии:

1. Привет @Рене, не могли бы вы, пожалуйста, дать нам вывод «detections.adult», если вы введете console.log(). Спасибо.

2. привет, сегодня у меня ошибка: checkUserAvatarImage {«@type»:»type.googleapis.com/google.cloud.audit. Журнал аудита»,»статус»:{«код»:3,»сообщение»:»Сбой функции при загрузке пользовательского кода. Вероятно, это связано с ошибкой в пользовательском коде. Сообщение об ошибке: Ошибка: пожалуйста, просмотрите журналы своих функций, чтобы узнать причину ошибки: cloud.google.com/functions/docs/monitoring/logging#viewing_logs . Дополнительную документацию по устранению неполадок можно найти по адресу cloud.google.com/functions/docs/troubleshooting#logging .

Ответ №1:

Эй, ребята, после ценного вклада Марка я понял, в чем проблема, проблема была не здесь, а в том, как я отправил данные в Firestore, так как при создании пользователя изображение еще не загружено.

Вот код:

 case "Signup":
          {
            authResult = await _auth.createUserWithEmailAndPassword(
              email: email,
              password: password,
            );

            final ref = FirebaseStorage.instance
                .ref()
                .child('user_images')
                .child(authResult.user.uid   '.jpg');

            await ref.putFile(image);

            final url = await ref.getDownloadURL();

            await FirebaseFirestore.instance
                .collection('users')
                .doc(authResult.user.uid)
                .set({
              'username': username,
              'email': email,
              'image_url': url,
              'name': fullname,
              'phone': 0,
            }).then((_) => {
                      // Provider.of<UserProvider>(context, listen: false).getUserInfo(
                      //   url, fullname, email, username, authResult.user.uid);

                      Navigator.of(context).pushNamed(ExploreSellScreen
                          .routeName) //NewMainScreen.routeName) //ListingOverviewScreen.routeName)
                    });
          }
          break;
 

Поэтому я думаю, что теперь мне нужно найти способ загрузить это в Create, а не в качестве обновления. Спасибо тем, кто прочитал этот вопрос, и извините за эту деталь.

Также, если у вас есть какие-либо предложения, пожалуйста, дайте мне знать.