
рдЗрд╕ рд╕рд╛рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, Google рдиреЗ рдПрдХ рдирдпрд╛ рдЙрддреНрдкрд╛рдж рдкреЗрд╢ рдХрд┐рдпрд╛: рдлрд╛рдпрд░рдмреЗрд╕ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХрд┐рдЯ ред рдПрдордПрд▓ рдХрд┐рдЯ рдЖрдкрдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдЪреЗрд╣рд░реЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
рдлреЗрд╕ рдбрд┐рдЯреЗрдХреНрд╢рди рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬрд╝рди рдХреА рдЙрди рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдлрд╛рдпрд░рдмреЗрд╕ рдПрдордПрд▓ рдХрд┐рдЯ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ (рдпрд╛ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ)ред рдпрд╣ рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬреЛ рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ: рдлреЛрдЯреЛ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдирд╛, рд╕реЗрд▓реНрдлреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рд╢реВрдЯрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЗрдореЛрдЬреА рдФрд░ рдЕрдиреНрдп рдкреНрд░рднрд╛рд╡ рдЬреЛрдбрд╝рдирд╛, рдХреЗрд╡рд▓ рдлреЛрдЯреЛ рд▓реЗрдирд╛ рдЬрдм рд╣рд░ рдХреЛрдИ рдЕрдкрдиреА рдЖрдВрдЦреЛрдВ рдХреЗ рд╕рд╛рде рдореБрд╕реНрдХреБрд░рд╛рддрд╛ рд╣реИ, рдЖрджрд┐ред рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдЕрдирдВрдд рд╣реИрдВред
рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Firebase ML Kit рдХреА рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ:
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдлреЗрд╕ рдбрд┐рдЯреЗрдХреНрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрднреА рднреА рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХреМрди рд╕реА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдЙрдиреНрдореБрдЦреАрдХрд░рдг рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдХреИрдорд░рд╛ рд╕реНрд░реЛрдд рдФрд░ рдЪрдпрдирд┐рдд рдХреИрдорд░рд╛ (рд╕рд╛рдордиреЗ рдпрд╛ рдкреАрдЫреЗ)ред
рдЖрджрд░реНрд╢ рд░реВрдк рдореЗрдВ, рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
camera.addFrameProcessor { frame -> faceDetector.detectFaces(frame) }
рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдШрдЯрдХ рдХреИрдорд░рд╛ , рдлреНрд░реЗрдо , рдлреЗрд╕рдбреЗрдХреНрдЯрд░ рд╣реИрдВ ред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдХреИрдорд░рд╛ рдШрдЯрдХ рд╣реА рд╣реИ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдУрд╡рд░рд▓реЗ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд╣рдо рдкрд╣рдЪрд╛рдиреЗ рдЧрдП рдЪреЗрд╣рд░реЛрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЫреЛрдЯреЗ рд╡рд░реНрдЧ рдЦреАрдВрдЪреЗрдВрдЧреЗред
<FrameLayout ...> // Any other views <CameraView ... /> <husaynhakeem.io.facedetector.FaceBoundsOverlay ... /> // Any other views </FrameLayout>
рдХреИрдорд░рд╛ (рдХреИрдорд░рд╛)
рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдХреИрдорд░рд╛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлреНрд░реЗрдо рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдлреНрд░реЗрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рдЗрд╕рдореЗрдВ рдЪреЗрд╣рд░реЗ рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред
рдлреНрд░реЗрдо (рдлреНрд░реЗрдо)
рдПрдХ рдлреНрд░реЗрдо рдПрдХ рдХреИрдорд░рд╛ рджреНрд╡рд╛рд░рд╛ рдЪреЗрд╣рд░реЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдЗрд╕рдореЗрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдПрдХ рдлреЗрд╕ рдбрд┐рдЯреЗрдХреНрдЯрд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдиреАрдЪреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ:
data class Frame( val data: ByteArray?, val rotation: Int, val size: Size, val format: Int, val isCameraFacingBack: Boolean) data class Size(val width: Int, val height: Int)
- рдбреЗрдЯрд╛ - рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдЬрд┐рд╕рдореЗрдВ рдХреИрдорд░рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ;
- рд░реЛрдЯреЗрд╢рди - рдбрд┐рд╡рд╛рдЗрд╕ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕;
- рдЖрдХрд╛рд░ - рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдХреИрдорд░рд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреА рдКрдВрдЪрд╛рдИ;
- рдкреНрд░рд╛рд░реВрдк - рдлреНрд░реЗрдо рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк;
- isCameraFacingBack - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдлреНрд░рдВрдЯ рдХреИрдорд░рд╛ рдпрд╛ рд░рд┐рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдлреЗрд╕ рдбрд┐рдЯреЗрдХреНрдЯрд░
рдлреЗрд╕ рдбрд┐рдЯреЗрдХреНрдЯрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдХ рд╣реИ - рдпрд╣ рдПрдХ рдлреНрд░реЗрдо рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреИрдорд░рд╛ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдлреНрд░реЗрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЗрд╕ рдбрд┐рдЯреЗрдХреНрдЯрд░ FirebaseVisionFaceDetector
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрд╕реЗ рдХреИрдорд░реЗ рдХреЗ рдЙрдиреНрдореБрдЦреАрдХрд░рдг рдФрд░ рдЙрд╕рдХреА рджрд┐рд╢рд╛ (рд╕рд╛рдордиреЗ рдпрд╛ рдкреАрдЫреЗ) рдХрд╛ рднреА рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдВрдд рдореЗрдВ, рдЙрд╕реЗ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХрд┐рд╕ рдУрд╡рд░рд▓реЗ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдВрдЧреЗред FaceDetector
рд╡рд░реНрдЧ рдХрд╛ рдХрдВрдХрд╛рд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
class FaceDetector(private val faceBoundsOverlay: FaceBoundsOverlay) { private val faceBoundsOverlayHandler = FaceBoundsOverlayHandler() private val firebaseFaceDetectorWrapper = FirebaseFaceDetectorWrapper() fun process(frame: Frame) { updateOverlayAttributes(frame) detectFacesIn(frame) } private fun updateOverlayAttributes(frame: Frame) { faceBoundsOverlayHandler.updateOverlayAttributes(...) } private fun detectFacesIn(frame: Frame) { firebaseFaceDetectorWrapper.process( image = convertFrameToImage(frame), onSuccess = { faceBoundsOverlay.updateFaces( ) }, onError = { }) } }
рдУрд╡рд░рд▓реЗ (рдУрд╡рд░рд▓реЗ)
рдУрд╡рд░рд▓реЗ рдПрдХ рджреГрд╢реНрдп рдШрдЯрдХ рд╣реИ рдЬреЛ рдХреИрдорд░реЗ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдмреИрдарддрд╛ рд╣реИред рдпрд╣ рдЕрдВрдХрд┐рдд рдЪреЗрд╣рд░реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдлреНрд░реЗрдо (рдпрд╛ рдмреЙрд░реНрдбрд░) рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдЙрдиреНрдореБрдЦреАрдХрд░рдг , рдХреИрдорд░реЗ рдХреА рджрд┐рд╢рд╛ (рд╕рд╛рдордиреЗ рдпрд╛ рдкреАрдЫреЗ) рдФрд░ рдХреИрдорд░реЗ рдХреЗ рдЖрдпрд╛рдо (рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ) рдХрд╛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкрд╣рдЪрд╛рдиреЗ рдЧрдП рдЪреЗрд╣рд░реЗ рдХреЗ рдЖрд╕-рдкрд╛рд╕ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдЦреАрдВрдЪрдирд╛ рд╣реИ, рд╕реАрдорд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдорд╛рдкрдирд╛ рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
class FaceBoundsOverlay @JvmOverloads constructor( ctx: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : View(ctx, attrs, defStyleAttr) { private val facesBounds: MutableList<FaceBounds> = mutableListOf() fun updateFaces(bounds: List<FaceBounds>) { facesBounds.clear() facesBounds.addAll(bounds) invalidate() } override fun onDraw(canvas: Canvas) { super.onDraw(canvas) facesBounds.forEach { val centerX = val centerY = drawBounds(it.box, canvas, centerX, centerY) } } private fun drawBounds(box: Rect, canvas: Canvas, centerX: Float, centerY: Float) { canvas.drawRect( left, top, right, bottom, boundsPaint) } }
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрд░реЗрдЦ рдореЗрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдШрдЯрдХреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╡реЗ рдЙрд╕ рдХреНрд╖рдг рд╕реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдХреИрдорд░рд╛ рдЙрд╕ рдкрд▓ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдлреАрдб рдХрд░рддрд╛ рд╣реИ рдЬрдм рдкрд░рд┐рдгрд╛рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

3 рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ
рдЪреЗрд╣рд░реЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдЬрд┐рд╕рдореЗрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреЛрдб рд╣реИ), рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреИрдорд░рд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ред
рдЪрд░рдг 1. рдХреИрдорд░реЗ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ FaceBoundsOverlay
рдЬреЛрдбрд╝реЗрдВред
<FrameLayout ...> // Any other views <CameraView ... /> <husaynhakeem.io.facedetector.FaceBoundsOverlay ... /> // Any other views </FrameLayout>
рдЪрд░рдг 2. FaceDetection
рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдХреИрдорд░реЗ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
private val faceDetector: FaceDetector by lazy { FaceDetector(facesBoundsOverlay) } cameraView.addFrameProcessor { faceDetector.process(Frame( data = it.data, rotation = it.rotation, size = Size(it.size.width, it.size.height), format = it.format)) }
рдЪрд░рдг 3. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдлрд╛рдпрд░рдмреЗрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдлреЗрд╕ рдбрд┐рдЯреЗрдХреНрд╢рди рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдФрд░ рдПрдордПрд▓ рдХрд┐рдЯ рдЗрд╕реЗ рд╕реБрд▓рдн рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЪреЗрд╣рд░рд╛ рдкрд╣рдЪрд╛рди, рдЬреЛ рд╕рд░рд▓ рдкрд╣рдЪрд╛рди рд╕реЗ рдкрд░реЗ рдЬрд╛рддрд╛ рд╣реИ: рдпрд╣ рди рдХреЗрд╡рд▓ рдЪреЗрд╣рд░реЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕рдХрд╛ рд╣реИред
рдЬрд▓реНрдж рд╣реА, рд╡реЗ Ml рдХрд┐рдЯ рдореЗрдВ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ - рдЪреЗрд╣рд░реЗ рдХреА рд╕рдореЛрдЪреНрдЪ рдкрд╣рдЪрд╛рдиред рдЗрд╕рдХреА рдорджрдж рд╕реЗ, рдЪреЗрд╣рд░реЗ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ 100 рд╕реЗ рдЕрдзрд┐рдХ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЬрд▓реНрджреА рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╡рд╕реНрддреБрдУрдВ рдпрд╛ рдЖрднрд╛рд╕реА рд╕реНрдЯрд┐рдХрд░ (рдЬреИрд╕реЗ рд╕реНрдиреИрдкрдЪреИрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлреЗрд╕ рдбрд┐рдЯреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдЖрдк рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред