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 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".
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.
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.
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.
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.
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)
}
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.