সুচিপত্র:

রিয়েল-টাইম ফেস রিকগনিশন: এন্ড-টু-এন্ড প্রজেক্ট: Ste টি ধাপ (ছবি সহ)
রিয়েল-টাইম ফেস রিকগনিশন: এন্ড-টু-এন্ড প্রজেক্ট: Ste টি ধাপ (ছবি সহ)

ভিডিও: রিয়েল-টাইম ফেস রিকগনিশন: এন্ড-টু-এন্ড প্রজেক্ট: Ste টি ধাপ (ছবি সহ)

ভিডিও: রিয়েল-টাইম ফেস রিকগনিশন: এন্ড-টু-এন্ড প্রজেক্ট: Ste টি ধাপ (ছবি সহ)
ভিডিও: WBSET Education PYQ With Explanation | Paper 2 Education | UGC NET Paper 2 in Bengali 2024, জুলাই
Anonim
রিয়েল-টাইম ফেস রিকগনিশন: একটি এন্ড-টু-এন্ড প্রজেক্ট
রিয়েল-টাইম ফেস রিকগনিশন: একটি এন্ড-টু-এন্ড প্রজেক্ট

ওপেনসিভি অন্বেষণ করা আমার শেষ টিউটোরিয়ালে, আমরা অটোমেটিক ভিশন অবজেক্ট ট্র্যাকিং শিখেছি। এখন আমরা আমাদের PiCam ব্যবহার করব রিয়েল-টাইমে মুখগুলি চিনতে, যেমন আপনি নিচে দেখতে পারেন:

ছবি
ছবি

এই প্রকল্পটি এই চমত্কার "ওপেন সোর্স কম্পিউটার ভিশন লাইব্রেরি", ওপেনসিভি দিয়ে করা হয়েছিল। এই টিউটোরিয়ালে, আমরা রাস্পবেরি পাই (তাই, ওএস হিসাবে রাস্পবিয়ান) এবং পাইথনে মনোনিবেশ করব, তবে আমি আমার ম্যাকের কোডটিও পরীক্ষা করেছি এবং এটিও সূক্ষ্ম কাজ করে। ওপেনসিভি কম্পিউটেশনাল দক্ষতার জন্য এবং রিয়েল-টাইম অ্যাপ্লিকেশনগুলিতে শক্তিশালী ফোকাসের জন্য ডিজাইন করা হয়েছিল। সুতরাং, এটি একটি ক্যামেরা ব্যবহার করে রিয়েল-টাইম ফেস রিকগনিশনের জন্য পারফেক্ট।

মুখ স্বীকৃতিতে একটি সম্পূর্ণ প্রকল্প তৈরি করতে, আমাদের অবশ্যই 3 টি স্বতন্ত্র পর্যায়ে কাজ করতে হবে:

  1. মুখ সনাক্তকরণ এবং ডেটা সংগ্রহ
  2. শনাক্তকারীকে প্রশিক্ষণ দিন
  3. মুখ স্বীকৃতি

নীচের ব্লক ডায়াগ্রাম সেই পর্যায়গুলি আবার শুরু করে:

ছবি
ছবি

ধাপ 1: BoM - উপাদান বিল

প্রধান অংশ:

  1. রাস্পবেরি পাই ভি 3 - US $ 32.00
  2. 5 মেগাপিক্সেল 1080p সেন্সর OV5647 মিনি ক্যামেরা ভিডিও মডিউল - US $ 13.00

ধাপ 2: OpenCV 3 প্যাকেজ ইনস্টল করা

OpenCV 3 প্যাকেজ ইনস্টল করা হচ্ছে
OpenCV 3 প্যাকেজ ইনস্টল করা হচ্ছে

আমি রাস্পবেরি (স্ট্রেচ) এর শেষ সংস্করণে আপডেট করা রাস্পবেরি পাই ভি 3 ব্যবহার করছি, তাই ওপেনসিভি ইনস্টল করার সর্বোত্তম উপায় হল, অ্যাড্রিয়ান রোজব্রক দ্বারা উন্নত চমৎকার টিউটোরিয়াল অনুসরণ করা: রাস্পবিয়ান স্ট্রেচ: আপনার রাস্পবেরি পাইতে ওপেনসিভি 3 + পাইথন ইনস্টল করুন ।

আমি আমার পাইতে ওপেনসিভি ইনস্টল করার জন্য বিভিন্ন গাইডের চেষ্টা করেছি। অ্যাড্রিয়ানের টিউটোরিয়াল সেরা। ধাপে ধাপে তার নির্দেশিকা অনুসরণ করে আমি আপনাকে একই কাজ করার পরামর্শ দিচ্ছি।

অ্যাড্রিয়ানের টিউটোরিয়াল শেষ করার পর, আপনার Pi তে আমাদের পরীক্ষা চালানোর জন্য আপনার একটি OpenCV ভার্চুয়াল পরিবেশ প্রস্তুত থাকা উচিত।

আসুন আমাদের ভার্চুয়াল পরিবেশে যাই এবং নিশ্চিত করি যে OpenCV 3 সঠিকভাবে ইনস্টল করা আছে।

আপনার সিস্টেমের ভেরিয়েবল সঠিকভাবে সেট আপ করা হয়েছে কিনা তা নিশ্চিত করার জন্য অ্যাড্রিয়ান প্রতিবার আপনি একটি নতুন টার্মিনাল খুললে কমান্ড "সোর্স" চালানোর পরামর্শ দেন।

উৎস ~/। প্রোফাইল

এরপরে, আসুন আমাদের ভার্চুয়াল পরিবেশে প্রবেশ করি:

ওয়ার্কন সিভি

যদি আপনি আপনার প্রম্পটের পূর্বে লেখা (সিভি) দেখতে পান, তাহলে আপনি সিভি ভার্চুয়াল পরিবেশে আছেন:

(সিভি) পাই@রাস্পবেরি: ~ $অ্যাড্রিয়ান মনোযোগ দেয় যে সিভি পাইথন ভার্চুয়াল পরিবেশ সম্পূর্ণ স্বাধীন এবং রাস্পবিয়ান স্ট্রেচ ডাউনলোডে অন্তর্ভুক্ত ডিফল্ট পাইথন সংস্করণ থেকে পৃথক। সুতরাং, বিশ্বব্যাপী সাইট-প্যাকেজ ডিরেক্টরিতে পাইথন প্যাকেজগুলি সিভি ভার্চুয়াল পরিবেশে উপলব্ধ হবে না। একইভাবে, সিভির সাইট-প্যাকেজগুলিতে ইনস্টল করা কোনও পাইথন প্যাকেজ পাইথনের বিশ্বব্যাপী ইনস্টলেশনের জন্য উপলব্ধ হবে না

এখন, আপনার পাইথন ইন্টারপ্রেটারে প্রবেশ করুন:

অজগর

এবং নিশ্চিত করুন যে আপনি 3.5 (বা তার উপরে) সংস্করণটি চালাচ্ছেন

দোভাষীর ভিতরে (">>>" উপস্থিত হবে), OpenCV লাইব্রেরি আমদানি করুন:

আমদানি cv2

যদি কোন ত্রুটির বার্তা না আসে, তাহলে OpenCV আপনার পাইথন ভার্চুয়াল পরিবেশে সঠিকভাবে ইনস্টল করা আছে।

আপনি ইনস্টল করা OpenCV সংস্করণটিও পরীক্ষা করতে পারেন:

cv2._ সংস্করণ_

3.3.0 উপস্থিত হওয়া উচিত (অথবা একটি উচ্চতর সংস্করণ যা ভবিষ্যতে প্রকাশ করা যেতে পারে)। উপরের টার্মিনাল প্রিন্টস্ক্রিন আগের ধাপগুলি দেখায়।

ধাপ 3: আপনার ক্যামেরা পরীক্ষা করা

আপনার ক্যামেরা পরীক্ষা করা হচ্ছে
আপনার ক্যামেরা পরীক্ষা করা হচ্ছে

একবার আপনার RPi তে OpenCV ইনস্টল হয়ে গেলে আপনার ক্যামেরা সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করার জন্য পরীক্ষা করা যাক।

আমি ধরে নিচ্ছি যে আপনার রাস্পবেরি পাইতে ইতিমধ্যে একটি পাইক্যাম ইনস্টল করা আছে।

আপনার IDE তে নিচের পাইথন কোডটি লিখুন:

np হিসাবে numpy আমদানি করুন

cv2 cap = cv2 আমদানি করুন। ফ্লিপ (ফ্রেম -1)) এবং 0xff যদি k == 27: # ব্রেক ক্যাপ ছাড়ার জন্য 'ESC' টিপুন। () cv2.destroyAllWindows ()

উপরের কোডটি ভিডিও স্ট্রিম ক্যাপচার করবে যা আপনার PiCam দ্বারা তৈরি হবে, উভয়ই BGR কালার এবং গ্রে মোডে প্রদর্শন করবে।

মনে রাখবেন যে আমি আমার ক্যামেরাটি একত্রিত হওয়ার কারণে উল্লম্বভাবে ঘোরানো হয়েছিল। যদি এটি আপনার ক্ষেত্রে না হয়, "ফ্লিপ" কমান্ড লাইনটি মন্তব্য করুন বা মুছুন।

আপনি বিকল্পভাবে আমার GitHub: simpleCamTest.py থেকে কোডটি ডাউনলোড করতে পারেন

চালানোর জন্য, কমান্ডটি প্রবেশ করান:

পাইথন simpleCamTest.py

প্রোগ্রামটি শেষ করতে, আপনাকে অবশ্যই আপনার কীবোর্ডের [ESC] কী টিপতে হবে।

[ESC] টিপার আগে ভিডিও উইন্ডোতে আপনার মাউস ক্লিক করুন

উপরের ছবিটি ফলাফল দেখায়।

ক্যামেরা খোলার চেষ্টা করার সময় কিছু নির্মাতারা সমস্যা খুঁজে পেয়েছিলেন ("অ্যাসারশন ব্যর্থ" ত্রুটি বার্তা)। ওপেনসিভি ইনস্টলেশনের সময় ক্যামেরা সক্ষম না হলে এটি ঘটতে পারে এবং তাই, ক্যামেরা ড্রাইভার সঠিকভাবে ইনস্টল করেনি। সংশোধন করতে, কমান্ডটি ব্যবহার করুন:

sudo modprobe bcm2835-v4l2

আপনি /etc /modules ফাইলের শেষ লাইনে bcm2835-v4l2 যোগ করতে পারেন যাতে ড্রাইভার বুটে লোড হয়।

ওপেনসিভি সম্পর্কে আরও জানতে, আপনি টিউটোরিয়ালটি অনুসরণ করতে পারেন: লোড হচ্ছে -ভিডিও-পাইথন-ওপেনসিভি-টিউটোরিয়াল

ধাপ 4: মুখ সনাক্তকরণ

মুখ সনাক্তকরণ
মুখ সনাক্তকরণ
মুখ সনাক্তকরণ
মুখ সনাক্তকরণ

ফেস রিকগনিশনের সবচেয়ে মৌলিক কাজ অবশ্যই, "ফেস ডিটেক্টিং"। কোন কিছুর আগে, ভবিষ্যতে ধরা পড়া নতুন মুখের সাথে তুলনা করার সময়, একটি মুখকে (ফেজ 1) "চিনতে" হবে (ফেজ 1)।

একটি মুখ (বা কোন বস্তু) সনাক্ত করার সবচেয়ে সাধারণ উপায় হল "হার ক্যাসকেড ক্লাসিফায়ার" ব্যবহার করা

হার ফিচার-ভিত্তিক ক্যাসকেড ক্লাসিফায়ার ব্যবহার করে অবজেক্ট ডিটেকশন হল পল ভায়োলা এবং মাইকেল জোন্স তাদের গবেষণাপত্রে প্রস্তাবিত একটি কার্যকর অবজেক্ট ডিটেকশন পদ্ধতি, ২০০১ সালে "সহজ বৈশিষ্ট্যগুলির একটি বুস্টেড ক্যাসকেড ব্যবহার করে দ্রুত বস্তু সনাক্তকরণ"। এটি একটি মেশিন লার্নিং ভিত্তিক পদ্ধতি যেখানে একটি ক্যাসকেড ফাংশন অনেক ইতিবাচক এবং নেতিবাচক চিত্র থেকে প্রশিক্ষিত হয়। এটি তখন অন্যান্য ছবিতে বস্তু সনাক্ত করতে ব্যবহৃত হয়।

এখানে আমরা ফেস ডিটেকশন নিয়ে কাজ করব। প্রাথমিকভাবে, অ্যালগরিদমের শ্রেণীবদ্ধকারীকে প্রশিক্ষণের জন্য প্রচুর ইতিবাচক চিত্র (মুখের ছবি) এবং নেতিবাচক চিত্র (মুখবিহীন ছবি) প্রয়োজন। তারপরে আমাদের এটি থেকে বৈশিষ্ট্যগুলি বের করতে হবে। ভাল খবর হল যে ওপেনসিভি একজন প্রশিক্ষকের পাশাপাশি ডিটেক্টরের সাথে আসে। আপনি যদি আপনার নিজস্ব ক্লাসিফায়ারকে গাড়ি, প্লেন ইত্যাদির জন্য প্রশিক্ষণ দিতে চান তবে আপনি একটি তৈরি করতে OpenCV ব্যবহার করতে পারেন। এর সম্পূর্ণ বিবরণ এখানে দেওয়া হয়েছে: ক্যাসকেড ক্লাসিফায়ার প্রশিক্ষণ।

আপনি যদি নিজের ক্লাসিফায়ার তৈরি করতে না চান, তাহলে ওপেনসিভিতে ইতিমধ্যেই মুখ, চোখ, হাসি ইত্যাদির জন্য অনেক পূর্ব-প্রশিক্ষিত ক্লাসিফায়ার রয়েছে।

যথেষ্ট তত্ত্ব, আসুন ওপেনসিভি দিয়ে একটি ফেস ডিটেক্টর তৈরি করি!

ফাইলটি ডাউনলোড করুন: faceDetection.py আমার GitHub থেকে।

np হিসাবে numpy আমদানি করুন

আমদানি করুন cv2 faceCascade = cv2. CascadeClassifier ('Cascades/haarcascade_frontalface_default.xml') cap = cv2, img = cap.read () img = cv2। 20, 20)) মুখে (x, y, w, h) জন্য: cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = ধূসর [y: y+h, x: x+w] roi_color = img [y: y+h, x: x+w] cv2.imshow ('video', img) k = cv2.waitKey (30) & 0xff যদি k == 27: # ব্রেক ক্যাপ ছাড়ার জন্য 'ESC' টিপুন।

বিশ্বাস করুন বা না করুন, পাইথন এবং ওপেনসিভি ব্যবহার করে আপনার মুখ সনাক্ত করার জন্য উপরের কয়েকটি লাইন কোডের প্রয়োজন।

যখন আপনি ক্যামেরা পরীক্ষা করতে ব্যবহৃত শেষ কোডের সাথে তুলনা করবেন, তখন আপনি বুঝতে পারবেন যে এতে কয়েকটি অংশ যুক্ত করা হয়েছে। নিচের লাইনটি লক্ষ্য করুন:

faceCascade = cv2. CascadeClassifier ('Cascades/haarcascade_frontalface_default.xml')

এটি সেই লাইন যা "ক্লাসিফায়ার" লোড করে (এটি অবশ্যই আপনার প্রকল্পের ডিরেক্টরিতে "ক্যাসকেডস/" নামে একটি ডিরেক্টরিতে থাকতে হবে)।

তারপরে, আমরা আমাদের ক্যামেরা সেট করব এবং লুপের ভিতরে, আমাদের ইনপুট ভিডিও গ্রেস্কেল মোডে লোড করব (আমরা আগে দেখেছি)।

এখন আমাদের অবশ্যই আমাদের ক্লাসিফায়ার ফাংশনকে কল করতে হবে, এটি স্কেল ফ্যাক্টর, প্রতিবেশীদের সংখ্যা এবং সনাক্তকৃত মুখের ন্যূনতম আকার হিসাবে কিছু গুরুত্বপূর্ণ প্যারামিটার পাস করে।

face = faceCascade.detectMultiScale (ধূসর, স্কেলফ্যাক্টর = 1.2, minNeighbours = 5, minSize = (20, 20))

কোথায়,

  • ধূসর হল ইনপুট গ্রেস্কেল ইমেজ।
  • স্কেলফ্যাক্টর হল একটি প্যারামিটার যা প্রতিটি ইমেজ স্কেলে ছবির আকার কতটা হ্রাস করা হয় তা নির্দিষ্ট করে। এটি স্কেল পিরামিড তৈরিতে ব্যবহৃত হয়।
  • minNeighbours হল একটি প্যারামিটার যা প্রতিটি প্রার্থীর আয়তক্ষেত্র কতজন প্রতিবেশী থাকা উচিত তা নির্দিষ্ট করে। একটি উচ্চ সংখ্যা কম মিথ্যা ইতিবাচক দেয়।
  • মিনিসাইজ হল একটি ন্যূনতম আয়তক্ষেত্র আকার যা একটি মুখ হিসেবে বিবেচিত হবে।

ফাংশনটি ছবিতে মুখ সনাক্ত করবে। পরবর্তীতে, আমাদের অবশ্যই ছবিতে একটি "আয়তক্ষেত্র" চিহ্নিত করতে হবে, উদাহরণস্বরূপ, একটি নীল আয়তক্ষেত্র। এটি কোডের এই অংশ দিয়ে করা হয়:

মুখে (x, y, w, h) জন্য:

cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = ধূসর [y: y+h, x: x+w] roi_color = img [y: y+h, x: x+w]

যদি মুখগুলি পাওয়া যায়, এটি সনাক্তকৃত মুখের অবস্থানগুলি আয়তক্ষেত্র হিসাবে বাম কোণে (x, y) এবং "w" এর প্রস্থ হিসাবে এবং "h" এর উচ্চতা ==> (x, y, w, জ)। দয়া করে উপরের ছবিটি দেখুন।

একবার আমরা এই অবস্থানগুলি পেয়ে গেলে, আমরা মুখের জন্য একটি "ROI" (আঁকা আয়তক্ষেত্র) তৈরি করতে পারি এবং imshow () ফাংশন সহ ফলাফল উপস্থাপন করতে পারি।

Rpi টার্মিনাল ব্যবহার করে আপনার পাইথন পরিবেশে উপরের পাইথন স্ক্রিপ্টটি চালান:

পাইথন faceDetection.py

ফলাফল:

ছবি
ছবি

আপনি "চোখ সনাক্তকরণ" বা এমনকি "হাসি সনাক্তকরণ" এর জন্য ক্লাসিফায়ার অন্তর্ভুক্ত করতে পারেন। সেই ক্ষেত্রে, আপনি ক্লাসিফায়ার ফাংশন এবং আয়তক্ষেত্র অঙ্কনটি মুখের লুপের ভিতরে অন্তর্ভুক্ত করবেন, কারণ চোখ বা মুখের বাইরে একটি হাসি সনাক্ত করার কোনও অর্থ হবে না।

লক্ষ্য করুন যে একটি Pi তে, একই কোডে বেশ কয়েকটি শ্রেণীবদ্ধকারী প্রক্রিয়াকরণকে ধীর করে দেবে, একবার এই সনাক্তকরণের পদ্ধতি (HaarCascades) প্রচুর পরিমাণে গণনীয় শক্তি ব্যবহার করে। একটি ডেস্কটপে, এটি চালানো সহজ।

আমার GitHub এ আপনি অন্যান্য উদাহরণ পাবেন:

faceEyeDetection.py

faceSmileDetection.py

faceSmileEyeDetection.py

এবং উপরের ছবিতে, আপনি ফলাফল দেখতে পারেন।

মুখ সনাক্তকরণকে আরও ভালভাবে বুঝতে আপনি নীচের টিউটোরিয়ালটি অনুসরণ করতে পারেন:

হার ক্যাসকেড অবজেক্ট ডিটেকশন ফেস অ্যান্ড আই ওপেনসিভি পাইথন টিউটোরিয়াল

ধাপ 5: তথ্য সংগ্রহ

তথ্য সংগ্রহ
তথ্য সংগ্রহ
তথ্য সংগ্রহ
তথ্য সংগ্রহ

প্রথমত, আমি অবশ্যই রমিজ রাজাকে ফটোতে ফেস রিকগনিশন নিয়ে তার দুর্দান্ত কাজের জন্য ধন্যবাদ জানাই:

ওপেনসিভি এবং পাইথন ব্যবহার করে ফেস রিকগনিশন: একজন শুরুকারীর নির্দেশিকা

এবং অনির্বাণ কর, যে ভিডিও ব্যবহার করে একটি খুব ব্যাপক টিউটোরিয়াল তৈরি করেছে:

ফেস রিকগনিশন - 3 অংশ

আমি সত্যিই সুপারিশ করছি যে আপনি উভয় টিউটোরিয়াল দেখুন।

এই বলে, আসুন আমাদের প্রকল্পের প্রথম পর্ব শুরু করি। আমরা এখানে কি করব, শেষ ধাপ থেকে শুরু হচ্ছে (ফেস ডিটেক্টিং), আমরা কেবল একটি ডেটাসেট তৈরি করব, যেখানে আমরা প্রতিটি আইডি, মুখের সনাক্তকরণের জন্য ব্যবহৃত অংশের সাথে ধূসর রঙের ফটোগুলির জন্য সংরক্ষণ করব।

প্রথমে, একটি ডিরেক্টরি তৈরি করুন যেখানে আপনি আপনার প্রকল্পটি বিকাশ করেন, উদাহরণস্বরূপ, FacialRecognitionProject:

mkdir FacialRecognitionProject

এই ডিরেক্টরিতে, 3 টি পাইথন স্ক্রিপ্ট ছাড়াও আমরা আমাদের প্রকল্পের জন্য তৈরি করব, আমরা অবশ্যই এটিতে ফেসিয়াল ক্লাসিফায়ার সংরক্ষণ করেছি। আপনি এটি আমার গিটহাব থেকে ডাউনলোড করতে পারেন: haarcascade_frontalface_default.xml

এরপরে, একটি সাব -ডাইরেক্টরি তৈরি করুন যেখানে আমরা আমাদের মুখের নমুনা সংরক্ষণ করব এবং এর নাম দেব "ডেটাসেট":

mkdir ডেটাসেট

এবং আমার GitHub থেকে কোডটি ডাউনলোড করুন: 01_face_dataset.py

আমদানি cv2

আমদানি os cam = cv2. VideoCapture (0) cam.set (3, 640) # set video width cam.set (4, 480) # set video height face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # প্রতিটি ব্যক্তির জন্য, একটি সংখ্যাসূচক মুখ লিখুন face_id = ইনপুট ('\ n প্রবেশ করুন ব্যবহারকারী আইডি শেষ চাপ ==>') মুদ্রণ ("\ n [তথ্য] মুখ ক্যাপচার আরম্ভ। ক্যামেরা দেখুন এবং অপেক্ষা করুন …") # পৃথক নমুনা মুখ গণনা গণনা শুরু করুন 0 ধূসর, 1.3, 5) মুখে (x, y, w, h): cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) count + = 1 # ক্যাপচার করা ছবিটি ডেটাসেট ফোল্ডারে সংরক্ষণ করুন cv2.imwrite ("dataset/User।" + str (face_id) + '।' + str (count) + ".jpg", ধূসর [y: y + h, x: x+w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # k == 27: break elif count> = 30: # 30 টি মুখের নমুনা নিন এবং ভিডিও বিরতি বন্ধ করুন # ab করুন এটি ক্লিনআপ প্রিন্টের ("[n [INFO] প্রস্থান প্রোগ্রাম এবং ক্লিনআপ স্টাফ") cam.release () cv2.destroyAllWindows ()

কোডটি মুখের সনাক্তকরণের জন্য আমরা যে কোডটি দেখেছি তার অনুরূপ। আমরা কি যোগ করেছি, একটি ব্যবহারকারী আইডি ক্যাপচার করার জন্য একটি "ইনপুট কমান্ড" ছিল, এটি একটি পূর্ণসংখ্যা সংখ্যা (1, 2, 3, ইত্যাদি) হওয়া উচিত

face_id = ইনপুট ('user n প্রবেশ করুন ইউজার আইডি শেষ প্রেস ==>')

এবং প্রতিটি বন্দী ফ্রেমের জন্য, আমাদের এটি একটি "ডেটাসেট" ডিরেক্টরিতে একটি ফাইল হিসাবে সংরক্ষণ করা উচিত:

cv2.imwrite ("ডেটাসেট/ব্যবহারকারী।" + str (face_id) + '।' + str (গণনা) + ".jpg", ধূসর [y: y + h, x: x + w])

লক্ষ্য করুন যে উপরের ফাইলটি সংরক্ষণ করার জন্য, আপনাকে অবশ্যই লাইব্রেরি "ওএস" আমদানি করতে হবে। প্রতিটি ফাইলের নাম কাঠামো অনুসরণ করবে:

User.face_id.count.jpg

উদাহরণস্বরূপ, একটি face_id = 1 ব্যবহারকারীর জন্য, ডেটাসেট/ ডিরেক্টরিতে চতুর্থ নমুনা ফাইলটি এমন কিছু হবে:

User.1.4.jpg

আমার পাই থেকে উপরের ছবিতে দেখানো হয়েছে। আমার কোডে, আমি প্রতিটি আইডি থেকে 30 টি নমুনা ক্যাপচার করছি। আপনি শেষ "এলিফ" এ এটি পরিবর্তন করতে পারেন। মুখের নমুনাগুলি যেখানে ধরা পড়ে সেখানে লুপ ভাঙার জন্য নমুনার সংখ্যা ব্যবহার করা হয়।

পাইথন স্ক্রিপ্ট চালান এবং কয়েকটি আইডি ক্যাপচার করুন। যখনই আপনি নতুন ব্যবহারকারীকে একত্রিত করতে চান (অথবা ইতিমধ্যে বিদ্যমান আছে তার জন্য ফটো পরিবর্তন করতে চান) আপনাকে অবশ্যই স্ক্রিপ্টটি চালাতে হবে।

ধাপ 6: প্রশিক্ষক

প্রশিক্ষক
প্রশিক্ষক

এই দ্বিতীয় ধাপে, আমাদের অবশ্যই আমাদের ডেটাসেট এবং ওপেনসিভি রেকগনাইজার "প্রশিক্ষক" থেকে সমস্ত ব্যবহারকারীর ডেটা নিতে হবে। এটি সরাসরি একটি নির্দিষ্ট OpenCV ফাংশন দ্বারা সম্পন্ন করা হয়। ফলাফল একটি.yml ফাইল হবে যা একটি "trainer/" ডিরেক্টরিতে সংরক্ষিত হবে।

সুতরাং, আসুন একটি উপ -ডিরেক্টরি তৈরি করা শুরু করি যেখানে আমরা প্রশিক্ষিত ডেটা সংরক্ষণ করব:

mkdir প্রশিক্ষক

আমার গিটহাব থেকে দ্বিতীয় পাইথন স্ক্রিপ্টটি ডাউনলোড করুন: 02_face_training.py

আমদানি cv2

PIL আমদানি থেকে np হিসাবে আমদানি করুন চিত্র আমদানি os # ফেস ইমেজ ডাটাবেস পাথ = 'ডেটাসেট' সনাক্তকারী = cv2.face. LBPHFaceRecognizer_create () detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); # ফাংশন ছবি এবং লেবেল ডেটা পেতে getImagesAndLabels (path): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] faceSamples = ids = imagePaths এ imagePath- এর জন্য: PIL_img = Image.open (imagePath).convert ('L') # এটি ধূসর স্কেলে রূপান্তর করুন img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [-1]। বিভক্ত ("।") [1]) মুখ = detector.detectMultiScale (img_numpy) (x, y, w, h) এর জন্য মুখে: faceSamples.append (img_numpy [y: y+h, x: x+w]) ids.append (id) return faceSamples, ids print ("\ n [INFO] প্রশিক্ষণের মুখ। এতে কয়েক সেকেন্ড সময় লাগবে। অপেক্ষা করুন …") মুখ, ids = getImagesAndLabels (path) identizer.train (face, np.array (ids)) # মডেলটি প্রশিক্ষক/trainer.yml identizer.write এ সংরক্ষণ করুন ('trainer/trainer.yml') # identizer.save () Mac এ কাজ করেছে, কিন্তু Pi তে নয় # প্রশিক্ষিত মুখের সংখ্যা প্রিন্ট করুন এবং প্রোগ্রাম প্রিন্ট শেষ করুন ("\ n [INFO] {0} প্রশিক্ষিত মুখ। প্রস্থান প্রোগ্রাম"। ফরম্যাট (len (np.unique (ids))))

আপনার Rpi তে PIL লাইব্রেরি ইনস্টল আছে কিনা নিশ্চিত করুন। যদি না হয়, টার্মিনালে নিচের কমান্ডটি চালান:

পিপ ইনস্টল বালিশ

আমরা ওপেনসিভি প্যাকেজে অন্তর্ভুক্ত এলবিপিএইচ (লোকাল বাইনারি প্যাটার্নস হিস্টোগ্রামস) ফেস রিকগনাইজার হিসেবে ব্যবহার করব। আমরা নিম্নলিখিত লাইনে এটি করি:

সনাক্তকারী = cv2.face. LBPHFaceRecognizer_create ()

ফাংশন "getImagesAndLabels (path)", ডিরেক্টরিতে সমস্ত ফটো তুলবে: "ডেটাসেট/", 2 টি অ্যারে ফিরিয়ে দেবে: "আইডি" এবং "ফেস"। ইনপুট হিসাবে সেই অ্যারেগুলির সাথে, আমরা "আমাদের সনাক্তকারীকে প্রশিক্ষণ দেব":

স্বীকৃতিদাতা ট্রেন (মুখ, আইডি)

ফলস্বরূপ, "trainer.yml" নামে একটি ফাইল সেই প্রশিক্ষক নির্দেশিকায় সংরক্ষিত হবে যা পূর্বে আমাদের দ্বারা তৈরি করা হয়েছিল।

এটাই! আমি শেষ মুদ্রণ বিবৃতি অন্তর্ভুক্ত করেছি যেখানে আমি নিশ্চিতকরণের জন্য প্রদর্শন করেছি, ব্যবহারকারীর মুখের সংখ্যা যা আমরা প্রশিক্ষিত করেছি।

প্রতিবার যখন আপনি ফেজ 1, ফেজ 2 সঞ্চালন করবেন তখন অবশ্যই চালাতে হবে

ধাপ 7: শনাক্তকারী

স্বীকৃতিদাতা
স্বীকৃতিদাতা
স্বীকৃতিদাতা
স্বীকৃতিদাতা

এখন, আমরা আমাদের প্রকল্পের চূড়ান্ত পর্যায়ে পৌঁছেছি। এখানে, আমরা আমাদের ক্যামেরায় একটি তাজা মুখ ধরব এবং যদি এই ব্যক্তির মুখ আগে ধরা পড়ে এবং প্রশিক্ষিত হয়, তাহলে আমাদের স্বীকৃতিদাতা তার আইডি এবং একটি সূচী ফেরত দেওয়ার একটি "ভবিষ্যদ্বাণী" করবে, যা দেখায় যে স্বীকৃতিদাতা এই ম্যাচের সাথে কতটা আত্মবিশ্বাসী।

আসুন আমার GitHub থেকে 3 য় পর্বের পাইথন স্ক্রিপ্টটি ডাউনলোড করি: 03_face_recognition.py।

আমদানি cv2

np আমদানি ns হিসাবে আমদানি করুন font = cv2. FONT_HERSHEY_SIMPLEX #iniciate id counter id = 0 # id এর সাথে সম্পর্কিত নাম: example ==> Marcelo: id = 1, etc names = ['None', 'Marcelo', 'Paula', 'Ilza', 'Z ',' W '] # আরম্ভ করুন এবং রিয়েলটাইম ভিডিও ক্যাপচার ক্যাম = cv2 শুরু করুন। একটি মুখ হিসাবে স্বীকৃত হতে হবে উল্লম্বভাবে ধূসর করুন, w, h) মুখে: cv2.rectangle (img, (x, y), (x+w, y+h), (0, 255, 0), 2) id, आत्मविश्वास = पहचानकर्ता y: y+h, x: x+w]) # আত্মবিশ্বাস তাদের কম আছে কিনা তা পরীক্ষা করুন ".ফরম্যাট (গোল (100 - আস্থা)) অন্য: id =" অজানা "আত্মবিশ্বাস =" {0}%"। idence) x+5, y+h-5), font, 1, (255, 255, 0), 1) cv2.imshow ('camera', img) k = cv2.waitKey (10) & 0xff # ESC চাপুন k == 27: ভিডিও থেকে বেরিয়ে যাওয়ার জন্য

আমরা এখানে একটি নতুন অ্যারে অন্তর্ভুক্ত করছি, তাই আমরা সংখ্যাযুক্ত আইডির পরিবর্তে "নাম" প্রদর্শন করব:

নাম = ['কেউ না', 'মার্সেলো', 'পলা', 'ইলজা', 'জেড', 'ডাব্লু']

সুতরাং, উদাহরণস্বরূপ: মার্সেলো আইডি = 1 ব্যবহারকারী হবে; পলা: আইডি = 2, ইত্যাদি

এর পরে, আমরা একটি মুখ সনাক্ত করব, যা আমরা আগে হ্যাসকাসকেড শ্রেণীবদ্ধকারী দিয়ে করেছি। একটি সনাক্ত মুখের সাথে আমরা উপরের কোডের সবচেয়ে গুরুত্বপূর্ণ ফাংশনটি কল করতে পারি:

আইডি, আত্মবিশ্বাস = শনাক্তকারী পূর্বাভাস (মুখের ধূসর অংশ)

Identizer.predict (), একটি প্যারামিটার হিসেবে মুখের একটি ক্যাপচার করা অংশ বিশ্লেষণ করতে হবে এবং তার সম্ভাব্য মালিককে ফিরিয়ে দেবে, তার আইডি এবং এই ম্যাচটির সাথে স্বীকৃতিদাতার কতটা আত্মবিশ্বাস রয়েছে তা নির্দেশ করে।

লক্ষ্য করুন যে আত্মবিশ্বাস সূচক "শূন্য" ফিরিয়ে দেবে যদি এটি একটি নিখুঁত ম্যাচ হবে

এবং শেষ পর্যন্ত, যদি স্বীকৃতিদাতা একটি মুখের পূর্বাভাস দিতে পারে, আমরা সম্ভাব্য আইডি সহ চিত্রের উপরে একটি লেখা রাখি এবং মিলের সঠিক হওয়া % এ "সম্ভাব্যতা" কতটা ("সম্ভাবনা" = 100 - আস্থা সূচক)। যদি না হয়, মুখে একটি "অজানা" লেবেল লাগানো হয়।

ফলাফল সহ একটি জিআইএফ নীচে:

ছবি
ছবি

উপরের ছবিতে, আমি এই প্রকল্পের সাথে সম্পন্ন কিছু পরীক্ষা দেখাই, যেখানে স্বীকৃত কাজ করে কিনা তা যাচাই করার জন্য আমি ফটো ব্যবহার করেছি।

ধাপ 8: উপসংহার

উপসংহার
উপসংহার

বরাবরের মতো, আমি আশা করি এই প্রকল্পটি অন্যদের ইলেকট্রনিক্সের উত্তেজনাপূর্ণ জগতে তাদের পথ খুঁজে পেতে সাহায্য করতে পারে!

বিস্তারিত এবং চূড়ান্ত কোডের জন্য, দয়া করে আমার গিটহাব ডিপোজিটরি দেখুন: ওপেনসিভি-ফেস-রিকগনিশন

আরো প্রকল্পের জন্য, দয়া করে আমার ব্লগে যান: MJRoBot.org

ভবিষ্যতের টিউটোরিয়ালের এক ঝলক নীচে, যেখানে আমরা "স্বয়ংক্রিয় ফেস ট্র্যাক এবং মুখ সনাক্তকরণের অন্যান্য পদ্ধতি" অন্বেষণ করব:

ছবি
ছবি

বিশ্বের দক্ষিণ দিক থেকে সালাম!

আমার পরবর্তী নির্দেশনায় দেখা হবে!

ধন্যবাদ, মার্সেলো

প্রস্তাবিত: