
OpenCV เช เชเชฎเซเชชเซเชฏเซเชเชฐ เชตเชฟเชเชจ เชชเซเชฐเซเชเซเชเซเชเซเชธ เชฎเชพเชเซ เชฐเชเชพเชฏเซเชฒ เชฒเชพเชเชฌเซเชฐเซเชฐเซ เชเซ. เชคเซเชฃเซ เชชเชนเซเชฒเซเชฅเซ เช เชฒเชเชญเช 20 เชตเชฐเซเชทเชจเซ เชเซ. เชฎเซเช เชคเซเชจเซ เชเซเชฒเซเชเชฎเชพเช เชเชชเชฏเซเช เชเชฐเซเชฏเซ เชนเชคเซ เช
เชจเซ เชนเชเซ เชชเชฃ เชฎเชพเชฐเชพ C++ เช
เชจเซ Python เชชเซเชฐเซเชเซเชเซเชเซเชธ เชฎเชพเชเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช เชเชพเชฐเชฃ เชเซ เชคเซเชฎเชพเช เชคเซ เชญเชพเชทเชพเช เชฎเชพเชเซ เชธเชพเชฐเซ เชธเชชเซเชฐเซเช เชเซ.
เชชเชฐเชเชคเซ เชเซเชฏเชพเชฐเซ เชฎเซเช Go เชถเซเชเชตเชพเชจเซเช เช
เชจเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซเชฏเซเช, เชคเซเชฏเชพเชฐเซ เชฎเชจเซ เช เชญเชพเชทเชพ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ OpenCV เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเชพเชฏ เชเซ เชเซเชฎ เชคเซเชฎเชพเช เชฐเชธ เชชเชกเซเชฏเซ. เชคเซ เชธเชฎเชฏเซ, เชเชเซเชเชฐเชฃ เชชเชฐ เชชเชนเซเชฒเชพเชฅเซ เช เชเชฆเชพเชนเชฐเชฃเซ เช
เชจเซ เชเซเชฏเซเชเซเชฐเชฟเชฏเชฒเซเชธ เชนเชคเชพ, เชชเชฐเชเชคเซ เชคเซ เชฎเชจเซ เชฒเชพเชเชคเซเช เชนเชคเซเช เชเซ เชคเซ เชเซเชฌ เชเชเชฟเชฒ เชนเชคเชพ. เชฅเซเชกเซ เชตเชพเชฐ เชชเชเซ, เชนเซเช เชง เชนเชพเชเชฌเซเชฐเชฟเชก เชเซเชฐเซเชช เชเซเชฎ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเซเชฒ เชฐเซเชชเชฐ เชธเชพเชฎเซ เชเชตเซเชฏเซ. เช เชฒเซเชเชฎเชพเช, เชนเซเช เชคเชฎเชจเซ เชฌเชคเชพเชตเซเชถ เชเซ Haar Cascades เชธเชพเชฅเซ เชเช เชธเชฐเชณ เชเชนเซเชฐเซ เชเชณเชเชตเชพเชจเซ เชธเชฟเชธเซเชเชฎ เชตเชฟเชเชธเชพเชตเซเชจเซ GoCV เชธเชพเชฅเซ เชเซเชตเซ เชฐเซเชคเซ เชถเชฐเซเชเชค เชเชฐเชตเซ.
เชธเซเชเชฟเชฒเชฌเซเชเซเชธ เชญเชฒเชพเชฎเชฃ เชเชฐเซ เชเซ: เชชเซเชฐเซเชเซเชเชฟเชเชฒ เชเซเชฐเซเชธ .
เช เชฎเซ เชฏเชพเชฆ เชเชฐเชพเชตเซเช เชเซเช: Habrเชจเชพ เชคเชฎเชพเชฎ เชตเชพเชเชเซ เชฎเชพเชเซ - Habr เชชเซเชฐเซเชฎเซ เชเซเชกเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชเชชเชฃ เชธเซเชเชฟเชฒเชฌเซเชเซเชธ เชเซเชฐเซเชธเชฎเชพเช เชจเซเชเชงเชฃเซ เชเชฐเชคเซ เชตเชเชคเซ 10 เชฐเซเชฌเชฒ เชกเชฟเชธเซเชเชพเชเชจเซเช.
เชถเซเช เชเชฐเซเชฐเซ เชเซ:
- เชเชพเช;
- OpenCV (เชจเซเชเซ เชเชจเซเชธเซเชเซเชฒเชฐ เชฒเชฟเชเชเซเชธ);
- เชตเซเชฌ เช เชฅเชตเชพ เชจเชฟเชฏเชฎเชฟเชค เชตเชฟเชกเชฟเชฏเซ เชเซเชฎเซเชฐเชพ.
เชธเซเชฅเชพเชชเชจ
- Linux:
- macOS:
- Windows:
เชเชฆเชพเชนเชฐเชฃ 1
เชชเซเชฐเชฅเชฎ เชเชฆเชพเชนเชฐเชฃเชฎเชพเช, เช เชฎเซ เชเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเชจเชพเชตเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเชถเซเช เชเซ เชเซเชฎเซเชฐเชพ เชตเชฟเชกเชฟเช เชธเซเชเซเชฐเซเชฎ เชฆเชฐเซเชถเชพเชตเชคเซ เชตเชฟเชเชกเซ เชเซเชฒเซ เชเซ.
เชชเซเชฐเชฅเชฎ เชคเชฎเชพเชฐเซ เชเชพเชฎ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชชเซเชธเซเชคเชเชพเชฒเชฏเซ เชเชฏเชพเชค เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เชเชฏเชพเชค (
"เชฒเซเช"
"gocv.io/x/gocv"
)
เช เชชเชเซ, เชคเชฎเชพเชฐเซ VideoCaptureDevice เชซเชเชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ VideoCapture เชเชฌเซเชเซเชเซเช เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชฌเชพเชฆเชฎเชพเช เชเซเชฎเซเชฐเชพเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชตเชฟเชกเชฟเช เชธเซเชเซเชฐเซเชฎ เชเซเชชเซเชเชฐ เชเชฐเชตเชพเชจเซเช เชถเชเซเชฏ เชฌเชจเชพเชตเซ เชเซ. เชซเชเชเซเชถเชจ เชชเชฐเชฟเชฎเชพเชฃ เชคเชฐเซเชเซ เชชเซเชฐเซเชฃเชพเชเชเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ (เชคเซ เชเชชเชเชฐเชฃ 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()เชตเชฟเชกเชฟเช เชธเซเชเซเชฐเซเชฎ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชตเชฟเชจเซเชกเซ เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ - เช เชจเซเชฏเซเชตเชฟเชจเซเชกเซ เชซเชเชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฐเซ เชถเชเชพเชฏ เชเซ.
window := gocv.NewWindow(โwebcamwindowโ)
defer window.Close()เชนเชตเซ เชเชพเชฒเซ เชธเซเชฅเซ เชฐเชธเชชเซเชฐเชฆ เชญเชพเช เชคเชฐเชซ เชเชเชณ เชตเชงเซเช.
เชตเชฟเชกเชฟเชฏเซ เช เชเชฎเซเช เชซเซเชฐเซเชฎเซเชธเชจเซ เชธเชคเชค เชชเซเชฐเชตเชพเชน เชนเซเชตเชพเชฅเซ, เชเซเชฎเซเชฐเชพเชจเชพ เชตเชฟเชกเชฟเชฏเซ เชธเซเชเซเชฐเซเชฎเชจเซ เช เชตเชฟเชฐเชคเชชเชฃเซ เชตเชพเชเชเชตเชพ เชฎเชพเชเซ เช เชฎเชพเชฐเซ เช เชจเชเชค เชฒเซเชช เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชตเชฟเชกเซเชฏเซเชเซเชชเซเชเชฐ เชชเซเชฐเชเชพเชฐเชจเซ เชฐเซเชก เชชเชฆเซเชงเชคเชฟเชจเซ เชเชฐเซเชฐ เชเซ. เชคเซ เชฎเซเช เชชเซเชฐเชเชพเชฐ (เช เชฎเซ เชเชชเชฐ เชฌเชจเชพเชตเซเชฒ เชฎเซเชเซเชฐเชฟเชเซเชธ) เชจเซ เช เชชเซเชเซเชทเชพ เชฐเชพเชเชถเซ, เชฌเซเชฒเชฟเชฏเชจ เชฎเซเชฒเซเชฏ เชชเชฐเชค เชเชฐเชถเซ เชเซ เชฆเชฐเซเชถเชพเชตเซ เชเซ เชเซ เชถเซเช 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)
เชเชชเซเชฒเชฟเชเซเชถเชจ เชฒเซเชเช เชเชฐเซเชฏเชพ เชชเชเซ, เชเซเชฎเซเชฐเชพเชฎเชพเชเชฅเซ เชตเชฟเชกเชฟเช เชธเซเชเซเชฐเซเชฎ เชธเชพเชฅเซเชจเซ เชเช เชตเชฟเชเชกเซ เชเซเชฒเชถเซ.

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 เชชเชฐ เชเชงเชพเชฐเชฟเชค เชซเซเชธ เชฐเซเชเชเซเชจเชฟเชถเชจ เชธเชฟเชธเซเชเชฎ เชฌเชจเชพเชตเซเช.
เชนเชพเชฐ เชเชพเชธเซเชเซเชก เช เชเชพเชธเซเชเซเชก เชตเชฐเซเชเซเชเซเชค เชเซ เชเซเชจเซ เชนเชพเชฐ เชตเซเชตเชฒเซเช เชคเชเชจเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชคเชพเชฒเซเชฎ เชเชชเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชคเซเช เช เชฎเซเช เชตเชฟเชถเซเชทเชคเชพเชเชจเซ เชถเซเชงเชตเชพ เชฎเชพเชเซ เชเชฎเซเชเชฎเชพเช เชชเชฟเชเซเชธเซเชฒเชจเซเช เชตเชฟเชถเซเชฒเซเชทเชฃ เชเชฐเซ เชเซ. เชนเชพเชฐ เชเชพเชธเซเชเซเชกเซเชธ เชตเชฟเชถเซ เชตเชงเซ เชเชพเชฃเชตเชพ เชฎเชพเชเซ, เชเซเชชเชพ เชเชฐเซเชจเซ เชจเซเชเซเชจเซ เชฒเชฟเชเชเซเชธเชจเซ เช เชจเซเชธเชฐเซ.
เชชเชนเซเชฒเซเชฅเซ เช เชชเซเชฐเชถเชฟเชเซเชทเชฟเชค เชเชพเชธเซเชเซเชก เชกเชพเชเชจเชฒเซเชก เชเชฐเซ . เชตเชฐเซเชคเชฎเชพเชจ เชเชฆเชพเชนเชฐเชฃเชฎเชพเช, เชเชเชณเชฅเซ เชตเซเชฏเชเซเชคเชฟเชจเชพ เชเชนเซเชฐเชพเชจเซ เชเชณเชเชตเชพ เชฎเชพเชเซ เชเชพเชธเซเชเซเชกเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ.
เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชเซเชฒเชพเชธเชฟเชซเชพเชฏเชฐ เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เช เชจเซ เชคเซเชจเซ เชชเชนเซเชฒเซเชฅเซ เช เชชเซเชฐเชถเชฟเชเซเชทเชฟเชค เชซเชพเชเชฒ เชซเซเชก เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ (เชฒเชฟเชเช เชเชชเชฐ เชเชชเซเชฒเซ เชเซ). เชฎเซเช เชชเชนเซเชฒเซเชฅเซ เช 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 เชจเซ เชเซเชกเซเชจเซ เชจเชตเซ เชถเชพเชจเชฆเชพเชฐ เชตเชธเซเชคเซเช เชฌเชจเชพเชตเชตเชพเชจเซ เชฏเซเชเชจเชพ เชเชกเซ เชฐเชนเซเชฏเซ เชเซเช.
เชเซ เชคเชฎเชจเซ เชฐเชธ เชนเซเชฏ, เชคเซ เชเซเชชเชพ เชเชฐเซเชจเซ เชฐเซเช เชเชฐเซ , เชเซ เชฎเซเช Python เช เชจเซ OpenCV เชฎเชพเช เชฒเชเซเชฏเซเช เชเซ. เชเซเชฏเชพเชฐเซ เชเชนเซเชฐเซ เชถเซเชงเชพเชฏ เชเซ เชคเซเชฏเชพเชฐเซ เชคเซ เชกเซเชเชพเชจเซ เชธเซเชเซเชฐเซเชฎ เชเชฐเซ เชเซ. เช เชตเชฟเชตเชฟเชง เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช เชญเชพเชทเชพเชเชฎเชพเช เชตเชฟเชตเชฟเชง เชเซเชฒเชพเชฏเชเช เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซเชจเซ เชเชงเชพเชฐ เชเซ. เชคเซเช เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ เชเชจเซเชเซเช เชฅเช เชถเชเชถเซ เช เชจเซ เชคเซเชฎเชพเชเชฅเซ เชกเซเชเชพ เชตเชพเชเชเซ เชถเชเชถเซ.
เชฒเซเช เชตเชพเชเชเชตเชพ เชฌเชฆเชฒ เชเชญเชพเชฐ!
เชธเซเชเชฟเชฒเชฌเซเชเซเชธ เชญเชฒเชพเชฎเชฃ เชเชฐเซ เชเซ:
- เชฌเซ เชตเชฐเซเชทเชจเซ เชชเซเชฐเซเชเซเชเชฟเชเชฒ เชเซเชฐเซเชธ .
- เชถเซเชเซเชทเชฃเชฟเช เชเชจเชฒเชพเชเชจ เชเซเชฐเซเชธ .
- เชเช เชตเชฐเซเชทเชจเซ เชชเซเชฐเซเชเซเชเชฟเชเชฒ เชเซเชฐเซเชธ .
เชธเซเชฐเซเชธ: www.habr.com
