Tích hợp API máy học

Tích hợp API máy học

Thông tin về lớp học lập trình này

subjectLần cập nhật gần đây nhất: thg 6 30, 2021
account_circleTác giả: Torry Yang

1. Tổng quan

Lớp học lập trình này sẽ giúp bạn tìm hiểu nhanh về một số API máy học. Bạn sẽ sử dụng:

  • Cloud Vision để hiểu nội dung của hình ảnh
  • Chuyển lời nói thành văn bản trên đám mây để chép lời bằng âm thanh sang văn bản
  • Dịch thuật đám mây để dịch một chuỗi tùy ý sang bất kỳ ngôn ngữ nào được hỗ trợ
  • Ngôn ngữ tự nhiên trên đám mây để trích xuất thông tin từ văn bản

Sản phẩm bạn sẽ tạo ra

Bạn sẽ tạo một quy trình so sánh bản ghi âm với hình ảnh và xác định mức độ liên quan của các bản ghi âm đó với nhau. Sau đây là thông tin sơ lược về cách bạn thực hiện:

e6a57e5def315116.jpeg

Kiến thức bạn sẽ học được

  • Cách sử dụng API Thị giác, lời nói thành văn bản, bản dịch và ngôn ngữ tự nhiên
  • Nơi tìm mẫu mã

Bạn cần có

  • Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
  • Kiến thức cơ bản về Python

2. Thiết lập và yêu cầu

Thiết lập môi trường theo tiến độ riêng

  1. Đăng nhập vào Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, thì bạn phải tạo một tài khoản.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Hãy ghi nhớ mã dự án, một tên duy nhất trên tất cả các dự án Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động cho bạn!). Lớp học này sẽ được gọi sau này trong lớp học lập trình này là PROJECT_ID.

  1. Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.

Khi tham gia lớp học lập trình này, bạn sẽ không mất chi phí (nếu có). Hãy nhớ làm theo bất kỳ hướng dẫn nào trong phần "dọn dẹp" phần này tư vấn cho bạn cách tắt tài nguyên để bạn không phải chịu thanh toán ngoài hướng dẫn này. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí trị giá 300 đô la Mỹ.

Bật các API

Bạn có thể nhấp vào đường liên kết này để bật tất cả API cần thiết. Sau khi thực hiện, vui lòng bỏ qua hướng dẫn thiết lập tính năng xác thực; chúng tôi sẽ làm điều đó trong giây lát. Ngoài ra, bạn có thể bật từng API. Để thực hiện việc này, hãy nhấp vào biểu tượng trình đơn ở trên cùng bên trái màn hình.

2bfc27ef9ba2ec7d.png

Chọn API & dịch vụ từ trình đơn thả xuống và nhấp vào Trang tổng quan

a9546a22581facd5.png

Nhấp vào Bật API và dịch vụ.

eae7ff043d13a35.png

Sau đó, tìm kiếm "vision" trong hộp tìm kiếm. Nhấp vào API Google Cloud Vision:

a47893f36372ae2f.png

Nhấp vào Bật để bật API Cloud Vision:

a24fd082a22030ad.png

Đợi vài giây để tùy chọn này bật. Bạn sẽ thấy thông báo sau khi tính năng này được bật:

633e58cbde1b74c6.png

Lặp lại quy trình này để bật Cloud Speech, Cloud Dịch và Cloud Natural Language API.

Cloud Shell

Google Cloud Shell là một môi trường dòng lệnh chạy trong Đám mây. Máy ảo dựa trên Debian này được tải bằng tất cả công cụ phát triển mà bạn cần (gcloud, bq, git, v.v.) và cung cấp một thư mục gốc 5GB cố định. Chúng tôi sẽ sử dụng Cloud Shell để tạo yêu cầu của mình đối với các API máy học.

Để bắt đầu sử dụng Cloud Shell, hãy nhấp vào biểu tượng &quo;Kích hoạt Google Cloud Shell" Ảnh chụp màn hình lúc 5:30.32 chiều.2015-06-08ở góc trên cùng bên phải của thanh tiêu đề

24ef50000ca737a4.png

Phiên hoạt động trên Cloud Shell mở ra trong một khung mới ở cuối bảng điều khiển và hiển thị lời nhắc dòng lệnh. Chờ cho đến khi lời nhắc user@project:~$ xuất hiện.

Không bắt buộc: Trình chỉnh sửa mã

Tùy thuộc vào sự thoải mái của bạn với dòng lệnh, bạn có thể muốn nhấp vào "launch Code Editor" biểu tượng b885bf07bc1b02e5.png ở góc trên cùng bên phải của thanh Cloud Shell

de00be9278baf7b8.png

Tài khoản dịch vụ

Bạn sẽ cần một tài khoản dịch vụ để xác thực. Để tạo một tài khoản dịch vụ, hãy thay thế [NAME] bằng tên mong muốn của tài khoản dịch vụ và chạy lệnh sau trong Cloud Shell:

gcloud iam service-accounts create [NAME]

Bây giờ, bạn sẽ cần tạo khóa để sử dụng tài khoản dịch vụ đó. Thay thế [FILE_NAME] bằng tên khóa mong muốn, [NAME] bằng tên tài khoản dịch vụ ở trên và [PROJECT_ID] bằng mã dự án. Lệnh sau sẽ tạo và tải khóa xuống dưới dạng [FILE_NAME].json:

gcloud iam service-accounts keys create [FILE_NAME].json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com

Để sử dụng tài khoản dịch vụ, bạn sẽ phải đặt biến GOOGLE_APPLICATION_CREDENTIALS thành đường dẫn của khóa. Để làm điều này, hãy chạy lệnh sau sau khi thay thế [PATH_TO_FILE] và [FILE_NAME]:

export GOOGLE_APPLICATION_CREDENTIALS=[PATH_TO_FILE]/[FILE_NAME].json

3. Cloud Vision

Ứng dụng Python

Bạn sẽ cần có ứng dụng Python cho Cloud Vision. Để cài đặt, hãy nhập nội dung sau vào Cloud Shell:

pip install --upgrade google-cloud-vision --user

Hãy dùng thử

Hãy xem các mã mẫu cho API Cloud Vision. Chúng tôi muốn tìm hiểu nội dung nào trong hình ảnh được chỉ định. Có vẻ như detect.py rất hữu ích cho việc này nên hãy cố gắng thực hiện việc này. Một cách là sao chép nội dung của dò.py, tạo một tệp mới trong Cloud Shell có tên vision.py và dán tất cả mã vào vision.py. Bạn có thể thực hiện việc này theo cách thủ công trong Cloud Shell Trình chỉnh sửa mã hoặc bạn có thể chạy lệnh curl này trong Cloud Shell:

curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/vision/cloud-client/detect/detect.py -o vision.py

Sau khi thực hiện việc đó, hãy sử dụng API bằng cách chạy các mục sau trong Cloud Shell:

python vision.py labels-uri gs://cloud-samples-data/ml-api-codelab/birds.jpg

Bạn sẽ thấy kết quả về các loài chim và đà điểu vì đây là hình ảnh được phân tích: https://storage.googleapis.com/cloud-samples-data/ml-api-codelab/birds.jpg

Chuyện gì đang xảy ra?

Bạn đã chuyển 2 đối số cho vision.py:

  • labels-uri chọn hàm detect_labels_uri() để chạy
  • gs://cloud-samples-data/ml-api-codelab/birds.jpg là vị trí của một hình ảnh trên Google Cloud Storage và được chuyển dưới dạng uri vào detect_labels_uri()

Hãy cùng tìm hiểu kỹ hơn về detect_labels_uri(). Lưu ý những nhận xét bổ sung đã được chèn.

def detect_labels_uri(uri):
   
"""Detects labels in the file located in Google Cloud Storage or on the
    Web."""

   
# relevant import from above
   
# from google.cloud import vision

   
# create ImageAnnotatorClient object
    client
= vision.ImageAnnotatorClient()

   
# create Image object
    image
= vision.types.Image()

   
# specify location of image
    image
.source.image_uri = uri

   
# get label_detection response by passing image to client
    response
= client.label_detection(image=image)

   
# get label_annotations portion of response
    labels
= response.label_annotations
   
print('Labels:')

   
for label in labels:
       
# print the label descriptions
       
print(label.description)

4. Chuyển lời nói thành văn bản trên đám mây

Ứng dụng Python

Bạn sẽ cần có ứng dụng Python cho Cloud Speech-to-Text. Để cài đặt, hãy nhập nội dung sau vào Cloud Shell:

sudo pip install --upgrade google-cloud-speech

Hãy dùng thử

Hãy chuyển đến mẫu mã cho tính năng Chuyển lời nói thành văn bản trên đám mây. Chúng tôi quan tâm đến việc chép lời âm thanh. transcribe.py có vẻ như là một nơi tốt để bắt đầu. Vì vậy, hãy sử dụng cách đó. Sao chép nội dung của bản chép lời, tạo một tệp mới trong Cloud Shell có tên speech2text.py và dán tất cả mã vào speech2text.py. Bạn có thể thực hiện việc này theo cách thủ công trong Cloud Shell Trình chỉnh sửa mã hoặc bạn có thể chạy lệnh curl này trong Cloud Shell:

curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/speech/cloud-client/transcribe.py -o speech2text.py

Sau khi thực hiện việc đó, hãy sử dụng API bằng cách chạy các mục sau trong Cloud Shell:

python speech2text.py gs://cloud-samples-data/ml-api-codelab/tr-ostrich.wav

Cần có lỗi phàn nàn về việc mã hóa sai và tỷ lệ Hertz mẫu. Đừng lo, hãy chuyển đến transcribe_gcs() trong mã rồi xóa các chế độ cài đặt encodingsampe_hertz_rate khỏi RecognitionConfig(). Trong khi bạn nói, hãy thay đổi mã ngôn ngữ thành"tr-TR×39"; vì tr-ostrich.wav là bản ghi âm lời nói bằng tiếng Thổ Nhĩ Kỳ.

config = types.RecognitionConfig(language_code='tr-TR')

Bây giờ, hãy chạy lại speech2text.py. Đầu ra phải là một số văn bản tiếng Thổ Nhĩ Kỳ vì đây là âm thanh được phân tích: https://storage.googleapis.com/cloud-samples-data/ml-api-codelab/tr-ostrich.wav

Điều gì đang xảy ra?

Bạn đã chuyển gs://cloud-samples-data/ml-api-codelab/tr-ostrich.wav, vị trí của một tệp âm thanh trên Google Cloud Storage cho speech2text.py, sau đó chuyển ở dạng gcs_uri vào transcribe_uri()

Hãy cùng tìm hiểu kỹ hơn về transcribe_uri() đã được sửa đổi của chúng tôi.

def transcribe_gcs(gcs_uri):
   
"""Transcribes the audio file specified by the gcs_uri."""

   
from google.cloud import speech
   
# enums no longer used
   
# from google.cloud.speech import enums
   
from google.cloud.speech import types

   
# create ImageAnnotatorClient object
    client
= speech.SpeechClient()

   
# specify location of speech
    audio
= types.RecognitionAudio(uri=gcs_uri)

   
# set language to Turkish
   
# removed encoding and sample_rate_hertz
    config
= types.RecognitionConfig(language_code='tr-TR')

   
# get response by passing config and audio settings to client
    response
= client.recognize(config, audio)

   
# Each result is for a consecutive portion of the audio. Iterate through
   
# them to get the transcripts for the entire audio file.
   
for result in response.results:
       
# The first alternative is the most likely one for this portion.
       
# get the transcript of the first alternative
       
print(u'Transcript: {}'.format(result.alternatives[0].transcript))

5. Cloud Translation

Ứng dụng Python

Bạn sẽ cần có ứng dụng Python dành cho Cloud Dịch. Để cài đặt, hãy nhập nội dung sau vào Cloud Shell:

sudo pip install --upgrade google-cloud-translate

Hãy dùng thử

Bây giờ, hãy xem các mẫu mã cho tính năng Dịch đám mây. Để phục vụ cho mục đích của lớp học lập trình này, chúng tôi muốn dịch văn bản sang tiếng Anh. snippets.py có vẻ như chúng tôi muốn. Sao chép content ofsnippet.py, tạo một tệp mới trong Cloud Shell có tên translate.py và dán tất cả mã vào translate.py. Bạn có thể thực hiện việc này theo cách thủ công trong Cloud Shell Trình chỉnh sửa mã hoặc bạn có thể chạy lệnh curl này trong Cloud Shell:

curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/translate/cloud-client/snippets.py -o translate.py

Sau khi thực hiện việc đó, hãy sử dụng API bằng cách chạy các mục sau trong Cloud Shell:

python translate.py translate-text en '你有沒有帶外套'

Bản dịch phải là "Bạn có áo khoác {/5}quot;

Điều gì đang xảy ra?

Bạn đã chuyển 3 đối số cho translate.py:

  • translate-text chọn hàm translate_text() để chạy
  • en được chuyển dưới dạng target thành translate_text() và phân phát ngôn ngữ cần dịch sang
  • ‘你有沒有帶外套#39; là chuỗi cần dịch và chuyển dưới dạng text vào translate_text()

Hãy cùng tìm hiểu kỹ hơn về translate_text(). Hãy lưu ý những bình luận đã được thêm.

def translate_text(target, text):
   
"""Translates text into the target language.

    Target must be an ISO 639-1 language code.
    See https://g.co/cloud/translate/v2/translate-reference#supported_languages
    """

   
# relevant imports from above
   
# from google.cloud import translate
   
# import six

   
# create Client object
    translate_client
= translate.Client()

   
# decode text if it's a binary type
   
# six is a python 2 and 3 compatibility library
   
if isinstance(text, six.binary_type):
        text
= text.decode('utf-8')

   
# get translation result by passing text and target language to client
   
# Text can also be a sequence of strings, in which case this method
   
# will return a sequence of results for each text.
    result
= translate_client.translate(text, target_language=target)

   
# print original text, translated text and detected original language
   
print(u'Text: {}'.format(result['input']))
   
print(u'Translation: {}'.format(result['translatedText']))
   
print(u'Detected source language: {}'.format(
        result
['detectedSourceLanguage']))

6. Ngôn ngữ tự nhiên trên đám mây

Ứng dụng Python

Bạn sẽ cần có ứng dụng Python cho Cloud Natural Language. Để cài đặt, hãy nhập nội dung sau vào Cloud Shell:

sudo pip install --upgrade google-cloud-language

Hãy dùng thử

Cuối cùng, hãy xem các mã mẫu cho API Cloud Language Language. Chúng tôi muốn phát hiện các đối tượng trong văn bản. Có vẻ như snippets.py chứa mã có chức năng đó. Sao chép content ofsnippet.py, tạo một tệp mới trong Cloud Shell có tên natural_language.py và dán tất cả mã vào natural_language.py. Bạn có thể thực hiện việc này theo cách thủ công trong Cloud Shell Trình chỉnh sửa mã hoặc bạn có thể chạy lệnh curl này trong Cloud Shell:

curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/language/cloud-client/v1/snippets.py -o natural_language.py

Sau khi thực hiện việc đó, hãy sử dụng API bằng cách chạy các mục sau trong Cloud Shell:

python natural_language.py entities-text 'where did you leave my bike'

API phải xác định "bike" với tư cách một thực thể. Các thực thể có thể là các danh từ riêng (nhân vật của công chúng, địa danh, v.v.) hoặc những danh từ thông dụng (nhà hàng, sân vận động, v.v.).

Điều gì đang xảy ra?

Bạn đã chuyển 2 đối số cho natural_language.py:

  • entities-text chọn hàm entities_text() để chạy
  • "Bạn đã để xe đạp ở đâu\39; là chuỗi sẽ được phân tích cho các thực thể và được chuyển dưới dạng văn bản vào entities_text()

Hãy cùng tìm hiểu kỹ hơn về entities_text(). Hãy lưu ý rằng những bình luận mới đã được chèn vào.

def entities_text(text):
   
"""Detects entities in the text."""
   
# relevant imports from above
   
# from google.cloud import language
   
# from google.cloud.language import enums
   
# from google.cloud.language import types
   
# import six

   
# create LanguageServiceClient object
    client
= language.LanguageServiceClient()

   
# decode text if it's a binary type
   
# six is a python 2 and 3 compatibility library
   
if isinstance(text, six.binary_type):
        text
= text.decode('utf-8')

   
# Instantiates a plain text document.
    document
= types.Document(
        content
=text,
        type
=enums.Document.Type.PLAIN_TEXT)

   
# Detects entities in the document. You can also analyze HTML with:
   
#   document.type == enums.Document.Type.HTML
    entities
= client.analyze_entities(document).entities

   
# entity types from enums.Entity.Type
    entity_type
= ('UNKNOWN', 'PERSON', 'LOCATION', 'ORGANIZATION',
                   
'EVENT', 'WORK_OF_ART', 'CONSUMER_GOOD', 'OTHER')

   
# print information for each entity found
   
for entity in entities:
       
print('=' * 20)
       
print(u'{:<16}: {}'.format('name', entity.name))
       
print(u'{:<16}: {}'.format('type', entity_type[entity.type]))
       
print(u'{:<16}: {}'.format('metadata', entity.metadata))
       
print(u'{:<16}: {}'.format('salience', entity.salience))
       
print(u'{:<16}: {}'.format('wikipedia_url',
              entity
.metadata.get('wikipedia_url', '-')))

7. Hãy tích hợp

Hãy nhắc lại bản thân bạn đang xây dựng những gì.

e6a57e5def315116.jpeg

