Tutorial deteksi web

Audience

Tujuan tutorial ini adalah untuk membantu Anda mengembangkan aplikasi menggunakan fitur deteksi Web Vision API. Hal ini mengasumsikan bahwa Anda sudah memahami konstruksi dan teknik pemrograman dasar, tetapi meskipun jika Anda adalah programmer pemula, Anda harus dapat mengikuti dan menjalankan tutorial ini tanpa kesulitan, kemudian gunakan dokumentasi referensi Vision API untuk membuat aplikasi dasar.

Langkah tutorial ini menjelaskan tentang aplikasi Vision API, yang menunjukkan kepada Anda cara melakukan panggilan ke Vision API untuk menggunakan fitur deteksi Web-nya.

Prasyarat

Python

Ringkasan

Tutorial ini mengarahkan Anda ke aplikasi Vision API dasar yang menggunakan Web detection permintaan. Respons Web detection menganotasi gambar yang dikirim dalam permintaan dengan:

  • label yang diperoleh dari Web
  • URL situs yang memiliki gambar yang cocok
  • URL ke Gambar web yang cocok sebagian atau sepenuhnya dengan gambar dalam permintaan
  • URL ke gambar yang mirip secara visual

Listingan kode

Saat Anda membaca kode, Kami merekomendasikan Anda mengikuti dengan melihat referensi Python Vision API.

import argparse

from google.cloud import vision

def annotate(path: str) -> vision.WebDetection:
    """Returns web annotations given the path to an image.

    Args:
        path: path to the input image.

    Returns:
        An WebDetection object with relevant information of the
        image from the internet (i.e., the annotations).
    """
    client = vision.ImageAnnotatorClient()

    if path.startswith("http") or path.startswith("gs:"):
        image = vision.Image()
        image.source.image_uri = path

    else:
        with open(path, "rb") as image_file:
            content = image_file.read()

        image = vision.Image(content=content)

    web_detection = client.web_detection(image=image).web_detection

    return web_detection

def report(annotations: vision.WebDetection) -> None:
    """Prints detected features in the provided web annotations.

    Args:
        annotations: The web annotations (WebDetection object) from which
        the features should be parsed and printed.
    """
    if annotations.pages_with_matching_images:
        print(
            f"\n{len(annotations.pages_with_matching_images)} Pages with matching images retrieved"
        )

        for page in annotations.pages_with_matching_images:
            print(f"Url   : {page.url}")

    if annotations.full_matching_images:
        print(f"\n{len(annotations.full_matching_images)} Full Matches found: ")

        for image in annotations.full_matching_images:
            print(f"Url  : {image.url}")

    if annotations.partial_matching_images:
        print(f"\n{len(annotations.partial_matching_images)} Partial Matches found: ")

        for image in annotations.partial_matching_images:
            print(f"Url  : {image.url}")

    if annotations.web_entities:
        print(f"\n{len(annotations.web_entities)} Web entities found: ")

        for entity in annotations.web_entities:
            print(f"Score      : {entity.score}")
            print(f"Description: {entity.description}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter,
    )
    path_help = str(
        "The image to detect, can be web URI, "
        "Google Cloud Storage, or path to local file."
    )
    parser.add_argument("image_url", help=path_help)
    args = parser.parse_args()

    report(annotate(args.image_url))

Aplikasi sederhana ini melakukan tugas-tugas berikut:

  • Mengimpor library yang diperlukan untuk menjalankan aplikasi
  • Mengambil jalur gambar sebagai argumen dan meneruskannya ke fungsi main()
  • Menggunakan Klien Google Cloud API untuk melakukan deteksi Web
  • Melakukan loop pada respons dan mencetak hasilnya
  • Mencetak daftar entitas Web dengan deskripsi dan skor
  • Mencetak daftar halaman yang cocok
  • Mencetak daftar gambar yang cocok sebagian
  • Mencetak daftar gambar yang cocok sepenuhnya

Jelajahi lebih lanjut

Mengimpor library

import argparse

from google.cloud import vision

Kami mengimpor library standar:

  • argparse untuk mengizinkan aplikasi menerima nama file input sebagai argumen
  • io untuk membaca dari file

Impor lainnya:

  • Class ImageAnnotatorClient dalam library google.cloud.vision untuk mengakses Vision API.
  • Modul types dalam library google.cloud.vision untuk membuat permintaan.

Menjalankan aplikasi

parser = argparse.ArgumentParser(
    description=__doc__,
    formatter_class=argparse.RawDescriptionHelpFormatter,
)
path_help = str(
    "The image to detect, can be web URI, "
    "Google Cloud Storage, or path to local file."
)
parser.add_argument("image_url", help=path_help)
args = parser.parse_args()

