рдкрд╛рдпрдерди рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

рдЖрдЬ рдХреА рдмрд╛рддрдЪреАрдд рдХрд╛ рд╡рд┐рд╖рдп рдпрд╣ рд╣реИ рдХрд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдкрд╛рдпрдерди рдиреЗ рдЕрдкрдиреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рд╕рднреА рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдХреНрдпрд╛ рд╕реАрдЦрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, 1990 ImageMagick рдФрд░ GraphicsMagick рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдзреБрдирд┐рдХ рдкреНрд░рднрд╛рд╡реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрдХрд┐рдпрд╛ рдФрд░ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рддрдХрд┐рдпрд╛-рд╕рд┐рдордбреАред рдореЙрд╕реНрдХреЛрдкрд┐рдереЙрди рдореЗрдВ рдЙрдирдХреЗ рд╕рдХреНрд░рд┐рдп рдбреЗрд╡рд▓рдкрд░ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдХрд╛рд░рдкрд┐рдиреНрд╕реНрдХреА ( рд╣реЙрдо ) рдиреЗ рдкрд╛рдпрдерди рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреА, рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдФрд░ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдЬреЛ рд╣рдореЗрд╢рд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЪреБрдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреА, рдФрд░ рдЗрд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧреАред


рд╕реНрдкреАрдХрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдХрд╛рд░рдкрд┐рдиреНрд╕реНрдХреА рдЕрдкрд▓реЛрдбрдХреЗрдпрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдордХреНрдЦреА рдкрд░ рддреНрд╡рд░рд┐рдд рдЫрд╡рд┐ рд╕рдВрд╢реЛрдзрди рдХреА рд╕реЗрд╡рд╛ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИред рд╡рд╣ рдкрд╛рдЗрд▓реЛрди рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд┐рд▓реЛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдкрд┐рд▓реЛ-рд╕рд┐рдордбреА рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рдВрдЯрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ , рдЬреЛ рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдкреГрд╖реНрдарднреВрдорд┐


Uploadcare рдХреА рдЫрд╡рд┐ рд╕рдВрд╢реЛрдзрди рд╕реЗрд╡рд╛ рдПрдХ рд╕рд░реНрд╡рд░ рд╣реИ рдЬреЛ рдПрдХ рдЫрд╡рд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рдХреБрдЫ рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рд░реНрд╡рд░ рдХреЛ рд╕рдВрдЪрд╛рд▓рди рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдХреНрд╕рд░ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рдкреВрд░реА рд╕реЗрд╡рд╛ рдХреЛ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЧреБрдгрд╡рддреНрддрд╛, рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдкреНрд░рдпреЛрдЬреНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЕрдкрд▓реЛрдбрдХреЗрдпрд░ рдкрд┐рд▓реЛ рдХреЛ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ


рд╣рдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдмрд╛рдж рдореЗрдВ рдХреНрдпрд╛ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред

рддрдХрд┐рдпрд╛