Bây giờ, hãy kết hợp mọi thứ lại với nhau. Tạo một tệp solution.py; sao chép và dán detect_labels_uri(), transcribe_gcs(), translate_text()entities_text() từ các bước trước đó vào solution.py.

Nhập bảng sao kê

Bỏ nhận xét và di chuyển các câu lệnh nhập lên đầu. Xin lưu ý rằng cả speech.typeslanguage.types đều đang được nhập. Điều này sẽ gây ra xung đột, vì vậy, hãy để chúng chỉ xóa chúng và thay đổi từng lần xuất hiện của types trong transcribe_gcs()entities_text() thành speech.typeslanguage.types tương ứng. Bạn nên để lại:

from google.cloud import vision
from google.cloud import speech
from google.cloud import translate
from google.cloud import language
from google.cloud.language import enums
import six

Kết quả trả về

Thay vì in, hãy để các hàm trả về kết quả. Bạn sẽ có nội dung tương tự như:

# import statements

def detect_labels_uri(uri):
   
# code

   
# we only need the label descriptions
    label_descriptions
= []
   
for label in labels:
        label_descriptions
.append(label.description)

   
return label_descriptions

def transcribe_gcs(gcs_uri):
   
# code

   
# naive assumption that audio file is short
   
return response.results[0].alternatives[0].transcript

def translate_text(target, text):
   
# code

   
# only interested in translated text
   
return result['translatedText']

def entities_text(text):
   
# code

   
# we only need the entity names
    entity_names
= []
   
for entity in entities:
        entity_names
.append(entity.name)

   
return entity_names

Sử dụng các hàm

Sau tất cả những nỗ lực miệt mài đó, bạn sẽ có thể gọi các hàm đó. Xin mời tiếp tục! Dưới đây là ví dụ:

def compare_audio_to_image(audio, image):
   
"""Checks whether a speech audio is relevant to an image."""

   
# speech audio -> text
    transcription
= transcribe_gcs(audio)

   
# text of any language -> english text
    translation
= translate_text('en', transcription)

   
# text -> entities
    entities
= entities_text(translation)

   
# image -> labels
    labels
= detect_labels_uri(image)

   
# naive check for whether entities intersect with labels
    has_match
= False
   
for entity in entities:
       
if entity in labels:
           
# print result for each match
           
print('The audio and image both contain: {}'.format(entity))
            has_match
= True

   
# print if there are no matches
   
if not has_match:
       
print('The audio and image do not appear to be related.')

Hỗ trợ nhiều ngôn ngữ

Trước đây, chúng tôi mã hóa cứng tiếng Thổ Nhĩ Kỳ thành transcribe_gcs(). Hãy thay đổi ngôn ngữ đó để xác định ngôn ngữ từ compare_audio_to_image(). Sau đây là những thay đổi bắt buộc:

def transcribe_gcs(language, gcs_uri):
   
...
    config
= speech.types.RecognitionConfig(language_code=language)
def compare_audio_to_image(language, audio, image):
    transcription
= transcribe_gcs(language, audio)

Thử nào

Bạn có thể tìm thấy mã cuối cùng trong solution.py của kho lưu trữ GitHub này. Dưới đây là lệnh curl để lấy:

curl https://raw.githubusercontent.com/googlecodelabs/integrating-ml-apis/master/solution.py -O

Phiên bản trên GitHub chứa argparse, cho phép các mục sau từ dòng lệnh:

python solution.py tr-TR gs://cloud-samples-data/ml-api-codelab/tr-ball.wav gs://cloud-samples-data/ml-api-codelab/football.jpg

Đối với mỗi mục được tìm thấy, mã sẽ cho ra "Âm thanh và hình ảnh đều chứa: ". Trong ví dụ trên, nó sẽ là "Âm thanh và hình ảnh đều chứa: ball&quot.

Điểm thưởng: hãy thử thêm

Dưới đây là các vị trí tệp âm thanh và hình ảnh khác để thử.

8. Xin chúc mừng!

Bạn đã khám phá và tích hợp 4 API máy học để xác định xem mẫu giọng nói có đang nói về hình ảnh được cung cấp hay không. Đây chỉ là khởi đầu vì có nhiều cách hơn để kênh này cải thiện!

Những điều chúng tôi đã đề cập

  • Gửi yêu cầu đến API Cloud Vision
  • Gửi yêu cầu tới API Cloud Speech-to-Text
  • Gửi yêu cầu đến API bản dịch trên Cloud
  • Gửi yêu cầu tới API Cloud Natural Language
  • Sử dụng tất cả API ở trên cùng nhau

Các bước tiếp theo