report(annotate(args.image_url))

Di sini, kami cukup mengurai argumen yang diteruskan yang menentukan URL gambar Web, dan meneruskannya ke fungsi main().

Mengautentikasi ke API

Sebelum berkomunikasi dengan layanan Vision API, Anda harus mengautentikasi layanan Anda menggunakan kredensial yang diperoleh sebelumnya. Dalam aplikasi, cara termudah untuk mendapatkan kredensial adalah dengan menggunakan Kredensial Default Aplikasi (ADC). Library klien mendapatkan kredensial secara otomatis. Secara default, hal ini dilakukan dengan mendapatkan kredensial dari variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS, yang harus ditetapkan agar mengarah ke file kunci JSON akun layanan Anda (lihat Siapkan Akun Layanan untuk mengetahui informasi selengkapnya.)

Membuat permintaan

client = vision.ImageAnnotatorClient()

if path.startswith("http") or path.startswith("gs:"):
    image = vision.Image()
    image.source.image_uri = path

else:
    with open(path, "rb") as image_file:
        content = image_file.read()

    image = vision.Image(content=content)

web_detection = client.web_detection(image=image).web_detection

Sekarang setelah layanan Vision API kami siap, kami dapat membuat permintaan ke layanan.

Cuplikan kode ini melakukan tugas-tugas berikut:

  1. Membuat instance ImageAnnotatorClient sebagai klien.
  2. Membuat objek Image dari file lokal atau URI.
  3. Meneruskan objek Image ke metode web_detection klien.
  4. Menampilkan anotasi.

Mencetak respons

if annotations.pages_with_matching_images:
    print(
        f"\n{len(annotations.pages_with_matching_images)} Pages with matching images retrieved"
    )

    for page in annotations.pages_with_matching_images:
        print(f"Url   : {page.url}")

if annotations.full_matching_images:
    print(f"\n{len(annotations.full_matching_images)} Full Matches found: ")

    for image in annotations.full_matching_images:
        print(f"Url  : {image.url}")

if annotations.partial_matching_images:
    print(f"\n{len(annotations.partial_matching_images)} Partial Matches found: ")

    for image in annotations.partial_matching_images:
        print(f"Url  : {image.url}")

if annotations.web_entities:
    print(f"\n{len(annotations.web_entities)} Web entities found: ")

    for entity in annotations.web_entities:
        print(f"Score      : {entity.score}")
        print(f"Description: {entity.description}")

Setelah operasi selesai, kami menelusuri WebDetection, dan mencetak entity dan URL yang terdapat dalam anotasi (dua hasil teratas dari setiap jenis anotasi ditampilkan di bagian berikutnya).

Menjalankan aplikasi

Untuk menjalankan aplikasi, kami meneruskan URL Web (http://www.photos-public-domain.com/wp-content/uploads/2011/01/old-vw-bug-and-van.jpg) dari gambar mobil berikut.

Berikut adalah perintah Python dengan URL Web yang diteruskan dari gambar mobil, diikuti dengan output konsol. Perlu diperhatikan bahwa skor relevansi ditambahkan setelah entity yang tercantum. Perhatikan bahwa skor tidak dinormalisasi atau dapat dibandingkan di kueri gambar yang berbeda.

python web_detect.py "http://www.photos-public-domain.com/wp-content/uploads/2011/01/old-vw-bug-and-van.jpg"
5 Pages with matching images retrieved
Url   : http://www.photos-public-domain.com/2011/01/07/old-volkswagen-bug-and-van/
Url   : http://pix-hd.com/old+volkswagen+van+for+sale
...

2 Full Matches found:
Url  : http://www.photos-public-domain.com/wp-content/uploads/2011/01/old-vw-bug-and-van.jpg
Url  : http://www.wbwagen.com/media/old-volkswagen-bug-and-van-picture-free-photograph-photos-public_s_66f487042adad5a6.jpg

4 Partial Matches found:
Url  : http://www.photos-public-domain.com/wp-content/uploads/2011/01/old-vw-bug-and-van.jpg
Url  : http://www.wbwagen.com/media/old-vw-bug-and-vanjpg_s_ac343d7f041b5f8d.jpg
...

5 Web entities found:
Score      : 5.35028934479
Description: Volkswagen Beetle
Score      : 1.43998003006
Description: Volkswagen
Score      : 0.828279972076
Description: Volkswagen Type 2
Score      : 0.75271999836
Description: Van
Score      : 0.690039992332
Description: Car

Selamat! Anda telah melakukan deteksi Web menggunakan Vision API!