рдореИрдВ рдЖрдкрдХреЛ рдЬрд┐рд╕ рддрдХрдиреАрдХ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдЙрд╕ рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реВрдВ рдЬреЛ рдЫрд╡рд┐ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓реА рд╣реИред рдпрд╣ рди рддреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИ рдФрд░ рди рд╣реА рдЬрдЯрд┐рд▓ рд╣реИ, рдЗрд╕рдХрд╛ рд╕рд╛рд░ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рджреГрд╢реНрдпрдорд╛рди рдХреНрд╖реЗрддреНрд░ (рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдПрдХ рд╡реАрдбрд┐рдпреЛ рдХреИрдорд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ) рдПрдХ рд╢рд╛рд╕рдХ рдХреЗ рд╕рд╛рде рдХреИрд▓рд┐рдмреНрд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЫрд╡рд┐ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдордиреНрд╡рдп рдХреА рддреБрд▓рдирд╛ рд╢рд╛рд╕рдХ рдкрд░ рдирд┐рд╢рд╛рди рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣реА рд╣реИ, рдорд╛рдк рдПрдХ рдкрдВрдХреНрддрд┐ рдпрд╛ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд╢рд╛рд╕рдХ рдкрд░ рдПрдХ рдирд┐рд╢рд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдВрд╢рд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдХреЗрд╡рд▓ рдкрд┐рдХреНрд╕реЗрд▓ рдФрд░ рдореАрдЯрд░ рдореЗрдВ рд╢рд╛рд╕рдХ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рд╕рдордиреНрд╡рдп рднреА рд╣реИ, рдЬреЛ рд╢рд╛рд╕рдХ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдордзреНрдп рд╣реИред рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕реАрдорд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╕рдкрд╛рдЯ рд╕рддрд╣реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╕реНрд╡рдпрдВ рд╡рд┐рдзрд┐ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реЗрдЦ OpenCV рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрдерди рдореЗрдВ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡реАрдбрд┐рдпреЛ 4 рдХреНрд▓рд┐рдирдХреНрд╕ 2 рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд╡реЗрдмрдХреИрдо рд╕реЗ рдЪрд┐рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдХрд╛рд░ рдХреА рджреВрд░реА рдФрд░ рд╕рдбрд╝рдХ рдХреЗ рдХреБрдЫ рдкреНрд░рддреНрдпрдХреНрд╖ рдЦрдВрдб рдкрд░ рдЗрд╕рдХреА рдЧрддрд┐ рдХреЛ рдорд╛рдкрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдореИрдВрдиреЗ рдПрдХ рд▓рдВрдмреА рд░реЛрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЗрд╕реЗ рд╕рдбрд╝рдХ рдХреЗ рдХрд┐рдирд╛рд░реЗ, рдХреИрдирд╡рд╛рд╕ рдХреЗ рдмреАрдЪ рдореЗрдВ рдлреИрд▓рд╛рдпрд╛, рдлрд┐рд░ рдХреИрдорд░реЗ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдкреВрд░реА рд░реВрд▓реЗрдЯ рдмрд╕ рдХреИрдорд░реЗ рдХреЗ рджрд░реНрд╢рди рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рдЬрд╛рдП рдФрд░ рдЫрд╡рд┐ рдХреЗ рдПрдХреНрд╕ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдЧрдардмрдВрдзрди рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЕрдЧрд▓рд╛ рдХрджрдо рд░реВрд▓реЗ рдХреЗ рдмреАрдЪ рдореЗрдВ рдХреБрдЫ рдЙрдЬреНрдЬреНрд╡рд▓ рд░рдЦрдирд╛ рдерд╛, рдХреИрдорд░реЗ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рддрд╛рдХрд┐ рдпрд╣ рдХрд╣реАрдВ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рди рд╣реЛ, рдФрд░ рдЗрд╕ рдордзреНрдп рдХреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВред
рд╕рднреА рдЧрдгрдирд╛ рдПрдХ рдПрдХрд▓ рд╕реВрддреНрд░ рдореЗрдВ рдШрдЯ рдЬрд╛рддреА рд╣реИрдВ:
l = L * K / (W / x - 1 + K) , рдЬрд╣рд╛рдВ
рдПрд▓ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рджреВрд░реА рд╣реИ, рдореА;
рдПрд▓ "рд▓рд╛рдЗрди" рдХреА рд▓рдВрдмрд╛рдИ рд╣реИ, рдореА;
рдбрдмреНрд▓реНрдпреВ - рдкрд┐рдХреНрд╕рд▓ рдореЗрдВ "рд╢рд╛рд╕рдХ" рдХреА рд▓рдВрдмрд╛рдИ, рдЖрдорддреМрд░ рдкрд░ рдЫрд╡рд┐ рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИ;
x рдЫрд╡рд┐ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдордиреНрд╡рдп рд╣реИ;
K = (W - M) / M рдХреИрдорд░реЗ рдХреЗ рдЭреБрдХрд╛рд╡ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЧреБрдгрд╛рдВрдХ рд╣реИ, рдпрд╣рд╛рдБ
M "рд╢рд╛рд╕рдХ" рдХреЗ рдордзреНрдп рдХрд╛ рд╕рдордиреНрд╡рдп рд╣реИред
рдЗрд╕ рд╕реВрддреНрд░ рдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рддреНрд░рд┐рдХреЛрдгрдорд┐рддрд┐ рдХрд╛ рд╕реНрдХреВрд▓ рдЬреНрдЮрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдерд╛ред
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдХреИрдорд░реЗ рдХрд╛ рдЭреБрдХрд╛рд╡ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛, рдЧреНрд░рд╛рдл рдЙрддрдирд╛ рд╣реА рдЕрдзрд┐рдХ рдмрдврд╝реЗрдЧрд╛ред рд╕реАрдорд╛ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рдХреИрдорд░реЗ рдХрд╛ рдЕрдХреНрд╖ "рд╢рд╛рд╕рдХ" (
рдПрдо = рдбрдмреНрд▓реНрдпреВ / 2 ) рдХреЗ рд╡рд┐рдорд╛рди рдХреЗ рд▓рд┐рдП рд▓рдВрдмрд╡рдд рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЧреНрд░рд╛рдл рдПрдХ рд╕реАрдзреА рд░реЗрдЦрд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рдХреЗрд╡рд▓ рд╡рд╣рд╛рдБ рд░реБрдХрдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ
рдбреЗрдореЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд╡реЗрдмрдХреЗрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдЧрд╛ рдФрд░ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЙрд╕рдХреА рджреВрд░реА рдФрд░ рдЙрд╕рдХреА рдЧрддрд┐ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХреЗред рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдкрд╛рдпрдерди рдХреЛ рдЪреБрдирд╛, рдПрдХ рднрд╛рд╖рд╛ рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╛рдпрджреЗ рдереЗ, рдореИрдВрдиреЗ рдЯрд┐рдХреНрдЪрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рдЪреБрдирд╛ рдЬреЛ рдХрд┐ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред OpenCV рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рд╕рдВрд╕реНрдХрд░рдг 2.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди ubuntu рд╕рдВрд╕реНрдХрд░рдг (10.10) рдХреЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдВрд╕реНрдХрд░рдг 2.1 рд╣реИ, рдФрд░ рдЙрдирдХреА рдПрдкреАрдЖрдИ рдмреЗрд╣рддрд░ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЧрдИ рд╣реИ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг 2.1 рдХреЗ рддрд╣рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, OpenCV рдкрд░ рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдЫрд╡рд┐ рдХреИрдкреНрдЪрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рддрд╛рдХрд┐ рдЕрдЧрд░ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рд╕реЗ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдпрд╛ рд╕рд┐рд░реНрдл рдЯреНрд░реИрдХрд┐рдВрдЧ рдмрдВрдж рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред ред рдореИрдВрдиреЗ рдкреБрд░рд╛рдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рд╕рдм рдХреБрдЫ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдФрд░ рдореЗрд░реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд▓рд┐рдП рджреВрд░реА рдФрд░ рдЧрддрд┐ рдХреА рдкреНрд░рддреНрдпрдХреНрд╖ рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╣реА рд▓рд╛рдЗрдиреЗрдВ рд╢реЗрд╖ рдереАрдВ, рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рддрд░реНрдХрд╕рдВрдЧрдд рдереА, рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ рд╣рд╛рдВ рдФрд░ рдПрдХ рд╡реЗрдм рдХреИрдорд░рд╛ рдХреЗ рдмрдЬрд╛рдп, RTSP рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрдЧрд╛рдкрд┐рдХреНрд╕реЗрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХреИрдорд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡реЗрдм рдХреИрдорд░рд╛ рд╕реЗ рдЪрд┐рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд, рдкреНрд░реЛрдЧреНрд░рд╛рдо
рд╡реАрдбрд┐рдпреЛрдХреИрдкреНрдЯреНрдпреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреИрдорд░реЗ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд▓реЗрдХрд┐рди рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд, рдкрд╛рдпрдерди рд╕реЗ рд╡реЗрдмрдХреИрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╕рдордЭрджрд╛рд░ рд▓реЗрдЦ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдирдП рдПрдкреАрдЖрдИ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдХрд╛рд░рдг рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдЖрдорддреМрд░ рдкрд░ рдЕрдкреНрд░рднрд╛рд╡реА рд╣реЛрддреЗ рд╣реИрдВред рдЕрддреАрдд рдореЗрдВ, рдореИрдВрдиреЗ рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП ffmpeg рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо C рдореЗрдВ рдерд╛, рд▓реЗрдХрд┐рди ffmpeg рдереЛрдбрд╝рд╛ "рдмрдВрджреВрдХ рдЧреМрд░реИрдпрд╛" рд╣реИ, рдФрд░ рдореИрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдмреЛрдЭ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЖрдк OpenCV рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ ffmpeg рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд░реИрдкрд░ video4linux2 рдПрдкреАрдЖрдИ рд▓рд┐рдЦрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред
рд╕реНрд░реЛрдд рдХреЛрдб
рд╡рд┐рдЬреНрдЮрд╛рди рдХреЗ рдХреБрдЫ
рд╡рд┐рднрд╛рдЧ рдХреЗ рдкреГрд╖реНрда рд╕реЗ рд▓рд┐рдП рдЧрдП рдереЗред рдЗрдирдореЗрдВ рд╕реЗ, рдореИрдВрдиреЗ рдЬрд▓реНрджреА рд╕реЗ рдЕрдкрдиреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдЕрдВрддрддрдГ рджреЛ рд╕рдВрдкрд╛рджрд┐рдд рдлрд╛рдЗрд▓реЗрдВ рдЫреЛрдбрд╝
V4L2.cpp
:
V4L2.cpp
рдФрд░
V4L2.h
рдпрд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реЗрдмрдХреЗрдо рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХ рдПрдкреАрдЖрдИ рд╣реИред рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ video4linux2 рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рддреАрди рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: READ, MMAP рдФрд░ STREAM, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ MMAP рд╡рд┐рдзрд┐ рдореЗрд░реЗ рд╡реЗрдмрдХреИрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдгреЛрдВ рдиреЗ READ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдпрд╣ рднреА рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реЗрдмрдХреИрдо YUYV рдкреНрд░рд╛рд░реВрдк (YUV422) рдореЗрдВ рдПрдХ рдЫрд╡рд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдпрд╣ RGB рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ 2 рдмрд╛рд░ рдХрдо рд░рдВрдЧ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред YUYV рдореЗрдВ, рджреЛ рдкрд┐рдХреНрд╕реЗрд▓ 4 рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ, рдФрд░ RGB рдореЗрдВ рдЫрд╣ рд╕реЗ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдмрдЪрдд рдбреЗрдврд╝ рдЧреБрдирд╛ рд╣реИред Y рдЪрдордХ рдШрдЯрдХ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрд▓рдЧ рд╣реИред рдпреВ рдФрд░ рд╡реА рд░рдВрдЧ рдЕрдВрддрд░ рдШрдЯрдХ рд╣реИрдВ рдЬреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░рдВрдЧ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рд░ рджреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдпреВ рдФрд░ рд╡реА рдХреЗ рд╕рдорд╛рди рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрди рд╕реВрдЪрдирд╛рдУрдВ рдореЗрдВ рд╡реЗрдм рдХреИрдорд░рд╛ рд╕реЗ рдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ YUYV YUYV YUYV YUYV YUYV YUYV рдХреА рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ - рдпрд╣ 12 рдкрд┐рдХреНрд╕реЗрд▓ред рдЖрдк рдпрд╣ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ VLC рдкреНрд▓реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХрд╛ рд╡реЗрдмрдХреИрдо рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд╕рд╛рде рдХреИрдкреНрдЪрд░рд┐рдВрдЧ рдбрд┐рд╡рд╛рдЗрд╕ рдЦреЛрд▓реЗрдВ рдФрд░ рдлрд┐рд░ рдХреЛрдбреЗрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ, рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдпрд╣рд╛рдВ рд╡реЗрдмрдХреЗрдо рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣реИ:
main_v4l2.cpp
#include "V4L2.h" #include <cstring> #include <iostream> using namespace std; extern "C" { // Specify the video device here V4L2 v4l2("/dev/video0"); unsigned char *rgbFrame; float clamp(float num) { if (num < 0) num = 0; if (num > 255) num = 255; return num; } // Convert between YUV and RGB colorspaces void yuv2rgb(unsigned char y, unsigned char u, unsigned char v, unsigned char &r, unsigned char &g, unsigned char &b) { float C = y - 16; float D = u - 128; float E = v - 128; r = (char)clamp(C + ( 1.402 * E )) ; g = (char)clamp(C - ( 0.344136 * D + 0.714136 * E )) ; b = (char)clamp(C + ( 1.772 * D )) ; } unsigned char *getFrame() { unsigned char *frame = (unsigned char *)v4l2.getFrame(); int i = 0, k = 0; unsigned char Y, U, V, R, G, B; for (i=0;i<640*480*2;i+=4) { Y = frame[i]; U = frame[i+1]; V = frame[i+3]; yuv2rgb(Y, U, V, R, G, B); rgbFrame[k] = R; k++; rgbFrame[k] = G; k++; rgbFrame[k] = B; k++; Y = frame[i+2]; yuv2rgb(Y, U, V, R, G, B); rgbFrame[k] = R; k++; rgbFrame[k] = G; k++; rgbFrame[k] = B; k++; } return rgbFrame; } void stopCapture() { v4l2.freeBuffers(); } // Call this before using the device void openDevice() { // set format struct v4l2_format fmt; CLEAR(fmt); fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; // Adjust resolution fmt.fmt.pix.width = 640; fmt.fmt.pix.height = 480; fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; if (!v4l2.set(fmt)) { fprintf(stderr, "device does not support used settings.\n"); } v4l2.initBuffers(); v4l2.startCapture(); rgbFrame = (unsigned char *)malloc(640*480*3); } }
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛рдлреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдкрд╣рд▓реЗ рд╣рдо рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдкрд╣рд▓реЗ ("/ dev / video0") рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ
getFrame
рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╣рдо рд╡реЗрдм рдХреИрдорд░рд╛ рд╕реЗ рдлрд╝реНрд░реЗрдо рдкрдврд╝рддреЗ рд╣реИрдВ, рдЗрд╕реЗ RGB рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд╝реНрд░реЗрдо рд╕реЗ рд▓рд┐рдВрдХ рдЙрд╕реА рдХреЛ рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдерд╛ред рдореИрдВ рднреА рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдЬрд▓реНрджреА рд╕реЗ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ
Makefile
рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВред
рдФрд░ рдпрд╣рд╛рдБ рдкрд╛рдЗрдерди рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд░реИрдкрд░ рд╣реИ:
v4l2.py
from ctypes import * import Image import time lib = cdll.LoadLibrary("linux/libv4l2.so") class VideoDevice(object): def __init__(self): lib.openDevice() lib.getFrame.restype = c_void_p def getImage(self): buf = lib.getFrame() frame = (c_char * (640*480*3)).from_address(buf) img = Image.frombuffer('RGB', (640, 480), frame, 'raw', 'RGB', 0, 1) return img, time.time()
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд┐рд▓реНрдХреБрд▓ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп ctypes рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рд░реИрдкрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, рд▓рд╛рдЗрди рдХреЛ рдЫреЛрдбрд╝рдХрд░:
frame = (c_char * (640*480*3)).from_address(buf)
рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рддреБрд░рдВрдд рдирд╣реАрдВ рдЖрдпрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк
getFrame()
рд╕реЗ
getFrame()
рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛
c_char_p
, рддреЛ ctypes рдбреЗрдЯрд╛ рдХреЛ рд╢реВрдиреНрдп-рдЯрд░реНрдорд┐рдиреЗрдЯреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реЗрдЧрд╛, рдпрд╛рдиреА рдЬреИрд╕реЗ рд╣реА рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╣реЛрдЧрд╛, рд░реАрдбрд┐рдВрдЧ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧреАред рдПрдХ рд╣реА рдбрд┐рдЬрд╝рд╛рдЗрди рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдирд╛ рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝рдирд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рд╣реИ - 640 * 480 * 3ред
рдореИрдВ рдпрд╣рд╛рдВ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдПрдХ рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░
directx.py
рдирд╛рдо рдХреЗ рд╕рд╛рде
windows
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред
рдФрд░ рдореИрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдмреЗрд╣рддрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ, рдУрдкрдирд╕реАрд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛
lkdemo.py
рдЙрджрд╛рд╣рд░рдг рдЬреЛ OpenCV рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЗрд╕реЗ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдХреЗ рд╣рдорд╛рд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдмрдирд╛рдпрд╛:
tracker.py
class Tracker(object): "Simple object tracking class" def __init__(self): self.grey = None self.point = None self.WIN_SIZE = 10 def target(self, x, y): "Tell which object to track"
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЙрд╕реЗ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдирд┐рдЧрд░рд╛рдиреА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ
target
рд╡рд┐рдзрд┐ рд╣реИред рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ
takeImage
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлреНрд░реЗрдо рджреНрд╡рд╛рд░рд╛ рдлреНрд░реЗрдо рджреЗрддреЗ рд╣реИрдВ, рдпрд╣ рдмрджрд▓реЗ рдореЗрдВ рдЫрд╡рд┐ рдлреНрд░реЗрдо рдХреЛ рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реИ, рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЫрд╡рд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдмрдирд╛рддрд╛ рд╣реИ, рдлреНрд░реЗрдо рдХреЛ рд░рдВрдЧ рд╕реЗ рдЧреНрд░реЗ рдХреЗ рд░рдВрдЧреЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░
CalcOpticalFlowPyrLK
рдХреЛ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ
CalcOpticalFlowPyrLK
, рдЬреЛ рдСрдкреНрдЯрд┐рдХрд▓ рд╕реНрдЯреНрд░реАрдо рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рд▓реБрдХрд╛рд╕-рдХрдирд╛рдбрд╛ рдХреА рдкрд┐рд░рд╛рдорд┐рдб рдкрджреНрдзрддрд┐ред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░, рд╣рдо рдЙрд╕ рдмрд┐рдВрджреБ рдХреЗ рдирдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдо рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдмрд┐рдВрджреБ рдЦреЛ рдЧрдпрд╛ рд╣реИ, рддреЛ
status[0]
рд╢реВрдиреНрдп рд╣реЛрдЧреАред рдСрдкреНрдЯрд┐рдХрд▓ рдлреНрд▓рдХреНрд╕ рдХреА рдЧрдгрдирд╛ рди рдХреЗрд╡рд▓ рдПрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдПрдХ рд╡реЗрдм рдХреИрдорд░рд╛ рдХреЗ рд╕рд╛рде
lkdemo.py
рдЪрд▓рд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
рдореИрдВ рдкрд╛рдпрдерди рдЗрдореЗрдЬрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдПрдХ рдЫрд╡рд┐ рдХреЛ OpenCV рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдХрд╣реВрдВрдЧрд╛, рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд░рдВрдЧ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП OpenCV рд░рдВрдЧ рдШрдЯрдХреЛрдВ рдХреЗ рдПрдХ рдЕрд▓рдЧ рдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - BGR, рдкреВрд░реНрдг рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрднреА рднреА рд▓рд╛рдЗрди
cv.CvtColor(frame, frame, cv.CV_BGR2RGB)
рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЛ рдкреВрд░рдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
cv.CvtColor(frame, frame, cv.CV_BGR2RGB)
, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЯреНрд░реИрдХрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЖрдкрдХреЗ рд░рдВрдЧ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рднреНрд░рдорд┐рдд рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЖрдо рддреМрд░ рдкрд░ рдХреЗрд╡рд▓ рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдХреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдХреЗрд╡рд▓ рд▓реЗрдЦ рдореЗрдВ рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЧрдгрд┐рдд рд╣реИред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ
distance_measure.py
ред
рдпрд╣ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рдЬреЛ рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред
main.py
from distance_measure import Calculator from webcam import WebCam from tracker import Tracker from Tkinter import * import ImageTk as PILImageTk import time class GUIFramework(Frame): "This is the GUI" def __init__(self,master=None): Frame.__init__(self,master) self.grid(padx=10,pady=10) self.distanceLabel = Label(self, text='Distance =') self.distanceLabel.grid(row=0, column=0) self.speedLabel = Label(self, text='Speed =') self.speedLabel.grid(row=0, column=1) self.imageLabel = None self.cameraImage = None self.webcam = WebCam()
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛, рдореИрдВрдиреЗ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд┐рдВрдХрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЪреБрдирд╛, рдореИрдВрдиреЗ рдЕрдиреНрдп рдЯреВрд▓рдХрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд┐рдпрд╛, рдЬреИрд╕реЗ рдХрд┐ рдЬреАрдЯреАрдХреЗ, рдХреНрдпреВрдЯреА рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, wxPython, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛, рдЬрдмрдХрд┐ рдХрд┐рдВрдХреЗрдЯрд░ рддреБрд░рдВрдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рд╣реА рдЕрдЪреНрдЫрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЖрдк рдЗрд╕ рдкрд░ рдПрдХ рдЬрдЯрд┐рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдХрдХреНрд╖рд╛ рдХреЗ рдЖрд░рдВрдн рдореЗрдВ, рдореИрдВ рдЗрд╕рдореЗрдВ рдЕрдиреНрдп рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ
grid
рдмрдирд╛рддрд╛ рд╣реВрдВ: рджреЛ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдФрд░ рдПрдХ рдЫрд╡рд┐ред Tkinter рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рд╡реЗрдм рдХреИрдорд░рд╛ рд╕реЗ рдЫрд╡рд┐рдпрд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдРрд╕реА рдкрджреНрдзрддрд┐ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ рдХреЗ рдмрд╛рдж рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
Label
config
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рда рдФрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ!
bind
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рдХреЛ
imgClicked
рдХрд░рдирд╛
imgClicked
рд╡рд┐рдзрд┐ рд╕реЗ
imgClicked
рд╣реИред
рдЫрд╡рд┐ рдФрд░ рдЗрд╕рдХреЗ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк
self.webcam.getImage
рдлрд╝рдВрдХреНрд╢рди
self.webcam.getImage
рдХрд┐рдП
self.webcam.getImage
рд╣реИрдВред рд╡реЗрдмрдХреИрдо рдореЙрдбреНрдпреВрд▓ рдХреЗрд╡рд▓ рд╡реЗрдмрдХреЗрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬрд┐рд╕ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдореИрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛ -
рджреВрд░реА-рдорд╛рдк ред
Ubuntu рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ: рдЕрдЬрдЧрд░, рдЕрдЬрдЧрд░-рдЗрдореЗрдЬрд┐рдВрдЧ, рдЕрдЬрдЧрд░-рдЗрдореЗрдЬрд┐рдВрдЧ-рдЯреАрдХреЗ, opencv рд╕рдВрд╕реНрдХрд░рдг 2.2 рдФрд░ V4L2 рдЖрд╡рд░рдг рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдг-рдЖрд╡рд╢реНрдпрдХред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:
python main.py
рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╡рд╣ рд╕рдм рд╣реИред
рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