API Cloud Vision cho phép bạn hiểu nội dung của một hình ảnh bằng cách đóng gói các mô hình máy học mạnh mẽ trong một API REST đơn giản.
Trong phòng thí nghiệm này, chúng tôi sẽ gửi hình ảnh đến API Vision và xem hình ảnh đó phát hiện các vật thể, khuôn mặt và địa danh.
Kiến thức bạn sẽ học được
- Tạo một yêu cầu API Vision và gọi API bằng curl
- Sử dụng các phương pháp phát hiện nhãn, web, khuôn mặt và địa danh của API thị giác
Bạn cần
Bạn sẽ sử dụng hướng dẫn này như thế nào?
Vui lòng cho biết trải nghiệm của bạn đối với Google Cloud Platform.
Thiết lập môi trường theo tiến độ riêng
Nếu chưa có Tài khoản Google (Gmail hoặc Google Apps), thì bạn phải tạo một tài khoản. Đăng nhập vào bảng điều khiển của Google Cloud Platform (console.cloud.google.com) và tạo một dự án mới:
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
.
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.
Nếu tham gia lớp học lập trình này, bạn sẽ không mất quá vài đô la, nhưng có thể sẽ hiệu quả hơn nếu bạn quyết định sử dụng nhiều tài nguyên hơn hoặc nếu bạn để các tài nguyên đó hoạt động (xem "cleanup" ở cuối tài liệu này).
Người dùng mới của Google Cloud Platform đủ điều kiện dùng thử 300 đô la dùng thử miễn phí.
Nhấp vào biểu tượng trình đơn ở phía trên cùng bên trái màn hình.
Chọn API & dịch vụ từ trình đơn thả xuống và nhấp vào Trang tổng quan
Nhấp vào Bật API và dịch vụ.
Sau đó, tìm kiếm "vision" trong hộp tìm kiếm. Nhấp vào API Google Cloud Vision:
Nhấp vào Bật để bật API Cloud Vision:
Đợ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:
Google Cloud Shell là một môi trường dòng lệnh chạy trong Cloud. 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 API lời nói.
Để bắt đầu sử dụng Cloud Shell, hãy nhấp vào "Kích hoạt Google Cloud Shell" biểu tượng ở góc trên cùng bên phải của thanh tiêu đề
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
Vì chúng ta sẽ sử dụng curl để gửi yêu cầu tới API Vision, nên chúng tôi sẽ cần tạo khóa API để chuyển URL của yêu cầu. Để tạo một khóa API, hãy chuyển đến phần Thông tin xác thực của các API & các dịch vụ trong Cloud Console của bạn:
Trong trình đơn thả xuống, hãy chọn Khóa API:
Tiếp theo, hãy sao chép chìa khóa bạn vừa tạo.
Giờ đây, bạn đã có khóa API, hãy lưu khóa đó vào biến môi trường để tránh phải chèn giá trị của khóa API vào mỗi yêu cầu. Bạn có thể thực hiện việc này trong Cloud Shell. Đảm bảo thay thế <your_api_key>
bằng khóa bạn vừa sao chép.
export API_KEY=<YOUR_API_KEY>
Tạo bộ chứa Cloud Storage
Có hai cách để gửi hình ảnh đến API Vision để phát hiện hình ảnh: bằng cách gửi cho API một chuỗi hình ảnh được mã hóa base64 hoặc chuyển URL đó tới URL của một tệp được lưu trữ trong Google Cloud Storage. Chúng tôi sẽ dùng URL của Cloud Storage. Chúng tôi sẽ tạo một bộ chứa Google Cloud Storage để lưu trữ hình ảnh của chúng tôi.
Chuyển đến trình duyệt Bộ nhớ trong Cloud Console cho dự án của bạn:
Sau đó, hãy nhấp vào Tạo bộ chứa. Đặt một tên riêng biệt cho nhóm của bạn (chẳng hạn như Mã dự án) rồi nhấp vào Tạo.
Tải một hình ảnh lên bộ chứa
Nhấp chuột phải vào hình ảnh bánh rán sau đó, nhấp vào Lưu hình ảnh dưới dạng và lưu vào thư mục Tải xuống của bạn dưới dạng donuts.png.
Chuyển đến bộ chứa mà bạn vừa tạo trong trình duyệt bộ nhớ và nhấp vào Tải tệp lên. Sau đó chọn donuts.png.
Bạn sẽ thấy tệp trong bộ chứa của mình:
Tiếp theo, hãy chỉnh sửa quyền của hình ảnh.
Nhấp vào Thêm mặt hàng.
Thêm Thực thể mới Group
và Tên của allUsers
:
Nhấp vào Lưu.
Giờ thì bạn đã có tệp trong bộ chứa, bạn đã sẵn sàng tạo một yêu cầu API Vision và chuyển URL đó cho hình ảnh donut này.
Trong môi trường Cloud Shell, hãy tạo một tệp request.json
bằng mã ở bên dưới, hãy nhớ thay thế my-trash-name bằng tên của bộ chứa Cloud Storage mà bạn đã tạo. Bạn có thể tạo tệp bằng một trong các trình chỉnh sửa dòng lệnh ưu tiên của mình (nano, vim, emacs) hoặc sử dụng trình chỉnh sửa Orion tích hợp sẵn trong Cloud Shell:
request.json
{
"requests": [
{
"image": {
"source": {
"gcsImageUri": "gs://my-bucket-name/donuts.png"
}
},
"features": [
{
"type": "LABEL_DETECTION",
"maxResults": 10
}
]
}
]
}
Tính năng API Cloud Vision đầu tiên mà chúng tôi sẽ khám phá là phát hiện nhãn. Phương thức này sẽ trả về danh sách nhãn (từ) có trong ảnh của bạn.
Giờ đây, chúng tôi đã sẵn sàng gọi API Vision bằng curl:
curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}
Phản hồi của bạn sẽ có dạng như sau:
{
"responses": [
{
"labelAnnotations": [
{
"mid": "/m/01dk8s",
"description": "powdered sugar",
"score": 0.9436922
},
{
"mid": "/m/01wydv",
"description": "beignet",
"score": 0.7160288
},
{
"mid": "/m/06_dn",
"description": "snow",
"score": 0.71219236
},
{
"mid": "/m/02wvn_6",
"mid": "/m/0bp3f6m",
"description": "fried food",
"score": 0.7075312
},
{
"mid": "/m/02wvn_6",
"description": "ricciarelli",
"score": 0.5625
},
{
"mid": "/m/052lwg6",
"description": "baked goods",
"score": 0.53270763
}
]
}
]
}
API có thể xác định loại cụ thể của những loại bánh này (bánh rán), thật tuyệt vời! Đối với mỗi nhãn mà API Vision tìm thấy, API này sẽ trả về description
có tên của mục. Phần này cũng trả về score
, một số từ 0 đến 100 cho biết mức độ chắc chắn của nội dung mô tả khớp với nội dung trong hình ảnh. Giá trị mid
liên kết với mặt hàng ở giữa trong Sơ đồ tri thức của Google. Bạn có thể sử dụng mid
khi gọi API Sơ đồ tri thức để biết thêm thông tin về mặt hàng.
Ngoài việc nhận nhãn về nội dung trong hình ảnh, API Vision cũng có thể tìm kiếm trên Internet để biết thêm chi tiết về hình ảnh của chúng tôi. Thông qua phương thức webDetection
của API, chúng tôi nhận được nhiều dữ liệu thú vị:
- Danh sách các thực thể có trong hình ảnh của chúng tôi, dựa trên nội dung trong các trang có hình ảnh tương tự
- URL của hình ảnh khớp chính xác và một phần trên mạng, cùng với URL của những trang đó
- URL của các hình ảnh tương tự, chẳng hạn như tìm kiếm hình ảnh tương tự
Để dùng thử tính năng phát hiện trên web, chúng tôi sẽ sử dụng cùng một hình ảnh từ đầu một trong những hình ảnh ở trên nên chúng tôi chỉ cần thay đổi một dòng trong tệp request.json
của mình (bạn cũng có thể khám phá nội dung không xác định và sử dụng một hình ảnh hoàn toàn khác). Trong danh sách tính năng, chỉ cần thay đổi loại từ LABEL_DETECTION
thành WEB_DETECTION
. request.json
sẽ có dạng như sau:
request.json
{
"requests": [
{
"image": {
"source": {
"gcsImageUri": "gs://my-bucket-name/donuts.png"
}
},
"features": [
{
"type": "WEB_DETECTION",
"maxResults": 10
}
]
}
]
}
Để gửi hàm đó đến API Vision, bạn có thể sử dụng lệnh curl tương tự như trước (chỉ cần nhấn mũi tên lên trong Cloud Shell):
curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}
Hãy đi sâu vào phản hồi, bắt đầu với webEntities
. Sau đây là một số thực thể mà hình ảnh này trả về:
"webEntities": [
{
"entityId": "/m/01hyh_",
"score": 0.7155,
"description": "Machine learning"
},
{
"entityId": "/m/01wydv",
"score": 0.48758492,
"description": "Beignet"
},
{
"entityId": "/m/0105pbj4",
"score": 0.3976,
"description": "Google Cloud Platform"
},
{
"entityId": "/m/02y_9m3",
"score": 0.3782,
"description": "Cloud computing"
},
...
]
Hình ảnh này đã được sử dụng lại trong nhiều bản trình bày trên các API Cloud ML của chúng tôi. Đó là lý do API này tìm thấy các thực thể "Máy học," "Google Cloud Platform&" và " Điện toán đám mây".
Nếu nhập các URL trong fullMatchingImages
, partialMatchingImages
và pagesWithMatchingImages
, chúng tôi sẽ nhận thấy rằng nhiều URL trỏ đến trang web lớp học lập trình này (siêu meta).
Giả sử chúng ta muốn tìm các hình ảnh khác của cây hoa hồng nhưng không phải là hình ảnh giống hệt. Đó là phần hữu ích của phần visuallySimilarImages
trong phản hồi API. Dưới đây là một số hình ảnh tương tự mà hệ thống tìm thấy:
"visuallySimilarImages": [
{
"url": "https://igx.4sqi.net/img/general/558x200/21646809_fe8K-bZGnLLqWQeWruymGEhDGfyl-6HSouI2BFPGh8o.jpg"
},
{
"url": "https://spoilednyc.com//2016/02/16/beignetszzzzzz-852.jpg"
},
{
"url": "https://img-global.cpcdn.com/001_recipes/a66a9a6fc2696648/1200x630cq70/photo.jpg"
},
...
]
Chúng ta có thể chuyển đến các URL đó để xem những hình ảnh tương tự:
Tuyệt! Và bây giờ có lẽ bạn thực sự muốn có cây beignet (rất tiếc). Điều này tương tự như quá trình tìm kiếm bằng hình ảnh trên Google Hình ảnh:
Tuy nhiên, với Cloud Vision, chúng ta có thể truy cập chức năng này bằng một API REST dễ sử dụng và tích hợp vào các ứng dụng.
Tiếp theo, chúng ta sẽ khám phá khuôn mặt và các phương pháp phát hiện mốc của API Vision. Phương pháp phát hiện khuôn mặt sẽ trả về dữ liệu trên các khuôn mặt có trong hình ảnh, bao gồm cảm xúc của các khuôn mặt và vị trí của các khuôn mặt trong hình ảnh. Tính năng phát hiện địa danh có thể xác định các địa danh chung (và tối giản) – thông tin này trả về tên của mốc, tọa độ theo kinh độ vĩ độ và vị trí mà một địa danh được xác định trong một hình ảnh.
Tải hình ảnh mới lên
Để sử dụng hai phương pháp mới này, hãy tải hình ảnh mới có khuôn mặt và địa danh lên bộ chứa Cloud Storage của chúng tôi. Nhấp chuột phải vào hình ảnh sau, sau đó nhấp vào Lưu hình ảnh dưới dạng và lưu vào thư mục Tệp đã tải xuống dưới dạng selfie.png.
Sau đó, tải tệp đó lên bộ chứa Cloud Storage giống như cách bạn đã làm ở bước trước, hãy nhớ đánh dấu hộp "Chia sẻ công khai".
Cập nhật yêu cầu của chúng tôi
Tiếp theo, chúng tôi sẽ cập nhật tệp request.json
của mình để bao gồm URL của hình ảnh mới cũng như sử dụng tính năng phát hiện khuôn mặt và mốc nổi tiếng thay vì phát hiện nhãn. Hãy nhớ thay thế my- Xô-name bằng tên bộ chứa Cloud Storage của chúng tôi:
request.json
{
"requests": [
{
"image": {
"source": {
"gcsImageUri": "gs://my-bucket-name/selfie.png"
}
},
"features": [
{
"type": "FACE_DETECTION"
},
{
"type": "LANDMARK_DETECTION"
}
]
}
]
}
Gọi API Vision và phân tích cú pháp phản hồi
Bây giờ, bạn đã sẵn sàng gọi API Vision bằng cách dùng lệnh curl tương tự mà bạn đã sử dụng ở trên:
curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}
Trước tiên, hãy xem đối tượng faceAnnotations
trong phản hồi của chúng ta. Bạn sẽ nhận thấy API trả về một đối tượng cho mỗi khuôn mặt có trong hình ảnh đó, trong trường hợp này là 3. Dưới đây là phiên bản phản hồi bị cắt bớt của chúng tôi:
{
"faceAnnotations": [
{
"boundingPoly": {
"vertices": [
{
"x": 669,
"y": 324
},
...
]
},
"fdBoundingPoly": {
...
},
"landmarks": [
{
"type": "LEFT_EYE",
"position": {
"x": 692.05646,
"y": 372.95868,
"z": -0.00025268539
}
},
...
],
"rollAngle": 0.21619819,
"panAngle": -23.027969,
"tiltAngle": -1.5531756,
"detectionConfidence": 0.72354823,
"landmarkingConfidence": 0.20047489,
"joyLikelihood": "POSSIBLE",
"sorrowLikelihood": "VERY_UNLIKELY",
"angerLikelihood": "VERY_UNLIKELY",
"surpriseLikelihood": "VERY_UNLIKELY",
"underExposedLikelihood": "VERY_UNLIKELY",
"blurredLikelihood": "VERY_UNLIKELY",
"headwearLikelihood": "VERY_LIKELY"
}
...
}
}
boundingPoly
cho chúng ta biết tọa độ x,y xung quanh khuôn mặt trong hình ảnh. fdBoundingPoly
là một hộp nhỏ hơn boundingPoly
, bao quanh phần da thuộc khuôn mặt. landmarks
là một mảng các đối tượng cho từng đặc điểm trên khuôn mặt (một số bạn có thể chưa từng biết đến!). Dữ liệu này cho chúng ta biết loại mốc, cùng với vị trí 3D của đối tượng đó (tọa độ x, y, z), trong đó tọa độ z là chiều sâu. Những giá trị còn lại cho chúng ta biết nhiều thông tin hơn về khuôn mặt, bao gồm khả năng có niềm vui, sự đau buồn, giận dữ và bất ngờ. Đối tượng ở trên là dành cho người ở phía sau hình ảnh - bạn có thể thấy anh ấy có vẻ ngoài ngớ ngẩn giải thích joyLikelihood
của POSSIBLE
.
Tiếp theo, hãy xem phần landmarkAnnotations
trong phản hồi của chúng tôi:
"landmarkAnnotations": [
{
"mid": "/m/0c7zy",
"description": "Petra",
"score": 0.5403372,
"boundingPoly": {
"vertices": [
{
"x": 153,
"y": 64
},
...
]
},
"locations": [
{
"latLng": {
"latitude": 30.323975,
"longitude": 35.449361
}
}
]
Tại đây, API Vision có thể biết rằng bức ảnh này được chụp ở Petra - đây là khá ấn tượng dựa trên gợi ý hình ảnh trong hình ảnh này là rất nhỏ. Các giá trị trong phản hồi này sẽ tương tự như phản hồi labelAnnotations
ở trên.
Chúng tôi có mid
của mốc, đó là tên (description
), cùng với sự tự tin score
. boundingPoly
hiển thị khu vực trong ảnh có mốc được xác định. Khóa locations
cho chúng tôi biết tọa độ theo kinh độ vĩ độ của mốc này.
Chúng tôi đã xem xét nhãn, phương diện và phương thức phát hiện mốc của API Vision, nhưng có ba phương pháp khác mà chúng tôi chưa khám phá. Hãy tìm hiểu về tài liệu này để tìm hiểu về 3 nội dung sau:
- Phát hiện biểu trưng: xác định các biểu trưng phổ biến và vị trí của các biểu trưng đó trong hình ảnh.
- Phát hiện tìm kiếm an toàn: xác định xem hình ảnh có chứa nội dung khiêu dâm hay không. Điều này hữu ích cho bất kỳ ứng dụng nào có nội dung do người dùng tạo. Bạn có thể lọc hình ảnh dựa trên bốn yếu tố: nội dung người lớn, y tế, bạo lực và giả mạo.
- Phát hiện văn bản: chạy OCR để trích xuất văn bản từ hình ảnh. Phương thức này thậm chí có thể xác định ngôn ngữ của văn bản xuất hiện trong hình ảnh.
Bạn đã tìm hiểu cách phân tích hình ảnh bằng API Vision. Trong ví dụ này, bạn đã chuyển URL của Google Cloud Storage đến hình ảnh của bạn. Ngoài ra, bạn có thể chuyển chuỗi mã hóa base64 cho hình ảnh của mình.
Những điều chúng tôi đã đề cập
- Gọi API Vision bằng curl bằng cách chuyển URL của hình ảnh trong một bộ chứa Cloud Storage
- Sử dụng các nhãn, web, khuôn mặt và tính năng phát hiện mốc của API Vision
Các bước tiếp theo
- Xem hướng dẫn về API Vision trong tài liệu
- Tìm mẫu Vision API bằng ngôn ngữ bạn yêu thích
- Hãy thử tham gia lớp học lập trình về API giọng nói và API Ngôn ngữ tự nhiên!