HomeLập trìnhPhpDễ dàng phát...

Dễ dàng phát hiện khuôn mặt trong ứng dụng Laravel PHP của bạn


bởi Darren Chowles

Phát hiện khuôn mặt trong hình ảnh bằng Google Cloud Vision API

VnPML50ueenYtoyQkR3ysp29B8sCZWkEcjVw

Có thể bạn đã từng thấy tính năng phát hiện khuôn mặt trước đây. Ngay sau khi bạn tải ảnh gia đình đó lên Facebook, bạn sẽ nhận thấy các hộp xung quanh tất cả các khuôn mặt được phát hiện. Và với khuôn mặt sự công nhận, đôi khi nó còn tự động gắn thẻ đúng người bạn nữa. Nó không phải lúc nào cũng chính xác 100%, nhưng nó vẫn là một kỹ thuật tuyệt vời!

Ứng dụng nhận diện khuôn mặt

Trong bài viết này, chúng ta sẽ thiết lập và chạy bằng cách sử dụng Google Cloud Vision API để phát hiện khuôn mặt. Chúng tôi sẽ sử dụng một hình ảnh hiện có và chúng tôi sẽ vẽ một hộp xung quanh mỗi khuôn mặt được phát hiện.

Có một số trường hợp sử dụng trong thế giới thực để phát hiện khuôn mặt. Một số trong số này bao gồm:

  • phát hiện xem hình ảnh đã tải lên có bất kỳ khuôn mặt nào không. Đây có thể là một bước sàng lọc như một phần của quy trình nhận dạng “biết khách hàng của bạn”.
  • kiểm duyệt hình ảnh cho các ứng dụng cho phép nội dung do người dùng tạo.
  • khả năng cung cấp gắn thẻ, giống như cách các mạng xã hội làm.

Các chức năng khác có sẵn trong Cloud Vision API

Phát hiện khuôn mặt chỉ là một trong nhiều chức năng có sẵn trong API này. Nó hỗ trợ các chức năng bổ sung sau:

  • phát hiện các logo phổ biến.
  • khả năng phát hiện tất cả các danh mục áp dụng cho một hình ảnh. Ví dụ: ảnh chụp một con mèo có thể tạo ra các danh mục: mèo, động vật có vú, động vật có xương sống và Ba Tư.
  • phát hiện các địa danh tự nhiên và nhân tạo phổ biến.
  • trích xuất văn bản từ hình ảnh.
  • chạy Phát hiện tìm kiếm an toàn để gắn cờ hình ảnh chứa nội dung người lớn hoặc bạo lực.
Đọc thêm  Sự cố với PDO khi thực thi php

Thiết lập Nền tảng đám mây của Google

Bước đầu tiên liên quan đến việc tạo một dự án mới trong bảng điều khiển Google Cloud Platform.

kQJQiuCqrMNADYCOMlkELdp3GeTALQDSklSa

Đi tới bảng điều khiển và tạo một dự án mới.

PHON06KcoAaQASLSaAKClQgTtT7Nc71bplbQ

Sau khi dự án của bạn được tạo, hãy giữ ID dự án ở nơi thuận tiện.

Jc5LfR6-jxcRwOmVt5nvWURCQVvQYnJ2yNu-

Thực hiện theo các bước sau:

  • khi bạn đã có dự án của mình, hãy chuyển đến trang tạo mã khóa tài khoản dịch vụ.
  • đảm bảo dự án Nhận diện khuôn mặt của bạn được chọn ở trên cùng.
  • trong phần “Tài khoản dịch vụchọn “Tài khoản dịch vụ mới”.
  • nhập tên vào “Tên tài khoản dịch vụ”.
  • trong “Vai trò”, chọn “Dự án” > “Chủ sở hữu”.
  • Cuối cùng, nhấp vào “Tạo” để tệp thông tin xác thực JSON được tải xuống tự động.
Ty1vbdKD5bpsIwJ1wqTD6mBq13htpDsmYHkj

Bạn cũng có thể cần Kích hoạt API Cloud Vision thông qua phần Thư viện API.

Thiết lập dự án Laravel

Bước tiếp theo liên quan đến việc thiết lập một dự án Laravel mới. Nếu bạn có một dự án Laravel hiện có, bạn có thể bỏ qua bước này.

Tôi đang sử dụng Laravel 5.5 LTS cho bài viết này. Trong dòng lệnh, hãy chạy lệnh Trình soạn thảo sau để tạo một dự án mới (bạn cũng có thể sử dụng trình cài đặt Laravel):

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

Nếu bạn đã sử dụng Trình soạn thảo, hãy đổi tên .env.example tập tin để .env và chạy lệnh sau để đặt khóa ứng dụng:

php artisan key:generate

Thêm gói tầm nhìn đám mây của Google

Chạy lệnh sau để thêm google/cloud-vision gói cho dự án của bạn:

composer require google/cloud-vision

Bạn có thể đặt tệp thông tin xác thực JSON đã tải xuống trong thư mục gốc của ứng dụng. Đừng đặt nó trong thư mục chung của bạn. Vui lòng đổi tên nó. Đừng cam kết tệp này vào kho lưu trữ mã của bạn. Một tùy chọn là thêm nó vào máy chủ theo cách thủ công.

