كانت السنوات القليلة الماضية مميزة بالنسبة لنماذج الذكاء الاصطناعي القائمة على الخادم المركزي مثل ChatGPT وGemini من Google وCopilot من Microsoft وما إلى ذلك. لا شك أن مثل هذه النماذج من الذكاء الاصطناعي قد غيرت العديد من الجوانب. ولكن من ناحية أخرى، لديها بعض الجوانب السلبية. ربما سمعت أيضًا عن العديد من حالات انقطاع الخدمة في ChatGPT .
إن النماذج التي تعتمد على الخادم المركزي معرضة لخطر كبير يتمثل في نقطة فشل واحدة. ولكن الآن تغير الزمن. كما تعمل تقنية البلوك تشين على إحداث ثورة في العديد من المجالات، بما في ذلك الذكاء الاصطناعي.
يعمل بروتوكول الإنترنت الحاسوبي (ICP) الذي طورته شركة Dfinity على تحقيق اللامركزية في مجال الذكاء الاصطناعي من خلال تمكين تطبيقات الذكاء الاصطناعي من العمل على بنية تحتية سحابية لامركزية بالكامل. والأمر الفريد هو أن بروتوكول الإنترنت الحاسوبي يسمح بنشر نماذج وخدمات الذكاء الاصطناعي عبر شبكة من مراكز البيانات المستقلة. ويضمن هذا النوع من نهج اللامركزية أن تكون عمليات الذكاء الاصطناعي شفافة ومقاومة للرقابة وأقل عرضة لنقاط الفشل الفردية.
تتناول هذه المقالة اختبارًا عمليًا لتطبيق التعرف على الوجه DApp الذي يعتمد على ICP. وسنتحقق من كيفية عمل اللامركزية في الذكاء الاصطناعي بشكل موضوعي من خلال عروض توضيحية دقيقة لكل خطوة. لقد حاولنا تقسيم المفاهيم التقنية المعقدة إلى دروس تعليمية سهلة الفهم، لذا فلنبدأ.
تم تنفيذ عملية تطوير المشروع واختباره بالكامل على جهاز يعمل بنظام Windows، لذا فنحن نقوم بإنشاء نظام فرعي Linux هنا لأن العديد من أدوات تطوير ICP والبرامج النصية مُحسّنة للبيئات المستندة إلى Linux.
📥المتطلبات الأساسية:
نظام التشغيل : Windows مع نظام Windows الفرعي لنظام Linux (WSL) المثبت. يُرجى الرجوع إلى هذا الدليل لمعرفة كيفية التثبيت.
معرفة :
فهم أساسي لـ JavaScript و React.js و Rust و WebAssembly .
التعرف على مفاهيم تطوير الويب.
أدوات :
📥إعداد بيئة التطوير:
sh -ci "$(curl -fsSL https://smartcontracts.org/install.sh)"
👉للتأكيد على التثبيت:
dfx –version
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source $HOME/.cargo/env
👉للتحقق من التثبيت، قم بتشغيل:
rustc –version
3. قم بتثبيت Node.js عن طريق تشغيل الأمر التالي:
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt install -y nodejs
👉للتحقق من التثبيت، قم بتشغيل:
node -v npm -v
git clone https://github.com/wasm-forge/wasi2ic.git cd wasi2ic cargo install --path .
👉للتحقق من التثبيت، قم بتشغيل:
echo $PATH wasi2ic –help
cargo install wasm-opt
📥استنساخ المشروع:
نحن نستخدم مستودع GitHub الخاص بالمشروع لأغراض الاختبار. يمكنك التحقق من مستودعهم هنا .
1. استنسخ المستودع وانتقل إلى مشروع التعرف على الوجوه:
git clone https://github.com/dfinity/examples.git cd examples/rust/face-recognition
ملاحظة: يمكنك الوصول إلى ملفات نظام Linux الفرعي الخاص بك عن طريق البحث عن \\wsl$
في مستكشف الملفات أو ميزة البحث المباشر في نظام التشغيل Windows.
📥تحميل نماذج التعرف على الوجه
سيتم استخدام نموذج اكتشاف الوجه لاكتشاف الوجوه في الصورة. قم بتشغيل:
./download-face-detection-model.sh
يجب عليك تصدير النموذج بتنسيق ONNX باستخدام PyTorch
و facenet-pytorch
. ابدأ بتثبيت مكتبات Python التالية:
pip install torch facenet-pytorch onnx
ملاحظة: إذا لم يكن Python مثبتًا بالفعل في نظامك الفرعي، فحاول تثبيت Python و pip من هنا: https://packaging.python.org/en/latest/tutorials/installing-packages/ .
في ملف Python أو shell، قم بتشغيل ما يلي: اكتب python3 في المحطة الطرفية ثم قم بتشغيل الكود التالي. بعد التنفيذ، اكتب exit().
import torch import facenet_pytorch resnet = facenet_pytorch.InceptionResnetV1(pretrained='vggface2').eval() input = torch.randn(1, 3, 160, 160) torch.onnx.export(resnet, input, "face-recognition.onnx", verbose=False, opset_version=11)
سيؤدي هذا إلى إنشاء ملف face-recognition.onnx
. انسخه إلى جذر المستودع الخاص بك.
📥بناء
الآن حان الوقت لبناء المشروع. قم بتشغيل:
dfx start --background dfx deploy
إذا سارت الأمور على ما يرام، فستتمكن من رؤية عنوان URL للواجهة الأمامية في المحطة الطرفية.
ملاحظة: إذا واجهت بعض الأخطاء بسبب عدم وجود عميل، فحاول تثبيت webpack
و webpack-cli
عالميًا باستخدام npm:
sudo npm install -g webpack webpack-cli
والاعتماديات المحلية:
npm install
📥أنشئ العلبة، ثم قم بتشغيلها:
dfx canister create backend
يمكنك رؤية الرسالة التالية في المحطة الطرفية.
👉الآن، يمكنك التحقق من حالة الواجهة الخلفية للعلبة:
dfx canister status backend
يمكنك رؤية شيء مثل هذا في المحطة.
📥تحميل أجزاء من النماذج
نظرًا لأن نماذج الذكاء الاصطناعي كبيرة الحجم عادةً، فلا يمكن تضمينها مباشرةً في ملف WebAssembly (Wasm) الثنائي لعقد ذكي. بدلاً من ذلك، يجب تحميل هذه النماذج بشكل منفصل. للتعامل مع هذا، طورت DecideAI أداة لتحميل النماذج بشكل تدريجي. يمكنك العثور على الأداة هنا: ic-file-uploader .
👉لتثبيت الأداة، استخدم الأمر التالي:
cargo install ic-file-uploader
بمجرد التثبيت، يمكنك استخدام البرنامج النصي upload-models-to-canister.sh
من خلال تشغيل ./upload-models-to-canister.sh
في المحطة الطرفية لتحميل النماذج. يقوم هذا البرنامج النصي بتنفيذ الخطوات التالية:
dfx canister call backend clear_face_detection_model_bytes dfx canister call backend clear_face_recognition_model_bytes
ic-file-uploader backend append_face_detection_model_bytes version-RFB-320.onnx ic-file-uploader backend append_face_recognition_model_bytes face-recognition.onnx
dfx canister call backend setup_models
الآن، يمكنك التفاعل مع الواجهة الأمامية باستخدام عنوان URL الذي تلقيته في المحطة الطرفية أثناء تنفيذ أمر dfx deploy
(الشكل 1)
بمجرد قيامك بتحميل صورة بالنقر فوق شعار ICP، حاول إضافة اسم شخص بالنقر فوق الزر " إضافة شخص " لتدريب النموذج.
يكتشف الوجه بعلامة مستطيلة أوتوماتيكية في الوجه. بمجرد تعيين الاسم، يعرض رسالة تفيد بنجاح الإضافة كما يلي:
يتذكر الذكاء الاصطناعي الاسم الذي حددته للوجه حتى تتمكن من اختبار ما إذا كان يكتشف وجوه صور مختلفة لنفس الشخص أم لا. هنا، يتم التقاط صور مختلفة لنيكولا تيسلا. لتحميل صورة أخرى لاكتشاف الوجه، أعد تحميل الصفحة، ثم انقر فوق خيار " التعرف ". دعنا نرى؛ لقد حدد بنجاح وجه نيكولا تيسلا مع اختلاف طفيف عن الوجه الأولي.
هنا، تم إرسال صورة تم إنشاؤها بواسطة الذكاء الاصطناعي لنيكولا تيسلا إلى النموذج، والمثير للدهشة، أنها تمكنت من اكتشاف الوجه بدقة، دعنا نرى هنا:
لقد تم التحقق بنجاح من أن تطبيق التعرف على الوجوه ICP يعمل بشكل مثالي حيث نجح في اكتشاف وجوه نيكولا تيسلا. يمكنك تجربته بنفسك.
نظرًا لأنه مخصص لأغراض الاختبار، فإن واجهة المستخدم والميزات محدودة. يمكنك إضافة ميزات وخدمات إضافية إذا كنت تتعجل في بناء تطبيق dApp جاهز للإنتاج على ICP لأغراض التعرف على الوجوه. يمكنك تجربة الميزات التالية مع أمثلة التعليمات البرمجية. يرجى ملاحظة أنه يجب عليك إضافة أو تخصيص التعليمات البرمجية وفقًا لمتطلباتك.
📥إليك بعض النصائح:
إذا أضفت هذه الميزة إلى هذا التطبيق اللامركزي، فلن يتمكن من الوصول إليه سوى المستخدمين المسجلين. وإليك كيفية إضافة المصادقة باستخدام Internet Identity. يمكنك دمج Internet Identity عن طريق إضافة زر تسجيل الدخول إلى Internet Identity على الصفحة الرئيسية. بمجرد تسجيل دخول المستخدم، يتم عرض لوحة معلومات مخصصة.
كيفية الإضافة:
👉تثبيت تبعيات هوية الإنترنت:
npm install @dfinity/agent @dfinity/auth-client
👉أضف الكود التالي إلى الواجهة الأمامية لديك لتمكين المصادقة:
import { AuthClient } from "@dfinity/auth-client"; async function init() { const authClient = await AuthClient.create(); if (await authClient.isAuthenticated()) { // Display dashboard or personalized content } else { authClient.login({ identityProvider: "https://identity.ic0.app/#authorize", onSuccess: () => { // Once authenticated, display personalized features }, }); } } init();
👉بعد تسجيل الدخول، يمكن للمستخدم رؤية سجل الوجوه التي تم التعرف عليها أو غيرها من البيانات الشخصية.
اجعل وظيفة تحميل الصور وتجربتها أكثر سلاسة من خلال السماح للمستخدمين بسحب الصور وإفلاتها لاكتشاف الوجه.
كيفية الإضافة :
👉استخدم وظيفة السحب والإفلات في HTML5:
<div id="drop-area"> <p>Drag and drop an image here or click to select</p> <input type="file" id="file-input" hidden /> </div>
👉أضف JavaScript للتعامل مع عملية السحب والإفلات:
const dropArea = document.getElementById("drop-area"); dropArea.addEventListener("dragover", (event) => { event.preventDefault(); }); dropArea.addEventListener("drop", (event) => { event.preventDefault(); const files = event.dataTransfer.files; // Process the uploaded image });
👉تأكد من تكامله بسلاسة مع وظيفة اكتشاف الوجه الحالية لديك.
ستكون ميزة عرض شريط التقدم عند تحميل صورة لإعلام المستخدمين بأن النظام يقوم بمعالجة الصورة ميزة جذابة.
كيفية الإضافة:
👉استخدم شريط تقدم HTML بسيطًا:
<div id="progress-bar"> <div id="progress-fill" style="width: 0%;"></div> </div>
👉تحديث شريط التقدم ديناميكيًا أثناء معالجة الصورة:
const progressFill = document.getElementById("progress-fill"); let progress = 0; const interval = setInterval(() => { progress += 10; progressFill.style.width = `${progress}%`; if (progress === 100) { clearInterval(interval); } }, 100); // Simulate progress every 100ms
يمكنك إضافة ميزة لتوفير إشعارات في الوقت الفعلي بمجرد اكتمال التعرف على الوجه، إما عبر نافذة منبثقة أو إشعار منبثق.
كيفية الإضافة :
👉يمكنك استخدام مكتبة خفيفة الوزن مثل Toastr أو إشعارات Toast المخصصة.
<div id="notification" class="hidden">Face Recognition Complete!</div>
👉في JavaScript الخاص بك، قم بإظهار الإشعار عندما يقوم البرنامج الخلفي بإرجاع النتيجة:
function showNotification(message) { const notification = document.getElementById("notification"); notification.innerHTML = message; notification.classList.remove("hidden"); setTimeout(() => { notification.classList.add("hidden"); }, 3000); // Hide notification after 3 seconds } // Call this after face recognition is done showNotification("Face detected and recognized!");
📥الخطوات النهائية: إعادة البناء والنشر
بعد تنفيذ هذه الميزات الجديدة:
👉إعادة بناء المشروع:
dfx build
👉النشر على شبكة الاختبار: للاختبار أولاً قبل التسرع في الانتقال إلى الشبكة الرئيسية.
dfx deploy --network ic
هذه بعض الأمثلة والأفكار لأغراض العرض التوضيحي. يمكنك اختبارها بنفسك وإخبارنا بتقدمك في قسم التعليقات. كما يمكنك القيام بالمزيد باستخدامها لإضفاء اللامركزية على الذكاء الاصطناعي على ICP.
لقد نجحنا في اختبار تطبيق التعرف على الوجوه اللامركزي على ICP، وهو محاولة حقيقية لإضفاء اللامركزية على الذكاء الاصطناعي. ووفقًا لاختبارنا، كانت استجابات التطبيق اللامركزي سريعة، وكان اكتشاف الوجوه دقيقًا. يمكن للبنية الأساسية الفريدة لـ ICP أن تساعدنا في أداء مهام معقدة مثل التعرف على الوجوه دون الاعتماد على أنظمة مركزية.
لا يعمل هذا على تعزيز الأمان والخصوصية فحسب، بل يُظهر أيضًا إمكانية تطور تطبيقات الذكاء الاصطناعي اللامركزي بسرعة. ومع استمرار تطوير ICP، فإن القدرة على نشر نماذج كبيرة وإجراء استدلالات الذكاء الاصطناعي على السلسلة يمكن أن تفتح إمكانيات جديدة للابتكار. يمكننا أن نتوقع أن يكون الذكاء الاصطناعي اللامركزي لاعباً رئيسياً في مستقبل الحلول الجديرة بالثقة والقابلة للتطوير. كما يتمتع المطورون بفرص جديدة لإنشاء المزيد من المنتجات والخدمات على ICP.