การวิเคราะห์รูปภาพอันทรงพลังด้วย Google Cloud Vision และ Python

เผยแพร่แล้ว: 2022-03-10
สรุปโดยย่อ ↬ ขอบเขตความเป็นไปได้ในการใช้บริการ Google Cloud Vision นั้นไม่มีที่สิ้นสุดในทางปฏิบัติ ด้วย Python Library ที่สามารถช่วยให้คุณดึงความสนใจอย่างลึกซึ้งยิ่งขึ้นในเทคโนโลยีการเรียนรู้ของเครื่อง

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

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

มาเริ่มกันเลยไหม

ไม่เคยได้ยินเกี่ยวกับ Google Cloud Vision?

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

เพื่อยกตัวอย่างให้คุณยกตัวอย่าง Giphy ที่ได้รับความนิยม พวกเขาใช้ API เพื่อดึงข้อมูลคำอธิบายภาพจาก GIF ซึ่งส่งผลให้ประสบการณ์ผู้ใช้ดีขึ้นอย่างมาก อีกตัวอย่างหนึ่งคือ realtor.com ซึ่งใช้ OCR ของ Vision API เพื่อดึงข้อความจากรูปภาพของป้าย For Sale ที่ถ่ายในแอปบนอุปกรณ์เคลื่อนที่เพื่อให้รายละเอียดเพิ่มเติมเกี่ยวกับทรัพย์สิน

การเรียนรู้ของเครื่องโดยย่อ

มาเริ่มกันที่การตอบคำถามที่หลายคนคงเคยได้ยินกันมาก่อนว่า Machine Learning คืออะไร?

แนวคิดกว้างๆ คือการพัฒนาโมเดลที่ตั้งโปรแกรมได้ซึ่งค้นหารูปแบบในข้อมูลที่ได้รับ ยิ่งคุณส่งข้อมูลคุณภาพสูงและการออกแบบโมเดลที่คุณใช้ดีขึ้นเท่าใด ผลลัพธ์ก็จะยิ่งฉลาดขึ้น ด้วย 'การเรียนรู้ของเครื่องที่เป็นมิตร' (ตามที่ Google เรียกใช้การเรียนรู้ของเครื่องผ่านบริการ API) คุณสามารถรวมปัญญาประดิษฐ์บางส่วนเข้ากับแอปพลิเคชันของคุณได้อย่างง่ายดาย

การอ่านที่แนะนำ : เริ่มต้นใช้งานแมชชีนเลิร์นนิง

เพิ่มเติมหลังกระโดด! อ่านต่อด้านล่าง↓

วิธีเริ่มต้นใช้งาน Google Cloud

เริ่มต้นด้วยการลงทะเบียน Google Cloud Google ต้องการการตรวจสอบสิทธิ์ แต่ทำได้ง่ายและไม่ยุ่งยาก คุณเพียงต้องจัดเก็บไฟล์ JSON ที่มีคีย์ API ซึ่งคุณรับได้โดยตรงจาก Google Cloud Platform

ดาวน์โหลดไฟล์และเพิ่มพา ธ ไปยังตัวแปรสภาพแวดล้อม:

 export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/apikey.json

อีกวิธีหนึ่งในการพัฒนา คุณสามารถสนับสนุนตัวเองด้วยวิธี from_serivce_account_json() ซึ่งฉันจะอธิบายเพิ่มเติมในบทความนี้ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการรับรองความถูกต้อง โปรดดูเอกสารอย่างเป็นทางการของ Cloud

Google จัดเตรียมแพ็คเกจ Python เพื่อจัดการกับ API มาเพิ่ม google-cloud-vision==0.33 เวอร์ชันล่าสุดในแอปของคุณกันเถอะ ถึงเวลารหัส!

วิธีรวม Google Cloud Vision กับ Python

ขั้นแรก ให้นำเข้าคลาสจากไลบรารี

 from google.cloud import vision from google.cloud.vision import types

เมื่อได้รับการดูแล ตอนนี้คุณจะต้องมีอินสแตนซ์ของลูกค้า ในการทำเช่นนั้น คุณจะต้องใช้คุณสมบัติการรู้จำข้อความ

 client = vision.ImageAnnotatorClient()

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

 client = vision.ImageAnnotatorClient.from_service_account_file( '/path/to/apikey.json' )

สมมติว่าคุณเก็บรูปภาพที่จะประมวลผลในโฟลเดอร์ 'รูปภาพ' ภายในแค็ตตาล็อกโครงการของคุณ ให้เปิดอันใดอันหนึ่ง

ภาพใบเสร็จที่ Google Cloud Vision ประมวลผลได้
ตัวอย่างใบเสร็จอย่างง่ายที่ Google Cloud Vision ประมวลผลได้ (ตัวอย่างขนาดใหญ่)
 image_to_open = 'images/receipt.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read()

ขั้นตอนต่อไปคือการสร้างวัตถุ Vision ซึ่งจะช่วยให้คุณสามารถส่งคำขอเพื่อดำเนินการจดจำข้อความได้

 image = vision.types.Image(content=content) text_response = client.text_detection(image=image)

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

 [ ... description: "SHOPPING" bounding_poly { vertices { x: 1327 y: 1513 } vertices { x: 1789 y: 1345 } vertices { x: 1821 y: 1432 } vertices { x: 1359 y: 1600 } } ... ]

อย่างที่คุณเห็น ในการกรองข้อความเท่านั้น คุณต้องได้รับคำอธิบาย "ในองค์ประกอบทั้งหมด" โชคดีที่มีความเข้าใจรายการที่มีประสิทธิภาพของ Python ด้วยความช่วยเหลือ

 texts = [text.description for text in text_response.text_annotations] ['SHOPPING STORE\nREG 12-21\n03:22 PM\nCLERK 2\n618\n1 MISC\n1 STUFF\n$0.49\n$7.99\n$8.48\n$0.74\nSUBTOTAL\nTAX\nTOTAL\nCASH\n6\n$9. 22\n$10.00\nCHANGE\n$0.78\nNO REFUNDS\nNO EXCHANGES\nNO RETURNS\n', 'SHOPPING', 'STORE', 'REG', '12-21', '03:22', 'PM', 'CLERK', '2', '618', '1', 'MISC', '1', 'STUFF', '$0.49', '$7.99', '$8.48', '$0.74', 'SUBTOTAL', 'TAX', 'TOTAL', 'CASH', '6', '$9.', '22', '$10.00', 'CHANGE', '$0.78', 'NO', 'REFUNDS', 'NO', 'EXCHANGES', 'NO', 'RETURNS']

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

 print(texts[0]) SHOPPING STORE REG 12-21 03:22 PM CLERK 2 618 1 MISC 1 STUFF $0.49 $7.99 $8.48 $0.74 SUBTOTAL TAX TOTAL CASH 6 $9. 22 $10.00 CHANGE $0.78 NO REFUNDS NO EXCHANGES NO RETURNS

ค่อนข้างแม่นยำใช่มั้ย? และเห็นได้ชัดว่ามีประโยชน์มาก มาเล่นกันดีกว่า

คุณจะได้อะไรจาก Google Cloud Vision

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

 web_response = client.web_detection(image=image)

ตกลง Google คุณรู้หรือไม่ว่าสิ่งที่ปรากฏบนภาพที่คุณได้รับคืออะไร

 web_content = web_response.web_detection web_content.best_guess_labels >>> [label: "Receipt"]

ทำได้ดีมาก Google! มันเป็นใบเสร็จรับเงินแน่นอน แต่ให้ออกกำลังกายเพิ่มอีกหน่อย คุณเห็นอะไรอีกไหม แล้วการคาดคะเนเพิ่มเติมแสดงเป็นเปอร์เซ็นต์ล่ะ

 predictions = [ (entity.description, '{:.2%}'.format(entity.score))) for entity in web_content.web_entities ] >>> [('Receipt', '70.26%'), ('Product design', '64.24%'), ('Money', '56.54%'), ('Shopping', '55.86%'), ('Design', '54.62%'), ('Brand', '54.01%'), ('Font', '53.20%'), ('Product', '51.55%'), ('Image', '38.82%')]

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

 web_content.full_matching_images >>> [ url: "https://www.rcapitalassociates.com/wp-content/uploads/2018/03/receipts.jpg", url:"https://media.istockphoto.com/photos/shopping-receipt-picture-id901964616?k=6&m=901964616&s=612x612&w=0&h=RmFpYy9uDazil1H9aXkkrAOlCb0lQ-bHaFpdpl76o9A=", url: "https://www.pakstat.com.au/site/assets/files/1172/shutterstock_573065707.500x500.jpg" ]

ฉันประทับใจ. ขอบคุณ Google! แต่ภาพเดียวไม่เพียงพอ คุณช่วยยกตัวอย่างภาพที่คล้ายกันสามตัวอย่างให้ฉันได้ไหม

 web_content.visually_similar_images[:3] >>>[ url: "https://thumbs.dreamstime.com/z/shopping-receipt-paper-sales-isolated-white-background-85651861.jpg", url: "https://thumbs.dreamstime.com/b/grocery-receipt-23403878.jpg", url:"https://image.shutterstock.com/image-photo/closeup-grocery-shopping-receipt-260nw-95237158.jpg" ]

หวาน! ทำได้ดี.

มีปัญญาประดิษฐ์ใน Google Cloud Vision จริงหรือ?

ดังที่คุณเห็นในภาพด้านล่าง การจัดการกับใบเสร็จรับเงินอาจทำให้คุณรู้สึกไม่ค่อยสบายใจ

ผู้ชายกรีดร้องและดูเครียดขณะถือใบเสร็จยาว
ตัวอย่างความเครียดที่อาจเกิดขึ้นขณะรับใบเสร็จ (ตัวอย่างขนาดใหญ่)

มาดูกันว่า Vision API สามารถบอกคุณเกี่ยวกับรูปภาพนี้ได้อย่างไร

 image_to_open = 'images/face.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read() image = vision.types.Image(content=content) face_response = client.face_detection(image=image) face_content = face_response.face_annotations face_content[0].detection_confidence >>> 0.5153166651725769

ไม่เลวเลยที่อัลกอริธึมมากกว่า 50% แน่ใจว่ามีใบหน้าอยู่ในภาพ แต่คุณสามารถเรียนรู้อะไรเกี่ยวกับอารมณ์ที่อยู่เบื้องหลังมันได้หรือไม่

 face_content[0] >>> [ ... joy_likelihood: VERY_UNLIKELY sorrow_likelihood: VERY_UNLIKELY anger_likelihood: UNLIKELY surprise_likelihood: POSSIBLE under_exposed_likelihood: VERY_UNLIKELY blurred_likelihood: VERY_UNLIKELY headwear_likelihood: VERY_UNLIKELY ... ]

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

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

ไม่ต้องสงสัยเลยว่า Google Cloud Vision เป็นเครื่องมือที่มีประสิทธิภาพ นอกจากนี้ยังสนุกกับการทำงานด้วย สถาปัตยกรรม REST ของ API และแพ็คเกจ Python ที่มีอยู่ทั่วไปทำให้ทุกคนสามารถเข้าถึงได้มากขึ้น ไม่ว่าคุณจะพัฒนา Python ขั้นสูงแค่ไหน ลองนึกภาพว่าคุณสามารถปรับปรุงแอปของคุณได้มากเพียงใดโดยใช้ความสามารถของแอป!

การอ่านที่แนะนำ : การ ประยุกต์ใช้แมชชีนเลิร์นนิงสำหรับนักออกแบบ

คุณจะขยายความรู้ของคุณเกี่ยวกับ Google Cloud Vision ได้อย่างไร

ขอบเขตของความเป็นไปได้ในการใช้บริการ Google Cloud Vision นั้นไม่มีที่สิ้นสุด ด้วย Python Library ที่พร้อมใช้งาน คุณสามารถใช้มันในโปรเจ็กต์ใดก็ได้ตามภาษา ไม่ว่าจะเป็นเว็บแอปพลิเคชันหรือโครงการทางวิทยาศาสตร์ มันสามารถช่วยให้คุณดึงความสนใจอย่างลึกซึ้งยิ่งขึ้นในเทคโนโลยีการเรียนรู้ของเครื่อง

เอกสารประกอบของ Google ให้แนวคิดดีๆ เกี่ยวกับวิธีการใช้คุณลักษณะ Vision API ในทางปฏิบัติ รวมทั้งให้โอกาสคุณในการเรียนรู้เพิ่มเติมเกี่ยวกับแมชชีนเลิร์นนิง ฉันแนะนำให้ดูคำแนะนำเกี่ยวกับวิธีสร้างแอปค้นหารูปภาพขั้นสูงเป็นพิเศษ

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