Google vision là gì
Tình hình là mình đang research về các giải pháp xử lý và nhận diện hình ảnh cho dự án sắp tới, chủ yếu là về khả năng detect các object và con người, trích xuất các keywords, nhận diện địa danh... Một số ứng cử viên có thể kể đến như Google Cloud Vision (trả phí), Azure Vision (trả phí) và một số thư viện open-source như OpenCV, TensorFlow.
Bài viết sau mình sẽ hướng dẫn các bạn cấu hình và tạo API key để sử dụng Google Vision và một số code mẫu về xử lý hình ảnh của thư viện này như: Keywords Extract, Face Detection, Landmark Detection. Đăng ký tài khoản Đầu tiên các bạn cần phải đăng ký tài khoản Google Cloud để được nhận 300$ miễn phí cho 12 tháng. Sau đó tiến hành add thêm project mới vào Google Cloud Console. Sau khi tạo thành công tài khoản và add Google Cloud Vision API cho project các bạn sẽ thấy số tiền và thời gian sử dụng tại trang billing
Tiếp theo chúng ta vào trang Credentials tiến hành tạo API key để bắt đầu sử dụng các API của Google Cloud Vision
Tài liệu API và ví dụ mẫu Keywords Extraction API (https://cloud.google.com/vision/docs/detecting-labels) Trích xuất tất cả các nhãn, từ khóa trong một tấm hình, các đối tượng được trích xuất là sự vật, động vật, phương tiện giao thông... Các bạn sử dụng CURL để post, tham khảo mã nguồn dưới đây:
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://vision.googleapis.com/v1/images:annotate?key=API_KEY", // API key cua bạn CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => '{"requests":[{"image":{"content":"'. $imdata .'"},"features":[{"type":"LABEL_DETECTION"}]}]}', // $imdata : base64 image CURLOPT_HTTPHEADER => array( "cache-control: no-cache", "content-type: application/json" ), )); Sau khi thêm thắt một chút Html & CSS thì ình có một demo ở đây: http://huynhphuchuy.com/pixlrx
Face Detection API (https://cloud.google.com/vision/docs/detecting-faces) Nhận diện khuôn mặt cùng các bộ phận và cảm xúc trên khuôn mặt. Các bạn sử dụng CURL để post, tham khảo mã nguồn dưới đây:
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://vision.googleapis.com/v1/images:annotate?key=API_KEY", // API key cua bạn CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => '{"requests":[{"image":{"content":"'. $imdata .'"},"features":[{"type":"FACE_DETECTION"}]}]}', CURLOPT_HTTPHEADER => array( "cache-control: no-cache", "content-type: application/json" ), )); Demo: http://huynhphuchuy.com/pixlrx/face.php Landmark Detection API (https://cloud.google.com/vision/docs/detecting-landmarks) Nhận diện các địa danh, danh lam thắng cảnh, các công trình kiến trúc nổi tiếng. Các bạn sử dụng CURL để post, tham khảo mã nguồn dưới đây:
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://vision.googleapis.com/v1/images:annotate?key=API_KEY", // API key cua bạn CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => '{"requests":[{"image":{"content":"'. $imdata .'"},"features":[{"type":" LANDMARK_DETECTION"}]}]}', CURLOPT_HTTPHEADER => array( "cache-control: no-cache", "content-type: application/json" ), )); Còn một số các API khác nữa mà mình chưa có thời gian để tìm hiểu, các bạn có thể tự tìm hiểu thêm ở trang tài liệu API mà mình đã đề cập ở trên. Các bài viết tiếp theo mình sẽ hướng dẫn và cung cấp các ví dụ mẫu về các thư viện mã nguồn mở cho việc xử lý hình ảnh để giúp cho các bạn muốn một giải pháp mà không tốn chi phí nào
Google Cloud có thành phần GC Vision API để nhận dạng chữ trong hình ảnh, văn bản. Nó tự dò tìm từng khối văn bản, nhận ra được chữ thuộc ngôn ngữ gì. Code để nhận dạng chữ trong văn bản, dùng công cụ gcloud trong terminal, kết quả được trả về ở dạng JSON:
Theo Google cho biết thì dùng “detect-document” khi file hình là văn bản dày đặc chữ (“dense document text”, hướng dẫn: https://cloud.google.com/vision/docs/detecting-fulltext), còn khi trong hình có ít chữ thì dùng “detect-text” (hướng dẫn: https://cloud.google.com/vision/docs/detecting-text). Trong trường hợp dùng Python để gọi Google Cloud Vision API, tôi có viết chương trình Python để xử lý dữ liệu sau khi thu được (chạy tốt với Python3, còn Python2 thì còn vướng mắc khi chữ nhận dạng có ký tự Unicode): https://gitlab.com/dichthuat/tools/ocr Nhận xét: Google Cloud Vision API hoạt động rất tốt, chỉ có vấn đề là khi trong hình ảnh có nhiều khối văn bản, có thể nó không phân tách tốt các khối nên bị lẫn lộn các đoạn văn. Hai ví dụ: 1. Nhận diện chính xác các khối văn bản: Kết quả nhận diện:
2. Nhận diện từng từ thì đúng, nhưng xử lý sai các khối văn bản, làm cho các đoạn văn (ở 2 cột) bị lẫn vào nhau: Kết quả nhận diện:
|