Cuối cùng, hãy bắt đầu viết mã!

Đầu tiên, đảm bảo bạn đã cài đặt và kích hoạt thư viện GD. Hầu hết các nền tảng đều được bật theo mặc định.

Đọc thêm  Trợ giúp CAPTCHA với PHP - JavaScript

Tôi sẽ thêm route sau vào tệp “routes/web.php” của mình:

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

Tôi đã tạo một bộ điều khiển đơn giản để chứa mã. Tôi sẽ thêm tất cả mã trong bộ điều khiển. Trong một ứng dụng sản xuất, tôi mạnh mẽ đề nghị sử dụng các lớp dịch vụ riêng biệt cho bất kỳ logic nghiệp vụ nào. Bằng cách này, các bộ điều khiển tinh gọn và bám sát mục đích ban đầu của chúng: kiểm soát đầu vào/đầu ra.

Chúng ta sẽ bắt đầu với một bộ điều khiển đơn giản, thêm một use tuyên bố bao gồm Google Cloud ServiceBuilder lớp:

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

Điều đầu tiên chúng ta sẽ làm là tạo một thể hiện của ServiceBuilder class để chúng tôi có thể chỉ định thông tin đăng nhập ID dự án và JSON của mình.

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

Bạn chỉ định vị trí của tệp JSON bằng cách sử dụng keyFilePath Chìa khóa. Tôi đã sử dụng trình trợ giúp base_path() của Laravel để chỉ đường dẫn gốc của ứng dụng đủ điều kiện.

Tùy chọn tiếp theo là projectId. Đây là giá trị bạn đã lấy khi tạo dự án trong bảng điều khiển GCP.

Tiếp theo, chúng ta sẽ tạo một thể hiện của VisionClient lớp. Các ServiceBuilder lớp làm cho nó dễ dàng bằng cách hiển thị các phương thức xuất xưởng khác nhau cấp quyền truy cập vào các dịch vụ trong API.

$vision = $cloud->vision();

Bây giờ chúng ta đã có một phiên bản của lớp, chúng ta có thể bắt đầu sử dụng Vision API. Chúng tôi sẽ sử dụng hình ảnh sau đây làm ví dụ. Vui lòng tải xuống hình ảnh này, đặt tên là “friends.jpg” và đặt nó vào thư mục “công khai” của bạn.

HU1KqsFMeLTJcMXm2sFaV4qiRJGfSNanuQ24
“Hai cô gái vui vẻ nhìn vào máy ảnh.” bởi Matheus Ferrero trên Bapt

Trước tiên chúng ta sẽ tạo một hình ảnh mới bằng cách sử dụng GD imagecreatefromjpeg() chức năng. Chúng ta sẽ sử dụng public_path() Laravel helper để tham chiếu đến hình ảnh của chúng ta được đặt trong thư mục “public”.

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

Tiếp theo, chúng ta sẽ tạo Cloud Vision Image đối tượng có cùng hình ảnh này và chỉ định rằng chúng tôi muốn chạy phát hiện khuôn mặt:

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

Bạn sẽ nhận thấy một sự thay đổi nhỏ ở đây. Thay vì cung cấp đường dẫn đến hình ảnh, chúng tôi đang cung cấp hình ảnh thực dưới dạng chuỗi bằng cách sử dụng file_get_contents().

Sau đó, chúng tôi chạy annote() phương pháp trên hình ảnh:

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

Bây giờ chúng ta đã có kết quả, chúng ta chỉ cần lặp qua các mặt đã tìm được và vẽ các hộp xung quanh chúng bằng cách sử dụng các đỉnh được cung cấp trong kết quả:

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

Khi điều này được thực hiện, chúng ta có thể xuất hình ảnh và hủy nó để giải phóng bộ nhớ:

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

Và đây là kết quả:

Đọc thêm  Kết nối Javascript với PHP - JavaScript
8dLhhJCpCUsq8c6rsXjBNRfvOKvVUkir7d0A

Đây là mã lớp điều khiển cuối cùng:

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

chức năng bổ sung

Ngoài việc lấy các đỉnh, phản hồi còn bao gồm một kho thông tin hữu ích. Điều này bao gồm các vị trí của miệng, mắt, lông mày, mũi, v.v. print_r() các $face biến để xem nhanh dữ liệu có sẵn.

Một tính năng tuyệt vời khác là kiểm tra xem khuôn mặt được phát hiện đang vui, buồn, tức giận hay ngạc nhiên. Bạn thậm chí có thể phát hiện xem khuôn mặt có bị mờ hay thiếu sáng hay không và liệu họ có đang đội mũ hay không.

Nếu bạn sử dụng cái này và kết quả là làm được điều gì đó thú vị, vui lòng cho tôi biết!

Nâng cấp kỹ năng phát triển web của bạn!

Đăng ký nhận bản tin của tôi, nơi tôi sẽ chia sẻ các bài viết sâu sắc về phát triển web để nâng cao kỹ năng của bạn.

Được xuất bản lần đầu tại www.chowles.com vào ngày 6 tháng 7 năm 2018.



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status