OpenCV рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬрд┐рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬрд╝рди рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рдЧрднрдЧ 20 рд╕рд╛рд▓ рдХреА рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЙрд▓реЗрдЬ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдФрд░ рдЕрднреА рднреА C ++ рдФрд░ рдкрд╛рдпрдерди рдореЗрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдЗрди рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЕрдЪреНрдЫрд╛ рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рд╣реИред
рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдХреНрдпрд╛ OpenCV рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕ рд╕рдордп, рдПрдХреАрдХрд░рдг рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдереЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рд╡реЗ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдереЗред рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдореИрдВ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдЧреНрд░реБрдк рдХреА рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдПрдХ рд░реИрдкрд░ рдкрд░ рдЖрдпрд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ GoCV рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрд░ рдХрд╛рд╕реНрдХреЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪреЗрд╣рд░реЗ рдХреА рдкрд╣рдЪрд╛рди рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдХреЗред
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИ: рд╕реНрдХреНрд░реИрдЪ рд╣реИрдВрдб-рдСрди рдХреЛрд░реНрд╕ рд╕реЗ рдкрд╛рдпрдерди рдбреЗрд╡рд▓рдкрд░ ред
рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░реЛрдореЛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп 10,000 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред
рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:- рдЬрд╛рдУ,
- OpenCV (рдЗрдВрд╕реНрдЯреЙрд▓рд░ рд▓рд┐рдВрдХ рдиреАрдЪреЗ);
- рд╡реЗрдм рдпрд╛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХреИрдордХреЙрд░реНрдбрд░ред
рд╕реНрдерд╛рдкрдирд╛рдЙрджрд╛рд╣рд░рдг 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()
рдЕрдм рдЖрдкрдХреЛ рдПрдХ n- рдЖрдпрд╛рдореА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХреИрдорд░реЗ рд╕реЗ рдкрдврд╝реА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред
img := gocv.NewMat() defer img.Close()
рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рдВрдбреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдпрд╣ NewWindow рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
window := gocv.NewWindow(тАЬwebcamwindowтАЭ) defer window.Close()
рдЕрдм рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рднрд╛рдЧ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рдЪреВрдВрдХрд┐ рд╡реАрдбрд┐рдпреЛ рдЫрд╡рд┐ рдлрд╝реНрд░реЗрдо рдХреА рдПрдХ рд╕рддрдд рд╕реНрдЯреНрд░реАрдо рд╣реИ, рд╣рдореЗрдВ рдХреИрдорд░реЗ рдХреА рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЕрдВрддрд╣реАрди рд░реВрдк рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд╣реАрди рд▓реВрдк рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ ReadCapture рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореИрдЯ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛ (рдЬрд┐рд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╣рдордиреЗ рдКрдкрд░ рдмрдирд╛рдпрд╛ рд╣реИ), рдПрдХ рдмреВрд▓рд┐рдпрди рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реАрдбрд┐рдпреЛрдХреИрдкрдЪрд░ рд╕реЗ рдлрд╝реНрд░реЗрдо рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрдврд╝рд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдирд╣реАрдВред
for { if ok := webcam.Read(&img); !ok || img.Empty( { log.Println(тАЬUnable to read from the webcamтАЭ) continue } . . . }
рдЕрдм рдЖрдкрдХреЛ рдмрдирд╛рдИ рдЧрдИ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдлреНрд░реЗрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдЧрд▓реЗ рдлреНрд░реЗрдо рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реБрдХреЗрдВ - 50 рдПрдордПрд╕ред
window.IMShow (img)
рдЦрд┐рдбрд╝рдХреАред рд╡реИрдХрдЯреА (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 cascades) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЪреЗрд╣рд░рд╛ рдкрд╣рдЪрд╛рди рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред
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()
рдЫрд╡рд┐ рдореЗрдВ рдЪреЗрд╣рд░реЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
DetectMultiScale рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдлреНрд░реЗрдо (рдЯрд╛рдЗрдк рдореИрдЯ) рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд┐рд░реНрдл рдХреИрдорд░реЗ рдХреА рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдкрдврд╝рд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЖрдпрдд рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рдЙрди рдЪреЗрд╣рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдлреНрд░реЗрдо рдореЗрдВ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдлрд┐рд░, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕рдиреЗ рдХреНрдпрд╛ рдкрд╛рдпрд╛, рдЪрд▓реЛ рдЖрдпрддреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрдпрдд рд╡рд╕реНрддреБ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдкрддрд╛ рд▓рдЧрд╛рдП рдЧрдП рдЖрдпрдд рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рд╕реАрдорд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЖрдпрдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХреИрдорд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рд╛ рдЧрдпрд╛ рдореИрдЯ рд▓реЗ рдЬрд╛рдПрдЧрд╛, рдЖрдпрдд рд╡рд╕реНрддреБ рдЬреЛ рдмреЙрд░реНрдбрд░ рдХреЗ рд▓рд┐рдП DetectMultiScale рд╡рд┐рдзрд┐, рд░рдВрдЧ рдФрд░ рдореЛрдЯрд╛рдИ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛ рджреА рдЧрдИ рдереАред
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) } }
рдФрд░ ... рд╣рд╛рдБ, рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛! рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреЛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪреЗрд╣рд░рд╛ рдкрд╣рдЪрд╛рди рдкреНрд░рдгрд╛рд▓реА рд╣реИред рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВрдиреЗ рдЗрди рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдФрд░ рдЧреЛ рдФрд░ рдУрдкрдирд╕реАрд╡реА рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдирдП рд╢рд╛рдВрдд рд╕рд╛рдорд╛рди рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рд╣реИред
рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ
рдЬреАрдЖрд░рдкреАрд╕реА рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ , рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкрд╛рдпрдерди рдФрд░
рдУрдкрдирд╕реАрд╡реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ред рдпрд╣ рдлреЗрд╕ рдбрд┐рдЯреЗрдХреНрд╢рди рдХреЗ рд╕рдордп рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреНрд░реАрдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдЖрдзрд╛рд░ рд╣реИред рд╡реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рдЗрд╕рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред
рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: