كان الهدف هو إنشاء تطبيق mac يمكنه التعرف على الكود من الصور ومقاطع الفيديو.
أردت التأكد من أنه حتى مع وجود كمية كبيرة من الشفرات ، تم التعرف على النص في أقل من ثانية.
ومما يسهل المشكلة أن اللغة التي تُكتب بها الشفرة هي دائمًا اللغة الإنجليزية والعرض بين جميع الحروف هو نفسه (الخط الأحادي المسافة) - يتم استخدامها في البرمجة ، وفي هذه الخطوط يسهل رؤية الفرق بين 1 و I و 0 و O ، إلخ.
باختصار ، تنقسم المهمة إلى قسمين:
1. العثور على الرسالة نفسها بحدودها
وقام Vision ، وهو إطار عمل Apple الجديد ، بعمل رائع فيه.
فيما يلي لقطة عن كيفية عملها. 2. التعرف على الخطاب في الحدود المعطاة
قررت عدم الذهاب بطريقة صعبة والتحقق من بعض وحدات البكسل في المربع ، داخل الحدود التي توجد بها حروف (دعنا نقول: الوسط ، الزوايا ، الجوانب) ، وبدءًا من وجود أو عدم وجود خطاب ، قم بتصنيف ماهية الرسالة.
مثال توضيحي:

وهنا ما ستبدو الشجرةهذا جزء لأن كل شيء لن يصلح ، وليس ضروريًا.

كيف تنقل هذا الرسم التخطيطي إلى الكود ، حتى لا تحفر فيه ، بحيث يكون واضحًا تمامًا؟!
هذا هو المكان الذي تأتي فيه شجرة ثنائية للإنقاذ. هنا هو الإطار الخاص به.
enum Tree<Node, Result> {
الآن ، بناءً على ذلك ، يمكننا نقل الرسم بالكامل إلى الشفرة.
هكذا تبدو قطعة الخشب أكبر.

يمكنك تحليل كل شيء بشكل تخطيطي وبسهولة العثور على الرسالة التي تحتاجها.
وفي اللحظة الأخيرة ، هذا هو الشكل الذي يظهر به النموذج نفسه ، والذي يحدث فيه كل العمل.
extension Tree where Node == OCROperations, Result == String { func find(_ colorChecker: LetterExistenceChecker, with frame: CGRect) -> String? { switch self { case .empty: return nil case .r(let element): return element case let .n(operation, left, right): let exist = operation.action(colorChecker, frame) return (exist ? left : right).find(colorChecker, with: frame) } } }
في هذه الشجرة ، نمرر فئة LetterExistenceChecker ، المسؤولة عن التحقق من وجود بكسل لرسالة في نقطة محددة داخل حدود المربع المطلوب. بالطبع ، لقد حذفت الكثير من التفاصيل ، وإلا فإن المقالة ستكون مرهقة للغاية. وهنا ، ليس فقط هاتان المرحلتان اللتان تم ذكرهما في المقالة ، بل أكثر من ذلك بكثير ، لكن تم حذفهما ، لأن الهدف كان إظهار كيفية استخدام الشجرة الثنائية والتعداد.
إليك عرض توضيحي لكيفية عمل البرنامج ، يرجى ملاحظة أنه نظرًا لأن الهدف هو التعرف على نص فقط برمز ، فقد قررت فقط تجاهل كل ما تبقى من النص غير رمز ، بحيث سيبحث البرنامج عن نص برمز فقط.
سأكون سعيدا لسماع تعليقاتكم ، النقد.