การใช้ Vision API กับ Python

1. ภาพรวม

5ab7829fc22b21c4.png

Vision API ช่วยให้นักพัฒนาแอปสามารถผสานรวมฟีเจอร์การตรวจจับการมองเห็นไว้ภายในแอปพลิเคชันได้ง่ายๆ ซึ่งรวมถึงการติดป้ายกำกับรูปภาพ การตรวจจับใบหน้าและจุดสังเกต การรู้จำอักขระด้วยภาพ (OCR) และการติดแท็กเนื้อหาที่อาจไม่เหมาะสม

ในบทแนะนำนี้ คุณจะมุ่งเน้นที่การใช้ Vision API กับ Python

สิ่งที่คุณจะได้เรียนรู้

  • วิธีตั้งค่าสภาพแวดล้อม
  • วิธีตรวจหาป้ายกำกับ
  • วิธีตรวจหาข้อความ
  • วิธีตรวจหาจุดสังเกต
  • วิธีตรวจจับใบหน้า
  • วิธีตรวจหาวัตถุ

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud
  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • คุ้นเคยกับการใช้ Python

แบบสำรวจ

คุณจะใช้บทแนะนำนี้อย่างไร

อ่านอย่างเดียว อ่านและทำแบบฝึกหัด

คุณจะให้คะแนนประสบการณ์การใช้งาน Python เท่าใด

ผู้ฝึกหัด ขั้นกลาง ผู้ชำนาญ

คุณจะให้คะแนนประสบการณ์การใช้งานบริการของ Google Cloud เท่าไร

ผู้ฝึกหัด ขั้นกลาง ผู้ชำนาญ

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากแล็ปท็อประยะไกลได้ แต่ใน Codelab นี้คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

เปิดใช้งาน Cloud Shell

  1. จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell 853e55310c205094.png

55efc1aaa7a4d3ad.png

หากคุณเริ่มใช้ Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอระดับกลางที่อธิบายว่า Cloud Shell คืออะไร หากเห็นหน้าจอระดับกลาง ให้คลิกต่อไป

9c92662c6a846a5c.png

การจัดสรรและเชื่อมต่อกับ Cloud Shell จะใช้เวลาไม่นาน

9f0e51b578fecce5.png

เครื่องเสมือนนี้โหลดเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่จำเป็นไว้แล้ว โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานส่วนใหญ่หรือทั้งหมดในโค้ดแล็บนี้ได้ด้วยเบราว์เซอร์

เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าคุณได้รับการตรวจสอบสิทธิ์และระบบได้ตั้งค่าโปรเจ็กต์เป็นรหัสโปรเจ็กต์ของคุณ

  1. เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list

เอาต์พุตของคำสั่ง

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้จักโปรเจ็กต์ของคุณ
gcloud config list project

เอาต์พุตของคำสั่ง

[core]
project = <PROJECT_ID>

หากไม่ได้ตั้งค่าไว้ คุณตั้งค่าได้ด้วยคำสั่งนี้

gcloud config set project <PROJECT_ID>

เอาต์พุตของคำสั่ง

Updated property [core/project].

3. การตั้งค่าสภาพแวดล้อม

ก่อนที่จะเริ่มใช้ Vision API ได้ ให้เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อเปิดใช้ API

gcloud services enable vision.googleapis.com

คุณควรเห็นข้อความคล้ายกับข้อความต่อไปนี้

Operation "operations/..." finished successfully.

ตอนนี้คุณใช้ Vision API ได้แล้ว

ไปที่ไดเรกทอรีหลักโดยใช้คำสั่งต่อไปนี้

cd ~

สร้างสภาพแวดล้อมเสมือนของ Python เพื่อแยกการอ้างอิง

virtualenv venv-vision

เปิดใช้งานสภาพแวดล้อมเสมือน

source venv-vision/bin/activate

ติดตั้ง IPython และไลบรารีของไคลเอ็นต์ Vision API

pip install ipython google-cloud-vision

คุณควรเห็นข้อความคล้ายกับข้อความต่อไปนี้

...
Installing collected packages: ..., ipython, google-cloud-vision
Successfully installed ... google-cloud-vision-3.4.0 ...

ตอนนี้คุณก็พร้อมใช้ไลบรารีของไคลเอ็นต์ Vision API แล้ว

ในขั้นตอนถัดไป คุณจะใช้ตัวแปล Python แบบอินเทอร์แอกทีฟที่ชื่อ IPython ซึ่งคุณติดตั้งไว้ในขั้นตอนก่อนหน้า เริ่มเซสชันโดยเรียกใช้ ipython ใน Cloud Shell

ipython

คุณควรเห็นข้อความคล้ายกับข้อความต่อไปนี้

Python 3.9.2 (default, Feb 28 2021, 17:03:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.12.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

คุณพร้อมที่จะส่งคำขอแรกแล้ว...

4. ตรวจหาป้ายกำกับ

ฟีเจอร์หลักอย่างหนึ่งของ Vision API คือการระบุออบเจ็กต์หรือเอนทิตีในรูปภาพ ซึ่งเรียกว่าการใส่คำอธิบายประกอบป้ายกำกับ การตรวจหาป้ายกำกับจะระบุวัตถุทั่วไป สถานที่ กิจกรรม สายพันธุ์สัตว์ ผลิตภัณฑ์ และอื่นๆ Vision API รับรูปภาพอินพุตและแสดงป้ายกำกับที่มีแนวโน้มมากที่สุดซึ่งใช้กับรูปภาพนั้น โดยจะแสดงป้ายกำกับที่ตรงกันมากที่สุดพร้อมกับคะแนนความน่าเชื่อถือของการจับคู่กับรูปภาพ

ในตัวอย่างนี้ คุณจะทำการตรวจหาป้ายกำกับในรูปภาพ (ขอขอบคุณ Alex Knight) ของเซตากายะ ซึ่งเป็นย่านยอดนิยมในโตเกียว

756f97f0b1e46c38.jpeg

คัดลอกโค้ดต่อไปนี้ลงในเซสชัน IPython

from typing import Sequence

from google.cloud import vision


def analyze_image_from_uri(
    image_uri: str,
    feature_types: Sequence,
) -> vision.AnnotateImageResponse:
    client = vision.ImageAnnotatorClient()

    image = vision.Image()
    image.source.image_uri = image_uri
    features = [vision.Feature(type_=feature_type) for feature_type in feature_types]
    request = vision.AnnotateImageRequest(image=image, features=features)

    response = client.annotate_image(request=request)

    return response


def print_labels(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for label in response.label_annotations:
        print(
            f"{label.score:4.0%}",
            f"{label.description:5}",
            sep=" | ",
        )
        

โปรดใช้เวลาสักครู่เพื่อศึกษาโค้ดและดูวิธีใช้annotate_imageเมธอดไลบรารีของไคลเอ็นต์เพื่อวิเคราะห์รูปภาพสำหรับชุดฟีเจอร์ที่กำหนด

ส่งคำขอด้วยฟีเจอร์ LABEL_DETECTION โดยทำดังนี้

image_uri = "gs://cloud-samples-data/vision/label/setagaya.jpeg"
features = [vision.Feature.Type.LABEL_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_labels(response)

คุณควรได้รับเอาต์พุตต่อไปนี้

================================================================================
 97% | Bicycle
 96% | Tire
 94% | Wheel
 91% | Automotive lighting
 89% | Infrastructure
 87% | Bicycle wheel
 86% | Mode of transport
 85% | Building
 83% | Electricity
 82% | Neighbourhood

การสาธิตออนไลน์จะแสดงผลลัพธ์ดังนี้

2191b0425c9c148f.png

สรุป

ในขั้นตอนนี้ คุณสามารถตรวจหาป้ายกำกับในรูปภาพและแสดงป้ายกำกับที่มีแนวโน้มมากที่สุดซึ่งเชื่อมโยงกับรูปภาพนั้น อ่านเพิ่มเติมเกี่ยวกับการตรวจหาป้ายกำกับ

5. ทำการตรวจหาข้อความ

การตรวจหาข้อความจะทำการรู้จำอักขระด้วยภาพ (OCR) โดยจะตรวจหาและแยกข้อความภายในรูปภาพพร้อมรองรับภาษาที่หลากหลาย นอกจากนี้ยังมีฟีเจอร์การระบุภาษาอัตโนมัติด้วย

ในตัวอย่างนี้ คุณจะทำการตรวจหาข้อความในรูปภาพป้ายจราจร

4dedd3fcfd9ad99b.jpeg

คัดลอกโค้ดต่อไปนี้ลงในเซสชัน IPython

def print_text(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for annotation in response.text_annotations:
        vertices = [f"({v.x},{v.y})" for v in annotation.bounding_poly.vertices]
        print(
            f"{repr(annotation.description):42}",
            ",".join(vertices),
            sep=" | ",
        )
        

ส่งคำขอด้วยฟีเจอร์ TEXT_DETECTION โดยทำดังนี้

image_uri = "gs://cloud-samples-data/vision/ocr/sign.jpg"
features = [vision.Feature.Type.TEXT_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_text(response)

คุณควรได้รับเอาต์พุตต่อไปนี้

================================================================================
'WAITING?\nPLEASE\nTURN OFF\nYOUR\nENGINE' | (310,821),(2225,821),(2225,1965),(310,1965)
'WAITING'                                  | (344,821),(2025,879),(2016,1127),(335,1069)
'?'                                        | (2057,881),(2225,887),(2216,1134),(2048,1128)
'PLEASE'                                   | (1208,1230),(1895,1253),(1891,1374),(1204,1351)
'TURN'                                     | (1217,1414),(1718,1434),(1713,1558),(1212,1538)
'OFF'                                      | (1787,1437),(2133,1451),(2128,1575),(1782,1561)
'YOUR'                                     | (1211,1609),(1741,1626),(1737,1747),(1207,1731)
'ENGINE'                                   | (1213,1805),(1923,1819),(1920,1949),(1210,1935)

การสาธิตออนไลน์จะแสดงผลลัพธ์ดังนี้

9c70fbce871c5fe5.png

สรุป

ในขั้นตอนนี้ คุณสามารถตรวจหาข้อความในรูปภาพและแสดงข้อความที่ระบบจดจำจากรูปภาพได้ อ่านเพิ่มเติมเกี่ยวกับการตรวจหาข้อความ

6. ทำการตรวจหาจุดสังเกต

การตรวจหาจุดสังเกตจะตรวจหาสิ่งก่อสร้างทางธรรมชาติและที่มนุษย์สร้างขึ้นที่ได้รับความนิยมภายในรูปภาพ

ในตัวอย่างนี้ คุณจะทำการตรวจจับจุดสังเกตในรูปภาพหอไอเฟล (ขอขอบคุณ John Towner)

fb7801e36884b875.jpeg

คัดลอกโค้ดต่อไปนี้ลงในเซสชัน IPython

def print_landmarks(response: vision.AnnotateImageResponse, min_score: float = 0.5):
    print("=" * 80)
    for landmark in response.landmark_annotations:
        if landmark.score < min_score:
            continue
        vertices = [f"({v.x},{v.y})" for v in landmark.bounding_poly.vertices]
        lat_lng = landmark.locations[0].lat_lng
        print(
            f"{landmark.description:18}",
            ",".join(vertices),
            f"{lat_lng.latitude:.5f}",
            f"{lat_lng.longitude:.5f}",
            sep=" | ",
        )
        

ส่งคำขอด้วยฟีเจอร์ LANDMARK_DETECTION โดยทำดังนี้

image_uri = "gs://cloud-samples-data/vision/landmark/eiffel_tower.jpg"
features = [vision.Feature.Type.LANDMARK_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_landmarks(response)

คุณควรได้รับเอาต์พุตต่อไปนี้

================================================================================
Trocadéro Gardens  | (303,36),(520,36),(520,371),(303,371) | 48.86160 | 2.28928
Eiffel Tower       | (458,76),(512,76),(512,263),(458,263) | 48.85846 | 2.29435

การสาธิตออนไลน์จะแสดงผลลัพธ์ดังนี้

2788697365670985.png

สรุป

ในขั้นตอนนี้ คุณสามารถตรวจหาจุดสังเกตในรูปภาพหอไอเฟลได้ อ่านเพิ่มเติมเกี่ยวกับการตรวจหาจุดสังเกต

7. ทำการตรวจจับใบหน้า

การตรวจจับลักษณะใบหน้าจะตรวจจับใบหน้าหลายใบหน้าภายในรูปภาพพร้อมกับคุณลักษณะสำคัญที่เกี่ยวข้องของใบหน้า เช่น สภาวะทางอารมณ์หรือการสวมเครื่องประดับศีรษะ

ในตัวอย่างนี้ คุณจะตรวจจับใบหน้าในรูปภาพต่อไปนี้ (ขอขอบคุณ Himanshu Singh Gurjar)

58c578ece524cf32.jpeg

คัดลอกโค้ดต่อไปนี้ลงในเซสชัน IPython

def print_faces(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for face_number, face in enumerate(response.face_annotations, 1):
        vertices = ",".join(f"({v.x},{v.y})" for v in face.bounding_poly.vertices)
        print(f"# Face {face_number} @ {vertices}")
        print(f"Joy:     {face.joy_likelihood.name}")
        print(f"Exposed: {face.under_exposed_likelihood.name}")
        print(f"Blurred: {face.blurred_likelihood.name}")
        print("-" * 80)
        

ส่งคำขอด้วยฟีเจอร์ FACE_DETECTION โดยทำดังนี้

image_uri = "gs://cloud-samples-data/vision/face/faces.jpeg"
features = [vision.Feature.Type.FACE_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_faces(response)

คุณควรได้รับเอาต์พุตต่อไปนี้

================================================================================
# Face 1 @ (1077,157),(2146,157),(2146,1399),(1077,1399)
Joy:     VERY_LIKELY
Exposed: VERY_UNLIKELY
Blurred: VERY_UNLIKELY
--------------------------------------------------------------------------------
# Face 2 @ (144,1273),(793,1273),(793,1844),(144,1844)
Joy:     VERY_UNLIKELY
Exposed: VERY_UNLIKELY
Blurred: UNLIKELY
--------------------------------------------------------------------------------
# Face 3 @ (785,167),(1100,167),(1100,534),(785,534)
Joy:     VERY_UNLIKELY
Exposed: LIKELY
Blurred: VERY_LIKELY
--------------------------------------------------------------------------------

การสาธิตออนไลน์จะแสดงผลลัพธ์ดังนี้

cbb7f59299651b83.png

สรุป

ในขั้นตอนนี้ คุณสามารถทำการตรวจจับใบหน้าได้ อ่านเพิ่มเติมเกี่ยวกับการตรวจจับใบหน้า

8. ทำการตรวจจับออบเจ็กต์

ในตัวอย่างนี้ คุณจะทำการตรวจจับออบเจ็กต์ในรูปภาพก่อนหน้าเดียวกัน (ขอขอบคุณ Alex Knight) ของเซตากายะ

756f97f0b1e46c38.jpeg

คัดลอกโค้ดต่อไปนี้ลงในเซสชัน IPython

def print_objects(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for obj in response.localized_object_annotations:
        nvertices = obj.bounding_poly.normalized_vertices
        print(
            f"{obj.score:4.0%}",
            f"{obj.name:15}",
            f"{obj.mid:10}",
            ",".join(f"({v.x:.1f},{v.y:.1f})" for v in nvertices),
            sep=" | ",
        )
        

ส่งคำขอด้วยฟีเจอร์ OBJECT_LOCALIZATION โดยทำดังนี้

image_uri = "gs://cloud-samples-data/vision/label/setagaya.jpeg"
features = [vision.Feature.Type.OBJECT_LOCALIZATION]

response = analyze_image_from_uri(image_uri, features)
print_objects(response)

คุณควรได้รับเอาต์พุตต่อไปนี้

================================================================================
 93% | Bicycle         | /m/0199g   | (0.6,0.6),(0.8,0.6),(0.8,0.9),(0.6,0.9)
 92% | Bicycle wheel   | /m/01bqk0  | (0.6,0.7),(0.7,0.7),(0.7,0.9),(0.6,0.9)
 91% | Tire            | /m/0h9mv   | (0.7,0.7),(0.8,0.7),(0.8,1.0),(0.7,1.0)
 75% | Bicycle         | /m/0199g   | (0.3,0.6),(0.4,0.6),(0.4,0.7),(0.3,0.7)
 51% | Tire            | /m/0h9mv   | (0.3,0.6),(0.4,0.6),(0.4,0.7),(0.3,0.7)

การสาธิตออนไลน์จะแสดงผลลัพธ์ดังนี้

e1c2ca803d874a6b.png

สรุป

ในขั้นตอนนี้ คุณสามารถตรวจหาออบเจ็กต์ได้ อ่านเพิ่มเติมเกี่ยวกับการตรวจหาออบเจ็กต์

9. ฟีเจอร์หลายอย่าง

คุณได้เห็นวิธีใช้ฟีเจอร์บางอย่างของ Vision API แล้ว แต่ยังมีอีกมากมาย และคุณสามารถขอใช้ฟีเจอร์หลายอย่างในคำขอเดียวได้

คุณสามารถส่งคำขอประเภทต่อไปนี้เพื่อรับข้อมูลเชิงลึกทั้งหมดพร้อมกัน

image_uri = "gs://..."
features = [
    vision.Feature.Type.OBJECT_LOCALIZATION,
    vision.Feature.Type.FACE_DETECTION,
    vision.Feature.Type.LANDMARK_DETECTION,
    vision.Feature.Type.LOGO_DETECTION,
    vision.Feature.Type.LABEL_DETECTION,
    vision.Feature.Type.TEXT_DETECTION,
    vision.Feature.Type.DOCUMENT_TEXT_DETECTION,
    vision.Feature.Type.SAFE_SEARCH_DETECTION,
    vision.Feature.Type.IMAGE_PROPERTIES,
    vision.Feature.Type.CROP_HINTS,
    vision.Feature.Type.WEB_DETECTION,
    vision.Feature.Type.PRODUCT_SEARCH,
    vision.Feature.Type.OBJECT_LOCALIZATION,
]

# response = analyze_image_from_uri(image_uri, features)

และยังมีอีกหลายอย่างที่ทำได้ เช่น การตรวจหาในรูปภาพหลายรูปพร้อมกันแบบซิงโครนัสหรืออะซิงโครนัส ดูคำแนะนำวิธีใช้ทั้งหมด

10. ยินดีด้วย

5ab7829fc22b21c4.png

คุณได้เรียนรู้วิธีใช้ Vision API ด้วย Python และทดสอบฟีเจอร์การตรวจจับรูปภาพ 2-3 รายการแล้ว

ล้างข้อมูล

หากต้องการล้างข้อมูลสภาพแวดล้อมในการพัฒนา ให้ทำดังนี้จาก Cloud Shell

  • หากยังอยู่ในเซสชัน IPython ให้กลับไปที่เชลล์โดยทำดังนี้ exit
  • หยุดใช้สภาพแวดล้อมเสมือนของ Python: deactivate
  • ลบโฟลเดอร์สภาพแวดล้อมเสมือน cd ~ ; rm -rf ./venv-vision

หากต้องการลบโปรเจ็กต์ Google Cloud ให้ทำดังนี้จาก Cloud Shell

  • ดึงรหัสโปรเจ็กต์ปัจจุบัน: PROJECT_ID=$(gcloud config get-value core/project)
  • โปรดตรวจสอบว่าโปรเจ็กต์ที่คุณต้องการลบคือ echo $PROJECT_ID
  • ลบโปรเจ็กต์: gcloud projects delete $PROJECT_ID

ดูข้อมูลเพิ่มเติม

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป