يهدف نظام معالجة صور LUA بشكل أساسي إلى استخدامه مع Embarcadero C ++/Delphi على نظام Windows. يتكون من:

هذا هو جوهر المشروع. إنه مكتوب في Embarcadero C ++ ، ولكن يمكن تعديله بسهولة لمجموعات المترجمين الآخرين. يستخدم محرك Luajit و FFI لتمرير بنية الصور إلى البرامج النصية LUA. أيضًا ، يستدعي OCVWRAPPER.DLL لتطبيق مجموعة محدودة من مرشحات OPENCV من SCRIPT LUA. لاستخدام DLL هذا من Delphi ، يجب تحويل إدخالات DLL الموضحة في Lipsenginedll.h إلى ملف PAS ، وكذلك الهيكل والطباعة في LipsGlobals.h.
يدعم Lips Engine حاليًا صور RGB24 والصور ذات القناة المفردة 8 بت (رمادي). يمكن أن يكون tbitmap أو أي نوع من حاوية الصور مع المخزن المؤقت للذاكرة المتجاورة. يتم تمرير العرض فقط ، والطول ، ومحاذاة خط المسح والمؤشر إلى المخزن المؤقت للصور إلى محرك الشفاه. أيضًا ، يدعم محرك LIPS صور RGB24 مع قناة ألفا منفصلة ، مثل صورة TieBitMap (المنتج التجاري) المتوفرة على www.imageen.com. يمكن إضافة دعم RGBA32 أيضًا ، ولكن في الوقت الحالي غير مدعوم.
هذا DLL مكتوب في VS2017 ، لأن برنامج التحويل البرمجي BCC لا يدعمه OpenCV. أنه يحتوي على مكالمات API لإعداد صورة المصدر/الهدف ، لإعداد منطقة من interesets ومجموعة محدودة من مرشحات OpenCV وإجراءات معالجة الصور. نظرًا لأن هذا DLL يسمى من Lipsengine ، بعد تجميع وربط OCVWrapper.dll ، يجب إنشاء مكتبة الاستيراد:
يجب نسخ مكتبات الاستيراد في مجلد OpenCV تحت دليل Lipsengine.
يتم كتابة تطبيق المضيف (التجريبي) في Embarcadero C ++ ويحتوي على بعض المكونات التجارية. يمكن تعديل رمز المصدر لاستخدام المكونات القياسية. من الكود المصدري ، يمكنك معرفة كيفية استخدام واجهات برمجة تطبيقات Lipsengine وكيفية تحليل المعلمات المطلوبة من Script LUA.
يجب أن يبدأ السطر الأول في كل برنامج نصي LUA المخصص للاستخدام مع محرك الشفاه ببيان require("_prolog") . استثناء هذه القاعدة هو إذا كنت تريد تصحيح نص LUA الخاص بك مع دعنا نقول Zerobrane Studio (https://studio.zerobrane.com). في هذه الحالة ، يجب أن يكون البيان الأول require("_debug") . للاتصال بآبار واجهات برمجة تطبيقات OpenCV (OCVWRAPPER.DLL) ، يجب عليك أيضًا تضمين برنامج OpenCV Script require("_opencv") .
عند تحميل البرنامج النصي ، ينشئ LUA Engine متابعًا عالميًا:
يستخدم Lips Engine غلاف LUNA كملزم C ++ (رمز المصدر المضمّن) ومجموعة من وظائف مكالمات الظهر للتواصل مع التطبيق المضيف. لتعيين المعلمات من التطبيق المضيف ، يجب أن يعلن البرنامج النصي عن وظيفة QuicaleParams واتصال lips_RequireParams(S) الواردة في برنامج Prolog Script لتوجيه المضيف لتعيين المعلمات المطلوبة. يجب أن يتبع هيكل سلسلة (سلاسل) طلب المعلمة التي تم تمريرها إلى المضيف قاعدة الإنتاج هذه:
S -> A
A -> A | token
token -> "name = type(range initial_value);"
type -> int | float | bool | combo | list | imagefile | imagemap
range -> [min, max] | [v1, v2,...,vn] | []
initial_value -> according to type, must be in the range (if range is not empty)
Parameters request example: S = "size = int([10,20] 10);"
Parameters request example: S = "perform_something = bool([] true);"
مثال من Script Opencv Gaborius.lua:
function RequireParams()
lips_RequireParams("step = int([1, 32] 16); kernel_size = int([3, 101] 31);"
.. " sigma = float([0.1, 10] 4.0); lambda = float([1, 30] 10);"
.. " gamma = float([0.1, 10] 0.2); psi = float([0, 1.57] 0); ks_factor = float([0.001, 10] 1.5); ")
end
المعلمة الأولى (الخطوة) هي من النوع int وتتراوح من 1 إلى 32 مع القيمة الأولية 16. المعلمة الثالثة (sigma) هي من النوع العائم وتتراوح من 0.1 إلى 10 مع القيمة الأولية 4.0. التطبيق المضيف ، بعد تحليل وتكثيف سلسلة المعلمات المطلوبة سيقوم بإنشاء إطارات مختلفة والسماح للمستخدم بضبط المعلمات. عند تنفيذ البرنامج النصي ، يتم دفع قيم المعلمات على المكدس ويتم إنشاء متغيرات LUA العالمية وفقًا لأسماء المعلمات.
يتم أيضًا توزيع جميع البرامج النصية LUA المطلوبة وكذلك النصوص على سبيل المثال مع الحزم الثنائية.
ملاحظة: يحتوي ملف data_face.zip على اكتشاف الوجه ونموذج المعالم الوجه. Data_styleModels.zip يحتوي على نماذج نقل النمط العصبي. يجب تفريغ هذه الأرشيفات في مجلدات البيانات/(الوجه | stylemodels) تحت مسار الدليل القابل للتنفيذ إذا كنت لا ترغب في تعديل البرامج النصية لمثال OpenCV (مبادلة الوجه ، نقل النمط العصبي).
فيما يلي بعض لقطات شاشة للتطبيق المضيف بعد تنفيذ مختلف البرامج النصية LUA:





© Siniša Petrić ، www.sigmapi-design.com ، ترخيص معهد ماساتشوستس للتكنولوجيا.