Object Detection With Pre-trained YOLO

ဒီေန့မွာေတာ့ object detection ကုိ train ျပီးသား yolov3 model ကုိသုံးျပီး object detection ပုံစံ လုပ္ၾကပါမယ္။

မွတ္ခ်က္။။ဒီထဲက code တခ်ို့သည္ google ေခါက္ရင္ အလြယ္တကူေတြ့နုိင္ပါတယ္။နားလည္ရလြယ္ေအာင္ အနည္းငယ္ျပင္ထားျပီး ျပန္လည္ရွင္းျပေပးခ်င္းျဖစ္ပါတယ္။

 

Step 1:Install Opencv

ပထမဦးဆုံး computer vision library ျဖစ္တဲ့ opencv ကုိလုိပါမယ္။ေအာက္ကလင့္ကေန install လုပ္ပုံကုိၾကည့္နုိင္ပါတယ္။

https://www.pyrobocity.com/quick-easy-way-to-install-opencv/

Step 2: Download Yolo Model

ေအာက္ကလင့္ကုိ click ျပီးေဒါင္းေလာ့လုပ္ပါ

https://s3pyrobocity.s3-us-west-2.amazonaws.com/media/models/yolo.zip

Project Structure

  • object_detect
    • detect.py
    • yolo
      • coco.names
      • yolov3.cfg
      • yolov3.weights

Object detect ဆုိတဲ့ folder ထဲမွာ detect.py ရယ္ yolo ဆုိတဲ့ folder ရွိပါမယ္။yolo folder ထဲမွာေတာ့ coco.names ဆုိတဲ့ object labels ေတြရယ္ config file ရယ္ model weight file ရယ္ရွိေနပါမယ္။

အဓိက ၾကည့္ရမွာကေတာ့ detect.py ပါ။အဲ့ေတာ့ detect.py ထဲမွာ ေအာက္က code ေတြစေရးရေအာင္

အေပါ္ကတုိင္း လုိအပ္တဲ့ packages ေတြ import လုပ္ျပီး လုိအပ္တဲ့ argument မ်ား ျဖစ္တဲ့ image ရယ္ yolo model ယူဖုိ့ yolo ရယ္ object detect လုပ္လုိ့ ဘယ္ေလာက္ confidence ရွိမွ ယူမယ္ဆုိတာရယ္ object detect လုပ္တဲ့အခါ အမွားနည္းေအာင္ non-maxma supression အတြက္ value ရယ္ ကိုေရးထားပါတယ္။

coco.names file မွာ trained ထားတဲ့ object labels ေတြရွိပါတယ္။အဲ့ labels ေတြကုိ read လုိက္ျပီး random colors မ်ားယူလုိက္ပါတယ္။ဥပမာ ကားဆုိ အေရာင္တမ်ိုး ျမင္းဆုိ အေရာင္တမ်ိုး အဲ့လိုမ်ိုးေလး ျဖစ္ေအာင္ ကုိယ္တုိင္သတ္မွတ္ေနရင္ အလုပ္ရွုပ္လုိ့ random color ယူလုိက္ပါတယ္။ျပီးရင္ေတာ့ model weight ရယ္ config path ရယ္ကုိယူလုိက္ပါတယ္။

Opencv ရဲ့ေနာက္ပုိင္း version မွာပါလာတယ့္ dnn module ကုိသုံးျပီး model ကုိ load လုပ္လုိက္ပါတယ္။ျပီးရင္ေတာ့ image ကို read ျပီး detect အဆင္ေျပေအာင္ နည္းနည္းေလး ခ်ုံ့လုိက္ပါတယ္။Optional ပါ။မလုပ္လဲအဆင္ေျပပါတယ္။ျပီးရင္ေတာ့ network layers ေတြကုိယူထားလုိက္ပါတယ္။image ကုိ တန္းျပီး network ထဲ ထည့္လုိက္လုိ့မရပါဘူး။အဲ့ေတာ့ feature ေလးေတြျဖစ္တဲ့ yolo လက္ခံနုိင္တဲ့ size ထဲက 416×416 နဲ့ blob ယူျပီး ျပီးေတာ့မွ network ထဲ forward လုပ္လုိက္တာပါ။

အေပါ္ကေတာ့ output ထဲကေန rectangle ဆြဲလုိ့ရေအာင္ လုပ္တာေလးပါပဲ။detect လုပ္တာ ဘယ္ေလာက္ထိ confidence ရွိလဲ ဥပမာ ၄၀% ေလာက္ပဲမွန္တာမ်ိုးတုိ့ဆုိ က်ြန္ေတာ္တုိ့က မယူတာအေကာင္းဆုံးပဲမုိ့ argument ေပးတုန္းက 50% အထက္မွ ယူေအာင္စစ္ထားတာေလးပဲသတိျပဳရမွာပါ။

ေနာက္တစ္ဆင့္ကေတာ့ detect လုပ္လုိ့ရတဲ့ object ေတြရဲ့ indexes ေတြကုိ ယူျပီး loop ပတ္တာ rectangle ဆြဲလုိ့ရေအာင္ boxes ထဲကေန သက္ဆုိင္ရာ x,y,w,h ေတြျပန္ယူျပီး rectangle ဆြဲလုိက္ပါတယ္။ျပီးရင္ေတာ့ image ကုိ show လုပ္လုိ္က္ပါတယ္။

အေပါ္က command နဲ့ –image ေနာက္က ကိုယ္ detect လုပ္မဲ့ image ကုိ ထည့္ျပီး run ၾကည့္လုိ္က္ပါ။အားလုံးအဆင္ေျပပါေစ။

Output

1.

2.

 

 

Share:
  • 292
  • 0