Te hanga i te punaha tohu kanohi i runga i a Golang me OpenCV

Te hanga i te punaha tohu kanohi i runga i a Golang me OpenCV
Ko OpenCV he whare pukapuka i hangaia mo nga kaupapa tirohanga rorohiko. Kua 20 pea ona tau. I whakamahia e au i te koroni me te whakamahi tonu mo aku kaupapa C++ me Python na te mea he pai te tautoko mo aua reo.

Engari i taku tiimata ki te ako me te whakamahi i a Go, ka aro ahau mena ka taea te whakamahi a OpenCV ki te mahi me tenei reo. I tera wa, he tauira me nga akoranga mo te whakauru, engari ki taku whakaaro he tino uaua. I muri tata mai, ka kite ahau i tetahi takai i hangaia e te roopu Hybrid Group. I roto i tenei tuhinga, ka whakaatu ahau ki a koe me pehea te tiimata me te GoCV ma te hanga i tetahi punaha mohio kanohi ngawari me te Haar Cascades.

Ka tūtohu a Skillbox: Akoranga mahi "Python kaiwhakawhanake mai i te wahanga".

Ka whakamahara matou: mo nga kaipānui katoa o "Habr" - he utu mo te 10 rubles i te wa e whakauru ana ki tetahi akoranga Skillbox ma te whakamahi i te waehere whakatairanga "Habr".

He aha e hiahiatia ana:

  • Haere;
  • OpenCV (hononga kaiwhakauru kei raro nei);
  • tukutuku, kamera ataata auau ranei.

tāutanga

tauira 1

I roto i te tauira tuatahi, ka ngana tatou ki te hanga i tetahi tono e whakatuwhera ana i te matapihi e whakaatu ana i te awa ataata kamera.

Tuatahi me kawemai koe i nga whare pukapuka e hiahiatia ana mo te mahi.

kawemai (
"raupapa"
“gocv.io/x/gocv”
)

I muri i tenei, me hanga e koe he ahanoa VideoCapture ma te whakamahi i te mahi VideoCaptureDevice. Ko te mea whakamutunga ka taea te hopu i te awa ataata ma te whakamahi i te kamera. Ka whakamahia e te taumahi he tauoti hei tawhā (he tohu mo te ID taputapu).

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

Inaianei me hanga he matrix ahu-n. Ka penapena whakaahua i panuihia mai i te kamera.

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

Hei whakaatu i te awa ataata, me hanga e koe he matapihi - ka taea tenei ma te whakamahi i te mahi NewWindow.

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

Inaianei kia neke atu ki te waahanga tino pai.

I te mea ko te ataata he rerenga tonu o nga papa atahanga, me hanga e tatou he kohanga mutunga kore ki te panui mutunga kore i te awa ataata o te kamera. Ki te mahi i tenei, me hiahia koe ki te tikanga Panui o te momo VideoCapture. Ka tumanakohia he momo Mat (te matrix i hangaia e matou i runga ake nei), ka whakahoki mai i te uara boolean e tohu ana mena i pai te panui o te anga mai i te VideoCapture, kaore ranei.

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

Inaianei me whakaatu e koe te anga ki te matapihi i hangaia. Ko te okioki mo te neke ki te anga e whai ake nei he 50 ms.

matapihi.IMShow(img)
matapihi.WaitKey(50)

I muri i te whakarewatanga o te tono, ka tuwhera he matapihi me te awa ataata mai i te kamera.

Te hanga i te punaha tohu kanohi i runga i a Golang 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)
}
}

tauira 2

I roto i tenei tauira, me whakamahi te tauira o mua me te hanga i tetahi punaha tohu kanohi i runga i te Haar Cascades.

Ko te Haar cascades he whakarōpūtanga cascade e whakangungua ana ma te whakamahi i te tikanga ngaru a Haar. Ka tātarihia e ratou nga pika i roto i te ahua kia kitea etahi ahuatanga. Ki te rapu korero mo Haar Cascades, me whai i nga hononga kei raro nei.

Viola-Jones anga rapunga ahanoa
Whakar
He ahua rite te Haar

Tangohia nga riipene kua oti te whakangungu ka taea e konei. I roto i te tauira o naianei, ka whakamahia nga rikeri hei tohu i te kanohi o te tangata mai i mua.

Ki te mahi i tenei, me hanga e koe he whakarōpūtanga me te whangai i tetahi konae kua oti te whakangungu (ko te hono kei runga ake nei). Kua tukuna kētia e ahau te kōnae pencv_haarcascade_frontalface_default.xml ki te whaiaronga kei reira to maatau kaupapa.

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

Hei kimi kanohi i roto i te ahua, me whakamahi koe i te tikanga Ka kitea te Tauinemaha. Ko tenei mahi ka mau i te anga (momo Mat) ka panuitia mai i te awa ataata o te kaamera me te whakahoki mai i te momo Rectangle. Ko te rahi o te huānga e tohu ana i te maha o nga kanohi i taea e te whakarōpū te kite i roto i te anga. Na, kia kite tatou i nga mea i kitea, me huri ano i roto i te rarangi o nga tapawhā tapawhā ka tā i te ahanoa Rectangle ki te papatohu, ka hanga he taitapa huri noa i te tapawhā tapawhā kua kitea. Ka taea tenei ma te whakamahi i te mahi Rectangle. Ka whakaaehia te Waenga i panuitia e te kamera, te mea Rectangle i whakahokia mai e te tikanga DetectMultiScale, te tae me te matotoru mo te taitapa.

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

Te hanga i te punaha tohu kanohi i runga i a Golang me OpenCV

Te hanga i te punaha tohu kanohi i runga i a Golang 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, i pai nga mea katoa! He punaha tohu kanohi ngawari kua tuhia ki te Haere. Kaore e roa ka whakaaro ahau ki te haere tonu i enei whakamatautau me te hanga mea hou ma te whakakotahi i a Go me OpenCV.

Mena kei te pirangi koe, koa reiti tūmau tukutuku gRPC, i tuhia e au ki te Python me te OpenCV. Ka rere raraunga i te wa ka kitea he kanohi. Koinei te turanga mo te hanga i nga kaihoko rereke i roto i nga reo hotaka rereke. Ka taea e ratou te hono atu ki te tūmau me te panui raraunga mai i a raatau.

Mauruuru koe mo te panui i te tuhinga!

Ka tūtohu a Skillbox:

Source: will.com

Tāpiri i te kōrero