Könnyű arcfelismerés a Laravel PHP alkalmazásban

Arcok észlelése a képeken a Google Cloud Vision API használatával

Valószínűleg látott már arcfelismerést. Amint feltölti a családi fotót a Facebookra, észreveszi az összes észlelt arc körüli négyzeteket. És az arc felismerés , hogy néha még az automatikus címkéket a helyes barátja is. Nem mindig 100% -ban pontos, de mégis remek mérnöki munka!

Arcfelismerési alkalmazások

Ebben a cikkben a Google Cloud Vision API használatával állíthatjuk fel az arcokat. Meglévő képet fogunk használni, és minden észlelt arc köré rajzolunk egy négyzetet.

Számos valós felhasználási eset létezik az arc felismerésére. Ezek egy része a következőket tartalmazza:

  • annak észlelése, hogy a feltöltött képnek van-e arca. Ez lehet egy átvilágítási lépés az „ismerd meg az ügyfelet” azonosítási munkafolyamat részeként.
  • kép moderálás azokhoz az alkalmazásokhoz, amelyek lehetővé teszik a felhasználók által létrehozott tartalmat.
  • a címkézés képessége, ugyanúgy, mint a közösségi hálózatok.

A Cloud Vision API-ban elérhető egyéb funkciók

Az arcfelismerés csak egy az ezen API-ban elérhető számos funkció közül. A következő kiegészítő funkciókat támogatja:

  • a népszerű logók felderítése.
  • a kép minden kategóriájának észlelésének képessége. Például egy macska fényképe a következő kategóriákat eredményezheti: macska, emlős, gerinces és perzsa.
  • a népszerű természeti és ember alkotta tereptárgyak felderítése.
  • szöveg kivonása képekből.
  • a Biztonságos keresés észlelésének futtatása a felnőtteknek szóló tartalmat vagy erőszakot tartalmazó képek megjelölésére.

A Google Cloud Platform beállítása

Az első lépés egy új projekt létrehozása a Google Cloud Platform konzolon.

Lépjen az irányítópultra, és hozzon létre egy új projektet.

A projekt létrehozása után tartsa kéznél a Projekt azonosítót.

Kovesd ezeket a lepeseket:

  • miután elkészült a projekt, lépjen a Szolgáltatási fiókkulcs létrehozása oldalra.
  • győződjön meg arról, hogy az Arcfelismerés projektet felül választotta ki.
  • a „Szolgáltatási fiók alatt válassza az „Új szolgáltatási fiók” lehetőséget.
  • írjon be egy nevet a „Szolgáltatási fiók neve” mezőbe.
  • a „Szerep” alatt válassza a „Projekt”> „Tulajdonos” lehetőséget.
  • Végül kattintson a „Létrehozás” gombra a JSON hitelesítő adatok fájljának automatikus letöltéséhez.

Lehetséges, hogy engedélyeznie kell a Cloud Vision API-t az API Library szakaszon keresztül is.

Laravel projekt beállítása

A következő lépés egy új Laravel-projekt felállítását foglalja magában. Ha már rendelkezik Laravel-projekttel, ezt a lépést kihagyhatja.

A cikkhez a Laravel 5.5 LTS-t használom. A parancssorban futtassa a következő Composer parancsot egy új projekt létrehozásához (használhatja a Laravel telepítőt is):

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

Ha használt zeneszerző, nevezze át a .env.example fájlt .env és futtassa a következő parancsot utána kell beállítani az alkalmazást kulcs:

php artisan key:generate

Adja hozzá a Google cloud-vision csomagot

Futtassa a következő parancsot a google/cloud-visioncsomag hozzáadásához a projektjéhez:

composer require google/cloud-vision

A letöltött JSON hitelesítő adatok fájlt elhelyezheti az alkalmazás gyökérkönyvtárában. Ne tegye a nyilvános könyvtárba. Nevezzen át nyugodtan. Ne rendelje át ezt a fájlt a kódrepóhoz. Az egyik lehetőség, hogy manuálisan hozzáadja a szerverhez.

Végül kezdjük el a kódolást!

Először is ellenőrizze, hogy a GD könyvtár telepítve és aktív-e. A legtöbb platformon ez alapértelmezés szerint engedélyezve van.

A következő útvonalat hozzáadom az „route / web.php” fájlomhoz:

Route::get('/', '[email protected]');

Hoztam létre egy egyszerű vezérlőt a kód elhelyezésére. Hozzáadom az összes kódot a vezérlőn belül. Egy termelési alkalmazásban határozottan javaslom külön üzleti osztályok használatát bármilyen üzleti logikához. Így a vezérlők karcsúak és ragaszkodnak eredeti szándékukhoz: a bemenet / kimenet vezérléséhez.

Kezdjük egy egyszerű vezérlővel, és hozzáadunk egy usenyilatkozatot a Google Cloud ServiceBuilderosztály felvételéhez:


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

The first thing we’ll do is create an instance of the ServiceBuilder class so we can specify our Project ID and JSON credentials.

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

You specify the location of the JSON file using the keyFilePath key. I’ve used the Laravel base_path() helper to refer to the fully qualified app root path.

The next option is the projectId. This is the value you grabbed when you created the project in the GCP console.

Next, we’ll create an instance of the VisionClient class. The ServiceBuilder class makes it easy by exposing various factory methods which grant access to services in the API.

$vision = $cloud->vision();

Now that we have an instance of the class, we can start making use of the Vision API. We’ll be using the following image as the example. Feel free to download this image, name it “friends.jpg” and place it in your “public” folder.

We’ll first create a new image using the GD imagecreatefromjpeg() function. We’ll use the public_path() Laravel helper to refer to our image placed in the “public” folder.

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

Next, we’ll create a Cloud Vision Image object with this same image and specify that we want to run facial detection:

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

You’ll notice a slight change here. Instead of providing the path to the image, we’re supplying the actual image as a string using file_get_contents().

Then we run the annote() method on the image:

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

Now that we have the results, we simply need to loop through the found faces and draw boxes around the them using the vertices supplied in the result:

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);}

Once this is done, we can output the image and destroy it to free up the memory:

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

And this is the result:

Here is the final controller class code:


     
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); }}

Additional functionality

In addition to grabbing the vertices, the response also includes a trove of useful information. This includes the locations of mouths, eyes, eyebrows, noses, etc. Simply print_r() the $face variable for a quick peek into the available data.

Another great feature is checking whether the detected face is happy, sad, angry, or surprised. You can even detect whether the face is blurry or underexposed, and whether they’re wearing headwear.

If you use this and end up doing something cool as a result, please let me know!

Upgrade your web dev skills!

Sign up to my newsletter where I’ll share insightful web development articles to supercharge your skills.

Originally published at www.chowles.com on July 6, 2018.