OpenCV āĻšāĻ˛ āĻāĻāĻāĻŋ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻ¯āĻž āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāĻ° āĻāĻŋāĻļāĻ¨ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻŋāĻāĻžāĻāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻ¤āĻŋāĻ¨āĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°āĻžāĻ¯āĻŧ 20 āĻŦāĻāĻ° āĻŦāĻ¯āĻŧāĻ¸ā§. āĻāĻŽāĻŋ āĻāĻāĻŋ āĻāĻ˛ā§āĻā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ āĻāĻŦāĻ āĻāĻāĻ¨āĻ āĻāĻāĻŋ āĻāĻŽāĻžāĻ° C++ āĻāĻŦāĻ āĻĒāĻžāĻāĻĨāĻ¨ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ āĻāĻžāĻ°āĻŖ āĻāĻāĻŋ āĻ¸ā§āĻ āĻāĻžāĻˇāĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ˛ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯āĻāĻ¨ āĻāĻŽāĻŋ āĻļā§āĻāĻž āĻāĻŦāĻ Go āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻļā§āĻ°ā§ āĻāĻ°āĻŋ, āĻ¤āĻāĻ¨ āĻāĻŽāĻŋ āĻāĻ āĻāĻžāĻˇāĻžāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ OpenCV āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻā§āĻ°āĻšā§ āĻšāĻ¯āĻŧā§ āĻāĻ āĻŋāĨ¤ āĻ¸ā§āĻ āĻ¸āĻŽāĻ¯āĻŧā§, āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻā§āĻāĻ°āĻŖā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻāĻŦāĻ āĻāĻŋāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻāĻŋāĻ˛, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŽāĻžāĻ° āĻāĻžāĻā§ āĻŽāĻ¨ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻ¯ā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻā§āĻŦ āĻāĻāĻŋāĻ˛ āĻāĻŋāĻ˛āĨ¤ āĻāĻāĻā§ āĻĒāĻ°ā§, āĻāĻŽāĻŋ āĻšāĻžāĻāĻŦā§āĻ°āĻŋāĻĄ āĻā§āĻ°ā§āĻĒ āĻāĻŋāĻŽā§āĻ° āĻ¤ā§āĻ°āĻŋ āĻāĻāĻāĻŋ āĻŽā§āĻĄāĻŧāĻ āĻĻā§āĻāĻ¤ā§ āĻĒā§āĻ˛āĻžāĻŽāĨ¤ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§, āĻāĻŽāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻĻā§āĻāĻžāĻŦ āĻāĻŋāĻāĻžāĻŦā§ GoCV-āĻāĻ° āĻ¸āĻžāĻĨā§ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ Haar Cascades-āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻŽā§āĻ āĻļāĻ¨āĻžāĻā§āĻ¤āĻāĻ°āĻŖ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĨ¤
Skillbox āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°ā§: āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ āĻā§āĻ°ā§āĻ¸
"āĻļā§āĻ°ā§ āĻĨā§āĻā§ āĻĒāĻžāĻāĻĨāĻ¨ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§" .āĻāĻŽāĻ°āĻž āĻŽāĻ¨ā§ āĻāĻ°āĻŋāĻ¯āĻŧā§ āĻĻāĻŋāĻā§āĻāĻŋ: "Habr"-āĻāĻ° āĻ¸āĻāĻ˛ āĻĒāĻžāĻ āĻāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ - "Habr" āĻĒā§āĻ°āĻāĻžāĻ°āĻŽā§āĻ˛āĻ āĻā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¯ā§āĻā§āĻ¨ā§ Skillbox āĻā§āĻ°ā§āĻ¸ā§ āĻ¨āĻĨāĻŋāĻā§āĻā§āĻ¤ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ 10 āĻ°ā§āĻŦā§āĻ˛ āĻāĻžāĻĄāĻŧāĨ¤
āĻāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨:
- āĻ¯āĻžāĻāĻ¯āĻŧāĻž;
- OpenCV (āĻ¨āĻŋāĻā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛āĻžāĻ° āĻ˛āĻŋāĻā§āĻ);
- āĻāĻ¯āĻŧā§āĻŦ āĻŦāĻž āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻāĻŋāĻĄāĻŋāĻ āĻā§āĻ¯āĻžāĻŽā§āĻ°āĻžāĨ¤
āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸
- āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸:
gocv.io/getting-started/linux - āĻŽā§āĻ¯āĻžāĻ āĻ
āĻĒāĻžāĻ°ā§āĻāĻŋāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ:
gocv.io/getting-started/macos - āĻāĻāĻ¨ā§āĻĄā§āĻ:
gocv.io/getting-started/windows
āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ 1
āĻĒā§āĻ°āĻĨāĻŽ āĻāĻĻāĻžāĻšāĻ°āĻŖā§, āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŦ āĻ¯āĻž āĻāĻāĻāĻŋ āĻā§āĻ¯āĻžāĻŽā§āĻ°āĻž āĻāĻŋāĻĄāĻŋāĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻŽ āĻĻā§āĻāĻžāĻ¨ā§ āĻāĻāĻāĻŋ āĻāĻāĻ¨ā§āĻĄā§ āĻā§āĻ˛ā§āĨ¤
āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻžāĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋāĻā§āĻ˛āĻŋ āĻāĻŽāĻĻāĻžāĻ¨āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻāĻŽāĻĻāĻžāĻ¨āĻŋ (
"āĻ˛āĻ"
"gocv.io/x/gocv"
)
āĻāĻ° āĻĒāĻ°ā§, āĻāĻĒāĻ¨āĻžāĻā§ VideoCaptureDevice āĻĢāĻžāĻāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ VideoCapture āĻ āĻŦāĻā§āĻā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻĒāĻ°ā§āĻ°āĻāĻŋ āĻāĻāĻāĻŋ āĻā§āĻ¯āĻžāĻŽā§āĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻāĻŋāĻĄāĻŋāĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻŽ āĻā§āĻ¯āĻžāĻĒāĻāĻžāĻ° āĻāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦ āĻāĻ°ā§ āĻ¤ā§āĻ˛ā§āĨ¤ āĻĢāĻžāĻāĻļāĻ¨ āĻāĻāĻāĻŋ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻŖāĻ¸āĻāĻā§āĻ¯āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ (āĻāĻāĻŋ āĻĄāĻŋāĻāĻžāĻāĻ¸ āĻāĻāĻĄāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻāĻ°ā§)āĨ¤
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()
āĻāĻāĻ¨ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ āĻ āĻāĻļā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻāĨ¤
āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŋāĻĄāĻŋāĻ āĻšāĻ˛ āĻāĻŽā§āĻ āĻĢā§āĻ°ā§āĻŽā§āĻ° āĻāĻāĻāĻŋ āĻā§āĻ°āĻŽāĻžāĻāĻ¤ āĻ¸ā§āĻā§āĻ°āĻŋāĻŽ, āĻ¤āĻžāĻ āĻā§āĻ¯āĻžāĻŽā§āĻ°āĻžāĻ° āĻāĻŋāĻĄāĻŋāĻ āĻ¸ā§āĻā§āĻ°ā§āĻŽ āĻ āĻŦāĻŋāĻ°āĻžāĻŽ āĻĒāĻĄāĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻ āĻ¸ā§āĻŽ āĻ˛ā§āĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻ° āĻāĻŋāĻĄāĻŋāĻ āĻā§āĻ¯āĻžāĻĒāĻāĻžāĻ° āĻāĻžāĻāĻĒā§āĻ° āĻ°āĻŋāĻĄ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻŽā§āĻ¯āĻžāĻ āĻāĻžāĻāĻĒ (āĻāĻŽāĻ°āĻž āĻāĻĒāĻ°ā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻŽā§āĻ¯āĻžāĻā§āĻ°āĻŋāĻā§āĻ¸) āĻāĻļāĻž āĻāĻ°āĻŦā§, āĻāĻŋāĻĄāĻŋāĻāĻā§āĻ¯āĻžāĻĒāĻāĻžāĻ° āĻĨā§āĻā§ āĻĢā§āĻ°ā§āĻŽāĻāĻŋ āĻ¸āĻĢāĻ˛āĻāĻžāĻŦā§ āĻĒāĻĄāĻŧāĻž āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻŦā§āĻ˛āĻŋāĻ¯āĻŧāĻžāĻ¨ āĻŽāĻžāĻ¨ āĻĢāĻŋāĻ°āĻŋāĻ¯āĻŧā§ āĻĻā§āĻŦā§āĨ¤
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)
āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋ āĻāĻžāĻ˛ā§ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻā§āĻ¯āĻžāĻŽā§āĻ°āĻž āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻāĻŋāĻĄāĻŋāĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻŽ āĻ¸āĻš āĻāĻāĻāĻŋ āĻāĻāĻ¨ā§āĻĄā§ āĻā§āĻ˛āĻŦā§āĨ¤
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
āĻāĻ āĻāĻĻāĻžāĻšāĻ°āĻŖā§, āĻāĻā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯āĻžāĻ āĻāĻŦāĻ āĻšāĻžāĻ° āĻā§āĻ¯āĻžāĻ¸āĻā§āĻĄā§āĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻŽā§āĻ āĻļāĻ¨āĻžāĻā§āĻ¤āĻāĻ°āĻŖ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¯āĻžāĻāĨ¤
āĻšāĻžāĻ° āĻā§āĻ¯āĻžāĻ¸āĻā§āĻĄ āĻšāĻ˛ āĻā§āĻ¯āĻžāĻ¸āĻā§āĻĄ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻĢāĻžāĻ¯āĻŧāĻžāĻ° āĻ¯āĻž āĻšāĻ° āĻāĻ¯āĻŧā§āĻāĻ˛ā§āĻ āĻā§āĻļāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒā§āĻ°āĻļāĻŋāĻā§āĻˇāĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻ¤āĻžāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻ¸āĻ¨āĻžāĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻāĻāĻāĻŋ āĻāĻŦāĻŋāĻ¤ā§ āĻĒāĻŋāĻā§āĻ¸ā§āĻ˛ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°ā§āĨ¤ āĻšāĻžāĻ° āĻā§āĻ¯āĻžāĻ¸āĻā§āĻĄāĻ¸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻāĻžāĻ¨āĻ¤ā§, āĻ āĻ¨ā§āĻā§āĻ°āĻš āĻāĻ°ā§ āĻ¨ā§āĻā§āĻ° āĻ˛āĻŋāĻā§āĻāĻā§āĻ˛āĻŋ āĻ āĻ¨ā§āĻ¸āĻ°āĻŖ āĻāĻ°ā§āĻ¨āĨ¤
āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°āĻļāĻŋāĻā§āĻˇāĻŋāĻ¤ āĻā§āĻ¯āĻžāĻ¸āĻā§āĻĄ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°ā§āĻ¨
āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸āĻŋāĻĢāĻžāĻ¯āĻŧāĻžāĻ° āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻāĻāĻāĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°āĻļāĻŋāĻā§āĻˇāĻŋāĻ¤ āĻĢāĻžāĻāĻ˛ āĻāĻžāĻāĻ¯āĻŧāĻžāĻ¤ā§ āĻšāĻŦā§ (āĻ˛āĻŋāĻā§āĻāĻāĻŋ āĻāĻĒāĻ°ā§ āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§āĻā§)āĨ¤ āĻāĻŽāĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ 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 āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°ā§:
- āĻĻā§āĻ āĻŦāĻāĻ°ā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ āĻā§āĻ°ā§āĻ¸
"āĻāĻŽāĻŋ āĻāĻāĻāĻ¨ āĻĒā§āĻ°ā§ āĻāĻ¯āĻŧā§āĻŦ āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ°" .- āĻļāĻŋāĻā§āĻˇāĻžāĻāĻ¤ āĻ āĻ¨āĻ˛āĻžāĻāĻ¨ āĻā§āĻ°ā§āĻ¸
"āĻĒā§āĻļāĻž āĻāĻžāĻāĻž āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§" .- āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ āĻŦāĻāĻ°ā§āĻ° āĻā§āĻ°ā§āĻ¸
"0 āĻĨā§āĻā§ PRO āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻĒāĻŋāĻāĻāĻāĻĒāĻŋ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§" .
āĻāĻ¤ā§āĻ¸: www.habr.com