paint-brush
ICP სახის ამოცნობის DApp ტესტირება: საბოლოო შედეგი გაგაოცებთმიერ@induction
461 საკითხავი
461 საკითხავი

ICP სახის ამოცნობის DApp ტესტირება: საბოლოო შედეგი გაგაოცებთ

მიერ Vision NP9m2024/09/21
Read on Terminal Reader

Ძალიან გრძელი; Წაკითხვა

ინტერნეტ კომპიუტერული პროტოკოლი (ICP) მუშაობს ხელოვნური ინტელექტის დეცენტრალიზებაზე, აპლიკაციებს საშუალებას აძლევს იმუშაონ სრულად დეცენტრალიზებულ ღრუბლოვან ინფრასტრუქტურაზე. ამგვარი დეცენტრალიზაციის მიდგომა უზრუნველყოფს, რომ ხელოვნური ინტელექტის ოპერაციები იყოს გამჭვირვალე, ცენზურისადმი მდგრადი და ნაკლებად მიდრეკილი წარუმატებლობის ცალკეული წერტილებისკენ. ჩვენ შევამოწმებთ, თუ როგორ მუშაობს ხელოვნური ინტელექტის დეცენტრალიზაცია ობიექტურად, თითოეული ნაბიჯის დახვეწილი დემონსტრირებით.
featured image - ICP სახის ამოცნობის DApp ტესტირება: საბოლოო შედეგი გაგაოცებთ
Vision NP HackerNoon profile picture
0-item
1-item

გასული რამდენიმე წელი განსაკუთრებული იყო ცენტრალიზებული სერვერზე დაფუძნებული AI მოდელებისთვის, როგორიცაა ChatGPT, Google's Gemini, Microsoft's Copilot და ა.შ. ეჭვგარეშეა, რომ ასეთმა AI მოდელებმა შეცვალეს მრავალი ასპექტი. მაგრამ მეორეს მხრივ, მათ აქვთ გარკვეული უარყოფითი მხარეები. ალბათ, თქვენც გსმენიათ ChatGPT-ის რამდენიმე გათიშვის შესახებ.


სერვერზე დაფუძნებულ ცენტრალიზებულ მოდელებს ერთი მარცხის დიდი რისკი ემუქრებათ. მაგრამ ახლა დრო შეიცვალა. ბლოკჩეინის ტექნოლოგია ასევე ახდენს რევოლუციას ბევრ სფეროში, მათ შორის ხელოვნურ ინტელექტს (AI).


ინტერნეტ კომპიუტერული პროტოკოლი (ICP), რომელიც Dfinity-მ შეიმუშავა, მუშაობს ხელოვნური ინტელექტის დეცენტრალიზაციაზე, რაც საშუალებას აძლევს AI აპლიკაციებს იმუშაონ სრულად დეცენტრალიზებულ ღრუბლოვან ინფრასტრუქტურაზე. უნიკალური ის არის, რომ ICP საშუალებას აძლევს AI მოდელები და სერვისები განლაგდეს დამოუკიდებელი მონაცემთა ცენტრების ქსელში. დეცენტრალიზაციის ასეთი მიდგომა უზრუნველყოფს, რომ ხელოვნური ინტელექტის ოპერაციები იყოს გამჭვირვალე, ცენზურის მიმართ მდგრადი და ნაკლებად მიდრეკილი წარუმატებლობის ცალკეული წერტილებისკენ.


ეს სტატია ეწინააღმდეგება პრაქტიკული ტესტის სახის ამოცნობის DApp-ს, რომელიც დაფუძნებულია ICP-ზე. ჩვენ შევამოწმებთ, თუ როგორ მუშაობს ხელოვნური ინტელექტის დეცენტრალიზაცია ობიექტურად, თითოეული ნაბიჯის დახვეწილი დემონსტრირებით. ჩვენ შევეცადეთ რთული ტექნიკური ცნებები დავყოთ ადვილად გასაგებ გაკვეთილებად, ასე რომ, დავიწყოთ.


პროექტის შემუშავებისა და ტესტირების მთელი პროცესი განხორციელდა Windows-ზე დაფუძნებულ აპარატზე, ამიტომ ჩვენ ვქმნით Linux ქვესისტემას, რადგან ბევრი ICP განვითარების ინსტრუმენტი და სკრიპტი ოპტიმიზებულია Linux-ზე დაფუძნებული გარემოსთვის.


📥 წინაპირობები:

  • ოპერაციული სისტემა : Windows დაინსტალირებული Windows ქვესისტემა Linux-ისთვის (WSL). გთხოვთ, ინსტალაციისთვის მიმართოთ ამ სახელმძღვანელოს .


  • ცოდნა :

    • JavaScript-ის , React.js-ის , Rust-ის და WebAssembly- ის ძირითადი გაგება.

    • ვებ განვითარების კონცეფციების გაცნობა.


  • ინსტრუმენტები :

    • DFX SDK (ICP განვითარების ჩარჩო) .
    • Node.js და npm.
    • Rust: დააინსტალირეთ Rust ხელსაწყოების ჯაჭვი.
    • Git: თქვენ გჭირდებათ საცავი კლონირებისთვის. გთხოვთ, უპირატესობა მიანიჭოთ მათ მითითებებს მის დასაყენებლად.
    • wasi2ic: ინსტრუმენტი WASI-დამოკიდებული Wasm მოდულის გადასაყვანად ICP-ზე გასაშვებად.
    • wasm-opt: WebAssembly ოპტიმიზატორი.


📥 შექმენით განვითარების გარემო:

  1. გახსენით თქვენი WSL ტერმინალი და გაუშვით შემდეგი ბრძანება DFX-ის დასაყენებლად:
 sh -ci "$(curl -fsSL https://smartcontracts.org/install.sh)"


👉ინსტალაციის დასადასტურებლად:

 dfx –version


  1. დააინსტალირეთ Rust შემდეგი ბრძანების გაშვებით:
 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


  1. დააინსტალირეთ wasi2ic: ჯერ კლონირეთ მათი GitHub საცავი.
 git clone https://github.com/wasm-forge/wasi2ic.git cd wasi2ic cargo install --path .


👉ინსტალაციის შესამოწმებლად, გაუშვით:

 echo $PATH wasi2ic –help


  1. დააინსტალირეთ wasm-opt:
 cargo install wasm-opt


📥პროექტის კლონირება:

ჩვენ ვიყენებთ პროექტის GitHub საცავს ჩვენი ტესტირების მიზნებისთვის. თქვენ შეგიძლიათ შეამოწმოთ მათი საცავი აქ .


1. კლონირეთ საცავი და გადადით სახის ამოცნობის პროექტზე:

 git clone https://github.com/dfinity/examples.git cd examples/rust/face-recognition

შენიშვნა: თქვენი Linux ქვესისტემის ფაილებზე წვდომა შეგიძლიათ File Explorer-ში \\wsl$ ან Windows OS-ში პირდაპირი ძიების ფუნქციის მოძიებით.


📥 ჩამოტვირთეთ მოდელები სახის ამოცნობისთვის


  1. ჩამოტვირთეთ სახის ამოცნობის მოდელი:

სახის ამოცნობის მოდელი გამოყენებული იქნება სურათზე სახეების გამოსავლენად. გაშვება:

 ./download-face-detection-model.sh


  1. ჩამოტვირთეთ სახის ამოცნობის მოდელი:

თქვენ გჭირდებათ მოდელის ექსპორტი ONNX ფორმატში PyTorch და facenet-pytorch გამოყენებით. დაიწყეთ ამ პითონის ბიბლიოთეკების ინსტალაციით:

 pip install torch facenet-pytorch onnx


შენიშვნა: თუ Python არ არის უკვე დაინსტალირებული თქვენს ქვესისტემაში, სცადეთ დააინსტალიროთ Python და pip აქედან: https://packaging.python.org/en/latest/tutorials/installing-packages/ .


  1. ONNX მოდელის ექსპორტი:

Python ფაილში ან გარსში გაუშვით შემდეგი: ჩაწერეთ 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


თუ ყველაფერი სწორად მიდის, შეგიძლიათ ნახოთ Frontend URL ტერმინალში.

სურათი 1. წარმატებული განლაგების შეტყობინება ტერმინალებში Frontend URL-ებით

შენიშვნა: თუ რაიმე შეცდომის წინაშე აღმოჩნდებით კლიენტის გამოტოვების გამო, შეეცადეთ დააინსტალიროთ webpack და webpack-cli გლობალურად npm-ის გამოყენებით:

sudo npm install -g webpack webpack-cli


და ადგილობრივი დამოკიდებულებები:

npm install


📥 შექმენით კონტეინერი, გაუშვით:

 dfx canister create backend


ტერმინალში შეგიძლიათ იხილოთ შემდეგი შეტყობინება.

სურათი 2. შეტყობინება გამოფენილი ტერმინალში და მითითება წარმატებული კასრის შექმნის შესახებ

👉ახლა შეგიძლიათ შეამოწმოთ კასრის უკანა ნაწილის სტატუსი:

 dfx canister status backend


თქვენ შეგიძლიათ ნახოთ მსგავსი რამ ტერმინალში.

სურათი 3. Canister სტატუსი backend

