Легкое обнаружение лица в вашем приложении Laravel PHP

1656584295 legkoe obnaruzhenie licza v vashem prilozhenii laravel php

автор Даррен Чоулз

Определяйте лицо на изображениях с помощью Google Cloud Vision API

VnPML50ueenYtoyQkR3ysp29B8sCZWkEcjVw

Вы, вероятно, уже видели распознавание лица. Как только вы загрузите эту семейную фотографию на Facebook, вы заметите рамки вокруг всех обнаруженных лиц. И с уходом за лицом признаниеиногда даже автоматически обозначает правильного друга. Это не всегда 100% точно, но это все равно отличная инженерия!

Программы для распознавания лица

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

Есть несколько реальных случаев использования для обнаружения лица. Некоторые из них включают в себя:

  • определение того, есть ли в загруженном изображении лицо. Это может быть этапом проверки в рамках рабочего процесса идентификации «знай своего клиента».
  • модерирование изображений для программ, позволяющих создавать содержимое пользователями.
  • возможность предоставлять теги так же, как делают социальные сети.

Другие функции доступны в Cloud Vision API

Распознавание лица является лишь одной из многих функций, доступных в этом API. Он поддерживает следующие дополнительные функции:

  • обнаружение популярных логотипов.
  • возможность обнаружения всех категорий, применимых к изображению. Например, фотография кошки может содержать категории: кошка, млекопитающее, позвоночные животные и персы.
  • обнаружение популярных природных и рукотворных объектов.
  • извлечение текста из изображений.
  • запустить функцию Safe Search Detection, чтобы пометить изображения, содержащие содержимое для взрослых или насилие.

Настройка Google Cloud Platform

Первый шаг предполагает создание нового проекта в консоли Google Cloud Platform.

kQJQiuCqrMNADYCOMlkELdp3GeTALQDSklSa

Выделите информационную панель и создайте новый проект.

PHON06KcoAaQASLSaAKClQgTtT7Nc71bplbQ

После создания проекта, держите идентификатор проекта под рукой.

Jc5LfR6-jxcRwOmVt5nvWURCQVvQYnJ2yNu-

Выполните следующие действия:

  • После создания проекта перейдите на страницу Создание ключа учетной записи службы.
  • убедитесь, что ваш проект обнаружения лица выбран вверху.
  • в разделе «Сервисная учетная записьвыберите «Новая учетная запись службы».
  • введите имя в поле «Имя учетной записи службы».
  • в разделе «Роль» выберите «Проект» > «Собственник».
  • Наконец, нажмите «Создать» для автоматического загрузки файла учетных данных JSON.
Ty1vbdKD5bpsIwJ1wqTD6mBq13htpDsmYHkj

Возможно, вам также понадобится включить Cloud Vision API через раздел Библиотека API.

Настройка проекта Laravel

Следующим шагом является настройка нового проекта Laravel. Если у вас уже есть проект Laravel, вы можете упустить этот шаг.

Для этой статьи я использую Laravel 5.5 LTS. В командной строке выполните такую ​​команду Composer, чтобы создать новый проект (вы также можете использовать установщик Laravel):

composer create-project --prefer-dist laravel/laravel sample "5.5.*"

Если вы использовали Composer, переименуйте файл .env.example файл к .env а затем выполните такую ​​команду, чтобы установить ключ программы:

php artisan key:generate

Добавьте Google cloud-vision

Выполните такую ​​команду, чтобы добавить google/cloud-vision пакет к вашему проекту:

composer require google/cloud-vision

Вы можете разместить загруженный файл учетных данных JSON в корне программы. Не надо разместите его в общедоступном каталоге. Не стесняйтесь переименовать его. Не надо зафиксируйте этот файл в свой репозиторий кода. Один из вариантов – добавить его на сервер вручную.

Наконец, начнем кодировать!

Во-первых, убедитесь, что у вас установлена ​​активная библиотека GD. На большинстве платформ это включено по умолчанию.

Я добавлю такой маршрут к своему файлу “routes/web.php”:

Route::get('/', 'SampleController@detectFaces');

Я создал простой контроллер для размещения кода. Я добавлю весь код в контроллер. В производственной заявке I упорно предлагаю использование отдельных классов обслуживания для любой бизнес-логики. Таким образом, контролеры бережливы и придерживаются своего первоначального намерения: контролировать ввод/вывод.

Мы начнем с простого контроллера, добавив a use заявление о включении Google Cloud ServiceBuilder класс:

<?php
namespace App\Http\Controllers;
use Google\Cloud\Core\ServiceBuilder;
class SampleController extends Controller{    public function detectFaces()    {        // Code will be added here    }}

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

$cloud = new ServiceBuilder([     'keyFilePath' => base_path('fda.json'),     'projectId' => 'facial-detection-app' ]);

Вы указываете расположение файла JSON с помощью keyFilePath ключ. Я использовал ассистент Laravel base_path() для ссылки на полный корневой путь программы.

Следующий вариант – это projectId. Это значение, которое вы получили при создании проекта на консоли GCP.

Далее мы создадим экземпляр VisionClient класс. The ServiceBuilder class делает это легко, открывая различные заводские методы, предоставляющие доступ к службам в API.

$vision = $cloud->vision();

Теперь, когда у нас есть экземпляр класса, мы можем начать использовать API Vision. Мы будем использовать следующее изображение в качестве примера. Не стесняйтесь загрузить это изображение, назовите его friends.jpg и поместите в свою папку public.

HU1KqsFMeLTJcMXm2sFaV4qiRJGfSNanuQ24
«Две девушки радостно смотрят в камеру». автор Матеус Ферреро на Unsplash

Сначала мы создадим новое изображение с помощью GD imagecreatefromjpeg() функция. Мы будем использовать помощник public_path() Laravel, чтобы ссылаться на наше изображение, размещённое в папке «public».

$output = imagecreatefromjpeg(public_path('friends.jpg'));

Далее мы создадим Cloud Vision Image объект с этим же изображением и укажите, что мы хотим запустить обнаружение лица:

$image = $vision->image(file_get_contents(public_path('friends.jpg')), ['FACE_DETECTION']);

Здесь вы заметите небольшое изменение. Вместо предоставления пути к изображению мы предоставляем фактическое изображение в виде строки с помощью file_get_contents().

Затем запускаем annote() метод на изображении:

$results = $vision->annotate($image);

Теперь, когда мы получили результаты, нам просто нужно прокрутить найденные грани и нарисовать квадраты вокруг них, используя вершины, предоставленные в результате:

foreach ($results->faces() as $face) {    $vertices = $face->boundingPoly()['vertices'];
    $x1 = $vertices[0]['x'];    $y1 = $vertices[0]['y'];    $x2 = $vertices[2]['x'];    $y2 = $vertices[2]['y'];
    imagerectangle($output, $x1, $y1, $x2, $y2, 0x00ff00);}

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

header('Content-Type: image/jpeg'); imagejpeg($output); imagedestroy($output);

И вот результат:

8dLhhJCpCUsq8c6rsXjBNRfvOKvVUkir7d0A

Вот окончательный код класса контроллера:

<?php
namespace App\Http\Controllers;
use Google\Cloud\Core\ServiceBuilder;
class SampleController extends Controller{    public function detectFaces()    {        $cloud = new ServiceBuilder([            'keyFilePath' => base_path('fda.json'),            'projectId' => 'facial-detection-app'        ]);
        $vision = $cloud->vision();
        $output = imagecreatefromjpeg(public_path('friends.jpg'));        $image = $vision->image(file_get_contents(public_path('friends.jpg')), ['FACE_DETECTION']);        $results = $vision->annotate($image);
        foreach ($results->faces() as $face) {            $vertices = $face->boundingPoly()['vertices'];
            $x1 = $vertices[0]['x'];            $y1 = $vertices[0]['y'];            $x2 = $vertices[2]['x'];            $y2 = $vertices[2]['y'];
            imagerectangle($output, $x1, $y1, $x2, $y2, 0x00ff00);        }
        header('Content-Type: image/jpeg');
        imagejpeg($output);        imagedestroy($output);    }}

Дополнительная функциональность

Помимо захвата вершин ответ также содержит набор полезной информации. Сюда входят расположение ртов, глаз, бровей, носов и т.д. print_r() в $face переменной для быстрого просмотра доступных данных.

Еще одна замечательная функция – это проверка того, счастливое, грустное, сердито или удивленно проявленное лицо. Вы даже можете определить, является ли лицо размытым или недоэкспонированным, и носит ли он головной убор.

Если вы воспользуетесь этим и в результате сделаете что-нибудь крутое, пожалуйста, сообщите мне!

Обновите свои навыки веб-разработчика!

Подпишитесь на мой информационный бюллетень, где я буду делиться глубокими статьями из веб-разработчиков, чтобы развить ваши навыки.

Первоначально опубликовано на www.chowles.com 6 июля 2018 года.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *