แž€แžถแžšแž€แžŸแžถแž„แž”แŸ’แžšแž–แŸแž“แŸ’แž’แžŸแž˜แŸ’แž‚แžถแž›แŸ‹แž˜แžปแžแžŠแŸ„แž™แž•แŸ’แžขแŸ‚แž€แž›แžพ Golang แž“แžทแž„ OpenCV

แž€แžถแžšแž€แžŸแžถแž„แž”แŸ’แžšแž–แŸแž“แŸ’แž’แžŸแž˜แŸ’แž‚แžถแž›แŸ‹แž˜แžปแžแžŠแŸ„แž™แž•แŸ’แžขแŸ‚แž€แž›แžพ Golang แž“แžทแž„ OpenCV
OpenCV แž‚แžบแž‡แžถแž”แžŽแŸ’แžŽแžถแž›แŸแž™แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž”แžถแž“แžšแž…แž“แžถแžกแžพแž„แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‚แž˜แŸ’แžšแŸ„แž„แž…แž€แŸ’แžแžปแžœแžทแžŸแŸแž™แž€แžปแŸ†แž–แŸ’แž™แžผแž‘แŸแžšแŸ” แž“แžถแž„โ€‹แž˜แžถแž“โ€‹แžขแžถแž™แžปโ€‹แž”แŸ’แžšแž แŸ‚แž›โ€‹แŸขแŸ โ€‹แž†แŸ’แž“แžถแŸ†โ€‹แž แžพแž™แŸ” แžแŸ’แž‰แžปแŸ†แž”แžถแž“แž”แŸ’แžšแžพแžœแžถแž“แŸ…แž€แŸ’แž“แžปแž„แž˜แž แžถแžœแžทแž‘แŸ’แž™แžถแž›แŸแž™ แž แžพแž™แž“แŸ…แžแŸ‚แž”แŸ’แžšแžพแžœแžถแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‚แž˜แŸ’แžšแŸ„แž„ C++ แž“แžทแž„ Python แžšแž”แžŸแŸ‹แžแŸ’แž‰แžปแŸ†แž–แŸ’แžšแŸ„แŸ‡แžœแžถแž˜แžถแž“แž€แžถแžšแž‚แžถแŸ†แž‘แŸ’แžšแžŠแŸแž›แŸ’แžขแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž—แžถแžŸแžถแž‘แžถแŸ†แž„แž“แŸ„แŸ‡แŸ”

แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž“แŸ…แž–แŸแž›แžŠแŸ‚แž›แžแŸ’แž‰แžปแŸ†แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แžšแŸ€แž“ แž“แžทแž„แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹ Go แžแŸ’แž‰แžปแŸ†แž”แžถแž“แž…แžถแž”แŸ‹แžขแžถแžšแž˜แŸ’แž˜แžŽแŸแžแžถแžแžพ OpenCV แžขแžถแž…แžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžพแžŠแžพแž˜แŸ’แž”แžธแž’แŸ’แžœแžพแž€แžถแžšแž‡แžถแž˜แžฝแž™แž—แžถแžŸแžถแž“แŸแŸ‡แžŠแŸ‚แžšแžฌแž‘แŸแŸ” แž“แŸ…โ€‹แž–แŸแž›โ€‹แž“แŸ„แŸ‡ แž˜แžถแž“โ€‹แžงแž‘แžถแž แžšแžŽแŸ แž“แžทแž„โ€‹แž€แžถแžšโ€‹แž”แž„แŸ’แžšแŸ€แž“โ€‹แžšแžฝแž…โ€‹แž แžพแž™โ€‹แžขแŸ†แž–แžธโ€‹แž€แžถแžšโ€‹แž’แŸ’แžœแžพโ€‹แžŸแž˜แžถแž แžšแžŽแž€แž˜แŸ’แž˜ แž”แŸ‰แžปแž“แŸ’แžแŸ‚โ€‹แžแŸ’แž‰แžปแŸ†โ€‹แž แžถแž€แŸ‹โ€‹แžŠแžผแž…โ€‹แž‡แžถโ€‹แžŸแŸ’แž˜แžปแž‚แžŸแŸ’แž˜แžถแž‰โ€‹แž–แŸแž€แŸ” แž”แž“แŸ’แžแžทแž…แž€แŸ’แžšแŸ„แž™แž˜แž€ แžแŸ’แž‰แžปแŸ†แž”แžถแž“แžƒแžพแž‰แž€แŸ’แžšแžŠแžถแžŸแžšแžปแŸ†แžŠแŸ‚แž›แž”แž„แŸ’แž€แžพแžแžกแžพแž„แžŠแŸ„แž™แž€แŸ’แžšแžปแž˜ The Hybrid GroupแŸ” แž“แŸ…แž€แŸ’แž“แžปแž„แžขแžแŸ’แžแž”แž‘แž“แŸแŸ‡ แžแŸ’แž‰แžปแŸ†แž“แžนแž„แž”แž„แŸ’แž แžถแž‰แžขแŸ’แž“แž€แž–แžธแžšแž”แŸ€แž”แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž‡แžถแž˜แžฝแž™ GoCV แžŠแŸ„แž™แž”แž„แŸ’แž€แžพแžแž”แŸ’แžšแž–แŸแž“แŸ’แž’แžŸแž˜แŸ’แž‚แžถแž›แŸ‹แž˜แžปแžแžŸแžถแž˜แž‰แŸ’แž‰แž‡แžถแž˜แžฝแž™ Haar CascadesแŸ”

Skillbox แžŽแŸ‚แž“แžถแŸ†แŸ– แžœแž‚แŸ’แž‚แžŸแžทแž€แŸ’แžŸแžถแž‡แžถแž€แŸ‹แžŸแŸ’แžแŸ‚แž„ "แžขแŸ’แž“แž€แžขแž—แžทแžœแžŒแŸ’แžแž“แŸ Python แž–แžธแžŠแŸ†แž”แžผแž„".

แž™แžพแž„แžšแŸ†แž›แžนแž€แŸ– แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžขแŸ’แž“แž€แžขแžถแž“แž‘แžถแŸ†แž„แžขแžŸแŸ‹แž“แŸƒ "Habr" - แž€แžถแžšแž”แž‰แŸ’แž…แžปแŸ‡แžแž˜แŸ’แž›แŸƒ 10 rubles แž“แŸ…แž–แŸแž›แž…แžปแŸ‡แžˆแŸ’แž˜แŸ„แŸ‡แž€แŸ’แž“แžปแž„แžœแž‚แŸ’แž‚แžŸแžทแž€แŸ’แžŸแžถ Skillbox แžŽแžถแž˜แžฝแž™แžŠแŸ„แž™แž”แŸ’แžšแžพแž›แŸแžแž€แžผแžŠแž•แŸ’แžŸแž–แŸ’แžœแž•แŸ’แžŸแžถแž™ "Habr" แŸ”

แžขแŸ’แžœแžธแžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž”แžถแž“แž‘แžถแž˜แž‘แžถแžš:

  • แž‘แŸ…;
  • OpenCV (แžแŸ†แžŽแž—แŸ’แž‡แžถแž”แŸ‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแŸ†แžกแžพแž„แžแžถแž„แž€แŸ’แžšแŸ„แž˜);
  • แž‚แŸแž แž‘แŸ†แž–แŸแžš แžฌแž€แžถแž˜แŸแžšแŸ‰แžถแžœแžธแžŠแŸแžขแžผแž’แž˜แŸ’แž˜แžแžถแŸ”

แž€แžถแžšแž€แŸ†แžŽแžแŸ‹

แžงแž‘แžถแž แžšแžŽแŸ 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()

แžฅแžกแžผแžœแž“แŸแŸ‡แž™แžพแž„แžแŸ’แžšแžผแžœแž”แž„แŸ’แž€แžพแžแž˜แŸ‰แžถแž‘แŸ’แžšแžธแžŸ n-dimensional แŸ” แžœแžถแž“แžนแž„แžšแž€แŸ’แžŸแžถแž‘แžปแž€แžšแžผแž”แž—แžถแž–แžŠแŸ‚แž›แž”แžถแž“แžขแžถแž“แž–แžธแž€แžถแž˜แŸแžšแŸ‰แžถแŸ”

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 ms แŸ”

window.IMShow(img)
window.WaitKey(50)

แž”แž“แŸ’แž‘แžถแž”แŸ‹แž–แžธแž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธ แž”แž„แŸ’แžขแžฝแž…แžŠแŸ‚แž›แž˜แžถแž“แžŸแŸ’แž‘แŸ’แžšแžธแž˜แžœแžธแžŠแŸแžขแžผแž–แžธแž€แžถแž˜แŸแžšแŸ‰แžถแž“แžนแž„แž”แžพแž€แŸ”

แž€แžถแžšแž€แžŸแžถแž„แž”แŸ’แžšแž–แŸแž“แŸ’แž’แžŸแž˜แŸ’แž‚แžถแž›แŸ‹แž˜แžปแžแžŠแŸ„แž™แž•แŸ’แžขแŸ‚แž€แž›แžพ Golang แž“แžทแž„ 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)
}
}

แžงแž‘แžถแž แžšแžŽแŸ 2

แž€แŸ’แž“แžปแž„แžงแž‘แžถแž แžšแžŽแŸแž“แŸแŸ‡ แž…แžผแžšแž™แžพแž„แž”แŸ’แžšแžพแžงแž‘แžถแž แžšแžŽแŸแž˜แžปแž“ แž แžพแž™แž”แž„แŸ’แž€แžพแžแž”แŸ’แžšแž–แŸแž“แŸ’แž’แžŸแž˜แŸ’แž‚แžถแž›แŸ‹แž˜แžปแžแžŠแŸ„แž™แž•แŸ’แžขแŸ‚แž€แž›แžพ Haar CascadesแŸ”

Haar cascades แž‚แžบแž‡แžถแž”แŸ’แžšแž—แŸแž‘ cascade แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž”แžถแž“แž”แžŽแŸ’แžแžปแŸ‡แž”แžŽแŸ’แžแžถแž›แžŠแŸ„แž™แž”แŸ’แžšแžพแž”แž…แŸ’แž…แŸแž€แž‘แŸแžŸแžšแž›แž€ Haar แŸ” แž–แžฝแž€แž‚แŸแžœแžทแž—แžถแž‚แž—แžธแž€แžŸแŸ‚แž›แž€แŸ’แž“แžปแž„แžšแžผแž”แž—แžถแž– แžŠแžพแž˜แŸ’แž”แžธแžŸแŸ’แžœแŸ‚แž„แžšแž€แž›แž€แŸ’แžแžŽแŸˆแž–แžทแžŸแŸแžŸแž˜แžฝแž™แž…แŸ†แž“แžฝแž“แŸ” แžŠแžพแž˜แŸ’แž”แžธแžŸแŸ’แžœแŸ‚แž„แž™แž›แŸ‹แž”แž“แŸ’แžแŸ‚แž˜แžขแŸ†แž–แžธ Haar Cascades แžŸแžผแž˜แž…แžผแž›แž‘แŸ…แž€แžถแž“แŸ‹แžแŸ†แžŽแž—แŸ’แž‡แžถแž”แŸ‹แžแžถแž„แž€แŸ’แžšแŸ„แž˜แŸ”

แž€แŸ’แžšแž”แžแŸแžŽแŸ’แžŒแž€แžถแžšแžšแž€แžƒแžพแž‰แžœแžแŸ’แžแžป Viola-Jones
แž€แžถแžšแž…แžถแžแŸ‹แžแŸ’แž“แžถแž€แŸ‹แž›แŸ’แž”แžถแž€แŸ‹
แž›แž€แŸ’แžแžŽแŸˆแžŠแžผแž…แž แžถแžšแŸ‰แžถ

แž‘แžถแž‰แž™แž€ cascades แžŠแŸ‚แž›แž”แžถแž“แž”แžŽแŸ’แžแžปแŸ‡แž”แžŽแŸ’แžแžถแž›แžšแžฝแž…แž แžพแž™ แžขแžถแž…แž“แŸ…แž‘แžธแž“แŸแŸ‡. แž€แŸ’แž“แžปแž„แžงแž‘แžถแž แžšแžŽแŸแž”แž…แŸ’แž…แžปแž”แŸ’แž”แž“แŸ’แž“ แž›แŸ’แž”แžถแž€แŸ‹แž“แžนแž„แžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžพแžŠแžพแž˜แŸ’แž”แžธแž€แŸ†แžŽแžแŸ‹แž˜แžปแžแž˜แžถแžแŸ‹แžšแž”แžŸแŸ‹แž˜แž“แžปแžŸแŸ’แžŸแž–แžธแžแžถแž„แž˜แžปแžแŸ”

แžŠแžพแž˜แŸ’แž”แžธแž’แŸ’แžœแžพแžŠแžผแž…แŸ’แž“แŸแŸ‡แž”แžถแž“ แžขแŸ’แž“แž€แžแŸ’แžšแžผแžœแž”แž„แŸ’แž€แžพแžแžขแŸ’แž“แž€แž…แžถแžแŸ‹แžแŸ’แž“แžถแž€แŸ‹แž˜แžฝแž™ แž แžพแž™แž…แžทแž‰แŸ’แž…แžนแž˜แžœแžถแž‡แžถแžฏแž€แžŸแžถแžšแžŠแŸ‚แž›แž”แžถแž“แž”แžŽแŸ’แžแžปแŸ‡แž”แžŽแŸ’แžแžถแž›แžšแžฝแž…แž แžพแž™ (แžแŸ†แžŽแž—แŸ’แž‡แžถแž”แŸ‹แžแŸ’แžšแžผแžœแž”แžถแž“แž•แŸ’แžแž›แŸ‹แžฑแŸ’แž™แžแžถแž„แž›แžพ)แŸ” แžแŸ’แž‰แžปแŸ†แž”แžถแž“แž”แž„แŸ’แž แŸ„แŸ‡แžฏแž€แžŸแžถแžš pencv_haarcascade_frontalface_default.xml แžšแžฝแž…แž แžพแž™แž‘แŸ…แž€แžถแž“แŸ‹แžแžแžŠแŸ‚แž›แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžšแž”แžŸแŸ‹แž™แžพแž„แžŸแŸ’แžแžทแžแž“แŸ…แŸ”

harrcascade := โ€œopencv_haarcascade_frontalface_default.xmlโ€classifier := gocv.NewCascadeClassifier()classifier.Load(harrcascade)
defer classifier.Close()

แžŠแžพแž˜แŸ’แž”แžธแžŸแŸ’แžœแŸ‚แž„แžšแž€แž˜แžปแžแž“แŸ…แž€แŸ’แž“แžปแž„แžšแžผแž”แž—แžถแž– แžขแŸ’แž“แž€แžแŸ’แžšแžผแžœแž”แŸ’แžšแžพแžœแžทแž’แžธแžŸแžถแžŸแŸ’แžแŸ’แžš แžšแž€แžƒแžพแž‰แž–แž แžปแž˜แžถแžแŸ’แžšแžŠแŸ’แž‹แžถแž“. แž˜แžปแžแž„แžถแžšแž“แŸแŸ‡แž™แž€แžŸแŸŠแžปแž˜แž˜แžฝแž™ (แž”แŸ’แžšแž—แŸแž‘ Mat) แžŠแŸ‚แž›แž‘แžพแž”แžแŸ‚แž”แžถแž“แžขแžถแž“แž–แžธแž€แžถแžšแžŸแŸ’แž‘แŸ’แžšแžธแž˜แžœแžธแžŠแŸแžขแžผแžšแž”แžŸแŸ‹แž€แžถแž˜แŸแžšแŸ‰แžถ แž แžพแž™แžแŸ’แžšแžกแž”แŸ‹แžขแžถแžšแŸแž“แŸƒแž”แŸ’แžšแž—แŸแž‘แž…แžแžปแž€แŸ„แžŽแž€แŸ‚แž„แŸ” แž‘แŸ†แž แŸ†แžขแžถแžšแŸแžแŸ†แžŽแžถแž„แžฑแŸ’แž™แž…แŸ†แž“แžฝแž“แž˜แžปแžแžŠแŸ‚แž›แžขแŸ’แž“แž€แž…แžถแžแŸ‹แžแŸ’แž“แžถแž€แŸ‹แžขแžถแž…แžšแž€แžƒแžพแž‰แž“แŸ…แž€แŸ’แž“แžปแž„แžŸแŸŠแžปแž˜แŸ” แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€ แžŠแžพแž˜แŸ’แž”แžธแž”แŸ’แžšแžถแž€แžŠแžแžถแž™แžพแž„แžƒแžพแž‰แžขแŸ’แžœแžธแžŠแŸ‚แž›แžœแžถแž”แžถแž“แžšแž€แžƒแžพแž‰ แž…แžผแžšแž™แžพแž„แž’แŸ’แžœแžพแž˜แŸ’แžแž„แž‘แŸ€แžแžแžถแž˜แžšแž™แŸˆแž”แž‰แŸ’แž‡แžธแž…แžแžปแž€แŸ„แžŽแž€แŸ‚แž„ แž แžพแž™แž”แŸ„แŸ‡แž–แžปแž˜แŸ’แž–แžœแžแŸ’แžแžปแž…แžแžปแž€แŸ„แžŽแž€แŸ‚แž„แž‘แŸ…แž€แžปแž„แžŸแžผแž› แžŠแŸ„แž™แž”แž„แŸ’แž€แžพแžแžŸแŸŠแžปแž˜แž‡แžปแŸ†แžœแžทแž‰แž…แžแžปแž€แŸ„แžŽแž€แŸ‚แž„แžŠแŸ‚แž›แž”แžถแž“แžšแž€แžƒแžพแž‰แŸ” แž“แŸแŸ‡แžขแžถแž…แžแŸ’แžšแžผแžœแž”แžถแž“แž’แŸ’แžœแžพแžŠแŸ„แž™แž”แŸ’แžšแžพแž˜แžปแžแž„แžถแžšแž…แžแžปแž€แŸ„แžŽแŸ” แžœแžถโ€‹แž“แžนแž„โ€‹แž‘แž‘แžฝแž›โ€‹แž™แž€ Mat แžŠแŸ‚แž›โ€‹แž”แžถแž“โ€‹แžขแžถแž“โ€‹แžŠแŸ„แž™โ€‹แž€แžถแž˜แŸแžšแŸ‰แžถ แžœแžแŸ’แžแžปโ€‹แž…แžแžปแž€แŸ„แžŽโ€‹แžŠแŸ‚แž›โ€‹แžแŸ’แžšแžผแžœโ€‹แž”แžถแž“โ€‹แžแŸ’แžšแžกแž”แŸ‹โ€‹แžŠแŸ„แž™โ€‹แžœแžทแž’แžธแžŸแžถแžŸแŸ’แžแŸ’แžš DetectMultiScale แž–แžŽแŸŒ แž“แžทแž„โ€‹แž€แž˜แŸ’แžšแžถแžŸแŸ‹โ€‹แžŸแž˜แŸ’แžšแžถแž”แŸ‹โ€‹แžŸแŸŠแžปแž˜แŸ”

for _, r := range rects {
fmt.Println(โ€œdetectedโ€, r)
gocv.Rectangle(&img, r, color, 2)
}

แž€แžถแžšแž€แžŸแžถแž„แž”แŸ’แžšแž–แŸแž“แŸ’แž’แžŸแž˜แŸ’แž‚แžถแž›แŸ‹แž˜แžปแžแžŠแŸ„แž™แž•แŸ’แžขแŸ‚แž€แž›แžพ Golang แž“แžทแž„ OpenCV

แž€แžถแžšแž€แžŸแžถแž„แž”แŸ’แžšแž–แŸแž“แŸ’แž’แžŸแž˜แŸ’แž‚แžถแž›แŸ‹แž˜แžปแžแžŠแŸ„แž™แž•แŸ’แžขแŸ‚แž€แž›แžพ Golang แž“แžทแž„ 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)
}
}

แž แžพแž™... แž”แžถแž‘ แžขแŸ’แžœแžธแŸ—แž”แžถแž“แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž แžพแž™! แžฅแžกแžผแžœแž“แŸแŸ‡ แž™แžพแž„แž˜แžถแž“แž”แŸ’แžšแž–แŸแž“แŸ’แž’แžŸแž˜แŸ’แž‚แžถแž›แŸ‹แž˜แžปแžแžŸแžถแž˜แž‰แŸ’แž‰แž˜แžฝแž™ แžŠแŸ‚แž›แžŸแžšแžŸแŸแžšแž€แŸ’แž“แžปแž„ Go แŸ” แž†แžถแž”แŸ‹แŸ—แž“แŸแŸ‡ แžแŸ’แž‰แžปแŸ†แž˜แžถแž“แž‚แž˜แŸ’แžšแŸ„แž„แž”แž“แŸ’แžแž€แžถแžšแž–แžทแžŸแŸ„แž’แž“แŸแž‘แžถแŸ†แž„แž“แŸแŸ‡ แž“แžทแž„แž”แž„แŸ’แž€แžพแžแžขแŸ’แžœแžธแžŠแŸ‚แž›แžแŸ’แž˜แžธแŸ— แžŠแŸ„แž™แž€แžถแžšแžšแžฝแž˜แž”แž‰แŸ’แž…แžผแž›แž‚แŸ’แž“แžถแžšแžœแžถแž„ Go แž“แžทแž„ OpenCV แŸ”

แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แž“แž€แž…แžถแž”แŸ‹แžขแžถแžšแž˜แŸ’แž˜แžŽแŸแžŸแžผแž˜แžœแžถแž™แžแž˜แŸ’แž›แŸƒ แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸแž‚แŸแž แž‘แŸ†แž–แŸแžš gRPCแžŠแŸ‚แž›แžแŸ’แž‰แžปแŸ†แž”แžถแž“แžŸแžšแžŸแŸแžšแž“แŸ…แž€แŸ’แž“แžปแž„ Python แž“แžทแž„ OpenCV แŸ” แžœแžถแžŸแŸ’แž‘แŸ’แžšแžธแž˜แž‘แžทแž“แŸ’แž“แž“แŸแž™แž“แŸ…แž–แŸแž›แžŠแŸ‚แž›แž˜แžปแžแžแŸ’แžšแžผแžœแž”แžถแž“แžšแž€แžƒแžพแž‰แŸ” แž“แŸแŸ‡แž‚แžบแž‡แžถแž˜แžผแž›แžŠแŸ’แž‹แžถแž“แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž”แž„แŸ’แž€แžพแžแžขแžแžทแžแžทแž‡แž“แž•แŸ’แžŸแŸแž„แŸ—แž‚แŸ’แž“แžถแž‡แžถแž—แžถแžŸแžถแžŸแžšแžŸแŸแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž•แŸ’แžŸแŸแž„แŸ—แž‚แŸ’แž“แžถแŸ” แž–แžฝแž€แž‚แŸแž“แžนแž„แžขแžถแž…แž—แŸ’แž‡แžถแž”แŸ‹แž‘แŸ…แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ แž“แžทแž„แžขแžถแž“แž‘แžทแž“แŸ’แž“แž“แŸแž™แž–แžธแžœแžถแŸ”

แžŸแžผแž˜แžขแžšแž‚แžปแžŽแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแžขแžถแž“แžขแžแŸ’แžแž”แž‘!

Skillbox แžŽแŸ‚แž“แžถแŸ†แŸ–

แž”แŸ’แžšแž—แž–: www.habr.com

แž‘แžทแž‰แž€แžถแžšแž”แž„แŸ’แž แŸ„แŸ‡แžŠแŸ‚แž›แžขแžถแž…แž‘แžปแž€แž…แžทแžแŸ’แžแž”แžถแž“แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‚แŸแž แž‘แŸ†แž–แŸแžšแžŠแŸ‚แž›แž˜แžถแž“แž€แžถแžšแž€แžถแžšแž–แžถแžš DDoS, แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ VPS VDS ๐Ÿ”ฅ แž‘แžทแž‰แžŸแŸแžœแžถแž”แž„แŸ’แž แŸ„แŸ‡แž‚แŸแž แž‘แŸ†แž–แŸแžšแžŠแŸ‚แž›แžขแžถแž…แž‘แžปแž€แž…แžทแžแŸ’แžแž”แžถแž“แž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแž€แžถแžšแž–แžถแžš DDoS แž“แžทแž„แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ VPS VDS | ProHoster