OpenCV ืืื ืกืคืจืืื ืืืืืขืืช ืืคืจืืืงืืื ืฉื ืจืืืื ืืืืืฉืืช. ืืื ืืืจ ืืช 20 ืืขืจื. ืืฉืชืืฉืชื ืื ืืงืืื' ืืขืืืื ืืฉืชืืฉ ืื ืขืืืจ ืคืจืืืงืื C++ ื-Python ืฉืื ืื ืืฉ ืื ืชืืืื ืืืื ืืฉืคืืช ืืื.
ืืื ืืฉืืชืืืชื ืืืืื ืืืืฉืชืืฉ ื-Go, ืืชืืืชื ืืืชืขื ืืื ืื ื ืืชื ืืืฉืชืืฉ ื-OpenCV ืืื ืืขืืื ืขื ืืฉืคื ืืื. ืืืืชื ืชืงืืคื ืืืจ ืืื ืืืืืืืช ืืืืจืืืช ืขื ืืื ืืืจืฆืื, ืืื ื ืจืื ืื ืฉืื ืืกืืืืืช ืืื. ืงืฆืช ืืืืืจ ืืืชืจ, ื ืชืงืืชื ืืขืืืคื ืฉื ืืฆืจื ืขื ืืื ืฆืืืช The Hybrid Group. ืืืืืจ ืื, ืื ื ืืจืื ืื ืืืฆื ืืืชืืื ืขื GoCV ืขื ืืื ืคืืชืื ืืขืจืืช ืืืืื ืคื ืื ืคืฉืืื ืขื Haar Cascades.
Skillbox ืืืืืฆื: ืงืืจืก ืืขืฉื
"ืืคืชื Python ืืืคืก" .ืื ื ืืืืืจืื: ืืื ืงืืจืื Habr - ืื ืื ืฉื 10 ืจืืื ืืขืช ืืจืฉืื ืืื ืงืืจืก Skillbox ืืืืฆืขืืช ืงืื ืืืืื ืฉื Habr.
ืื ื ืืจืฉ:
- ืืืืช;
- OpenCV (ืงืืฉืืจื ืืชืงื ื ืืืื);
- ืืื ืืจื ื ืื ืืฆืืืช ืืืืื ืจืืืื.
ืืชืงื ื
- Linux you
gocv.io/getting-started/linux - MacOS:
gocv.io/getting-started/macos - Windows:
gocv.io/getting-started/windows
ืืืืื 1
ืืืืืื ืืจืืฉืื ื, ื ื ืกื ืืืฆืืจ ืืคืืืงืฆืื ืฉืคืืชืืช ืืืื ืืืฆืื ืืจื ืืืืื ืฉื ืืฆืืื.
ืจืืฉืืช ืขืืื ืืืืื ืืช ืืกืคืจืืืช ืืืจืืฉืืช ืืขืืืื.
ืืืืื โโ(
"ืขึตืฅ"
"gocv.io/x/gocv"
)
ืืืืจ ืืื, ืขืืื ืืืฆืืจ ืืืืืืงื VideoCapture ืืืืฆืขืืช ืืคืื ืงืฆืื VideoCaptureDevice. ืื ืืืืจืื ืืืคืฉืจ ืืฆืื ืืจื ืืืืื ืืืืฆืขืืช ืืฆืืื. ืืคืื ืงืฆืื ืืฉืชืืฉืช ืืืกืคืจ ืฉืื ืืคืจืืืจ (ืืื ืืืืฆืืช ืืช ืืืื ืืืืฉืืจ).
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()
ืืื ืืืฆืื ืืจื ืืืืื, ืขืืื ืืืฆืืจ ืืืื - ื ืืชื ืืขืฉืืช ืืืช ืืืืฆืขืืช ืืคืื ืงืฆืื NewWindow.
window := gocv.NewWindow(โwebcamwindowโ)
defer window.Close()
ืืขืช ื ืขืืืจ ืืืืง ืืืขื ืืื ืืืืชืจ.
ืืืืืื ืฉืืืืืื ืืื ืืจื ืจืฆืืฃ ืฉื ืืกืืจืืช ืชืืื ื, ื ืฆืืจื ืืืฆืืจ ืืืืื ืืื ืกืืคืืช ืืื ืืงืจืื ืืื ืกืืฃ ืืช ืืจื ืืืืืืื ืฉื ืืืฆืืื. ืืฉื ืื, ืืชื ืฆืจืื ืืช ืฉืืืช ืืงืจืืื ืืกืื VideoCapture. ืืื ืืฆืคื ืืกืื Mat (ืืืืจืืงืก ืฉืืฆืจื ื ืืืขืื), ืฉืืืืืจ ืขืจื ืืืืืื ื ืืืฆืืื ืื ืืืกืืจืช ืื-VideoCapture ื ืงืจืื ืืืฆืืื ืื ืื.
for {
if ok := webcam.Read(&img); !ok || img.Empty( {
log.Println(โUnable to read from the webcamโ) continue
}
.
.
.
}
ืืขืช ืขืืื ืืืฆืื ืืช ืืืกืืจืช ืืืืื ืฉื ืืฆืจ. ืืืฉืืื ืืืขืืจ ืืคืจืืื ืืื ืืื 50 ืืืคืืืช ืืฉื ืืื.
window.IMShow(img)
window.WaitKey(50)
ืืืืจ ืืคืขืืช ืืืคืืืงืฆืื, ืืืคืชื ืืืื ืขื ืืจื ืืืืื ืืืืฆืืื.
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 wavelet. ืื ืื ืชืืื ืืช ืืคืืงืกืืื ืืชืืื ื ืืื ืืืืืช ืชืืื ืืช ืืกืืืืืช. ืืืืืข ื ืืกืฃ ืขื ื-Haar Cascades, ืื ื ืขืงืื ืืืจ ืืงืืฉืืจืื ืืืื.
ืืืจื ืืฉืืื ืฉืืืจ ืืืืื ืื
ืขื ืื ืช ืืขืฉืืช ืืืช, ืขืืื ืืืฆืืจ ืืกืืื ืืืืืืื ืืืชื ืืงืืืฅ ืฉืืืจ ืืืืื (ืืงืืฉืืจ ื ืืชื ืืืขืื). ืืืจ ืืขืืืชื ืืช ืืงืืืฅ pencv_haarcascade_frontalface_default.xml ืืกืคืจืืื ืฉืื ื ืืฆืืช ืืชืืื ืืช ืฉืื ื.
harrcascade := โopencv_haarcascade_frontalface_default.xmlโclassifier := gocv.NewCascadeClassifier()classifier.Load(harrcascade)
defer classifier.Close()
ืืื ืืืืืช ืคื ืื ืืชืืื ื, ืขืืื ืืืฉืชืืฉ ืืฉืืื
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)
}
}
ื... ืื ืืื ืืกืชืืจ! ืืขืช ืืฉ ืื ื ืืขืจืืช ืืืืื ืคื ืื ืคืฉืืื ืืชืืื ื-Go. ืืงืจืื ืื ื ืืชืื ื ืืืืฉืื ืื ืืกืืืื ืืืื ืืืืฆืืจ ืืืจืื ืืื ืืืื ืืืฉืื ืขื ืืื ืฉืืืื ืฉื Go ื-OpenCV.
ืื ืืชื ืืขืื ืืื, ืื ื ืืจื
ืชืืื ืฉืงืจืืช ืืช ืืืืืจ!
Skillbox ืืืืืฆื:
- ืงืืจืก ืืขืฉื ืฉื ืชืืื
"ืื ื ืืคืชื ืืชืจืื PRO" .- ืงืืจืก ืืื ืืื ืืงืืื
"ืืงืฆืืขื ืืคืชื ื'ืืืื" .- ืงืืจืก ืืขืฉื ืื ืฉื ื
"ืืคืชื PHP ื-0 ื-PRO" .
ืืงืืจ: www.habr.com