تحليل قوي للصور باستخدام Google Cloud Vision و Python

نشرت: 2022-03-10
ملخص سريع ↬ إن نطاق احتمالات تطبيق خدمة Google Cloud Vision لا نهائي عمليًا. مع توفر مكتبة Python ، يمكن أن تساعدك بالتأكيد على إثارة اهتمام أعمق بتقنيات التعلم الآلي.

لقد قمت مؤخرًا بإنشاء تطبيق ويب لإدارة النفقات الشخصية للمستخدم. تتمثل ميزاته الرئيسية في مسح إيصالات التسوق ضوئيًا واستخراج البيانات لمزيد من المعالجة. تحولت Google Vision API لتكون أداة رائعة للحصول على نص من صورة. في هذه المقالة ، سأوجهك خلال عملية التطوير باستخدام Python في مشروع نموذجي.

إذا كنت مبتدئًا ، فلا تقلق. ستحتاج فقط إلى معرفة أساسية جدًا بلغة البرمجة هذه - دون الحاجة إلى مهارات أخرى.

دعنا نبدأ ، نحن العرب؟

لم تسمع من قبل عن Google Cloud Vision؟

إنها واجهة برمجة تطبيقات تسمح للمطورين بتحليل محتوى الصورة من خلال البيانات المستخرجة. لهذا الغرض ، تستخدم Google نماذج التعلم الآلي المدربة على مجموعة بيانات كبيرة من الصور. كل ذلك متاح مع طلب API واحد. المحرك الذي يقف وراء واجهة برمجة التطبيقات يصنف الصور ويكشف عن الأشياء ووجوه الأشخاص ويتعرف على الكلمات المطبوعة داخل الصور.

لإعطائك مثالاً ، دعنا نتحدث عن Giphy المحبوب. لقد اعتمدوا واجهة برمجة التطبيقات لاستخراج بيانات التسمية التوضيحية من صور GIF ، مما أدى إلى تحسن كبير في تجربة المستخدم. مثال آخر هو موقع realtor.com ، والذي يستخدم التعرف الضوئي على الحروف في Vision API لاستخراج نص من صور لافتات For Sale مأخوذة من تطبيق جوّال لتوفير مزيد من التفاصيل حول العقار.

لمحة عن تعلم الآلة

لنبدأ بالإجابة على السؤال الذي ربما سمعه الكثير منكم من قبل - ما هو التعلم الآلي؟

الفكرة العامة هي تطوير نموذج قابل للبرمجة يجد أنماطًا في البيانات التي يقدمها. كلما زادت جودة البيانات التي تقدمها وكان تصميم النموذج الذي تستخدمه أفضل ، سيتم إنتاج نتائج أكثر ذكاءً. باستخدام "التعلم الآلي الودي" (كما تسمي Google التعلم الآلي من خلال خدمات API) ، يمكنك بسهولة دمج جزء كبير من الذكاء الاصطناعي في تطبيقاتك.

يوصى بقراءة : بدء استخدام التعلم الآلي

المزيد بعد القفز! أكمل القراءة أدناه ↓

كيف تبدأ مع جوجل كلاود

لنبدأ بالتسجيل في 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 } } ... ]

كما ترى ، لتصفية النص فقط ، تحتاج إلى الحصول على وصف "لجميع العناصر". لحسن الحظ ، يأتي مع المساعدة الفهم القوي لقائمة بايثون.

 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)

Okay 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" ]

أنا منبهر. شكرا جوجل! لكن واحدة لا تكفي ، هل يمكنك إعطائي ثلاثة أمثلة لصور متشابهة؟

 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 ... ]

بشكل مفاجئ ، بأمر بسيط ، يمكنك التحقق من احتمالية بعض المشاعر الأساسية بالإضافة إلى أغطية الرأس أو خصائص الصور.

عندما يتعلق الأمر باكتشاف الوجوه ، فأنا بحاجة إلى توجيه انتباهك إلى بعض المشكلات المحتملة التي قد تواجهها. عليك أن تتذكر أنك تسلم صورة إلى جهاز وعلى الرغم من أن واجهة برمجة تطبيقات Google تستخدم نماذج مدربة على مجموعات بيانات ضخمة ، فمن المحتمل أنها ستعيد بعض النتائج غير المتوقعة والمضللة. يمكنك العثور عبر الإنترنت على صور توضح مدى سهولة خداع الذكاء الاصطناعي عندما يتعلق الأمر بتحليل الصور. يمكن العثور على بعضها مضحك ، ولكن هناك خط رفيع بين الأخطاء البريئة والأخطاء المسيئة ، خاصة عندما يتعلق الخطأ بوجه بشري.

لا شك أن Google Cloud Vision هي أداة قوية. علاوة على ذلك ، من الممتع العمل معه. تجعل بنية REST الخاصة بواجهة برمجة التطبيقات وحزمة Python المتاحة على نطاق واسع الوصول إليها أكثر سهولة للجميع ، بغض النظر عن مدى تقدمك في تطوير Python. فقط تخيل إلى أي مدى يمكنك تحسين تطبيقك من خلال الاستفادة من إمكاناته!

يوصى بقراءة : تطبيقات التعلم الآلي للمصممين

كيف يمكنك توسيع نطاق معرفتك على Google Cloud Vision

إن نطاق إمكانيات تطبيق خدمة Google Cloud Vision لا نهائي عمليًا. مع توفر مكتبة Python ، يمكنك استخدامها في أي مشروع يعتمد على اللغة ، سواء كان تطبيق ويب أو مشروعًا علميًا. يمكن أن يساعدك بالتأكيد على إبراز اهتمام أعمق بتقنيات التعلم الآلي.

توفر وثائق Google بعض الأفكار الرائعة حول كيفية تطبيق ميزات Vision API عمليًا كما تمنحك إمكانية معرفة المزيد حول التعلم الآلي. أوصي بشكل خاص بمراجعة الدليل الخاص بكيفية إنشاء تطبيق بحث متقدم عن الصور.

يمكن للمرء أن يقول أن ما رأيته في هذا المقال يشبه السحر. بعد كل شيء ، من كان يظن أن واجهة برمجة تطبيقات بسيطة وسهلة الوصول مدعومة بمثل هذه الأداة العلمية القوية؟ كل ما تبقى للقيام به هو كتابة بضعة أسطر من التعليمات البرمجية ، وتخفيف خيالك ، وتجربة الإمكانات غير المحدودة لتحليل الصور.