แƒกแƒแƒฎแƒ˜แƒก แƒแƒ›แƒแƒชแƒœแƒแƒ‘แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒแƒ’แƒ”แƒ‘แƒ Golang-แƒกแƒ แƒ“แƒ OpenCV-แƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜

แƒกแƒแƒฎแƒ˜แƒก แƒแƒ›แƒแƒชแƒœแƒแƒ‘แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒแƒ’แƒ”แƒ‘แƒ Golang-แƒกแƒ แƒ“แƒ OpenCV-แƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜
OpenCV แƒแƒ แƒ˜แƒก แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜แƒ แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒฃแƒšแƒ˜ แƒฎแƒ”แƒ“แƒ•แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ˜แƒก แƒฃแƒ™แƒ•แƒ” แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 20 แƒฌแƒšแƒ˜แƒกแƒแƒ. แƒ›แƒ” แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ” แƒ™แƒแƒšแƒ”แƒฏแƒจแƒ˜ แƒ“แƒ แƒแƒฎแƒšแƒแƒช แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘ แƒ›แƒแƒก แƒฉแƒ”แƒ›แƒ˜ C++ แƒ“แƒ Python แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒแƒก แƒแƒฅแƒ•แƒก แƒ™แƒแƒ แƒ’แƒ˜ แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ แƒแƒ› แƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ” Go-แƒก แƒกแƒฌแƒแƒ•แƒšแƒ แƒ“แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒ“แƒแƒ•แƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ“แƒ˜, แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒแƒ“แƒ แƒ—แƒฃ แƒแƒ แƒ OpenCV-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ› แƒ”แƒœแƒแƒกแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ˜แƒ› แƒ“แƒ แƒแƒก แƒฃแƒ™แƒ•แƒ” แƒ˜แƒงแƒ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ’แƒแƒ™แƒ•แƒ”แƒ—แƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ”แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒแƒ“แƒ, แƒ แƒแƒ› แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ แƒ—แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ. แƒชแƒแƒขแƒ แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒ˜แƒ•แƒฎแƒ•แƒ“แƒ˜ The Hybrid Group-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒš แƒจแƒ”แƒคแƒฃแƒ—แƒ•แƒแƒก. แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒ›แƒ” แƒ’แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ˜แƒฌแƒงแƒแƒ— GoCV-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ Haar Cascades-แƒ˜แƒ— แƒกแƒแƒฎแƒ˜แƒก แƒแƒ›แƒแƒชแƒœแƒแƒ‘แƒ˜แƒก แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒ—.

Skillbox แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ—: แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒ™แƒฃแƒ แƒกแƒ˜ "แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜ แƒœแƒฃแƒšแƒ˜แƒ“แƒแƒœ".

แƒจแƒ”แƒ’แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ—: "Habr"-แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก - แƒคแƒแƒกแƒ“แƒแƒ™แƒšแƒ”แƒ‘แƒ 10 แƒ แƒฃแƒ‘แƒšแƒ˜แƒ“แƒแƒœ Skillbox-แƒ˜แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒ™แƒฃแƒ แƒกแƒ–แƒ” แƒฉแƒแƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒกแƒแƒก "Habr" แƒกแƒแƒ แƒ”แƒ™แƒšแƒแƒ›แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒ แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒกแƒแƒญแƒ˜แƒ แƒ:

  • แƒฌแƒแƒ“แƒ˜;
  • OpenCV (แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ˜แƒœแƒกแƒขแƒแƒšแƒ”แƒ แƒ˜แƒก แƒ‘แƒ›แƒฃแƒšแƒ”แƒ‘แƒ˜);
  • แƒ•แƒ”แƒ‘ แƒแƒœ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ•แƒ˜แƒ“แƒ”แƒแƒ™แƒแƒ›แƒ”แƒ แƒ.

แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ 1

แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜ แƒจแƒ”แƒ•แƒ”แƒชแƒ“แƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฎแƒกแƒœแƒ˜แƒก แƒคแƒแƒœแƒฏแƒแƒ แƒแƒก แƒ™แƒแƒ›แƒ”แƒ แƒ˜แƒก แƒ•แƒ˜แƒ“แƒ”แƒ แƒœแƒแƒ™แƒแƒ“แƒ˜แƒ—.

แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ›แƒแƒ˜แƒขแƒแƒœแƒแƒ— แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒ“.

แƒ˜แƒ›แƒžแƒแƒ แƒขแƒ˜ (
"แƒšแƒแƒ’แƒ˜"
"gocv.io/x/gocv"
)

แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— VideoCapture แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ VideoCaptureDevice แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ”แƒก แƒฃแƒ™แƒแƒœแƒแƒกแƒ™แƒœแƒ”แƒšแƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒก แƒฎแƒ“แƒ˜แƒก แƒ•แƒ˜แƒ“แƒ”แƒ แƒœแƒแƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ“แƒแƒฆแƒ”แƒ‘แƒแƒก แƒ™แƒแƒ›แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒแƒ“ แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ›แƒ—แƒ”แƒš แƒ แƒ˜แƒชแƒฎแƒ•แƒก (แƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก ID-แƒก).

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

แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— n-แƒ’แƒแƒœแƒ–แƒแƒ›แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒแƒœแƒ˜ แƒ›แƒแƒขแƒ แƒ˜แƒชแƒ. แƒ˜แƒก แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒ™แƒแƒ›แƒ”แƒ แƒ˜แƒ“แƒแƒœ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒฃแƒš แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒก.

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

แƒ•แƒ˜แƒ“แƒ”แƒ แƒœแƒแƒ™แƒแƒ“แƒ˜แƒก แƒกแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒคแƒแƒœแƒฏแƒแƒ แƒ - แƒ”แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก NewWindow แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

window := gocv.NewWindow(โ€œwebcamwindowโ€)
defer window.Close()

แƒแƒฎแƒšแƒ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒ— แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒœแƒแƒฌแƒ˜แƒšแƒ–แƒ”.

แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒ•แƒ˜แƒ“แƒ”แƒ แƒแƒ แƒ˜แƒก แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒฉแƒแƒ แƒฉแƒแƒ”แƒ‘แƒ˜แƒก แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒœแƒแƒ™แƒแƒ“แƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒฃแƒกแƒแƒกแƒ แƒฃแƒšแƒ แƒ›แƒแƒ แƒงแƒฃแƒŸแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ™แƒแƒ›แƒ”แƒ แƒ˜แƒก แƒ•แƒ˜แƒ“แƒ”แƒ แƒœแƒแƒ™แƒแƒ“แƒ˜แƒก แƒฃแƒกแƒแƒกแƒ แƒฃแƒšแƒแƒ“ แƒฌแƒแƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒแƒ“. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ VideoCapture แƒขแƒ˜แƒžแƒ˜แƒก Read แƒ›แƒ”แƒ—แƒแƒ“แƒ˜. แƒ›แƒแƒก แƒ›แƒแƒ”แƒšแƒ˜แƒก 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 แƒ™แƒแƒกแƒ™แƒแƒ“แƒ”แƒ‘แƒ˜ แƒแƒ แƒ˜แƒก แƒ™แƒแƒกแƒ™แƒแƒ“แƒฃแƒ แƒ˜ แƒ™แƒšแƒแƒกแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒแƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ Haar wavelet แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ”. แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒ”แƒœ แƒžแƒ˜แƒฅแƒกแƒ”แƒšแƒ”แƒ‘แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒแƒ–แƒ” แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒกแƒแƒซแƒ”แƒ‘แƒœแƒแƒ“. Haar Cascades-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ›แƒ”แƒขแƒ˜แƒก แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒแƒ“, แƒ’แƒ—แƒฎแƒแƒ•แƒ—, แƒ›แƒ˜แƒฐแƒงแƒ”แƒ•แƒ˜แƒ— แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš แƒ‘แƒ›แƒฃแƒšแƒ”แƒ‘แƒก.

แƒ•แƒ˜แƒแƒšแƒ-แƒฏแƒแƒœแƒกแƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒแƒฆแƒ›แƒแƒฉแƒ”แƒœแƒ˜แƒก แƒฉแƒแƒ แƒฉแƒ
แƒ™แƒแƒกแƒ™แƒแƒ“แƒฃแƒ แƒ˜ แƒ™แƒšแƒแƒกแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜
แƒฐแƒแƒ แƒ˜แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ

แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ— แƒฃแƒ™แƒ•แƒ” แƒ’แƒแƒฌแƒ•แƒ แƒ—แƒœแƒ˜แƒšแƒ˜ แƒ™แƒแƒกแƒ™แƒแƒ“แƒ”แƒ‘แƒ˜ แƒแƒฅ แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜. แƒแƒ›แƒŸแƒแƒ›แƒ˜แƒœแƒ“แƒ”แƒš แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜, แƒ™แƒแƒกแƒ™แƒแƒ“แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒžแƒ˜แƒ แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒก แƒแƒ›แƒแƒกแƒแƒชแƒœแƒแƒ‘แƒแƒ“.

แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒ™แƒšแƒแƒกแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜ แƒ“แƒ แƒ›แƒ˜แƒแƒฌแƒแƒ“แƒแƒ— แƒ›แƒแƒก แƒฃแƒ™แƒ•แƒ” แƒ’แƒแƒฌแƒ•แƒ แƒ—แƒœแƒ˜แƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜ (แƒ‘แƒ›แƒฃแƒšแƒ˜ แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒ–แƒ”แƒ›แƒแƒ—). แƒ›แƒ” แƒฃแƒ™แƒ•แƒ” แƒแƒ•แƒขแƒ•แƒ˜แƒ แƒ—แƒ” pencv_haarcascade_frontalface_default.xml แƒคแƒแƒ˜แƒšแƒ˜ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜, แƒกแƒแƒ“แƒแƒช แƒฉแƒ•แƒ”แƒœแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก.

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

แƒกแƒฃแƒ แƒแƒ—แƒ–แƒ” แƒกแƒแƒฎแƒ”แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒšแƒ”แƒœแƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ DetectMultiScale. แƒ”แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ˜แƒฆแƒ”แƒ‘แƒก แƒฉแƒแƒ แƒฉแƒแƒก (แƒ›แƒแƒ— แƒขแƒ˜แƒžแƒ˜แƒก), แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฎแƒšแƒแƒฎแƒแƒœ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ แƒ™แƒแƒ›แƒ”แƒ แƒ˜แƒก แƒ•แƒ˜แƒ“แƒ”แƒ แƒœแƒแƒ™แƒแƒ“แƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ›แƒแƒ แƒ—แƒ™แƒฃแƒ—แƒฎแƒ”แƒ“แƒ˜แƒก แƒขแƒ˜แƒžแƒ˜แƒก แƒ›แƒแƒกแƒ˜แƒ•แƒก. แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก แƒ–แƒแƒ›แƒ แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก แƒ˜แƒ› แƒกแƒแƒฎแƒ”แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒแƒฆแƒ›แƒแƒฉแƒ”แƒœแƒแƒช แƒ™แƒšแƒแƒกแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ›แƒ แƒจแƒ”แƒซแƒšแƒ แƒฉแƒแƒ แƒฉแƒแƒจแƒ˜. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒ—แƒ แƒ“แƒแƒ•แƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒ•แƒœแƒแƒฎแƒแƒ•แƒ— แƒ แƒ แƒ˜แƒžแƒแƒ•แƒ, แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ•แƒ˜แƒ›แƒ”แƒแƒ แƒแƒ— แƒ›แƒแƒ แƒ—แƒ™แƒฃแƒ—แƒฎแƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒแƒจแƒ˜ แƒ“แƒ แƒ“แƒแƒ•แƒ‘แƒ”แƒญแƒ“แƒแƒ— Rectangle แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒ™แƒแƒœแƒกแƒแƒšแƒจแƒ˜, แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒกแƒแƒ–แƒฆแƒ•แƒแƒ แƒ˜ แƒœแƒแƒžแƒแƒ•แƒœแƒ˜ แƒ›แƒแƒ แƒ—แƒ™แƒฃแƒ—แƒฎแƒ”แƒ“แƒ˜แƒก แƒ’แƒแƒ แƒจแƒ”แƒ›แƒ. แƒ”แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก แƒ›แƒแƒ แƒ—แƒ™แƒฃแƒ—แƒฎแƒ”แƒ“แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ™แƒแƒ›แƒ”แƒ แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒ˜ Mat, DetectMultiScale แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ— แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ Rectangle แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒ“แƒ แƒกแƒแƒ–แƒฆแƒ•แƒ แƒ˜แƒก แƒคแƒ”แƒ แƒ˜ แƒ“แƒ แƒกแƒ˜แƒกแƒฅแƒ”.

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

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