📥 მოდელების ატვირთვა

ვინაიდან AI მოდელები, როგორც წესი, დიდია. ისინი არ შეიძლება იყოს ჩასმული პირდაპირ სმარტ კონტრაქტის WebAssembly (Wasm) ბინარში. ამის ნაცვლად, ეს მოდელები ცალკე უნდა აიტვირთოს. ამის მოსაგვარებლად, DecideAI-მ შეიმუშავა ინსტრუმენტი მოდელების თანდათანობით ატვირთვისთვის. თქვენ შეგიძლიათ იპოვოთ ინსტრუმენტი აქ: ic-file-uploader .


👉 ინსტრუმენტის დასაყენებლად გამოიყენეთ შემდეგი ბრძანება:

 cargo install ic-file-uploader


ინსტალაციის შემდეგ, შეგიძლიათ გამოიყენოთ upload-models-to-canister.sh სკრიპტი ტერმინალში გაშვებით ./upload-models-to-canister.sh მოდელების ასატვირთად. ეს სკრიპტი ასრულებს შემდეგ ნაბიჯებს:


  1. ასუფთავებს არსებულ AI მოდელებს კასრიდან:
 dfx canister call backend clear_face_detection_model_bytes dfx canister call backend clear_face_recognition_model_bytes


  1. ატვირთავს ახალ მოდელებს თანდათანობით:
 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


  1. საბოლოოდ, სკრიპტი ადგენს ატვირთულ მოდელებს:
 dfx canister call backend setup_models


ახლა თქვენ შეგიძლიათ დაუკავშირდეთ Frontend-ს ტერმინალში მიღებული URL-ის გამოყენებით, სანამ dfx deploy ბრძანება (სურათი 1)


სურათი 4. dApp-ის წინა ინტერფეისი ნიკოლა ტესლას ატვირთული ფოტოთი. ღილაკზე „ადამიანის დამატება“ დაწკაპუნების შემდეგ იხსნება დიალოგური ფანჯარა სახელის დასამატებლად


მას შემდეგ რაც ატვირთავთ სურათს ICP-ის ლოგოზე დაწკაპუნებით, შეეცადეთ დაამატოთ ადამიანის სახელი ღილაკზე „ ადამიანის დამატება “ დაწკაპუნებით მოდელის მოსამზადებლად.

ის ამოიცნობს სახეს ავტომატური ოთხკუთხედის ნიშნით სახეზე. სახელის დაყენების შემდეგ, ის აჩვენებს შეტყობინებას წარმატებული დამატების შესახებ, როგორიცაა:

სურათი 5. სახელის დამატების შემდეგ ნაჩვენები შეტყობინება

ხელოვნური ინტელექტი იმახსოვრებს თქვენს მიერ დასახელებულ სახელს, რათა შეამოწმოთ, ამოიცნობს თუ არა ერთი და იმავე ადამიანის სხვადასხვა ფოტოების სახეებს. აქ ნიკოლა ტესლას სხვადასხვა ფოტოებია გადაღებული. სახის ამოცნობისთვის სხვა ფოტოს ასატვირთად, გადატვირთეთ გვერდი და შემდეგ დააწკაპუნეთ ოფციაზე „ გაცნობა “. ვნახოთ; მან წარმატებით ამოიცნო ნიკოლა ტესლას სახე საწყისიდან მცირედი განსხვავებით.

სურათი 6. AI-მ წარმატებით აღმოაჩინა ნიკოლა ტესლას სახე სხვა ფოტოდან 0,68 სხვაობით.

აი, ნიკოლა ტესლას ხელოვნური ინტელექტის მიერ გენერირებული ფოტო გადაეცემა მოდელს და გასაკვირია, რომ მან ზუსტად ამოიცნო სახე, ვნახოთ აქ:

სურათი 7. ნიკოლა ტესლას ხელოვნური ინტელექტის გენერირებული სახე აღმოჩენილია dApp-ის მიერ მხოლოდ 0,77 სხვაობით.

მან წარმატებით დაადასტურა, რომ ICP Face Recognizing DApp მუშაობს იდეალურად, რადგან მან წარმატებით აღმოაჩინა ნიკოლა ტესლას სახეები. შეგიძლიათ თავად სცადოთ.


ვინაიდან ის სატესტო მიზნებისთვისაა, ინტერფეისი და ფუნქციები შეზღუდულია. თქვენ შეგიძლიათ დაამატოთ დამატებითი ფუნქციები და სერვისები, თუ თქვენ ჩქარობთ აწარმოოთ მზა dApp ICP-ზე სახის ამოცნობის მიზნით. შეგიძლიათ სცადოთ შემდეგი ფუნქციები კოდის მაგალითებით. გთხოვთ გაითვალისწინოთ, რომ თქვენ უნდა დაამატოთ ან დააკონფიგურიროთ კოდები თქვენი მოთხოვნების შესაბამისად.


📥 აქ არის რამოდენიმე რჩევა თქვენთვის:

  1. დაამატეთ მომხმარებლის ავთენტიფიკაცია ინტერნეტის იდენტიფიკაციით

თუ ამ ფუნქციას დაამატებთ ამ dApp-ს, მხოლოდ დარეგისტრირებულ მომხმარებლებს შეუძლიათ წვდომა DApp-ზე. აი, როგორ შეგიძლიათ დაამატოთ ავთენტიფიკაცია ინტერნეტის იდენტიფიკაციის გამოყენებით. თქვენ შეგიძლიათ დააკავშიროთ Internet Identity მთავარ გვერდზე Internet Identity შესვლის ღილაკის დამატებით. მომხმარებლის შესვლის შემდეგ, აჩვენეთ პერსონალიზებული დაფა.


როგორ დავამატოთ:

👉 დააინსტალირეთ Internet Identity Dependencies:

 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();


👉შესვლის შემდეგ მომხმარებელს შეუძლია იხილოს აღიარებული სახეების ისტორია ან სხვა პერსონალიზებული მონაცემები.


  1. სურათის ატვირთვა გადაათრიეთ და ჩამოაგდეთ ფუნქციით

გახადეთ სურათის ატვირთვის ფუნქცია და გამოცდილება უფრო გლუვი, რაც საშუალებას მისცემს მომხმარებლებს გადაათრიონ და ჩამოაგდონ სურათები სახის ამოცნობისთვის.


როგორ დავამატოთ :

👉გამოიყენეთ 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 });


👉დარწმუნდით, რომ ის შეუფერხებლად აერთიანებს თქვენს არსებულ სახის ამოცნობის ფუნქციას.


  1. პროგრესის ზოლი სახის ამოცნობისთვის

საინტერესო ფუნქცია იქნება პროგრესის ზოლის ჩვენება სურათის ატვირთვისას, რათა აცნობოს მომხმარებლებს, რომ სისტემა ამუშავებს სურათს.


როგორ დავამატოთ:

👉 გამოიყენეთ მარტივი 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


  1. შეტყობინებები სახის ამოცნობის შედეგების შესახებ

თქვენ შეგიძლიათ დაამატოთ ფუნქცია რეალურ დროში შეტყობინებების მიწოდებისთვის, როგორც კი სახის ამოცნობა დასრულდება, მოდალური ან სადღეგრძელო შეტყობინების საშუალებით.


როგორ დავამატოთ :

👉შეგიძლიათ გამოიყენოთ მსუბუქი ბიბლიოთეკა, როგორიცაა Toastr ან მორგებული სადღეგრძელო შეტყობინებები.

 <div id="notification" class="hidden">Face Recognition Complete!</div>


👉თქვენს JavaScript-ში აჩვენეთ შეტყობინება, როდესაც backend დააბრუნებს შედეგს:

 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-ზე AI-ს დეცენტრალიზაციისთვის.

დასკვნა:

ჩვენ წარმატებით გამოვცადეთ Face Recognizing DApp ICP-ზე, რომელიც წარმოადგენს AI (DeAI) დეცენტრალიზაციის რეალურ მცდელობას. ჩვენი ტესტირების მიხედვით, DApp-ის პასუხები სწრაფი იყო და სახეების გამოვლენა ზუსტი. ICP-ის უნიკალურ ინფრასტრუქტურას შეუძლია დაგვეხმაროს ისეთი რთული ამოცანების შესრულებაში, როგორიცაა სახის ამოცნობა ცენტრალიზებულ სისტემებზე დამოკიდებულების გარეშე.


ის არა მხოლოდ აძლიერებს უსაფრთხოებას და კონფიდენციალურობას, არამედ აჩვენებს დეცენტრალიზებული AI (DeAI) აპლიკაციების სწრაფად განვითარებას. რამდენადაც ICP აგრძელებს განვითარებას, დიდი მოდელების განლაგებისა და AI-ის დასკვნის განხორციელების შესაძლებლობას შეუძლია გახსნას ახალი შესაძლებლობები ინოვაციისთვის. ჩვენ შეგვიძლია ველით, რომ დეცენტრალიზებული AI იქნება მთავარი მოთამაშე სანდო და მასშტაბური გადაწყვეტილებების მომავალში. დეველოპერებს ასევე აქვთ ახალი შესაძლებლობები, შექმნან მეტი პროდუქტი და სერვისი ICP-ზე.