Как использовать обнаружение безопасного поиска Google Cloud Vision API для обнаружения явного контента при загрузке изображений в Laravel

В этой статье мы рассмотрим, как использовать Google Cloud Vision API для обнаружения откровенного контента и предотвращения загрузки нежелательных изображений в приложение Laravel.

Искусственный интеллект зрения

Извлекайте ценные сведения из изображений с помощью AutoML Vision. Выявляйте эмоции и понимайте текст с помощью предварительно обученных моделей Vision API.

Новые клиенты получают 300 долларов в виде бесплатных кредитов, которые можно потратить на Vision AI. Все клиенты получают 1000 единиц для анализа изображений бесплатно в месяц, без оплаты ваших кредитов.

  • Используйте машинное обучение, чтобы понимать ваши изображения с лучшей в отрасли точностью предсказания
  • Обучайте модели машинного обучения, которые классифицируют изображения по вашим пользовательским меткам с помощью AutoML Vision.
  • Обнаруживайте объекты и лица, читайте почерк и создавайте ценные метаданные изображения с помощью Vision AP.

Vision API предлагает мощные предварительно обученные модели машинного обучения с помощью REST и RPC API. Назначайте ярлыки изображениям и быстро классифицируйте их по миллионам предопределенных категорий. Обнаруживайте объекты и лица, читайте печатный и рукописный текст и добавляйте ценные метаданные в свой каталог изображений.

Для получения дополнительной информации посетите Документация по Vision API.

Примечание: это может быть применимо к любому языку программирования или фреймворку.

Этот проект laravel называется google_cloud_vision_features_in_laravel, чтобы обеспечить прогрессивную документацию различных функций Google Cloud Vision API, которые будут демонстрироваться.

Чтобы эта статья была краткой, мы будем использовать этот проект из этой статьи для применения безопасного обнаружения поиска к изображениям.

Мы будем использовать эту статью Полная аутентификация Laravel 8 с использованием Laravel Fortify и Bootstrap 4 для настройки аутентификации приложения.

В этом руководстве мы остановимся на разделе статьи о входе и регистрации.

Если вы используете Laravel 9.19, скаффолдинг по умолчанию поставляется с Vite. Вот как мигрировать

NB: мы будем использовать этот проект для последующих руководств.

Далее создайте новый проект в консоли Google

Нажмите кнопку нового проекта.

Далее введите предпочтительные данные для проекта

После создания проекта подробности отображаются на панели управления

Project name
laravel-cloud-xxxx
Project number
15331649xxx
Project ID
laravel-cloud-xxxx

Далее создайте учетную запись службы для этого проекта, чтобы получить файл учетных данных в формате JSON

Нажмите на навигацию и наведите указатель мыши на IAM $ Admin, затем нажмите на сервисные учетные записи.

Нажмите «Создать сервисный аккаунт», чтобы добавить сервисный аккаунт для созданного проекта

Заполните данные сервисного аккаунта

Нажмите создать и продолжить.

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

Нажмите «Продолжить».

Нажмите "Готово"

Ты спустишься сюда..

Далее щелкните созданный сервис и перейдите в раздел вкладки ключей, чтобы получить доступ к файлу json с конфигурацией для этого проекта.

Нажмите "Создать новый".

Затем нажмите «Создать», и файл JSON автоматически загрузится на ваш компьютер.

НБ; Есть предупреждение не открывать файл json.

Пожалуйста, сохраняйте конфиденциальность этого файла JSON или учетных данных или git игнорируйте файл, чтобы он не попадал в системы контроля версий.

Сохраните файл JSON в папке конфигурации Laravel.

Мы также можем использовать переменную env для создания содержимого файла JSON и передачи его в массив.

Далее перейдем к интеграции Google Cloud Vision API

Перейти к консоли

Вид консоли

NB Вам необходимо включить выставление счетов, чтобы использовать этот API, если вы исчерпали бесплатную пробную версию

Выполните поиск облачного зрения в консоли, чтобы включить его

После включения на экране ниже показано использование API

Полный документ по API облачного зрения доступен здесь

Давайте интегрируем пакет Cloud vision в наше приложение laravel, чтобы начать демонстрацию функций облачного зрения. Клиент Cloud Vision для PHP

NB Облачное зрение Google теперь использует v1/Annotator, и рекомендуется использовать его в дальнейшем, так как более старая версия скоро станет устаревшей

composer require google/cloud-vision

Или установить сразу весь набор компонентов:

composer require google/cloud

Функции, которые будут рассмотрены позже, будут начинаться с этой точки, потому что приведенные выше сведения одинаковы для всех.

В этом руководстве мы рассмотрим Обнаружение безопасного поиска

Аннотация безопасного поиска

Набор признаков, относящихся к изображению, рассчитанных методами компьютерного зрения по вертикалям безопасного поиска (например, взрослый, подделка, медицинский, насилие).

Вот репозиторий с примером его интеграции

Ответ для каждого из методов аннотации может быть любым из значений в приведенном ниже массиве.

$likelihoodNames = [
            'UNKNOWN', 'VERY_UNLIKELY', 'UNLIKELY',
            'POSSIBLE', 'LIKELY', 'VERY_LIKELY'
        ];

Давайте вернемся к нашей кодовой базе Laravel…

  • Создайте базовую форму для загрузки изображения
<form class="mx-1 mx-md-4" method="POST" action="{{ route('uploads.store') }}" enctype="multipart/form-data">
@csrf
<div class="d-flex flex-row align-items-center mb-4">
                                        <i class="fas fa-camera fa-lg me-3 fa-fw"></i>
                                        <div class="form-outline flex-fill mb-0">
                                            <label class="form-label" for="form3Example3c">Profile picture</label>
                                            <input type="file" id="form3Example3c" class="form-control @error('avatar') is-invalid @enderror" name="avatar" value="{{ old('avatar') }}" accept="image/*" required />
@error('avatar')
                                            <span class="invalid-feedback" role="alert">
                                                <strong>{{ $message }}</strong>
                                            </span>
                                            @enderror
                                        </div>
                                    </div>
<div class="d-flex justify-content-center mx-4 mb-3 mb-lg-4">
                                        <button type="submit" class="btn btn-primary btn-lg">Update Profile Pic</button>
                                    </div>
</form>

Импорт клиента аннотатора изображений V1

use Google\Cloud\Vision\V1\ImageAnnotatorClient;

Класс UploadController имеет два метода для отображения формы и обработки загруженного изображения

public function store(Request $request)
    {
        $request->validate([
            'avatar' => 'required|image|max:10240',
        ]);
try {
// we can make the code neater by using a global helper function or a trait
$imageAnnotatorClient = new ImageAnnotatorClient([
                //we can also keep the details of the google cloud json file in an env and read it as an object here
                'credentials' => config_path('laravel-cloud-features.json')
            ]);
$image_path = $request->file("avatar");
            //get the content of the image
            $imageContent = file_get_contents($image_path);
//run the safe search detection on the image
            $response = $imageAnnotatorClient->safeSearchDetection($imageContent);
if ($error = $response->getError()) {
                // returns error from annotator client
                return redirect()->back()
                ->with('danger', $error->getMessage());
            }
//get the annotation of the response
            $safe = $response->getSafeSearchAnnotation();
$likelihood_status =  0;
//the values in the array of the response are indexed from 0-5
$likelihood_status = ($safe->getAdult() >= 3) ? 1 : 0;
            $likelihood_status = ($safe->getSpoof() >= 3) ? 1 : 0;
            $likelihood_status = ($safe->getViolence() >= 3) ? 1 : 0;
            $likelihood_status = ($safe->getRacy() >= 3) ? 1 : 0;
if ($likelihood_status === 1) {
                //the image has some unwanted content there in
                return redirect()->back()
                ->with('danger', 'This image is not allowed on this platform!!!');
            }
//close the annotation client
            $imageAnnotatorClient->close();
//return home with a success message
            return redirect()->route('home')
                ->with('success', 'Uploaded successfully!!!');
} catch (Exception $e) {
            return $e->getMessage();
        }
    }

Есть раздел для просмотра запроса, сделанного к конечной точке API облачного зрения

Вот туториал Репозиторий

Спасибо, что прочитали эту статью!!!.

Если вы считаете эту статью полезной, поделитесь ею со своей сетью и не стесняйтесь использовать раздел комментариев для вопросов, ответов и предложений.

Первоначально опубликовано на https://alemsbaja.hashnode.dev.