Ke kūkulu ʻana i kahi ʻōnaehana ʻike maka ma muli o Golang a me OpenCV

Ke kūkulu ʻana i kahi ʻōnaehana ʻike maka ma muli o Golang a me OpenCV
He hale waihona puke ʻo OpenCV no nā papahana ʻike kamepiula. He 20 paha kona mau makahiki. Ua hoʻohana au iā ia ma ke kulanui a hoʻohana mau ia no kaʻu mau papahana C++ a me Python no ka mea he kākoʻo maikaʻi ia no kēlā mau ʻōlelo.

Akā i koʻu hoʻomaka ʻana e aʻo a hoʻohana iā Go, ua hoihoi au inā hiki ke hoʻohana ʻia ʻo OpenCV e hana me kēia ʻōlelo. I kēlā manawa, aia nā hiʻohiʻona a me nā kumu aʻo e pili ana i ka hoʻohui ʻana, akā ua manaʻo wau ua paʻakikī loa lākou. Ma hope iki mai, ua ʻike au i kahi wīwī i hana ʻia e ka hui ʻo The Hybrid Group. Ma kēia ʻatikala, e hōʻike wau iā ʻoe pehea e hoʻomaka ai me GoCV ma ka hoʻomohala ʻana i kahi ʻōnaehana ʻike maka maʻalahi me Haar Cascades.

Manaʻo ʻo Skillbox: Papa hana "Python mea hoʻomohala mai ka ʻōpala".

Hoʻomaopopo mākou iā ʻoe: no ka poʻe heluhelu a pau o "Habr" - kahi ho'ēmi o 10 rubles i ka wā e kākau inoa ai i kekahi papa Skillbox e hoʻohana ana i ka code promotional "Habr".

ʻO ka mea e pono ai:

  • Hele;
  • OpenCV (nā loulou hoʻonohonoho ma lalo);
  • pūnaewele a i ʻole ka pahupaʻiwikiō maʻamau.

Kāu Mau Koho Paʻamau

Eia kekahi laʻana 1

I ka laʻana mua, e hoʻāʻo mākou e hana i kahi noi e wehe ana i kahi puka aniani e hōʻike ana i kahi kahawai wikiō kamera.

Pono mua ʻoe e hoʻokomo i nā hale waihona puke e pono ai no ka hana.

lawe mai (
"log"
“gocv.io/x/gocv”
)

Ma hope o kēia, pono ʻoe e hana i kahi mea VideoCapture me ka hoʻohana ʻana i ka hana VideoCaptureDevice. Hiki i ka mea hope ke kiʻi i kahi kahawai wikiō me ka hoʻohana ʻana i kahi kamera. Hoʻohana ka hana i ka integer ma ke ʻano he ʻāpana (hōʻike ia i ka ID mea hana).

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

I kēia manawa pono mākou e hana i kahi matrix n-dimensional. E mālama ia i nā kiʻi i heluhelu ʻia mai ka pahupaʻikiʻi.

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

No ka hōʻike ʻana i kahi kahawai wikiō, pono ʻoe e hana i kahi puka makani - hiki ke hana i kēia me ka hoʻohana ʻana i ka hana NewWindow.

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

I kēia manawa e neʻe kākou i ka ʻāpana hoihoi loa.

No ka mea ʻo ke wikiō he kahawai mau o nā kiʻi kiʻi, pono mākou e hana i kahi loop palena ʻole e heluhelu pau ʻole i ke kahawai wikiō o ke kāmela. No ka hana ʻana i kēia, pono ʻoe i ke ʻano heluhelu o ke ʻano VideoCapture. E manaʻo ʻia kahi ʻano Mat (ka matrix a mākou i hana ai ma luna), e hoʻihoʻi ana i kahi waiwai boolean e hōʻike ana inā heluhelu maikaʻi ʻia ke kiʻi mai ka VideoCapture a ʻaʻole paha.

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

I kēia manawa pono ʻoe e hōʻike i ke kiʻi ma ka puka aniani i hana ʻia. ʻO ka hoʻomaha no ka neʻe ʻana i ke kiʻi aʻe he 50 ms.

pukaaniani.IMShow(img)
pukaaniani.WaitKey(50)

Ma hope o ka hoʻomaka ʻana i ka noi, e wehe ʻia kahi pukaaniani me kahi kahawai wikiō mai ke kāmela.

Ke kūkulu ʻana i kahi ʻōnaehana ʻike maka ma muli o Golang a me 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)
}
}

Eia kekahi laʻana 2

Ma kēia laʻana, e hoʻohana kākou i ka laʻana mua a kūkulu i kahi ʻōnaehana ʻike maka e pili ana iā Haar Cascades.

ʻO ka Haar cascades nā papa helu cascade i aʻo ʻia me ka ʻenehana haar wavelet. Hoʻopili lākou i nā pika i loko o kahi kiʻi e ʻike i kekahi mau hiʻohiʻona. No ka ʻike hou aku e pili ana iā Haar Cascades, e ʻoluʻolu e hahai i nā loulou ma lalo nei.

Viola-Jones ka hoʻolālā ʻike mea
Hoʻokaʻawale hoʻokaʻawale
Hiʻona like ʻo Haar

Hoʻoiho i nā cascade i hoʻomaʻamaʻa mua ʻia i hiki iiia. Ma ka laʻana o kēia manawa, e hoʻohana ʻia nā cascades e ʻike i ka maka o ke kanaka mai mua.

No ka hana ʻana i kēia, pono ʻoe e hana i kahi classifier a hānai iā ia i kahi faila i hoʻomaʻamaʻa mua ʻia (ua hāʻawi ʻia ka loulou ma luna). Ua hoʻouka mua au i ka faila pencv_haarcascade_frontalface_default.xml i ka papa kuhikuhi kahi i loaʻa ai kā mākou papahana.

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

No ka ʻike ʻana i nā maka ma ke kiʻi, pono ʻoe e hoʻohana i ke ʻano ʻIke ʻana i ka nui nui. Lawe kēia hana i kahi kiʻi (type Mat) i heluhelu wale ʻia mai ke kahawai wikiō o ka pahupaʻikiʻi a hoʻihoʻi i kahi ʻano ʻano Rectangle. ʻO ka nui o ka laha e hōʻike ana i ka helu o nā helehelena i hiki i ka mea hoʻohālikelike ke ʻike i ke kiʻi. A laila, i mea e ʻike pono ai mākou i ka mea i loaʻa, e hoʻololi kākou i ka papa inoa o nā rectangles a paʻi i ka Rectangle mea i ka console, e hana i kahi palena a puni ka rectangle i ʻike ʻia. Hiki ke hana i kēia me ka hana Rectangle. E ʻae ʻo ia i ka Mat i heluhelu ʻia e ka pahupaʻikiʻi, ka mea Rectangle i hoʻihoʻi ʻia e ke ʻano DetectMultiScale, ke kala a me ka mānoanoa o ka palena.

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

Ke kūkulu ʻana i kahi ʻōnaehana ʻike maka ma muli o Golang a me OpenCV

Ke kūkulu ʻana i kahi ʻōnaehana ʻike maka ma muli o Golang a me 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)
}
}

A... ʻae, holo pono nā mea a pau! Loaʻa iā mākou kahi ʻōnaehana ʻike maka maʻalahi i kākau ʻia ma Go. Hoʻolālā koke wau e hoʻomau i kēia mau hoʻokolohua a hana i nā mea ʻoluʻolu hou ma ka hoʻohui ʻana iā Go a me OpenCV.

Inā hoihoi ʻoe, e ʻoluʻolu e helu kikowaena pūnaewele gRPC, aʻu i kākau ai ma Python a me OpenCV. Hoʻokahe ia i ka ʻikepili i ka manawa e ʻike ʻia ai kahi maka. ʻO kēia ke kumu no ka hana ʻana i nā mea kūʻai like ʻole i nā ʻōlelo papahana like ʻole. Hiki iā lākou ke hoʻohui i ke kikowaena a heluhelu i ka ʻikepili mai ia mea.

Mahalo iā ʻoe no ka heluhelu ʻana i ka ʻatikala!

Manaʻo ʻo Skillbox:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka