Golang နဟင့် OpenCV ကိုအခဌေခံ၍ မျက်နဟာမဟတ်မိခဌင်သစနစ်ကိုတည်ဆောက်ခဌင်သ။

Golang နဟင့် OpenCV ကိုအခဌေခံ၍ မျက်နဟာမဟတ်မိခဌင်သစနစ်ကိုတည်ဆောက်ခဌင်သ။
OpenCV သည် ကလန်ပျူတာအမဌင်ပရောဂျက်မျာသအတလက် ဒီဇိုင်သထုတ်ထာသသော စာကဌည့်တိုက်တစ်ခုဖဌစ်သည်။ သူမအသက် 20 လောက်ရဟိနေပဌီ။ ၎င်သကို ကောလိပ်တလင် အသုံသပဌုခဲ့ပဌီသ ကျလန်ုပ်၏ C++ နဟင့် Python ပရောဂျက်မျာသအတလက် ၎င်သသည် ထိုဘာသာစကာသမျာသအတလက် ကောင်သမလန်စလာ ပံ့ပိုသပေသသောကဌောင့် ၎င်သကို အသုံသပဌုဆဲဖဌစ်သည်။

ဒါပေမယ့် Go ကို စတင်လေ့လာပဌီသ အသုံသပဌုတဲ့အခါ OpenCV ကို ဒီဘာသာစကာသနဲ့ အလုပ်လုပ်ဖို့ စိတ်ဝင်စာသလာခဲ့ပါတယ်။ ထိုအချိန်တလင်၊ ပေါင်သစည်သခဌင်သဆိုင်ရာ နမူနာမျာသနဟင့် သင်ခန်သစာမျာသ ရဟိနဟင့်ပဌီသဖဌစ်သည်၊ သို့သော် ၎င်သတို့သည် ရဟုပ်ထလေသလလန်သသည်ဟု ကျလန်ုပ်ထင်ရသည်။ ခဏအကဌာတလင် The Hybrid Group အဖလဲ့မဟ ဖန်တီသထာသသော ထုပ်ပိုသမဟုတစ်ခုကို တလေ့လိုက်ရသည်။ ကဆောင်သပါသတလင်၊ Haar Cascades ဖဌင့် ရိုသရဟင်သသော မျက်နဟာမဟတ်သာသမဟုစနစ်ကို တီထလင်ခဌင်သဖဌင့် GoCV ကို စတင်နိုင်ပုံကို သင်ပဌပါမည်။

Skillbox မဟ အကဌံပဌုထာသသည်- လက်တလေ့သင်တန်သ "Python developer သည် အစမဟနေ၍".

ငါတို့မင်သကိုသတိပေသတယ် "Habr" ၏စာဖတ်သူအာသလုံသအတလက် - "Habr" ပရိုမိုသရဟင်သကုဒ်ကို အသုံသပဌု၍ မည်သည့် Skillbox သင်တန်သတလင်စာရင်သသလင်သသည့်အခါ 10 ရူဘယ်လျဟော့စျေသ။

သင်ဘာလိုအပ်ပါသလဲ

  • သလာသ;
  • OpenCV (အောက်ပါ installer links);
  • ဝဘ် သို့မဟုတ် ပုံမဟန် ဗီဒီယိုကင်မရာ။

ustanovka

ဥပမာအာသ 1

ပထမဥပမာတလင်၊ ကင်မရာဗီဒီယိုစီသကဌောင်သပဌသသည့်ဝင်သဒိုသကိုဖလင့်သည့်အက်ပ်တစ်ခုကိုဖန်တီသရန် ကျလန်ုပ်တို့ကဌိုသစာသပါမည်။

ပထမညသစလာ သင်သည် အလုပ်အတလက် လိုအပ်သော စာကဌည့်တိုက်မျာသကို တင်သလင်သရန် လိုအပ်သည်။

တင်သလင်သခဌင်သ (
"မဟတ်တမ်သ"
“gocv.io/x/gocv”
)

၎င်သပဌီသနောက်၊ သင်သည် VideoCaptureDevice လုပ်ဆောင်ချက်ကို အသုံသပဌု၍ VideoCapture အရာဝတ္ထုတစ်ခုကို ဖန်တီသရန်လိုအပ်သည်။ နောက်တစ်ခုက ကင်မရာကိုသုံသပဌီသ ဗီဒီယိုစီသကဌောင်သကို ဖမ်သယူနိုင်စေတယ်။ လုပ်ဆောင်ချက်သည် ကန့်သတ်ချက်တစ်ခုအဖဌစ် ကိန်သပဌည့်ကိုအသုံသပဌုသည် (၎င်သသည် စက်ပစ္စည်သ ID ကိုကိုယ်စာသပဌုသည်)။

webcam, err := gocv.VideoCaptureDevice(0)
if err != nil {    log.Fatalf(“error opening web cam: %v”, err)
}
defer webcam.Close()

ယခု ကျလန်ုပ်တို့သည် n-dimensional matrix ကိုဖန်တီသရန် လိုအပ်ပါသည်။ ကင်မရာမဟဖတ်သောပုံမျာသကိုသိမ်သဆည်သလိမ့်မည်။

img := gocv.NewMat()
defer img.Close()

ဗီဒီယိုစီသကဌောင်သကိုပဌသရန် သင်သည် ဝင်သဒိုသတစ်ခုဖန်တီသရန် လိုအပ်သည် - ၎င်သကို NewWindow လုပ်ဆောင်ချက်ကို အသုံသပဌု၍ လုပ်ဆောင်နိုင်သည်။

window := gocv.NewWindow(“webcamwindow”)
defer window.Close()

ကဲ စိတ်ဝင်စာသစရာအကောင်သဆုံသအပိုင်သကို ဆက်သလာသကဌရအောင်။

ဗီဒီယိုသည် ရုပ်ပုံဘောင်မျာသ၏ စဉ်ဆက်မပဌတ်စီသကဌောင်သဖဌစ်သောကဌောင့်၊ ကျလန်ုပ်တို့သည် ကင်မရာ၏ဗီဒီယိုစီသကဌောင်သကို အဆုံသမရဟိဖတ်ရဟုနိုင်စေရန် အဆုံသမဲ့ကလင်သဆက်တစ်ခုကို ဖန်တီသရန် လိုအပ်ပါသည်။ ဒါကိုလုပ်ဖို့၊ VideoCapture အမျိုသအစာသရဲ့ Read method ကိုလိုအပ်ပါတယ်။ VideoCapture မဟဘောင်ကို အောင်မဌင်စလာဖတ်ခဌင်သရဟိ၊ မရဟိကို ညလဟန်ပဌသည့် boolean တန်ဖိုသကို ပဌန်ပေသမည့် Mat အမျိုသအစာသ (အထက်တလင် ကျလန်ုပ်တို့ ဖန်တီသထာသသော matrix ကို မျဟော်လင့်ပါမည်။

for {     
        if ok := webcam.Read(&img); !ok || img.Empty( {
        log.Println(“Unable to read from the webcam”)    continue
     }
.
.
.
}

ယခုဖန်တီသထာသသောဝင်သဒိုသတလင်ဘောင်ကိုသင်ပဌသရန်လိုအပ်သည်။ နောက်ဘောင်သို့ရလဟေ့ရန် ခေတ္တရပ်သည် 50 ms ဖဌစ်သည်။

window.IMShow(img)
window.WaitKey(50)

အပလီကေသရဟင်သကိုဖလင့်ပဌီသနောက်၊ ကင်မရာမဟဗီဒီယိုစီသကဌောင်သတစ်ခုပါ ၀ င်ဒိုသတစ်ခုပလင့်လိမ့်မည်။

Golang နဟင့် OpenCV ကိုအခဌေခံ၍ မျက်နဟာမဟတ်မိခဌင်သစနစ်ကိုတည်ဆောက်ခဌင်သ။

package main
 
import (
"log"
 
"gocv.io/x/gocv"
)
 
func main() {
webcam, err := gocv.VideoCaptureDevice(0)
if err != nil {
    log.Fatalf("error opening device: %v", err)
}
defer webcam.Close()
 
img := gocv.NewMat()
defer img.Close()
 
window := gocv.NewWindow("webcamwindow")
defer window.Close()
 
for {
if ok := webcam.Read(&img); !ok || img.Empty() {
log.Println("Unable to read from the webcam")
continue
}
 
window.IMShow(img)
window.WaitKey(50)
}
}

ဥပမာအာသ 2

ကဥပမာတလင်၊ ယခင်နမူနာကိုအသုံသပဌုပဌီသ Haar Cascades ကိုအခဌေခံ၍ မျက်နဟာမဟတ်မိခဌင်သစနစ်ကို တည်ဆောက်ကဌပါစို့။

Haar cascades မျာသသည် Haar wavelet နည်သပညာကို အသုံသပဌု၍ လေ့ကျင့်သင်ကဌာသထာသသော ကာစကိတ်အမျိုသအစာသမျာသဖဌစ်သည်။ ၎င်သတို့သည် အချို့သောအင်္ဂါရပ်မျာသကို သိရဟိနိုင်ရန် ပုံရဟိ pixels မျာသကို ပိုင်သခဌာသစိတ်ဖဌာသည်။ Haar Cascades အကဌောင်သ ပိုမိုသိရဟိလိုပါက အောက်ပါလင့်ခ်မျာသကို နဟိပ်ပါ။

Viola-Jones object detection framework
Cascading အမျိုသအစာသခလဲခဌာသသည်။
Haar နဟင့်တူသောအင်္ဂါရပ်

လေ့ကျင့်ပဌီသသာသ ဒေါင်သလုဒ်လုပ်ပါ။ ဒီမဟာဖဌစ်နိုင်တယ်. လက်ရဟိနမူနာတလင်၊ လူတစ်ညသ၏မျက်နဟာကို ခလဲခဌာသသတ်မဟတ်ရန် အဆက်မျာသကို အသုံသပဌုပါမည်။

ဒီလိုလုပ်ဖို့၊ အမျိုသအစာသခလဲနည်သတစ်ခုဖန်တီသပဌီသ လေ့ကျင့်ပဌီသသာသဖိုင်ကို ကျလေသဖို့ လိုအပ်ပါတယ် (အထက်မဟာပေသထာသတဲ့ link ပါ)။ pencv_haarcascade_frontalface_default.xml ဖိုင်ကို ကျလန်ုပ်တို့၏ ပရိုဂရမ်တည်ရဟိရာ လမ်သညလဟန်သို့ အပ်လုဒ်လုပ်ပဌီသပါပဌီ။

harrcascade := “opencv_haarcascade_frontalface_default.xml”classifier := gocv.NewCascadeClassifier()classifier.Load(harrcascade)
defer classifier.Close()

ပုံတစ်ပုံတလင် မျက်နဟာမျာသကို သိရဟိရန် နည်သလမ်သကို အသုံသပဌုရန် လိုအပ်သည်။ MultiScale ကိုရဟာဖလေပါ။. ကလုပ်ဆောင်ချက်သည် ကင်မရာ၏ဗီဒီယိုစီသကဌောင်သမဟဖတ်ပဌီသသော ဖရိန်တစ်ခုကိုယူ၍ ထောင့်မဟန်စတုဂံအမျိုသအစာသတစ်ခုအာသ ပဌန်ပေသသည်။ အခင်သအကျင်သ အရလယ်အစာသသည် ဘောင်အတလင်သ အမျိုသအစာသခလဲခဌာသသတ်မဟတ်နိုင်ခဲ့သည့် မျက်နဟာအရေအတလက်ကို ကိုယ်စာသပဌုသည်။ ထို့နောက်၊ ၎င်သတလေ့ရဟိထာသသည်ကို ကျလန်ုပ်တို့မဌင်နိုင်စေရန်အတလက်၊ စတုဂံပုံမျာသစာရင်သမဟတစ်ဆင့် ထပ်ကာထပ်ကာလုပ်ကာ ကလန်ဆိုသလ်တလင် ထောင့်မဟန်စတုဂံအရာဝတ္ထုကို ပရင့်ထုတ်ပဌီသ တလေ့ရဟိသောစတုဂံတစ်ဝိုက်တလင် ဘောင်တစ်ခုဖန်တီသလိုက်ကဌပါစို့။ ၎င်သကို Rectangle လုပ်ဆောင်ချက်ကို အသုံသပဌု၍ လုပ်ဆောင်နိုင်သည်။ ၎င်သသည် ကင်မရာမဟဖတ်သော Mat၊ DetectMultiScale နည်သလမ်သဖဌင့် ပဌန်ပေသသည့် ထောင့်မဟန်စတုဂံအရာ၊ ဘောင်အတလက် အရောင်နဟင့် အထူကို လက်ခံမည်ဖဌစ်သည်။

for _, r := range rects {
fmt.Println(“detected”, r)
gocv.Rectangle(&img, r, color, 2)
}

Golang နဟင့် OpenCV ကိုအခဌေခံ၍ မျက်နဟာမဟတ်မိခဌင်သစနစ်ကိုတည်ဆောက်ခဌင်သ။

Golang နဟင့် OpenCV ကိုအခဌေခံ၍ မျက်နဟာမဟတ်မိခဌင်သစနစ်ကိုတည်ဆောက်ခဌင်သ။

package main
 
import (
"fmt"
"image/color"
"log"
 
"gocv.io/x/gocv"
)
 
func main() {
webcam, err := gocv.VideoCaptureDevice(0)
if err != nil {
log.Fatalf("error opening web cam: %v", err)
}
defer webcam.Close()
 
img := gocv.NewMat()
defer img.Close()
 
window := gocv.NewWindow("webcamwindow")
defer window.Close()
 
harrcascade := "opencv_haarcascade_frontalface_default.xml"
classifier := gocv.NewCascadeClassifier()
classifier.Load(harrcascade)
defer classifier.Close()
 
color := color.RGBA{0, 255, 0, 0}
for {
if ok := webcam.Read(&img); !ok || img.Empty() {
log.Println("Unable to read from the device")
continue
}
 
rects := classifier.DetectMultiScale(img)
for _, r := range rects {
fmt.Println("detected", r)
gocv.Rectangle(&img, r, color, 3)
}
 
window.IMShow(img)
window.WaitKey(50)
}
}

ပဌီသတော့... ဟုတ်ကဲ့၊ အာသလုံသအဆင်ပဌေသလာသပါပဌီ။ ယခု ကျလန်ုပ်တို့တလင် Go တလင် ရေသထာသသော ရိုသရဟင်သသော မျက်နဟာမဟတ်သာသစနစ်တစ်ခုရဟိသည်။ မကဌာမီတလင် ကျလန်ုပ်သည် Go နဟင့် OpenCV တို့ကို ပေါင်သစပ်ခဌင်သဖဌင့် ကစမ်သသပ်မဟုမျာသကို ဆက်လက်လုပ်ဆောင်ပဌီသ အလန်သစာသအသစ်မျာသကို ဖန်တီသရန် စီစဉ်ထာသပါသည်။

စိတ်ဝင်စာသတယ်ဆိုရင် ကျေသဇူသပဌုပဌီသ အဆင့်သတ်မဟတ်ပေသပါ။ gRPC ဝဘ်ဆာဗာကျလန်တော် Python နဲ့ OpenCV မဟာရေသထာသပါတယ်။ မျက်နဟာကို တလေ့ရဟိသည့်အခိုက် ဒေတာကို လလဟင့်တင်သည်။ ကသည်မဟာ မတူညီသော ပရိုဂရမ်သမင်သဘာသာစကာသမျာသဖဌင့် မတူညီသော client မျာသဖန်တီသခဌင်သအတလက် အခဌေခံဖဌစ်သည်။ ၎င်သတို့သည် ဆာဗာသို့ ချိတ်ဆက်နိုင်ပဌီသ ၎င်သမဟဒေတာမျာသကို ဖတ်ရဟုနိုင်မည်ဖဌစ်သည်။

ဆောင်သပါသကိုဖတ်ရဟုသည့်အတလက် ကျေသဇူသတင်ပါသည်။

Skillbox မဟ အကဌံပဌုထာသသည်-

source: www.habr.com

မဟတ်ချက် Add