
режреи/резрез/реирежрезрей рдХреЛ рд╣реЗрдмрд░реВрд╕рд░ рдУрдлрдЧ рдиреЗ
рдПрдХ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛
, рдЬрд┐рд╕рдореЗрдВ
рд╣реЗрдбрдЯреНрд░реИрдХ.рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рдкрд░рд┐рдЪрдп рд╢реБрд░реВ рд╣реБрдЖред
рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдореЙрдирд┐рдЯрд░ рдХреЗ рд╕рд╛рдордиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рдХреЛрдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
getUserMedia -enabled рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рд╡реЗрдм рдХреИрдорд░рд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЫрд╡рд┐ рдХреЗ рджреЛрд╖реЛрдВ рдХреЛ рдХреИрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ, рдФрд░ рдХреЗрд╡рд▓ html + рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ ред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЖрд╡реЗрджрди рд╣реИрдВред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рд╣рдо рдПрдХ рдорд┐рдиреА-рдЧреЗрдо рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рдБрдк рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рдХреА рдУрд░ рдХреНрд░реЙрд▓ рд╣реЛрдЧрд╛ рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд╕рд┐рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджрд┐рд╢рд╛ рдмрджрд▓ рджреЗрдЧрд╛ред
рд╕рдмрд╕реЗ рдЕрдзреАрд░: рдкрд░рд┐рдгрд╛рдо
рдпрд╣рд╛рдБ рд╣реИ ред
рдкреЗрд╢ рд╣реИ рд╣реЗрдбрдЯреНрд░реИрдХ.рдЬреЗрдПрд╕
рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦрдХ
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреГрд╖реНрда рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╣реЗрдбрдЯреНрд░реИрдХред рдЬреЗрдПрд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдЪреЗрд╣рд░реЗ рдФрд░ рд╕рд┐рд░ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдЬреЛ рд╡реЗрдм рдХреИрдорд░рд╛ рдФрд░ рдорд╛рдирдХ webRTC / getUserMedia рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рд┐рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЙрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИред
рдЖрдЗрдП рдПрдХ рдЫреЛрдЯреА рд╕реА рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:
1) рдПрдХ html рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред
рд╕рд╛рдордЧреНрд░реА:<!doctype html> <html lang="en"> <head> <title></title> <meta http-equiv="X-UA-Compatible" content="IE=Edge"/> <meta charset="utf-8"> <style> body { background-color: #f0f0f0; margin-left: 10%; margin-right: 10%; margin-top: 5%; width: 40%; overflow: hidden; font-family: "Helvetica", Arial, Serif; position: relative; } </style> <script type="text/javascript" src="js/jquery.js"></script> </head> <body> <script src="js/headtrackr.js"></script> <canvas id="compare" width="320" height="240" style="display:none;"></canvas> <video id="vid" autoplay loop width="320" height="240"></video> <canvas id="overlay" width="320" height="240"></canvas> <canvas id="debug" width="320" height="240"></canvas> <p id='gUMMessage'></p> <p> : <span id='headtrackerMessage'></span></p> <br> <p><input type="button" onclick="htracker.stop();htracker.start();" value=""></input> <br/><br/> <input type="checkbox" onclick="showProbabilityCanvas()" value=""></input> </p> <button id='stop_ang'></button> <div id='tab_p' style='height:100px; overflow:scroll;'> <table id='angles' border=1 cellspacing=0> </table> </div> <div id='slider_wrap'> <div id='slider'></div> </div> <script> </script> </body> </html>
рдкреБрд╕реНрддрдХрд╛рд▓рдп
рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреБрдбрд╝реЗрдВ:
<script src="js/headtrackr.js"></script>
рдпрджрд┐ рд╣рдо рдЕрдм рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЕрдкрдирд╛ рдЙрджрд╛рд╣рд░рдг рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рджреЗрдЦреЗрдВрдЧреЗ:

рдФрд░ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ:

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЪреЗрд╣рд░реЗ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд▓реЗрдЦ рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рд╕рд┐рд░ рдХреЗ рд░реЛрдЯреЗрд╢рди рдХреЗ рдХреЛрдг рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ facetrackingEvent рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
document.getElementById('ang').innerHTML=Number(event.angle *(180/ Math.PI)-90);
рдФрд░ рд╕реНрд╡рдпрдВ HTML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ:
: <span id='ang'></span>
рдЕрдм рд╣рдорд╛рд░рд╛ рдкреГрд╖реНрда рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕реЗ рдбрд┐рдЧреНрд░реА рдореЗрдВ рд╕рд┐рд░ рдХреЗ рд╡рд┐рдЪрд▓рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, 20 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХреЛрдг рдорд╛рдиреЛрдВ рдХреЗ рдЧреНрд░рд╛рдл рдХреЛ рджреЗрдЦреЗрдВ:

рдЗрд╕ рддрд░рд╣ рдХреА рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рддрд╕реНрд╡реАрд░ рдХреИрдорд░реЗ рд╕реЗ рд▓реА рдЧрдИ рдЫрд╡рд┐ рдореЗрдВ рд╢реЛрд░ рдХреА рдмрд╛рдд рдХрд░рддреА рд╣реИ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЧрдгрдирд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред
рдШрдмрд░рд╛рдЗрдП рдирд╣реАрдВ, рдЕрдм рд╣рдо рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдЬреЛ рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдХреА,
рд╡рд╣ рдЪрд▓рддреА рдФрд╕рдд рдлрд┐рд▓реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рддрд╕реНрд╡реАрд░ рдХреГрдкрдпрд╛ рдирд╣реАрдВ рдереА:

рдПрдХ рдорд╛рдореВрд▓реА рд╕реБрдзрд╛рд░ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереАред
рдбрд┐рдкреНрд▓реЛрдорд╛ (рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реЗрдВрд╕рд░ рдкрд░ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЧреБрдЪреНрдЫрд╛ рд░рдЦрд╛ рдерд╛) рдХреЛ рдпрд╛рдж рдХрд░рддреЗ
рд╣реБрдП , рдореИрдВрдиреЗ
рдХрд▓рдорди рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП
рдбреАред рдХрд░реНрдиреЛрд╕реЛрд╡ рджреНрд╡рд╛рд░рд╛ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рдерд╛
ред (рдореЗрд░реЗ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ рдПрдХ рд╢рд┐рдХреНрд╖рдХ), (рдпрд╣ рднреА, рдмрд╛рдж рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛрдб рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рдХрдИ рдорд╛рдпрдиреЛрдВ рдореЗрдВ, рдПрдХ рд╕рдордп рдореЗрдВ
рд╣реЗрдмрд░ рдкрд░ рд▓реЗрдЦ
justserega рдиреЗ рдореЗрд░реА рдорджрдж рдХреА, рдЬрд┐рд╕рдиреЗ рддрдм рдореБрдЭреЗ рдмрд╣реБрдд рдорджрдж рдХреА, рдмрд╣реБрдд рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдФрд░ рдкреАрдПрдо рдХреЗ рдмрд╣реБрдд рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджрд┐рдпрд╛ред ):

рдкрд╣рд▓реЗ рд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдПрдХ рдлрд┐рд▓реНрдЯрд░ рд╣реИ рдЬрд┐рд╕реЗ рдордирдорд╛рдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо рд╕рд╣рд╕рдВрдпреЛрдЬрдХ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдк рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

рдмрд╕ рдЕрджреНрднреБрдд рд╣реИред рдпрд╣рд╛рдБ рд╡рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╕рд┐рд░ рдмрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ рдШреБрдорд╛рдпрд╛:

рдРрд╕реА рддрд╕реНрд╡реАрд░ рд╣рдореЗрдВ рд╕реВрдЯ рдХрд░рддреА рд╣реИред
рдпрд╣рд╛рдБ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ: var Q = 2; var R = 85; var F = 1; var H = 1; var X0; var P0; var State = 0; var Covariance = 0.1; function SetState(state_s,covariance_s){ State = state_s; Covariance = covariance_s; } function Correct(data) { X0 = F*State; P0 = F*Covariance*F + Q; var K = H*P0/(H*P0+R); State = X0 + K*(data - H*X0); Covariance = (1 - K*H)*P0; } SetState(0,0.1);
рдЕрдВрддрд┐рдо рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ, рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ kalman.js рд╣реИ
рдХрд╕реМрдЯреА
рдкрд░рд┐рдгрд╛рдореА рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЛ рдмрд╛рдПрдБ рдпрд╛ рджрд╛рдПрдБ рдШреБрдорд╛рдпрд╛, рдЬреЛ рд╕рд┐рд░ рдХреЗ рдЭреБрдХрд╛рд╡ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ:

рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдХрд░, рдореИрдВрдиреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рдПрдХ рд╕рд╣рдЬ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреБрдЫ рдФрд░ "рдиреЗрддреНрд░рд╣реАрди" рд╕рдордЭрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛:
рдХреИрдирд╡рд╛рд╕ рдкрд░ рдПрдХ рд╕рд╛рдВрдк рдХрд╛ рдЪрд┐рддреНрд░рдг рдХреЛрдб var angles = [0]; var canvas = document.getElementById("canvas"); var rc=document.getElementById("canvas").getContext('2d'); rc.clearRect(0, 0, canvas.width, canvas.height); setInterval(function(){redraw(angles);},20); function redraw(angles){ rc.clearRect(0, 0, canvas.width, canvas.height); rc.beginPath(); for (var i=0;i<=angles.length-1;i++){ rc.lineTo(angles[i]+150,i+0); rc.moveTo(angles[i]+150,i+0); } rc.arc(angles[angles.length-1]+153, 200, 6, 0 , 2 * Math.PI, false); rc.stroke(); rc.moveTo(angles[angles.length-1]+150,200); rc.fillStyle = 'green'; rc.fill(); }
рдХреЛрдгреЛрдВ рдХрд╛ рдХреЛрдг, рдХреЛрдг рдХреЗ рдЕрдВрддрд┐рдо 200 рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬрдорд╛ рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ; рдирдП рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдмрд╛рдИрдВ рдкрд╛рд░реА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ:
angles[angles.length] = (angle*1.5); if (angles.length > 200){ angles.shift(); }
рдкрд░рд┐рдгрд╛рдо:

рдпрджрд┐ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рд╛рдВрдк рдРрдВрдардиреЗ рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдХреИрдорд░реЗ рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рдФрд░ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рд▓реЗрдЦ
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ1.html рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдПрдБ
рдзреНрдпрд╛рди рджреЗрдВ, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП
рдпрд╣рд╛рдВ рдЖрдк рдЗрд╕реЗ рд▓рд╛рдЗрд╡ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред
рд╕рд╛рдл рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рд╣рдЯрд╛рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреНрд╕реЗрд▓ рдлрд╛рдЗрд▓ рдФрд░ рдЗрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдлрд┐рд▓реНрдЯрд░ рдФрд░ рдЖрд░реЗрдЦреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
http://goo.gl/FWMBEрдЕрдЧрд▓рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╛ рддреЛ
рдЫрджреНрдо 3 рдбреА рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рд╡рд┐рд╖рдп рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдпрд╛ рдореИрдВ рд▓реЗрдЦ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ (рдПрдХ рдирдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдореЗрдиреВ) рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЛ рдЭреБрдХрд╛рдХрд░ рдирдХреНрд╢реЗ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ? рдЖрджрд┐ред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдкрдХрд╛ рджрд┐рди рд╢реБрдн рд╣реЛред
UPD: рдореБрдлреНрдд рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, github рдкрд░ рдПрдХ рдкреГрд╖реНрда:
http://paulsmith220.github.com/htrack/