October 23, 2021

Trình diễn Google Cloud Vision API với Python (P3) – Detect Labels

Tiếp theo bài viết Trình diễn Google Cloud Vision API với Python (P2) – Faces detection. Nay chúng ta tiếp tục với một tính năng khác cũng được hỗ trợ bởi Cloud Vision API đó là Detect Labels – tạm dịch là “Phát hiện nhãn”. Để cho các bạn quen thuộc với thuật ngữ chuyên ngành và dễ dàng tra cứu. Do đó mình sử dụng nó là Detect Labels.

Vậy Detect Label là gì? Như đã giới thiệu ở bên trên. Nó là một tính năng của Cloud Vision API. Đây là một sản phẩm AI của Google Cloud Platform (GCP) được đã được huấn luyện cho phép máy tính phát hiện một hoặc nhiều Label của một hình ảnh. Label của một hình ảnh là gì? Label Image ở đây theo hiểu cách của tiếng việt gọi là ‘nhãn ảnh’. Được hiểu nôm na là một từ hoặc cụm từ được sử dụng để mô tả ngắn gọn về người, vật, sự kiện,…có trong ảnh. Ví dụ như hình bên dưới.

Hình 1. Ảnh được gán nhãn là 'Bird','Rooster',...
Hình 1. Ảnh được gán nhãn là ‘Bird’,’Rooster’,…

Mục đích của Detect Label trong Cloud Vision API là khi người dùng đưa nội dung của một tấm ảnh. API sẽ phân tích và gợi ý xem bạn nên gán Label nào của cho tấm ảnh này. Nó được ứng dụng khá nhiều trong thời đại 4.0 như: Tự động phân loại các món hàng (quần áo, giày dép, laptop, linh kiện, mắt kính,…). Phát hiện đối tượng là người, đồ vật, vật cản trong các thiết bị tự động lái,…

Để cho dễ hình dung thì chúng ta thử upload một ảnh lên Cloud Vision API để xem kết quả mình thu được như thế nào nhé.

Hình 2: Kết quả hiển thị khi upload một tấm ảnh (source)
Hình 2: Kết quả hiển thị khi upload một tấm ảnh (source)

Theo như ví bên trên thì Cloud Vision API cho các nhãn và độ chính xác sau:

  • Bird (Chim) , Chicken (Gà), Vertebrate ( Động vật xương sống) với độ chính xác là- 99%,
  • Rooster (Gà trống) với độ chính xác là 98%.
  • ….

Giờ là tới phần mình sẽ tích hợp API trên vào ứng dụng của mình bằng các ngôn ngữ lập trình mà mình ưa thích. Trong bài viết này, mình sử dụng ngôn ngữ lập trình là python version 3.7.3 và google-cloud-vision

Trình diễn Google Cloud Vision API với Python

I. Cài đặt thư viện cần thiết bằng pip

Cài đặt thư viện cần thiết, nếu đã cài rồi thì bạn có thể bỏ qua bước này.

pip3 install google-cloud-vision

Sau khi cài đặt thành công thì chúng ta có thể sử dụng Cloud Vision API được rồi.

II. Detect Labels với Cloud Vision API

Các dịch vụ của GCP luôn luôn yên cầu chứng thực bạn là ai và bạn có role thực hiện dịch vụ này hay không? . Trong ví dụ này, mình sử dụng cách chứng thực bằng file json. Ở đây mình đặt tên file ‘client_demo.json‘. Và thiết lập tên biến môi trường là ‘GOOGLE_APPLICATION_CREDENTIALS‘.

Đoạn code chính của chương trình

import io
import os
# Imports the Google Cloud client library
from google.cloud import vision
from google.cloud.vision import types
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = os.path.join('certs', 'client_demo.json')
def detect_labels_image(image_path):
    # Instantiates a client
    client = vision.ImageAnnotatorClient()
    # The name of the image file to annotate
    file_name = image_path
    # Loads the image into memory
    with io.open(file_name, 'rb') as image_file:
        content = image_file.read()
    image = types.Image(content=content)
    # Performs label detection on the image file
    response = client.label_detection(image=image)
    print('Response:')
    print(response)
if __name__ == '__main__':
    image_path = '/Users/baovuong/Desktop/Rooster.jpg'
    detect_labels_image(image_path)

Kết quả mình nhận được như sau:

import io
import os
# Imports the Google Cloud client library
from google.cloud import vision
from google.cloud.vision import types
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = os.path.join('certs', 'client_demo.json')
def detect_labels_image(image_path):
    # Instantiates a client
    client = vision.ImageAnnotatorClient()
    # The name of the image file to annotate
    file_name = image_path
    # Loads the image into memory
    with io.open(file_name, 'rb') as image_file:
        content = image_file.read()
    image = types.Image(content=content)
    # Performs label detection on the image file
    response = client.label_detection(image=image)
    print('Response:')
    print(response)
if __name__ == '__main__':
    image_path = '/Users/baovuong/Desktop/Rooster.jpg'
    detect_labels_image(image_path)

Như vậy là đã gọi được Cloud Vision API thành công. Bây giờ mình điều chỉnh code một chút- chỉ lấy những thông tin cần thiết. Ở đây mình cần quan tâm là LabelScore. Code sau khi mình điều chỉnh như ở bên dưới.

import io
import os
# Imports the Google Cloud client library
from google.cloud import vision
from google.cloud.vision import types
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = os.path.join('certs', 'client_demo.json')
def detect_labels_image(image_path):
    # Instantiates a client
    client = vision.ImageAnnotatorClient()
    # The name of the image file to annotate
    file_name = image_path
    # Loads the image into memory
    with io.open(file_name, 'rb') as image_file:
        content = image_file.read()
    image = types.Image(content=content)
    # Performs label detection on the image file
    response = client.label_detection(image=image)
    labels = response.label_annotations
    print('Labels:')
    for label in labels:
        print(label.description,'(','score = ', label.score,')')
if __name__ == '__main__':
    image_path = '/Users/baovuong/Desktop/Rooster.jpg'
    detect_labels_image(image_path)

Kết quả sau khi điều chỉnh code lấy những thông tin cần thiết.

Labels:
Bird ( score =  0.9911496639251709 )
Chicken ( score =  0.9909406304359436 )
Vertebrate ( score =  0.9851104021072388 )
Rooster ( score =  0.982132613658905 )
Fowl ( score =  0.9618406891822815 )
Galliformes ( score =  0.9476949572563171 )
Beak ( score =  0.944757878780365 )
Comb ( score =  0.9258823394775391 )
Poultry ( score =  0.8926154971122742 )
Livestock ( score =  0.8361597657203674 )
Process finished with exit code 0

Cloud Vision API được phát triển được sử dụng chung toàn cầu. Do đó, sẽ có những vật của từng địa phương cụ thể thì Cloud Vision API có thể phát hiện nhầm hoặc không đạt như kết quả mình mong muốn. Ví dụ như tấm ảnh con gà trống ở bên trên. Mình mong muốn Cloud Vision API trả ra kết quả là “Gà trống” chứ không phải “Rooster“. Để giải quyết vấn đề này, các bạn cũng có thể sử dụng thêm một API khác của GCP – đó là Google Translate API để dịch từ tiếng Anh sang tiếng Việt. Nếu vẫn chưa hài lòng về kết quả của Cloud Vision API thì bạn cũng có thể tự tay build một model mới theo cách gán Label của bạn với Cloud AutoML.

Nếu các bạn cần nhiều thông tin hơn thì hãy xem tài liệu chi tiết Cloud Vision API ở đây.

Những thông tin trên hi vọng giúp ích cho các bạn về các khả năng mà Cloud Vision API trên nền tảng GCP có thể hỗ trợ được. Ở bài viết tiếp theo, chúng ta sẽ tiếp tục một vài ví dụ nho nhỏ – Nhận dạng ký tự quang học Optical Character Recognition (OCR) được hỗ trợ bởi Cloud Vision API.

Khi có chỗ nào chưa rõ, cần support, các bạn hãy liên hệ với các chuyên gia – Cloud Ace Việt Nam – để được hỗ trợ tốt hơn.

Tham khảo

Trình diễn Google Cloud Vision API với Python Series:

Bao Vuong

Vương hiện là Cloud Engineer của Cloud Ace Vietnam.+6 năm kinh nghiệm phát triển backend +2 năm kinh nghiệm Data Analytics +1 năm kinh nghiệm Machine Learning

View all posts by Bao Vuong →

One thought on “Trình diễn Google Cloud Vision API với Python (P3) – Detect Labels

Comments are closed.