السلام عليكم
عندي فكرة جميلة وساقوم بمشاركتها معكم لاكن الاشكال هو في مقارنة صور اشخاص
سابسط الامر ساحفظ صورة شخص ما في قاعدة البيانات وعند فتح البرنامج يلتقط له صورة اخرى وهنا كيف تتم المقارنة ؟
وكيف يتم التعرف على الاوجه حيث عند فتح البرنامج يصور صورة لك ويبحث في قاعدة البيانات ويقول لك مرحبا ايها المستخدم ( معرف 1 ) ..
كما أشار الأخ B.M.AbdelAziZ عليك أن تستخدم خوارزميات / مكتبات جاهزة للقيام بهذه الأمور
إقتباس :خواريزمية التعرف تحدد نقط معينة من الصورة (وجه/عين/بصمة) وتحتفظ بها ثم عند التعرف تحاول البحث عنها والمقارنة
هل أخذت عامل الاضاءة بالحسبان ؟
------------------------------------------------------------------------------------------------------
[COLOR="Indigo"]هناك عدة خوارزميات لمقارنة الوجه .. أشهرها و أفضلها : laplacian
إقتباس :laplacian face recognition algorithm
أفضل الحلول أنك تستخدم Image Work Package : مجانية و مبرمجة بدلفي تدعم اصدارات دلفي من دلفي 3 الى XE3 :
بها العديد من الفلاتر .. من بينها Laplacian[/COLOR]
كود :
delphiarea.com/products/delphi-packages/imagework/
-----------------------------------------------------------------------------------------------------
سأعطيك فكرة على السريع بدون استخدام خوارزميات و مكتبات خارجية :
-قم بالتقاط الصورة للشخص
-ثم قم بتحويل الصورة لى أبيض و أسود أو تأثير Sepia Effect/GrayScale من أجل التخلص من عامل الاضاءة (لأ الشخص ممكن أن يكون أمام اضاءة قوية أو عتمة أو ... )
-احفظ جزء معين من الوجه (يعني مستطيل بطول 4 سم و عرض 6 سم ) من المنطة الوسطى للوجه (منطقة غير متغيرة ... -المنطقة العلوية للوجه متغيرة بسبب تسريحة الشعر-
)
- قم بحفظها في قاعدة البيانات
-قم بالمقارنة بين ال Bytes الخاصة بالصورة الأولى المخزنة في قاعدة البيانات و الصورة الثانية التي تم التقاطها ( يفضل أن تستخدم تعليمة xor للمقارنة مثل تعليمة CompareStr يعني النتيجة تساوي = نسبة الاختلاف ))
PHP كود :
function CmpFaceImage(Image1,Image2:TBitmap):Integer;
begin
Result:=Image1Bytes xor Image2Bytes ;
end;
-ثم مرحلة التأكد من الشخص : يتم فيها مقارنة القيمة التي تعيدها CmpFaceImage بعدد ثابت (تستنتجه تجريبيا ) :
PHP كود :
const FaceIndice = Something;
function IsSameFace(CmpFaceImageResult:Integer ):Boolean ;
begin
Result:= CmpFaceImageResult < FaceIndice ;
end;
*اضافة : اضن العملية ستكون ادق وافضل عندما تكون الصورة المخزن بقاعدة البايانات عبارة عن مجسم 3d او على الاقل عدة صور من عدة مناطق لنفس الشخص ...