рддрдХрд┐рдпрд╛ - рдкреАрдЖрдИрдПрд▓ (рдкрд╛рдпрдерди рдЗрдореЗрдЬрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдХрд╛ рдХрд╛рдВрдЯрд╛ред рдпрд╣ рдПрдХ рдмрд╣реБрдд рдкреБрд░рд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ 1995 рдореЗрдВ рдкрд╛рдпрдерди 1.2 рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ рдХрд┐рддрдиреЗ рд╕рд╛рд▓ рдХрд╛ рд╣реИ! рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдкрд╛рдпрдерди рдЗрдореЗрдЬрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд░реБрдХ рдЧрдпрд╛ред рдкрд┐рд▓реЛ рдХрд╛ рдПрдХ рдХрд╛рдВрдЯрд╛ рдЖрдзреБрдирд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдкрд╛рдпрдерди рдЗрдореЗрдЬрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдзреАрд░реЗ-рдзреАрд░реЗ, рдкрд╛рдпрдерди рдЗрдореЗрдЬрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдЬрд┐рддрдиреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдЬрд╝рд░реВрд░рдд рдкрдбрд╝реА, рдФрд░ рдкрд┐рд▓реЛ 2.0 рдмрд╛рд╣рд░ рдЖрдпрд╛, рдЬрд┐рд╕рдиреЗ рдкрд╛рдпрдерди 3 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ред рдЗрд╕реЗ рдкрд┐рд▓реЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдПрдХ рдЕрд▓рдЧ рдЬреАрд╡рди рдХреА рд╢реБрд░реБрдЖрдд рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рддрдХрд┐рдпрд╛ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдПрдХ рджреЗрд╢реА рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдЖрдзрд╛ рдХреЛрдб рд╕реА рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рдЖрдзрд╛ рдкрд╛рдпрдерди рдореЗрдВред рдкрд╛рдпрдерди рдХреЗ рд╕рдмрд╕реЗ рд╡рд┐рд╡рд┐рдз рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 2.7, 3.3+, рдкреЗрдк, ред

рддрдХрд┐рдпрд╛-SIMD


рдпрд╣ рдореЗрд░рд╛ рддрдХрд┐рдпрд╛ рдХрд╛ рдХрд╛рдВрдЯрд╛ рд╣реИ, рдЬреЛ рдордИ 2016 рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИред SIMD рдХрд╛ рдЕрд░реНрде рд╕рд┐рдВрдЧрд▓ рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди, рдорд▓реНрдЯреАрдкрд▓ рдбреЗрдЯрд╛ рд╣реИ   - рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬрд┐рд╕рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрдзреБрдирд┐рдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐ рдЪрдХреНрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЬрдм рдХреЛрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрдкрдирд╛ рдЬреАрд╡рди рдЬреАрдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкрд┐рд▓реЛ-рд╕рд┐рдордбреА рд╢рд╛рд╕реНрддреНрд░реАрдп рдЕрд░реНрдереЛрдВ рдореЗрдВ рдПрдХ рдХрд╛рдВрдЯрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдкрд┐рд▓реЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЖрдк рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрдкрдиреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВред

рддрдХрд┐рдпрд╛-рд╕рд┐рдо рдХреЛ рдПрд╕рдПрд╕рдИ 4 рдирд┐рд░реНрджреЗрд╢реЛрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рдХреЗ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ рд▓рдЧрднрдЧ рд╕рднреА рдЖрдзреБрдирд┐рдХ x86 рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд┐рд▓реЛ-рд╕рд┐рдордбреА рдХреЛ рдПрд╡реАрдПрдХреНрд╕ 2 рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рднреА рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдпрд╣ рд╕реЗрдЯ рд╣реИ, рд╣рд╡реЗрд▓рд╡реЗрд▓ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд▓рдЧрднрдЧ 2013 рд╕реЗ рд╣реИред

OpenCV


рдкрд╛рдпрдерди рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдиреЗ рд╢рд╛рдпрдж рд╕реБрдирд╛ рд╣реИ рдУрдкрдирд╕реАрд╡реА (рдУрдкрди рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬрди)ред рдпрд╣ 2000 рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдкрд╛рдпрдерди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЗ рдмреАрдЪ рдХреЛрдИ рд╕рдорд╛рдирддрд╛ рдирд╣реАрдВ рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрднреА рддрдХ PyPy рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ OpenCV, рдЦрд╕реНрддрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдФрд░ numpy рдХреЗрд╡рд▓ рд╣рд╛рд▓ рд╣реА рдореЗрдВ PyPy рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ OpenCV рдореЗрдВ PyPy рдЕрднреА рднреА рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред

VIPS


VIPS рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рд▓рд╛рдпрдХ рдПрдХ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред VIPS рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рдЫрд╡рд┐ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреБрдЫ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЧреАрдЧрд╛рдкрд┐рдХреНрд╕рд▓ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдореЛрд░реА рдХреЛ рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдПрдХ рдкреБрд░рд╛рдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ - 1993, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрдиреЗ рд╕рдордп рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЧрдпрд╛ред рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╕реБрдирд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ VIPS рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд░реНрд╕ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗ, рдЬрд┐рдирдореЗрдВ Go, Node.js, Ruby рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдореИрдВ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕реЗ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВ рдмрд╣реБрдд рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдХрд╛рд░рдг рд╕реЗ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖред рдореИрдВ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрд╛ рдХрд┐ рд╡реАрдЖрдИрдкреАрдПрд╕ рдХреЛ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдерд╛ред рд▓реЗрдХрд┐рди рдЕрдм (2017 рдореЗрдВ) рдкреАрд╡рд╛рдИрдкреАрдПрд╕ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рд╡реАрдЖрдИрдкреАрдПрд╕ рдХреЗ рд▓реЗрдЦрдХ рд╕реЗ рд╣реА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЕрдм рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред VIPS рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдм рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд╕рдорд░реНрдерд┐рдд: рдкрд╛рдпрдерди 2.7, 3.3+, RuPu, RuPuZред

ImageMagick & GraphicsMagick


рдпрджрд┐ рд╣рдо рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдкреБрд░рд╛рдиреЗ рд▓реЛрдЧреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - ImageMagick рдФрд░ GraphicsMagick рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде ImageMagick рдХрд╛ рдПрдХ рдХрд╛рдВрдЯрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рдЙрдирдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдмрд░рд╛рдмрд░ рд▓рдЧрддрд╛ рд╣реИред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдЙрдирдХреЗ рдмреАрдЪ рдХреЛрдИ рдЕрдиреНрдп рдореВрд▓рднреВрдд рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЖрдк рдХрд┐рд╕реА рднреА, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

рдпреЗ рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдореИрдВрдиреЗ рдЖрдЬ (1990) рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди, рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд╛рдВрдз рдереЗ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд▓рдЧрднрдЧ рд╕рднреА рдЕрдм рддрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдорд░ рдЪреБрдХреЗ рд╣реИрдВред рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рд╣реИрдВ:

  • рдЫрдбрд╝реА рдмрдВрдзрди, рдЬреЛ ctypes рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рднреА рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • рдкреИрдЧрдореИрдЧрд┐рдХ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ Boost.Python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдВрдХрд▓рди рдХрд░рддрд╛ рд╣реИ рдФрд░ PyPy рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╡реИрдВрдб рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред

рдЙрддреНрдкрд╛рджрдХрддрд╛


рдЬрдм рд╣рдо рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рджреЗрддреА рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП) рдкреНрд░рджрд░реНрд╢рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рд╣рдо рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдЕрдЬрдЧрд░ рдореЗрдВ рдХреБрдЫ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рджрд░реНрд╢рди рдЗрддрдиреА рд╕рд░рд▓ рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдЖрдк рдмрд╕ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рдХрд┐ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреВрд╕рд░реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЕрд▓рдЧ рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рддрджрдиреБрд╕рд╛рд░, рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣рдирд╛ рд╕рд╣реА рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╣реИред рдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рддреЗрдЬреА рд╕реЗ (рдзреАрдореА) рдХрд╛рдо рдХрд░рддреА рд╣реИред

рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред


рдЬрдм рдЖрдк рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рднрд▓реЗ рд╣реА рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЖрдкрдиреЗ рдПрдХ рд╣реА рдХреЛрдб рд▓рд┐рдЦрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рди рд╣реИред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдкрд┐рд▓реЛ рдФрд░ рдУрдкрдирд╕реАрд╡реА рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдХреЛрдб рдореЗрдВ рдЖрдпрд╛ рд╣реВрдВ:

from PIL import Image, ImageFilter.BoxBlur im.filter(ImageFilter.BoxBlur(3)) ... import cv2 cv2.blur(im, ksize=(3, 3)) ... 

рдпрд╣ рд╡рд╣рд╛рдБ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдБ, BoxBlur, рдФрд░ рд╡рд╣рд╛рдБ, рдФрд░ рд╡рд╣рд╛рдБ, рддрд░реНрдХ 3, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдЕрд▓рдЧ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдкрд┐рд▓реЛ (3) рдореЗрдВ рдпрд╣ рдзрдмреНрдмрд╛ рддреНрд░рд┐рдЬреНрдпрд╛ рд╣реИ, рдФрд░ OpenCV рдореЗрдВ ksize = (3, 3) рдХрд░реНрдиреЗрд▓ рдЖрдХрд╛рд░ рд╣реИ, рдЕрд░реНрдерд╛рдд рдореЛрдЯреЗ рддреМрд░ рдкрд░, рд╡реНрдпрд╛рд╕ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, OpenCV рдХрд╛ рд╕рд╣реА рдорд╛рди 3 * 2 + 1, рдЕрд░реНрдерд╛рдд (7, 7) рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ?


рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдкреНрд░рджрд░реНрд╢рди рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рдСрдкрд░реЗрд╢рди рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рдЕрдХреНрд╕рд░ рдЬрдЯрд┐рд▓рддрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╕рд╛рде рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдмрдврд╝рддреА рд╣реИред рдФрд░ рдЕрдЧрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдирдореЗрдВ рд╕реЗ рддреАрди рдХрд╛рд░рдХ рд╣реИрдВ, рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рд░реИрдЦрд┐рдХ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рддреЛ рдХреНрдпреВрдм рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред

рдЙрджрд╛рд╣рд░рдг: рдУрдкрдирд╕реАрд╡реА рдореЗрдВ рдЧрд╛рдКрд╕реА рдзрдмреНрдмрд╛ред



рдмрд╛рдИрдВ рдУрд░ 3 рдХрд╛ рддреНрд░рд┐рдЬреНрдпрд╛ рд╣реИ, рджрд╛рдИрдВ рдУрд░ 30 рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЧрддрд┐ рдореЗрдВ рдЕрдВрддрд░ 10 рдЧреБрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред

рдЬрдм рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЧрд╛рдКрд╕реА рдХрд▓рдВрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдЦреБрд╢реА рдирд╣реАрдВ рд╣реБрдИ рдХрд┐, рдХрд╛рд▓реНрдкрдирд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдСрдкрд░реЗрд╢рди рдореЗрдВ 900 рдПрдордПрд╕ рдЦрд░реНрдЪ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрд╡реЗрджрди рдореЗрдВ рдкреНрд░рддрд┐ рдорд┐рдирдЯ рд╣рдЬрд╛рд░реЛрдВ рдРрд╕реЗ рдСрдкрд░реЗрд╢рди рд╣реИрдВ, рдФрд░ рдПрдХ рдкрд░ рдЗрддрдирд╛ рд╕рдордп рдЦрд░реНрдЪ рдХрд░рдирд╛ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдФрд░ рддрдХрд┐рдпрд╛ рдореЗрдВ рдЧрд╛рдКрд╕реА рдзрдмреНрдмрд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдЬреЛ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдирд┐рд░рдВрддрд░ рд╕рдордп рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдХреЗрд╡рд▓ рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ рдЧрд╛рдКрд╕реА рдзрдмреНрдмрд╛ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреБрдЫ рддреЗрдЬреА рд╕реЗ рдпрд╛ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЬрдм рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдордЭрдирд╛ рдЬрд░реВрд░реА рд╣реИ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХрд┐рди рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдлрд┐рд░ рдЖрдк рдЗрд╕ рдЬрдЯрд┐рд▓рддрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдпрд╛ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрднрд╡рддрдГ рд╕рдмрд╕реЗ рдЖрдо рдСрдкрд░реЗрд╢рди рд╣рдо рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡реЗ рдЦреЛрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред



рдЧреНрд░рд╛рдл 8 рдФрд░ 1.25 рдЧреБрдирд╛ рдХрдо рдХрд░рдХреЗ рдЫрд╡рд┐ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди (рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░) рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

PIL рдХреЗ рд▓рд┐рдП, 17 Mpx / s рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ iPhone (12 Mpx) рд╕реЗ рдлреЛрдЯреЛ рдХреЛ рдПрдХ рд╕реЗрдХрдВрдб рд╕реЗ рднреА рдХрдо рд╕рдордп рдореЗрдВ 1.25 рдЧреБрдирд╛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдПрдХ рдЧрдВрднреАрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рд░рд┐рд╕рд╛рдЗрдЬрд╝ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдФрд░ рдкрд┐рд▓реЛ 2.7 рдореЗрдВ рдореИрдВ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдПрдХ рджреЛ рдЧреБрдирд╛ рд╡реГрджреНрдзрд┐ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдФрд░ рдкрд┐рд▓реНрд▓реЛ 4.3 рдореЗрдВ - рддреАрди рдЧреБрдирд╛ (рдкрд┐рд▓реНрд▓реЛ 5.3 рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдЖрдХрд╛рд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╛рди рд╣реИ)ред

рд▓реЗрдХрд┐рди рд░рд┐рд╕рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрд╢рди рдПрдХ рдРрд╕реА рдЪреАрдЬрд╝ рд╣реИ рдЬреЛ SIMD рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рдпрд╣ рдПрдХрд▓ рдирд┐рд░реНрджреЗрд╢, рдХрдИ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдкрд┐рд▓реЛ-рд╕рд┐рдордбреА рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдореИрдВ рд╕рдорд╛рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓ рдкрд╛рдпрдерди рдЗрдореЗрдЬрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд░рд┐рд╕рд╛рдЗрдЬрд╝ рдЧрддрд┐ рдХреЛ 19 рдЧреБрдирд╛ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

рдпрд╣ OpenCV рдЖрдХрд╛рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рд╕реЗ рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╣реИред рд▓реЗрдХрд┐рди рддреБрд▓рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ OpenCV рдПрдХ рдмреЙрдХреНрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреА рдереЛрдбрд╝реА рдХрдо рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рддрдХрд┐рдпрд╛-рд╕рд┐рдордбреА рдореЗрдВ, рдЖрдХрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдЙрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреА рдПрдХ рдЕрдкреВрд░реНрдг рд╕реВрдЪреА рд╣реИ рдЬреЛ рдирд┐рдпрдорд┐рдд рддрдХрд┐рдпрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддрдХрд┐рдпрд╛-рд╕рд┐рдордбреА рдореЗрдВ рддреНрд╡рд░рд┐рдд рд╣реИрдВред

  • рдЖрдХрд╛рд░: 4 рд╕реЗ 7 рдмрд╛рд░ред
  • рдзреБрдВрдзрд▓рд╛: 2.8 рдмрд╛рд░ред
  • рдХреЛрд░ 3 ├Ч 3 рдпрд╛ 5 ├Ч 5: 11 рдмрд╛рд░ рдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧред
  • рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрди рдФрд░ рд╡рд┐рднрд╛рдЬрди: 4 рдФрд░ 10 рдмрд╛рд░ред
  • рдЕрд▓реНрдлрд╛ рд░рдЪрдирд╛: 5 рдмрд╛рд░ред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреВрд╕рд░реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдХреБрдЫ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдореВрд╣ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╣рд┐рддрдХрд╛рд░реА рд╣реЛрдВред рдореИрдВрдиреЗ рдРрд╕реЗ рдСрдкрд░реЗрд╢рди рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЪреБрдирд╛ рдЬреЛ рдореЗрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ, рдПрдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдмрдирд╛рдпрд╛ рдФрд░ рдРрд╕реЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдПред



рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕ рд╕реЗрдЯ рдкрд░ рдкрд┐рд▓реЛ-рд╕рд┐рдордбреА рдкрд┐рд▓реЛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 2 рдЧреБрдирд╛ рддреЗрдЬ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рд╡реИрдВрдб рд╣реИ (рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдЗрдореЗрдЬрдореИрдЬрд┐рдХ рд╣реИ)ред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреБрдЫ рдФрд░ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА - рдУрдкрдирд╕реАрд╡реА рдФрд░ рд╡реАрдЖрдИрдкреАрдПрд╕ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдЗрддрдиреЗ рдЦрд░рд╛рдм рдХреНрдпреЛрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рднреА рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ? рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдУрдкрдирд╕реАрд╡реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдмрд╛рдЗрдирд░реА рдУрдкрдирд╕реАрд╡реА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рдзреАрдореА рдЬреЗрдкреАрдИрдЬреА рдХреЛрдбреЗрдХ рдХреЗ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓реЗрдЦрдХ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рд╕рдорд╕реНрдпрд╛ 2018 рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╣реА рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ)ред рдпрд╣ libjpeg рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд┐рд╕реНрдЯрдо, рдХрдо рд╕реЗ рдХрдо рдбреЗрдмрд┐рдпрди-рдЖрдзрд╛рд░рд┐рдд, libjpeg-рдЯрд░реНрдмреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдХрдИ рдЧреБрдирд╛ рддреЗрдЬ рд╣реИред рдпрджрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рд╕реНрд░реЛрдд рд╕реЗ OpenCV рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рджрд░реНрд╢рди рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред

VIPS рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдерд┐рддрд┐ рдЕрд▓рдЧ рд╣реИред рдореИрдВрдиреЗ VIPS рдХреЗ рд▓реЗрдЦрдХ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛, рдЙрд╕реЗ рдпрд╣ рдорд╛рдирджрдВрдб рджрд┐рдЦрд╛рдпрд╛, рдФрд░ рд╣рдордиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдФрд░ рдлрд▓рджрд╛рдпреА рд░реВрдк рд╕реЗ рдкрддреНрд░-рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, VIPS рдХреЗ рд▓реЗрдЦрдХ рдиреЗ VIPS рдореЗрдВ рд╣реА рдХрдИ рдЬрдЧрд╣ рдкрд╛рдП, рдЬрд╣рд╛рдБ рдирд┐рд╖реНрдкрд╛рджрди рдЗрд╖реНрдЯрддрдо рдорд╛рд░реНрдЧ рдкрд░ рдирд╣реАрдВ рдерд╛, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рдХрд┐рдпрд╛ред

рдпрджрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ OpenCV рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдорд╛рд╕реНрдЯрд░ рд╕реЗ VIPS, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ, рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред


рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рдирджрдВрдб рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рддрдереНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЗрд╕ рдЧрддрд┐ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рдорд╢реАрди рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рд╕реЗрдЯ


рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрд╛рдд рдХрд┐рдП рдЧрдП рд╕рднреА рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрд░рд┐рдгрд╛рдо рдкреГрд╖реНрда рдкрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдорд┐рдиреА-рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдЦреБрдж рдкрд┐рд▓реЛ-рд╕рд┐рдордбреА рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ, рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

GitHub рдХреЗ рдкрд╛рд╕ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд╛рд▓реА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рдо


рдЕрдм рддрдХ рдореИрдВ рд╢реБрджреНрдз рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдХрд┐ рдПрдХрд▓ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдкрд░ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рд╕рднреА рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЕрдзрд┐рдХ рдХреЛрд░ рдХреЗ рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдо рддрдХ рдкрд╣реБрдВрдЪ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдирд┐рдкрдЯрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдпрд╣рд╛рдБ рдореБрдЭреЗ рдпрд╣ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд┐рд▓реЛ рд╕рднреА рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рдХрд╛рд░реНрдп рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рд░реВрдк рдореЗрдВ рдЕрдиреНрдп рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░рджрд░реНрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕


рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо 2 рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:

  1. рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордпред рдПрдХ рдСрдкрд░реЗрд╢рди (рдпрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдПрдХ рдХреНрд░рдо) рд╣реИ, рдФрд░ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдХрд┐рд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп (рджреАрд╡рд╛рд░ рдШрдбрд╝реА) рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдХрдорд╛рдВрдб рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред
  2. рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо (рд╡рд░реНрдХрдлрд╝реНрд▓реЛ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдСрдкрд░реЗрд╢рди рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдпрд╛ рдХрдИ рд╕реНрд╡рддрдВрддреНрд░ рд╕рдВрдЪрд╛рд▓рди рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдЗрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЧрддрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╣ рдореАрдЯреНрд░рд┐рдХ рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрд╣рд╛рдВ рдХрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдЙрди рд╕рднреА рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреА рд╕реЗрд╡рд╛ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдордп рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрд▓ рдмреИрдВрдбрд╡рд┐рдбреНрде рд╕реЗ рдереЛрдбрд╝рд╛ рдХрдо рд╣реИред

рдЗрди рджреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рдо рдХреЗ рддрд░реАрдХреЗ


1. рдЖрд╡реЗрджрди рд╕реНрддрд░ рдкрд░ , рдЬрдм рдЖрдк рдЖрд╡реЗрджрди рд╕реНрддрд░ рдкрд░ рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдЪрд╛рд▓рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдПрдХ рдХреЛрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдПрдХ рдХреНрд░рдо рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдереНрд░реВрдкреБрдЯ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрдкрд╛рдд рдореЗрдВ рдмрдврд╝рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред

2. рдЧреНрд░рд╛рдлрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕реНрддрд░ рдкрд░ - рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмрд╣реБрдордд рдореЗрдВ рд╣реИред рдЬрдм рдХрд┐рд╕реА рдЧреНрд░рд╛рдлрд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдСрдкрд░реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдзрд╛рдЧреЗ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрдИ рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдСрдкрд░реЗрд╢рди рддреЗрдЬ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдереНрд░реВрдкреБрдЯ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрдврд╝рддрд╛ рд╣реИ ред рдРрд╕реЗ рдСрдкрд░реЗрд╢рди рд╣реИрдВ рдЬреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдПрдХ рд╣рдбрд╝рддрд╛рд▓реА рдЙрджрд╛рд╣рд░рдг рдкреАрдПрдирдЬреА рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рд╣реИ - рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдереНрд░реЗрдбреНрд╕, рд╡рд┐рднрд╛рдЬрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд╣реЗрдб рд╣реИ, рдЬреЛ рдмреИрдВрдбрд╡рд┐рдбреНрде рдХреЛ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдмрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

3. рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрдорд╛рдВрдб рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕реНрддрд░ рдкрд░ ред рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЙрдирдХреЗ рд╕рд╛рде рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХреЗред рдпрд╣ SIMD рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рддрдХрд┐рдпрд╛-рд╕рд┐рдордбреА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рд░рдирдЯрд╛рдЗрдо рдХрдо рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдереНрд░реВрдкреБрдЯ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ - рдпрд╣ рдПрдХ рдЬреАрдд-рдЬреАрдд рд╡рд┐рдХрд▓реНрдк рд╣реИ ред

рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рдо рдХреЛ рдХреИрд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП


рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рддрд░рд╣ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рдо рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ SIMD рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ SIMD рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдЕрдВрджрд░ рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЖрд╡реЗрджрди рдХреЗ рдЕрдВрджрд░ рдФрд░ рдСрдкрд░реЗрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рд╕реЗ рд╕рд╣рдорддрд┐ рдорд┐рд▓ рдЬрд╛рдПрдЧреАред рдСрдкрд░реЗрд╢рди рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╡рд╣реА рд╣реЛрдЧрд╛ рдЬреЛ рдПрдХ рдХреЛрд░ рдкрд░ рдерд╛, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдереНрд░реВрдкреБрдЯ рдмрдврд╝ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВред

рдмрд╣реБ рд╕реВрддреНрд░рдг


рдпрджрд┐ рд╣рдо рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рднреА рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рдЬреАрдЖрдИрдПрд▓ рд╣реИ рдЬреЛ рджреЛ рдереНрд░реЗрдбреНрд╕ рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЪрд▓рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдкрд╛рдпрдерди рдПрдХ рд╕рдЦреНрддреА рд╕реЗ рдПрдХрд▓-рдкрд┐рд░реЛрдпрд╛ рднрд╛рд╖рд╛ рд╣реИред

рдмреЗрд╢рдХ, рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬреАрдЖрдИрдПрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рдпрдерди рдореЗрдВ рджреЛ рдереНрд░реЗрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдХреЛрдб рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдкрд╛рдпрдерди рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреЛрдб рдЬреАрдЖрдИрдПрд▓ рдЬрд╛рд░реА рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рдореБрдХреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдПред

рдХрдИ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рдЬреАрдЖрдИрдПрд▓ рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкрд┐рд▓реЛ, рдУрдкрдирд╕реАрд╡реА, рдкрд╛рдЗрд╡рд┐рдкреНрд╕, рд╡реИрдВрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдХреЗрд╡рд▓ рдПрдХ pgmagick рдореБрдХреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЖрдк рдХреБрдЫ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдереНрд░реЗрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдмрд╛рдХреА рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рдХрд┐рддрдиреЗ рдзрд╛рдЧреЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП?

рдпрджрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЕрдирдВрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдзрд╛рдЧреЗ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдмрд╕ рд╕рднреА рдореЗрдореЛрд░реА рдФрд░ рдкреВрд░реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ - рд╣рдореЗрдВ рдХреЛрдИ рдкреНрд░рднрд╛рд╡реА рдХрд╛рдо рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рдпрдо рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ред

рдирд┐рдпрдо N + рез

рдЙрддреНрдкрд╛рджрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ N + 1 рд╢реНрд░рдорд┐рдХреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ N рдорд╢реАрди рдкрд░ рдХреЛрд░ рдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдФрд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╛ рдзрд╛рдЧрд╛ рд╣реИред

рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╣реА рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рднреАрддрд░ рднреА рдЕрдбрд╝рдЪрдиреЗрдВ рдФрд░ рдУрд╡рд░рд╣реЗрдб рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ, рдПрди + 1 рдЙрджрд╛рд╣рд░рдг рдмрд╡рдВрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмреАрдЪ рдХрд╛ рд╕рдВрддреБрд▓рди рдирдЧреНрдиреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЯреЙрд░реНрдиреЗрдбреЛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЪрд▓реЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди


рд╡рд╣ рд╕рдордп рдЬреЛ рдЧреНрд░рд╛рдлрд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ - рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ - рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдиреНрд╣реЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╣реИред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдкрд░реЗрдЦрд╛рдПрдВ рдпрд╣рд╛рдВ рдмрд╣реБрдд рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ - рдЬрдм рд╣рдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рднрд▓реЗ рд╣реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрд╕ рд╕рдордп рдЬреАрдЖрдИрдПрд▓ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдЕрднреА рднреА рдЕрд╡рд░реБрджреНрдз рд╣реИред

 @gen.coroutine def get(self, *args, **kwargs): im = process_image(...) ... 

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдПрдХ рд╕рд┐рдВрдЧрд▓ рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рдПрдХ рдереНрд░реЗрдбрдкреВрд▓ рдПрдХреНрдЬрд╝реАрдХреНрдпреВрдЯрд░ рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдпрд╣ рдХреЙрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рд╣реЛ рд░рд╣рд╛ рд╣реИред

 @run_on_executor(executor=ThreadPoolExecutor(1)) def process_image(self, ... @gen.coroutine def get(self, *args, **kwargs): im = yield process_image(...) ... 

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдХрддрд╛рд░ рдпрд╣рд╛рдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдЬреЛ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдСрдкрд░реЗрд╢рди рдХрд░рддреА рд╣реИ, рдФрд░ рдИрд╡реЗрдВрдЯ рд▓реВрдк рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИ рдФрд░ рдЪреБрдкрдЪрд╛рдк рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред

рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ


рдПрдХ рдЕрдиреНрдп рд╡рд┐рд╖рдп рдЬрд┐рд╕реЗ рдореИрдВ рдЧреНрд░рд╛рдлрд┐рдХ рдСрдкрд░реЗрд╢рдВрд╕ рдХреА рдЪрд░реНрдЪрд╛ рдореЗрдВ рдЫреВрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рд╡рд╣ рд╣реИ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рд╣рдо рдЙрди рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдиреНрдХреЛрдбреЗрдб рдлрд╝рд╛рдЗрд▓реЛрдВ (JPEG, PNG, BMP, TIFF, рдЖрджрд┐) рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдЖрдИ рд╣реИрдВред

рддрджрдиреБрд╕рд╛рд░, рдПрдХ рдЕрдЪреНрдЫреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдЪреНрдЫрд╛рдЗрдпрд╛рдБ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ


рдЗрд╕ рддрд░рд╣ рдХрд╛ рдкрд╣рд▓рд╛ рдмрдВрдЬ рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рд╣реИред рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрдХрд┐рдпрд╛ рдореЗрдВ рдЖрдк рдПрдХ рдЫрд╡рд┐ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╕рдордп рдЫрд╡рд┐ рдХрд╛ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рджрд┐рдЦрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЫрд╡рд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрд░реА рд╣реБрдИ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдЫрд╡рд┐ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреА рд╕реЗрд╡рд╛ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреАрдЧрд╛рдкрд┐рдХреНрд╕рд▓ рдЪрд┐рддреНрд░ред

 >>> from PIL import Image >>> %time im = Image.open() Wall time: 1.2 ms >>> im.mode, im.size ('RGB', (2152, 1345)) 

рдпрджрд┐ рдЖрдк рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рддреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдпрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдпрд╣ рдЫрд╡рд┐ рдбрд┐рдХреЛрдб рд╣реЛ рдЧрдИ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕рдордп рдЖрд╡рд╢реНрдпрдХ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред

 >>> from PIL import Image >>> %time im = Image.open() Wall time: 1.2 ms >>> im.mode, im.size ('RGB', (2152, 1345)) >>> %time im.load() Wall time: 73.6 ms 

рдЯреВрдЯреА рд╣реБрдИ рддрд╕реНрд╡реАрд░ рдореЛрдб


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рджреВрд╕рд░реЗ рдмрд╛рди рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ рдЬреЛ рдЯреВрдЯреА рд╣реБрдИ рддрд╕реНрд╡реАрд░ рдореЛрдб рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рд╣рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЕрдХреНрд╕рд░ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдПрдиреНрдХреЛрдбреЗрдб рд╣реЛрддреЗ рд╣реИрдВред

рдпреЗ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣реЛрддреА рд╣реИрдВред рдХрднреА-рдХрднреА рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рд╕рдВрдЪрд░рдг рддреНрд░реБрдЯрд┐ рд╣реИ, рдХрднреА-рдХрднреА рдпрд╣ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреБрдЯрд┐рд▓ рдХреЛрдбреЗрдХреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЫрд╡рд┐ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкрд┐рд▓реНрд▓реЛ, рдЬрдм рдпрд╣ рдЙрди рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдЕрдВрдд рддрдХ рдлрд┐рдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИред

 from PIL import Image Image.open('trucated.jpg').save('trucated.out.jpg') IOError: image file is truncated (143 bytes not processed) 

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

 from PIL import Image, ImageFile ImageFile.LOAD_TRUNCATED_IMAGES = True Image.open('trucated.jpg').save('trucated.out.jpg') 



рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдлрд╕рд▓реА рддрд╕реНрд╡реАрд░ рдЕрднреА рднреА рдХреБрдЫ рдирд╣реАрдВ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ - рд╕рд┐рд░реНрдл рдПрдХ рдкреГрд╖реНрда рдЬрд┐рд╕рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реИред

рд╕рд╛рд░рд╛рдВрд╢ рддрд╛рд▓рд┐рдХрд╛




рдКрдкрд░ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ, рдореИрдВрдиреЗ рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдЪреАрдЬреЗрдВ рдПрдХрддреНрд░ рдХреА рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рдХреЛрдбреЗрдХреНрд╕ рдХреА рдЧрд┐рдирддреА рдХреА рдЬреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ OpenCV рдореЗрдВ рд╡реЗ ImageMagick рдореЗрдВ рд╕рдмрд╕реЗ рдХрдо, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ImageMagick рдореЗрдВ рдЖрдк рдХрд┐рд╕реА рднреА рдЫрд╡рд┐ рдХреЛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИред VIPS рдореЗрдВ 12 рджреЗрд╢реА рдХреЛрдбреЗрдХреНрд╕ рд╣реИрдВ, рд▓реЗрдХрд┐рди VIPS рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдХреЗ рд░реВрдк рдореЗрдВ ImageMagick рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдмрд╛рдз рд╣реИред

рддрдХрд┐рдпрд╛ рдореЗрдВ 17 рдХреЛрдбреЗрдХреНрд╕ рд╣реИрдВред рдпрд╣ рдЕрдм рдПрдХрдорд╛рддреНрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ EXIF тАЛтАЛрдСрдЯреЛ-рд░реЛрдЯреЗрдЯ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рдПрдХ рдЫреЛрдЯреА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ EXIF тАЛтАЛрдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЫрд╡рд┐ рдХреЛ рдШреБрдорд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЫреЛрдЯреЗ рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реИ, рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ Google рд╣реИ рдФрд░ рдЕрдзрд┐рдХрддрдо 20 рд▓рд╛рдЗрдиреЗрдВ рд▓реЗрддрд╛ рд╣реИред

OpenCV рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ


рдпрджрд┐ рдЖрдк рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ OpenCV рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдХреЛрдбреЗрдХреНрд╕, рдХреЛрдИ рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдк EXIF тАЛтАЛрдФрд░ рд░рдВрдЧ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, OpenCV рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдЬрдм рд╣рдо рдмрд╕ рдПрдХ рддрд╕реНрд╡реАрд░ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ cv2.imread(filename) рдХреЙрд▓ JPEG рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ EXIF тАЛтАЛ(рддрд╛рд▓рд┐рдХрд╛ рджреЗрдЦреЗрдВ) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдШреБрдорд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди PNG рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ - рдмрд▓реНрдХрд┐ рдПрдХ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░!

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, OpenCV рдХрд╛ рдПрдХ рдзреНрд╡рдЬ рд╣реИ: cv2.imread(filename, flags=cv2.IMREAD_UNCHANGED) ред

рдпрджрд┐ рдЖрдк IMREAD_UNCHANGED рдзреНрд╡рдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ OpenCV PNG рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди EXIF тАЛтАЛрдХреЗ рдЕрдиреБрд╕рд╛рд░ JPEG рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдПрдХ рд╣реА рдзреНрд╡рдЬ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдУрдкрдирд╕реАрд╡реА рдореЗрдВ EXIF тАЛтАЛрдкрдврд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдзреНрд╡рдЬ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ JPEG рдХреЛ рдШреБрдорд╛рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЕрд╕рдВрднрд╡ рд╣реИред

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреА рдЫрд╡рд┐ рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдХреА рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЬреЗрдкреАрдИрдЬреА рдХреЗ рд▓рд┐рдП рдкреАрдПрдирдЬреА рдФрд░ рдСрдЯреЛ-рд░реЛрдЯреЗрдЯ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ - OpenCV рдЙрд╕ рддрд░рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

OpenCV рдХреЗ рдХрд╛рд░рдг рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдирд╛рдо рдкрд░ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдХрдВрдкреНрдпреВрдЯрд░ рджреГрд╖реНрдЯрд┐ рдФрд░ рдЫрд╡рд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, OpenCV рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╛рд╣рд░реА рдирд┐рдЧрд░рд╛рдиреА рдХреИрдорд░рд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ рдФрд░ 5 рд╕рд╛рд▓ рддрдХ рдПрдХ рд╣реА рдкреНрд░рд╛рд░реВрдк рдФрд░ рдПрдХ рд╣реА рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдореЗрдВ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИред I / O рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

OpenCV рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╛рдордЧреНрд░реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕реА рд╕рдордп рдЖрдкрдХреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП OpenCV рдХреА рд╕рднреА рд╢рдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?



рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдУрдкрдирд╕реАрд╡реА рдХреЛ рдЦрд╕рдЦрд╕ тАЛтАЛрдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкрд┐рд▓реЛ рдореЗрдВ рдкрд┐рд▓реЛ рд╕реЗ рдПрдХ рдЦрд╕реНрддрд╛ рд╕рд░рдгреА рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд╕рднреА рд╕рд╛рдзрди рд╣реИрдВред рдпрд╣реА рд╣реИ, рд╣рдо рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рд░рдгреА рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдУрдкрдирд╕реАрд╡реА рдЗрд╕ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рдеред рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 import numpy from PIL import Image ... pillow_image = Image.open(filename) cv_image = numpy.array(pillow_image) 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рд╣рдо OpenCV (рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рджреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдФрд░ рддрдХрд┐рдпрд╛ рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ OpenCV рд╕реЗ рдЫрд╡рд┐ рдХреЛ рд╡рд╛рдкрд╕ рддрдХрд┐рдпрд╛ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, I / O рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 import numpy from PIL import Image ... pillow_image = Image.fromarray(cv_image, "RGB") pillow_image.save(filename) 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдо рддрдХрд┐рдпрд╛ рд╕реЗ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдУрдкрдирд╕реАрд╡реА рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рд╣рдо рджреЛ рджреБрдирд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд▓реЗрддреЗ рд╣реИрдВред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд▓реЛрдбреЗрдб рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдЖрдк рдкрд╛рдпрдерди рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рд╡рд┐рдХрд╛рд╕ рд░рд╣рд╕реНрдп рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдореВрд▓реНрдп рдФрд░ рдХрднреА-рдХрднреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЕрдиреБрднрд╡ рд╕реЗ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдмрд╣реБрдд рдЬрд▓реНрдж рдореЙрд╕реНрдХреЛ рдкрд╛рдпрдерди рдХреЙрдиреНрдл ++ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реЗрдбреНрдпреВрд▓ рдореЗрдВ рдРрд╕реЗ рдирд╛рдореЛрдВ рдФрд░ рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред

  • рдбреЛрдирд╛рд▓реНрдб рд╡реНрд╣рд╛рдИрдЯ рдПрдХ рдХрд╣рд╛рдиреА рдХреЗ рд╕рд╛рде рдХрд┐ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ, рдЪрд╛рд▓ рдФрд░ рдЪрд╛рд▓рд╛рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрд┐рдд рдХреЛ 10 рдЧреБрдирд╛ рддреЗрдЬ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдФрд░ рдХреЛрдб рд╕рдордЭ рдФрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИред
  • рдЖрдВрджреНрд░реЗрдИ рдкреЛрдкреЛрд╡ рднрд╛рд░реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЦрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
  • рдПрдлреНрд░рд┐рдо рдорд╛рдЯреЛрд╕рд┐рдпрди рдиреЗ рдЕрдкрдиреА рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ "рдкрд╛рдпрдерди рдХреЛ рдлрд┐рд░ рд╕реЗ рддреЗрдЬ рдХрд░реЗрдВ" рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдмрд╕ рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдорди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХреИрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдПред

22 рдФрд░ 23 рдЕрдХреНрдЯреВрдмрд░ рдХреЛ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдЪрд░реНрдЪрд╛ рд╣реЛрдЧреА, рдЗрд╕рдХреА рдкреВрд░реА рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред

Source: https://habr.com/ru/post/hi425471/


All Articles