ΠΠ°ΠΊ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² python
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π² Python ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Pillow
ΠΡΠ²Π°Π΅Ρ ΡΠ°ΠΊΠΎΠΉ Π·Π°Ρ ΠΎΠ΄ΠΈΡΡ Π½Π° ΠΏΠΎΡΡΡ ΠΈ Π²ΠΈΠ΄ΠΈΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΡΡ ΠΏΠΎΠ΄Π±ΠΎΡΠΊΡ ΡΡΠ°ΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡΠΎΡΠΈΡΠ°Π΅ΡΡ, Π½ΠΎ ΡΡΡ ΡΠ°ΠΊ ΡΠΎΡΠ»ΠΈΡΡ Π·Π²Π΅Π·Π΄Ρ, ΡΡΠΎ ΠΈ ΠΎΡΠΊΡΡΠ» ΡΡΠ°ΡΡΡ, ΠΈ ΠΏΡΠΎΡΠ΅Π», ΠΈ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π», Π³Π΄Π΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ. Π ΡΠ΅ΠΏΠ΅ΡΡ Ρ ΠΎΡΡ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΡΠ°ΡΡΠ΅ΠΉ Ρ Π₯Π°Π±ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π΅ΡΠ»ΠΈ ΠΊΠΎΠΌΡ-ΡΠΎ Π½ΡΠΆΠ΅Π½ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ Π³Π°ΠΉΠ΄ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π½Π° Python β ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°.
Pillow β ΡΡΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΠΌΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ (Π΄Π°Π»Π΅Π΅ Imaging Library) Π½Π° Python Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π²Π°ΡΠ΅ΠΌΡ ΠΊΠΎΠ΄Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΎΡΠΊΡΡΡΠΈΡ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΡ .
ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½Π΅ΠΌ
Π‘Π°ΠΌΡΠΉ Π²Π°ΠΆΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Π² Imaging Library Python β ΡΡΠΎ ΠΊΠ»Π°ΡΡ Image, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π² ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅. ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ open(), ΡΡΠΎΠ±Ρ ΠΎΡΠΊΡΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π½Π°ΡΠ΅ΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:
ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ! Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΡΠΌΠ΅Π΅ΡΠ΅ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Pillow, Π° Π·Π½Π°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΡΡΠΏΠ°ΡΡ ΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠΈΠΏ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π·Π°Π³ΡΡΠ·ΠΈΠ»ΠΈ.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ²Π΅ΡΡΠΈ Π½Π° ΡΠΊΡΠ°Π½ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅ΡΠΎΠ΄ show
ΠΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
ΠΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Pillow Π² ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π΅Π³ΠΎ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠΎΡΠΌΠ°ΡΠ°Ρ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡ jpg ΡΠ΄Π΅Π»Π°ΡΡ png ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅.
ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Python Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ jpg, Π² ΡΠΎΡΠΌΠ°Ρ png.
ΠΠ±ΡΠ΅Π·ΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
Pillow ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π·ΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠΈ ΡΡΠΎΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΠΊΠ°Π·Π°Π² ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
ΠΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΎΠ±ΡΠ΅Π·Π°Π½ΠΎ. ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΎΠ±ΡΠ΅Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ.
ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π΅ ΡΠΎΡΠΊΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ (x, y) ΠΎΡ Π²Π΅ΡΡ Π½Π΅ΠΉ Π»Π΅Π²ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ, Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π²Π΅ ΡΠΎΡΠΊΠΈ (x2, y2) ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ ΡΠ½ΠΈΠ·Ρ ΡΠΏΡΠ°Π²Π°.
ΠΠ΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Pillow ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°Π΄ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈ ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΡΠΈ Π·Π½Π°Π½ΠΈΡ ΠΈΠ³ΡΠ°ΡΡ Π±ΠΎΠ»ΡΡΡΡ ΡΠΎΠ»Ρ ΠΏΡΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΏΡΡΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΠΎΠ½Π½Ρ Π΄ΡΡΠ³ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Ρ ΡΠ°Π·Π½ΡΡ ΡΠ°ΠΊΡΡΡΠΎΠ².
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
ΠΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 320 Π½Π° 320.
ΠΠΎΠ²ΠΎΡΠΎΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ 360 ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ³Π»Π°ΠΌΠΈ β ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ.
ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΊΡΠΈΠΏΡΠ°, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ 360 ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΡΠ°Π·Π½ΡΠΌ ΠΏΠΎΠ²ΠΎΡΠΎΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ β ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅.
Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ², ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,- ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅, ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π·ΠΊΠΎΡΡΠΈ, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΠΌΠ° ΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΠ°Π΅Π².
Π Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Pillow Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΈΠ»ΡΡΡΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ BLUR, BoxBlur, CONTOUR, FIND_EDGES, Filter, GaussianBlur, Kernel, MaxFilter, MedianFilter, SHARPEN, SMOOTH ΠΈ Ρ.Π΄.
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π½Π°ΠΉΡΠΈ ΠΊΡΠ°Ρ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π½ΠΈΠΆΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΠ»ΡΡΡ FIND_EDGES.
Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΈΠ»ΡΡΡΠ°ΠΌΠΈ Π² Python Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Pillow Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ.
Π§ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Pillow Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Python, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅
Π§ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ· URL
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Pillow Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ. ΠΠ°ΠΏΡΠΎΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΠ΄ΡΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ GET-request Π½Π° ΡΠ΅ΡΠ²Π΅Ρ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠ΅ Π±Π°ΠΉΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π° ΡΠΆΠ΅ Pillow ΡΡΠΈΡΠ°Π΅Ρ ΡΡΠΈ Π±Π°ΠΉΡΡ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Pillow Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΡΡΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅Π»Π΅ΠΉ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Image.new() Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
Π ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ² Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡ
Pillow ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡ . ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΠΏΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠΈ ΡΡΠΎΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ, Π° ΡΠ°ΠΌΠΊΡ Π½Π°Π΄ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ.
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π·ΠΎΠ²Π°Π½ΠΈΡ
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΡΡ ΡΠ°ΠΌΠΊΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΡΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ (x, y) Π»Π΅Π²ΠΎΠΉ Π²Π΅ΡΡ Π½Π΅ΠΉ ΡΠ°ΡΡΠΈ, Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π²Π΅ (x2, y2) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ½ΡΡ ΡΠΎΡΠΊΡ ΠΏΡΠ°Π²ΠΎΠΉ Π½ΠΈΠΆΠ½Π΅ΠΉ ΡΠ°ΡΡΠΈ.
Π ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡ
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Pillow Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡ .
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python Imaging Library / Pillow / PIL
PIL, ΠΈΠ·Π²Π΅ΡΡΠ½Π°Ρ ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Python Imaging Library, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ. Π£ PIL Π½Π΅ Π±ΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΡΠ°Π·Π²ΠΈΡΠΈΡ Ρ 2009. ΠΠΎΡΡΠΎΠΌΡ, Π΄ΠΎΠ±ΡΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π° Pillow Π΅ΡΠ΅ ΡΠ°Π·. ΠΡΠ° ΡΡΠ°ΡΡΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΡΠ·Π½Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Pillow.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Pillow?
Pillow ΡΡΠΎ ΡΠΎΡΠΊ PIL (Python Image Library), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΠΠ»Π΅ΠΊΡΠ° ΠΠ»Π°ΡΠΊΠ° ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ². ΠΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΠΊΠΎΠ΄Π΅ PIL, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΈΠ»Π°ΡΡ Π² ΡΠ»ΡΡΡΠ΅Π½Π½ΡΡ, ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ. ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ½ΠΎΠ³ΠΎΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ PIL.
ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Pillow
ΠΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ°Π»ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Pillow, Π½ΡΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΅Π΅. Pillow Π΄ΠΎΡΡΡΠΏΠ½Π° Π΄Π»Ρ Windows, Mac OS X ΠΈ Linux. Π‘Π°ΠΌΠ°Ρ βΡΠ²Π΅ΠΆΠ°Ρβ Π²Π΅ΡΡΠΈΡ β ΡΡΠΎ Π²Π΅ΡΡΠΈΡ β8.1.0β, ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π½Π° python 3.6 ΠΈ Π²ΡΡΠ΅. ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Pillow Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ Windows ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ conda ΠΈΠ»ΠΈ pip :
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Pillow Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°Ρ Linux ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅:
Π ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Pillow Π½Π° MacOS X Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ XCode, Π° Π·Π°ΡΠ΅ΠΌ Homebrew. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Homebrew ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅:
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Pillow ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Pillow ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°, ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π» ΠΈ Π½Π°Π±Π΅ΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅:
Π€ΠΎΡΠΌΠ°ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²
ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Pillow Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ, Π΄Π»Ρ Π½Π°ΡΠ°Π»Π°, ΡΠΊΠ°ΡΠ°Π΅ΠΌ ΠΎΠ΄Π½ΠΎ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΠΏΡΠΎΠΏΡΡΡΠΈΡΠ΅ ΡΡΠΎΡ ΡΠ°Π³, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅.
Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«LennaΒ» ΠΈΠ»ΠΈ Β«LenaΒ». ΠΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Ρ ΠΏΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΡΠΎΡΡΠΎ Π·Π°ΠΉΠ΄ΠΈΡΠ΅ ΡΡΠ΄Π° ΠΈ Π·Π°Π³ΡΡΠ·ΠΈΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Π²Ρ Π½Π°ΠΆΠΌΠ΅ΡΠ΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡΡ ΠΊΠ°ΠΊ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ 512Γ512.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Pillow
Π Π°Π±ΠΎΡΠ° Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π½Π° Python
Π’Π΅ΠΌΠ° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½Π΅Π³ΠΎ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ° β ΡΠ΅ΠΌΡ ΠΆΠ΅ Π½Π°ΡΡΠΈΠ»ΡΡ Python Π·Π° Π²ΡΠ΅ Π³ΠΎΠ΄Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ. Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΠΊΡΠΎΠΌΠ΅ ΡΡΠ°ΡΠΈΡΠΊΠΎΠ² ΡΠΎΠ΄ΠΎΠΌ ΠΈΠ· 1990 Π³ΠΎΠ΄Π° ImageMagick ΠΈ GraphicsMagick, Π΅ΡΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Pillow ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Pillow-SIMD. ΠΡ Π°ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΠ»Π΅ΠΊΡΠ°Π½Π΄Ρ ΠΠ°ΡΠΏΠΈΠ½ΡΠΊΠΈΠΉ (homm) Π½Π° MoscowPython ΡΡΠ°Π²Π½ΠΈΠ» ΡΠ°Π·Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π½Π° Python, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈ ΠΈ ΡΠ°ΡΡΠΊΠ°Π·Π°Π» ΠΎ Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ , ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ΅Π³Π΄Π° Ρ Π²Π°ΡΠ°Π΅Ρ. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠ° Π΄ΠΎΠΊΠ»Π°Π΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π²ΡΠ±ΡΠ°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΏΠΎΠ΄ ΡΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ.
ΠΡΠΊΠ³ΡΠ°ΡΠ½Π΄
Π‘Π΅ΡΠ²ΠΈΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π² Uploadcare β ΡΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ HTTP-Π·Π°ΠΏΡΠΎΡ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΊΠ°ΠΊΠΈΠΌΠΈ-ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ. Π‘Π΅ΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅ ΠΎΡΠ΄Π°ΡΡ ΠΎΡΠ²Π΅Ρ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π²ΡΡΡΡΠΏΠ°Π΅Ρ Π±ΡΠ°ΡΠ·Π΅Ρ.
ΠΠ΅ΡΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊ ΠΎΠ±Π΅ΡΡΠΊΡ Π²ΠΎΠΊΡΡΠ³ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠΌΠ΅Π½Π½ΠΎ ΠΎΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ΅ΡΠ»ΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°ΡΡΡΡ, ΡΡΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² Uploadcare ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Pillow.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
ΠΡΠ°ΡΠΊΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Π²ΠΎΠΎΠ±ΡΠ΅ Π΅ΡΡΡ Π² Python Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π³ΡΠ°ΡΠΈΠΊΠΎΠΉ, ΡΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΎ ΡΠ΅ΠΌ ΠΏΠΎΠΉΠ΄Π΅Ρ ΡΠ΅ΡΡ Π΄Π°Π»Π΅Π΅.
Pillow
Pillow β ΡΠΎΡΠΊ PIL (Python Imaging Library). ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΡΠ°ΡΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π²ΡΡΠ΅Π΄ΡΠΈΠΉ Π² 1995 Π³ΠΎΠ΄Ρ Π΄Π»Ρ Python 1.2. ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ ΡΡΠ°ΡΡΠΉ! Π ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ Python Imaging Library Π±ΡΠ»Π° Π·Π°Π±ΡΠΎΡΠ΅Π½Π°, Π΅Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ»Π°ΡΡ. Π€ΠΎΡΠΊ Pillow Π±ΡΠ» ΡΠ΄Π΅Π»Π°Π½ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΈ ΡΠΎΠ±ΠΈΡΠ°ΡΡ Python Imaging Library Π½Π° ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ . ΠΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½Ρ Π±ΡΠ»ΠΈ Π»ΡΠ΄ΡΠΌ Π² Python Imaging Library ΡΠΎΡΠ»ΠΎ, ΠΈ Π²ΡΡΠ»Π° Pillow 2.0, Π² ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Python 3. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ Π½Π°ΡΠ°Π»ΠΎΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Pillow.
Pillow ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ Python, ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΊΠΎΠ΄Π° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Π‘, ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° β Π½Π° Python. ΠΠ΅ΡΡΠΈΠΈ Python ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ°ΠΌΡΠ΅ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΠ΅: 2.7, 3.3+, PΡPΡ, PΡPΡΠ.
Pillow-SIMD
ΠΡΠΎ ΠΌΠΎΠΉ ΡΠΎΡΠΊ Pillow, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡ ΠΎΠ΄ΠΈΡ Ρ ΠΌΠ°Ρ 2016 Π³ΠΎΠ΄Π°. SIMD ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Single Instruction, Multiple Data β ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π½Π° ΡΠ°ΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
Pillow-SIMD β ΡΡΠΎ Π½Π΅ ΡΠΎΡΠΊ Π² ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ΅ΠΊΡ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΆΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΆΠΈΠ·Π½ΡΡ. ΠΡΠΎ Π·Π°ΠΌΠ΅Π½Π° Pillow, ΡΠΎ Π΅ΡΡΡ Π²Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π²ΠΌΠ΅ΡΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ, Π½ΠΈ ΡΡΡΠΎΡΠΊΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΠ΅ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
Pillow-SIMD ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±ΠΈΡΠ°ΡΡ Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ SSE4 (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ). ΠΡΠΎ Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΎ Π²ΡΠ΅Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ x86 ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ . Π’Π°ΠΊΠΆΠ΅ Pillow-SIMD ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±ΠΈΡΠ°ΡΡ Ρ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ AVX2. ΠΡΠΎΡ Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π΅ΡΡΡ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Haswell, ΡΠΎ Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Ρ 2013 Π³ΠΎΠ΄Π°.
OpenCV
ΠΡΡΠ³Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π² Python, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° ΡΠ»ΡΡΠ°Π»ΠΈ β ΡΡΠΎ OpenCV (Open Computer Vision). Π Π°Π±ΠΎΡΠ°Π΅Ρ Ρ 2000 Π³ΠΎΠ΄Π°. ΠΠΈΠ½Π΄ΠΈΠ½Π³ Π½Π° Python Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π±ΠΈΠ½Π΄ΠΈΠ½Π³ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π°ΠΊΡΡΠ°Π»Π΅Π½, Π½Π΅ Π±ΡΠ²Π°Π΅Ρ ΡΠ°ΡΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ ΠΈ Π±ΠΈΠ½Π΄ΠΈΠ½Π³ΠΎΠΌ.
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π² PyPy, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ OpenCV Π±Π°Π·ΠΈΡΡΠ΅ΡΡΡ Π½Π° numpy, Π° numpy ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎ ΡΡΠ°Π» ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΠ΄ PyPy, ΠΈ Π² OpenCV ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ PyPy Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅Ρ.
ΠΡΠ΅ ΠΎΠ΄Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ β VIPS. ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ΄Π΅Ρ VIPS Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π²ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡΡ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΠΊΡΡΠΎΡΠΊΠΈ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π³ΠΈΠ³Π°ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΡΠ°ΡΠΈΡΡ Π³ΠΈΠ³Π°Π±Π°ΠΉΡΡ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΠ°ΡΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° β 1993 Π³ΠΎΠ΄Π°, Π½ΠΎ ΠΎΠ½Π° ΠΎΠ±ΠΎΠ³Π½Π°Π»Π° ΡΠ²ΠΎΡ Π²ΡΠ΅ΠΌΡ. Π Π½Π΅ΠΉ Π΄ΠΎΠ»Π³ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π±ΡΠ»ΠΎ ΠΌΠ°Π»ΠΎ, ΡΡΠΎ ΡΠ»ΡΡΠ½ΠΎ, Π½ΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π΄Π»Ρ VIPS ΡΡΠ°Π»ΠΈ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π±ΠΈΠ½Π΄ΠΈΠ½Π³ΠΈ ΠΏΠΎΠ΄ ΡΠ°Π·Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π΄Π»Ρ Go, Node.js, Ruby.
Π― Π΄ΠΎΠ»Π³ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Ρ ΠΎΡΠ΅Π» ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΠΏΠΎΡΡΠΏΠ°ΡΡ, Π½ΠΎ ΠΌΠ½Π΅ ΡΡΠΎ Π½Π΅ ΡΠ΄Π°Π²Π°Π»ΠΎΡΡ ΠΏΠΎ ΠΎΡΠ΅Π½Ρ Π³Π»ΡΠΏΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅. Π― Π½Π΅ ΠΌΠΎΠ³ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΠΊΠ°ΠΊ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ VIPS, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π±ΠΈΠ½Π΄ΠΈΠ½Π³ ΡΠΎΠ±ΠΈΡΠ°Π»ΡΡ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ. ΠΠΎ ΡΠ΅ΠΏΠ΅ΡΡ (Π² 2017 Π³ΠΎΠ΄Ρ) Π²ΡΡΠ΅Π» Π±ΠΈΠ½Π΄ΠΈΠ½Π³ pyvips ΠΎΡ Π°Π²ΡΠΎΡΠ° ΡΠ°ΠΌΠΎΠ³ΠΎ VIPS, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠΆΠ΅ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π’Π΅ΠΏΠ΅ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ VIPS ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ°Ρ. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ: Python 2.7, 3.3+, PΡPΡ, PΡPΡΠ.
ImageMagick & GraphicsMagick
ΠΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π³ΡΠ°ΡΠΈΠΊΠΎΠΉ, ΡΠΎ Π½Π΅Π»ΡΠ·Ρ Π½Π΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ ΡΡΠ°ΡΠΈΡΠΊΠΎΠ² β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ImageMagick ΠΈ GraphicsMagick. ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π±ΡΠ»Π° ΡΠΎΡΠΊΠΎΠΌ ImageMagick Ρ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ, Π½ΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Ρ Π½ΠΈΡ , ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠ°Π²Π½ΡΠ»Π°ΡΡ. ΠΡΡΠ³ΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΡΡ ΠΎΡΠ»ΠΈΡΠΈΠΉ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ Π·Π½Π°Ρ, ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ Π½Π΅Ρ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΡ, ΡΠΎΡΠ½Π΅Π΅, ΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π²Π°ΠΌ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
ΠΡΠΎ ΡΠ°ΠΌΡΠ΅ ΡΡΠ°ΡΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ· ΡΠ΅Ρ , ΠΎ ΠΊΠΎΡΠΎΡΡΡ Ρ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΠΏΠΎΠΌΡΠ½ΡΠ» (1990 Π³ΠΎΠ΄). ΠΠ° Π²ΡΠ΅ ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π±ΡΠ»ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΈΠ½Π΄ΠΈΠ½Π³ΠΎΠ² Π΄Π»Ρ Python, ΠΈ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ ΠΈΠ· Π½ΠΈΡ Π±Π»Π°Π³ΠΎΠΏΠΎΠ»ΡΡΠ½ΠΎ ΡΠΌΠ΅ΡΠ»ΠΈ ΠΊ Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ. ΠΠ· ΡΠ΅Ρ , ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΠΎΡΡΠ°Π»ΠΈΡΡ:
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ
ΠΠΎΠ³Π΄Π° ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ, ΠΏΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ Π½Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΌΠ½Π΅) β ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠ½Π°ΡΠ΅ ΠΌΡ Π±Ρ ΠΌΠΎΠ³Π»ΠΈ ΠΈ Π½Π° Python Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΡΠΊΠ°ΠΌΠΈ.
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ β ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊΠ°Ρ ΠΏΡΠΎΡΡΠ°Ρ ΡΡΡΠΊΠ°. ΠΠ΅Π»ΡΠ·Ρ ΠΏΡΠΎΡΡΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΎΠ΄Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΡΡΡΡΠ΅Π΅ Π΄ΡΡΠ³ΠΎΠΉ. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π΅ΡΡΡ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠ°Π·Π½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ.
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΠ΅ ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ΅ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅. ΠΠΈΠ±ΠΎ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½ΡΠΆΠ΅Π½ Π½Π΅ΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ, ΠΈ Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅, ΡΡΠΎ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠ°Ρ-ΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΡΡΡΡΠ΅Π΅ (ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅).
ΠΠ°ΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
ΠΠΎΠ³Π΄Π° Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈ, ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π²Π·Π³Π»ΡΠ΄Π° Π²Ρ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ΄, ΡΡΠΎ Π½Π΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΎΠ½ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ.
ΠΠ΅Π΄Π°Π²Π½ΠΎ Π² ΡΡΠ°ΡΡΠ΅, Π³Π΄Π΅ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π»Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Pillow ΠΈ OpenCV, ΠΌΠ½Π΅ ΠΏΠΎΠΏΠ°Π»ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:
ΠΡΠΎΠ΄Π΅ Π±Ρ ΠΈ ΡΠ°ΠΌ, ΠΈ ΡΠ°ΠΌ, BoxBlur, ΠΈ ΡΠ°ΠΌ, ΠΈ ΡΠ°ΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ 3, Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π·Π½ΡΠΉ. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² Pillow (3) β ΡΡΠΎ ΡΠ°Π΄ΠΈΡΡ ΡΠ°Π·ΠΌΡΡΠΈΡ, Π° Π² OpenCV ksize=(3, 3) β ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ΄ΡΠ°, ΡΠΎ Π΅ΡΡΡ, Π³ΡΡΠ±ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Π΄ΠΈΠ°ΠΌΠ΅ΡΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ OpenCV Π±ΡΠ»ΠΎ Π±Ρ 3*2+1, ΡΠΎ Π΅ΡΡΡ (7, 7).
Π ΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°?
ΠΠΎΡΠ΅ΠΌΡ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ β ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π³ΡΠ°ΡΠΈΠΊΠΎΠΉ? ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π»ΡΠ±ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΈ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΡΡΠ΅Ρ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΈΠ· Π½ΠΈΡ . Π Π΅ΡΠ»ΠΈ ΡΡΠΈΡ ΡΠ°ΠΊΡΠΎΡΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΈ, ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π² ΠΊΡΠ±Π΅.
ΠΡΠΈΠΌΠ΅Ρ: ΠΠ°ΡΡΡΠΎΠ²ΠΎ ΡΠ°Π·ΠΌΡΡΠΈΠ΅ Π² OpenCV.
Π‘Π»Π΅Π²Π° β ΡΠ°Π΄ΠΈΡΡ 3, ΡΠΏΡΠ°Π²Π° β 30. ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΡΠ°Π·Π½ΠΈΡΠ° Π² ΡΠΊΠΎΡΠΎΡΡΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π² 10 ΡΠ°Π·.
ΠΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ΅Π΄ΠΎ ΠΌΠ½ΠΎΠΉ Π²ΡΡΠ°Π»Π° Π·Π°Π΄Π°ΡΠ° Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°Π·ΠΌΡΡΠΈΠ΅ ΠΏΠΎ ΠΠ°ΡΡΡΡ Π² ΠΌΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΌΠ΅Π½Ρ Π½Π΅ ΡΡΡΡΠ°ΠΈΠ²Π°Π»ΠΎ, ΡΡΠΎ Π³ΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΠΈΡΡΡΡ 900 ΠΌΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. Π’Π°ΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΡΡΡΡΠΈ Π² ΠΌΠΈΠ½ΡΡΡ, ΠΈ ΡΡΠ°ΡΠΈΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΠ΄Π½Ρ β Π½Π΅ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ. ΠΠΎΡΡΠΎΠΌΡ Ρ ΠΈΠ·ΡΡΠΈΠ» Π²ΠΎΠΏΡΠΎΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» Π² Pillow ΡΠ°Π·ΠΌΡΡΠΈΠ΅ ΠΏΠΎ ΠΠ°ΡΡΡΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π·Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π΄ΠΈΡΡΠ°. Π’ΠΎ Π΅ΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΠ°ΡΡΡΠΎΠ²Π° ΡΠ°Π·ΠΌΡΡΠΈΡ Π²Π»ΠΈΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ.
ΠΠΎ Π·Π΄Π΅ΡΡ Π³Π»Π°Π²Π½ΠΎΠ΅ Π½Π΅ ΡΠΎ, ΡΡΠΎ ΡΡΠΎ-ΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΡΡΡΡΠ΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅.
Π― Ρ ΠΎΡΡ Π΄ΠΎΠ½Π΅ΡΡΠΈ, ΡΡΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΡΡΠΎΠΈΡΠ΅ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΡΠΈΡΡΠ΅ΠΌΡ, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΎΡ ΠΊΠ°ΠΊΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π·Π°Π²ΠΈΡΠΈΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π½Π° Π²ΡΡ ΠΎΠ΄Π΅. Π’ΠΎΠ³Π΄Π° Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ Π±ΠΎΡΠΎΡΡΡΡ Ρ ΡΡΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΡ.
ΠΠ°Π²Π΅ΡΠ½ΠΎΠ΅, ΡΠ°ΠΌΠ°Ρ ΡΠ°ΡΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎΡΠ»Π΅ ΠΈΡ ΠΎΡΠΊΡΡΡΠΈΡ, β ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° (resize).
ΠΠ° Π³ΡΠ°ΡΠΈΠΊΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ (Π±ΠΎΠ»ΡΡΠ΅ β Π»ΡΡΡΠ΅) ΡΠ°Π·Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² 8 ΠΈ Π² 1,25 ΡΠ°Π·.
ΠΠ»Ρ PIL ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ 17 Mpx/s ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΡ Ρ Π°ΠΉΡΠΎΠ½Π° (12 Mpx) ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π² 1,25 ΡΠ°Π· ΡΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ Π·Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ. Π’Π°ΠΊΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ.
Π― ΡΡΠ°Π» ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ°ΠΉΠ·Π°, ΠΈ Π² Pillow 2.7 ΠΌΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π΄Π²ΡΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΡΠΎΡΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π° Π² Pillow 4.3 β ΡΡΠ΅Ρ ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ (Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π°ΠΊΡΡΠ°Π»ΡΠ½Π° Π²Π΅ΡΡΠΈΡ Pillow 5.3, Π½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ°ΠΉΠ·Π° Π² Π½Π΅ΠΉ ΡΠ° ΠΆΠ΅).
ΠΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ΅ΡΠ°ΠΉΠ·Π° β ΡΡΠΎ ΡΠ°ΠΊΠ°Ρ ΡΡΡΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ Π»ΠΎΠΆΠΈΡΡΡ Π½Π° SIMD. ΠΠ½Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΊ single instruction, multiple data, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ Pillow-SIMD ΠΌΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π² 19 ΡΠ°Π· ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΠ°ΠΉΠ·Π° ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ Python Imaging Library ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅Ρ ΠΆΠ΅ ΡΠ°ΠΌΡΡ ΡΠ΅ΡΡΡΡΠΎΠ².
ΠΡΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ΅ΡΠ°ΠΉΠ·Π° Π² OpenCV. ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² OpenCV ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΡΡ ΠΌΠ΅Π½Π΅Π΅ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅ΡΠ°ΠΉΠ·Π° Π±ΠΎΠΊΡ-ΡΠΈΠ»ΡΡΡΠΎΠΌ, Π° Π² Pillow-SIMD ΡΠ΅ΡΠ°ΠΉΠ· ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²Π΅ΡΡΠΎΠΊ.
ΠΡΠΎ Π½Π΅ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΊΠΎΡΠ΅Π½Ρ Π² Pillow-SIMD ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΎΠ±ΡΡΠ½ΠΎΠΉ Pillow.
ΠΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ Pillow-SIMD Π½Π° ΡΡΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² 2 ΡΠ°Π·Π° Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Pillow. Π ΡΠ°ΠΌΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Wand (Π½Π°ΠΏΠΎΠΌΠ½Ρ, ΡΡΠΎ ΡΡΠΎ ImageMagick).
ΠΠΎ ΠΌΠ΅Π½Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π»ΠΎ Π΄ΡΡΠ³ΠΎΠ΅ β ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊΠΈΠ΅ Π½ΠΈΠ·ΠΊΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Ρ OpenCV ΠΈ VIPS, Π²Π΅Π΄Ρ ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΆΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Ρ Ρ ΠΏΡΠΈΡΠ΅Π»ΠΎΠΌ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ? ΠΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ OpenCV, ΡΠ° Π±ΠΈΠ½Π°ΡΠ½Π°Ρ ΡΠ±ΠΎΡΠΊΠ° OpenCV, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ°Π²ΠΈΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ pip, ΡΠΎΠ±ΡΠ°Π½Π° Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΌ ΠΊΠΎΠ΄Π΅ΠΊΠΎΠΌ JPEG (Π°Π²ΡΠΎΡ ΡΠ±ΠΎΡΠΊΠΈ Π±ΡΠ» ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½, Π½Π° 2018 Π³ΠΎΠ΄ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΆΠ΅ ΡΠ΅ΡΠ΅Π½Π°). ΠΠ½Π° ΡΠΎΠ±ΡΠ°Π½Π° Ρ libjpeg, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠΈΡΡΠ΅ΠΌ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ debian-based, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ libjpeg-turbo, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π±ΡΡΡΡΠ΅Π΅. ΠΡΠ»ΠΈ ΡΠΎΠ±ΡΠ°ΡΡ OpenCV ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ² ΡΠ°ΠΌΠΎΠΌΡ, ΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅.
Π ΡΠ»ΡΡΠ°Π΅ VIPS ΡΠΈΡΡΠ°ΡΠΈΡ Π΄ΡΡΠ³Π°Ρ. Π― ΡΠ²ΡΠ·Π°Π»ΡΡ Ρ Π°Π²ΡΠΎΡΠΎΠΌ VIPS, ΠΏΠΎΠΊΠ°Π·Π°Π» Π΅ΠΌΡ ΡΡΠΎΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ, ΠΌΡ Ρ Π½ΠΈΠΌ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ ΠΈ ΠΏΠ»ΠΎΠ΄ΠΎΡΠ²ΠΎΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π»ΠΈΡΡ. ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π°Π²ΡΠΎΡ VIPS Π½Π°ΡΠ΅Π» Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡ Π² ΡΠ°ΠΌΠΎΠΌ VIPS, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π½Π΅ ΠΏΠΎ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌΡ ΠΌΠ°ΡΡΡΡΡΡ, ΠΈ ΠΈΡΠΏΡΠ°Π²ΠΈΠ» ΠΈΡ .
ΠΠΎΡ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ, Π΅ΡΠ»ΠΈ ΡΠΎΠ±ΡΠ°ΡΡ OpenCV ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ² ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ, Π° VIPS β ΠΈΠ· master, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ Π΅ΡΡΡ ΡΠ΅ΠΉΡΠ°Ρ.
ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π°ΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ, Π΅ΡΠ΅ Π½Π΅ ΡΠ°ΠΊΡ, ΡΡΠΎ Π²ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ ΡΠ°ΠΊΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π²Π°ΡΠ΅ΠΉ ΠΌΠ°ΡΠΈΠ½Π΅.
ΠΠ°Π±ΠΎΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²
ΠΡΠ΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°Π», ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ. ΠΡΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΡΠΎΠ΅ΠΊΡ, Π³Π΄Π΅ Ρ ΠΏΠΈΡΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ½Π΅ ΡΠ°ΠΌΠΎΠΌΡ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Pillow-SIMD, Π·Π°ΠΏΡΡΠΊΠ°Ρ ΠΈΡ ΠΈ Π²ΡΠΊΠ»Π°Π΄ΡΠ²Π°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.
ΠΠ° GitHub Π΅ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΡΠ²ΠΎΠΈ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅.
ΠΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ°
ΠΠΎ ΡΠΈΡ ΠΏΠΎΡ Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ» ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² ΡΠΈΡΡΠΎΠΌ Π²ΠΈΠ΄Π΅, ΡΠΎ Π΅ΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎ ΡΠ΄ΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΠΎ Π½Π°ΠΌ Π²ΡΠ΅ΠΌ Π΄Π°Π²Π½ΠΎ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΈΡΡΠ΅ΠΌΡ Ρ Π±ΠΎΜΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ΄Π΅Ρ, ΠΈ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΈΡ ΡΡΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ΄Π΅ΡΡ Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Pillow β ΡΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΈΠ· Π²ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ. Π― ΡΠ΅ΠΉΡΠ°Ρ ΠΏΠΎΡΡΠ°ΡΠ°ΡΡΡ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ. ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ.
ΠΠ΅ΡΡΠΈΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π½Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Ρ 2 ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
Π‘ΠΏΠΎΡΠΎΠ±Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ
1. ΠΠ° ΡΡΠΎΠ²Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ°Π΅ΡΠ΅, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π² ΡΠ°Π·Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ . ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΎΠ΄Π½ΠΎ ΡΠ΄ΡΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΡΠΎΠΏΡΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ°ΡΡΠ΅Ρ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΠ΄Π΅Ρ, ΡΠΎ Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ.
2. ΠΠ° ΡΡΠΎΠ²Π½Π΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ β ΡΠΎ, ΡΡΠΎ ΠΊΠ°ΠΊ ΡΠ°Π· Π΅ΡΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. ΠΠΎΠ³Π΄Π° Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΎΠ½Π° Π²Π½ΡΡΡΠΈ ΡΠ΅Π±Ρ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΠ°Π·Π±ΠΈΠ²Π°Π΅Ρ ΠΎΠ΄Π½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΡ , ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΈΡ . ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ β ΠΎΠ΄Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π±ΡΡΡΡΠ΅Π΅. ΠΠΎ ΠΏΡΠΎΠΏΡΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΡΠ°ΡΡΠ΅Ρ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΎΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ΄Π΅Ρ. ΠΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΡΡΡ, ΠΈ ΡΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ β ΡΡΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ PNG-ΡΠ°ΠΉΠ»ΠΎΠ² β Π΅Π³ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅Π»ΡΠ·Ρ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΡΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΡΡ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΆΠ΅ Π½Π΅ Π΄Π°ΡΡ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠ°ΡΡΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ.
3. ΠΠ° ΡΡΠΎΠ²Π½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΈ Π΄Π°Π½Π½ΡΡ . ΠΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΡΠ°Π±ΠΎΡΠ°Π» Ρ Π½ΠΈΠΌΠΈ Π±ΡΡΡΡΠ΅Π΅. ΠΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ SIMD, ΠΊΠΎΡΠΎΡΡΠΉ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Pillow-SIMD. Π Π΅Π°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ, ΠΏΡΠΎΠΏΡΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΡΠ°ΡΡΠ΅Ρ β ΡΡΠΎ Π±Π΅ΡΠΏΡΠΎΠΈΠ³ΡΡΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ.
ΠΠ°ΠΊ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ
ΠΡΠ»ΠΈ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΡΡ ΠΊΠ°ΠΊ-ΡΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ, ΡΠΎ SIMD Ρ
ΠΎΡΠΎΡΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Ρ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π½ΡΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΈ SIMD Ρ
ΠΎΡΠΎΡΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Ρ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π½ΡΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠΎ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ Π²Π½ΡΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π²Π½ΡΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ Π½Π΅ ΡΠΎΠ²ΠΌΠ΅ΡΠ°ΡΡΡΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΡΠ΅ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΌΠΈΠ½ΡΡΡ ΠΎΡ ΠΎΠ±ΠΎΠΈΡ
ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠ². Π Π΅Π°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ½ΠΎ ΠΈ Π±ΡΠ»ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΄ΡΠ΅, Π° ΠΏΡΠΎΠΏΡΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π²ΡΡΠ°ΡΡΠ΅Ρ, Π½ΠΎ Π½Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ΄Π΅Ρ.
ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ
ΠΡΠ»ΠΈ ΡΠΆ ΠΌΡ Π·Π°Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΏΡΠΎ ΠΏΠΎΡΠΎΠΊΠΈ β ΠΌΡ Π²ΡΠ΅ ΠΏΠΈΡΠ΅ΠΌ Π½Π° Python ΠΈ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ Π² Π½Π΅ΠΌ Π΅ΡΡΡ GIL, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π΄Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π²ΡΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. Python β ΡΡΠΎ ΡΡΡΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ ΡΠ·ΡΠΊ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΠΎ Π½Π΅ ΠΏΡΠ°Π²Π΄Π°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ GIL Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ Π΄Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π²ΡΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ Π½Π° Python, Π° Π΅ΡΠ»ΠΈ ΠΊΠΎΠ΄ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ Python, ΡΠΎ ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΏΡΡΠΊΠ°ΡΡ GIL ΠΈ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΏΠΎΠ΄ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ.
ΠΠ½ΠΎΠ³ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π³ΡΠ°ΡΠΈΠΊΠΎΠΉ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ GIL Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Pillow, OpenCV, pyvips, Wand. ΠΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° β pgmagick. Π’ΠΎ Π΅ΡΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΏΠΎΠΊΠΎΠΉΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΈΡ -ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΈ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ: ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²?
ΠΡΠ»ΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡΡ Π·Π°Π΄Π°ΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Ρ Π½Π°Ρ Π΅ΡΡΡ, ΡΠΎ ΠΎΠ½ΠΈ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΉΠΌΡΡ Π²ΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΈ Π²Π΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ, β ΠΌΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ. Π― ΡΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°Π» ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ.
ΠΠ»Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ N + 1 Π²ΠΎΡΠΊΠ΅ΡΠΎΠ², Π³Π΄Π΅ N β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΄Π΅Ρ ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π½Π° ΠΌΠ°ΡΠΈΠ½Π΅, Π° Π²ΠΎΡΠΊΠ΅Ρ β ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ, Π·Π°Π½ΡΡΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ.
ΠΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Π΅ΡΡΡ ΡΠ·ΠΊΠΈΠ΅ ΠΌΠ΅ΡΡΠ° ΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½Π°Ρ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ N + 1 instance Tornado, Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ngnix. ΠΡΠ»ΠΈ ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎ Tornado, ΡΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎΠ± Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅.
ΠΡΠΈΠ½Ρ
ΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±ΠΎΡΠ°
Π’ΠΎ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠΎΠΉ β ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ β ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π΅ΡΡΡ Ρ Π²Π°Ρ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ Π·Π΄Π΅ΡΡ ΠΎΡΠ΅Π½Ρ Π² ΡΠ΅ΠΌΡ.
ΠΠΎ Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° β ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ, ΠΎΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΡΠΏΡΡΠΊΠ°Π΅Ρ Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ GIL, Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Event Loop Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ.
Π ΡΡΠ°ΡΡΡΡ, ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ ΡΠ΅ΡΠΈΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ThreadPoolExecutor Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΡΠ΅Π΄ΠΎΠΌ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎΡ Π²ΡΠ·ΠΎΠ² ΡΠΆΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ.
ΠΠΎ ΡΡΡΠΈ Π·Π΄Π΅ΡΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π²ΠΎΡΠΊΠ΅ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π° Event Loop Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ΠΈ ΡΠΏΠΎΠΊΠΎΠΉΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅.
ΠΠ²ΠΎΠ΄/ΠΡΠ²ΠΎΠ΄
ΠΡΠ΅ ΠΎΠ΄Π½Π° ΡΠ΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΡΡ Ρ Π±Ρ Ρ ΠΎΡΠ΅Π» Π·Π°ΡΡΠΎΠ½ΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ° ΠΎ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ β ΡΡΠΎ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΡ ΡΠ΅Π΄ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΌΡ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΡΠ»ΠΈ ΠΊ Π½Π°ΠΌ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π² Π²ΠΈΠ΄Π΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² (JPEG, PNG, BMP, TIFF ΠΈ ΠΏΡ.).
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Ρ ΠΎΡΠΎΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Π»Π°Π΄Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΏΠ»ΡΡΠΊΠ°ΠΌΠΈ ΠΏΠΎ Π²Π²ΠΎΠ΄Ρ/Π²ΡΠ²ΠΎΠ΄Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΠ΅Π½ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ°
ΠΠ΅ΡΠ²Π°Ρ ΡΠ°ΠΊΠ°Ρ ΠΏΠ»ΡΡΠΊΠ° β ΡΡΠΎ Π»Π΅Π½ΠΈΠ²Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ°. ΠΡΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Pillow Π²Ρ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎ Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ. ΠΠ°ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΆΠ΅ Π·Π°Π³ΡΡΠΆΠ΅Π½ΠΎ ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ ΡΠ΅ΡΠΈΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ²ΠΎΠΉΡΡΠ² ΡΡΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π³ΠΎΡΠΎΠ²Ρ Π»ΠΈ Π²Ρ Ρ Π½ΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π°Π»ΡΡΠ΅, Π½Π΅ Π·Π°Π³ΡΡΠ·ΠΈΠ» Π»ΠΈ Π²Π°ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π³ΠΈΠ³Π°ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ»ΠΎΠΌΠ°ΡΡ Π²Π°Ρ ΡΠ΅ΡΠ²ΠΈΡ.
ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ Π΄Π°Π»ΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅, ΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° load ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π£ΠΆΠ΅ Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π½ΡΠΆΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°ΠΌΡΡΠΈ.
Π Π΅ΠΆΠΈΠΌ Π±ΠΈΡΡΡ
ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ
ΠΡΠΎΡΠ°Ρ ΠΏΠ»ΡΡΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π½ΡΠΆΠ½Π° ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ β ΡΡΠΎ ΡΠ΅ΠΆΠΈΠΌ Π±ΠΈΡΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ. Π€Π°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΎΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ Ρ ΡΠΎΡΠΌΠ°ΡΠΎΠΌ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Ρ.
ΠΡΠΈ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ Π±ΡΠ²Π°ΡΡ ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ. ΠΠ½ΠΎΠ³Π΄Π° ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΠΎ ΡΠ΅ΡΠΈ, ΠΈΠ½ΠΎΠ³Π΄Π° β ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΊΡΠΈΠ²ΡΠ΅ ΠΊΠΎΠ΄Π΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Pillow, ΠΊΠΎΠ³Π΄Π° Π²ΠΈΠ΄ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠΎΡΠΌΠ°ΡΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°, ΠΏΡΠΎΡΡΠΎ ΠΊΠΈΠ΄Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ Π½Π΅ Π²ΠΈΠ½ΠΎΠ²Π°Ρ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ Π½Π΅Π³ΠΎ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ° Π±ΠΈΡΠ°Ρ, ΠΎΠ½ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Ρ ΠΎΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π ΡΡΠ°ΡΡΡΡ, Ρ Pillow Π΅ΡΡΡ ΡΠ΅ΠΆΠΈΠΌ Π±ΠΈΡΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ. ΠΡ ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΎΠ΄Π½Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΡ, ΠΈ Pillow ΡΡΠ°ΡΠ°Π΅ΡΡΡ ΠΏΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΡ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡΡ Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΈΠ΄ΠΈΡ Ρ ΠΎΡΡ Π±Ρ ΡΡΠΎ-ΡΠΎ.
ΠΠ°ΠΆΠ΅ ΠΎΠ±ΡΠ΅Π·Π°Π½Π½Π°Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ° β ΡΡΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Π½ΠΈΡΠ΅Π³ΠΎ β ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ°Π½ΠΈΡΠ° Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ.
Π‘Π²ΠΎΠ΄Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ°
Π ΡΠ°Π±Π»ΠΈΡΠ΅ Π²ΡΡΠ΅ Ρ ΡΠΎΠ±ΡΠ°Π» Π²ΡΠ΅, ΡΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° Π² ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ , ΠΎ ΠΊΠΎΡΠΎΡΡΡ Ρ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Ρ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Ρ ΠΏΠΎΡΡΠΈΡΠ°Π» ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ΄Π΅ΠΊΠΎΠ² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ . ΠΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ, ΡΡΠΎ Π² OpenCV ΠΈΡ ΠΌΠ΅Π½ΡΡΠ΅ Π²ΡΠ΅Ρ , Π² ImageMagick β Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Ρ . ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ Π² ImageMagick ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ Π²ΠΎΠΎΠ±ΡΠ΅ Π»ΡΠ±ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Π°ΠΌ Π²ΡΡΡΠ΅ΡΠΈΡΡΡ. Π£ VIPS 12 ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΊΠΎΠ΄Π΅ΠΊΠΎΠ², Π½ΠΎ VIPS ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ImageMagick Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π²Π΅Π½Π°. Π― Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ», ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π±Π΅ΡΡΠΎΠ²Π½ΠΎ.
Π Pillow 17 ΠΊΠΎΠ΄Π΅ΠΊΠΎΠ². ΠΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅Ρ Π°Π²ΡΠΎΠΏΠΎΠ²ΠΎΡΠΎΡΠ° EXIF. ΠΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΡΡΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ EXIF ΡΠ°ΠΌΠΎΠΌΡ ΠΈ ΠΏΠΎΠ²Π΅ΡΠ½ΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π½ΠΈΠΌ. ΠΡΠΎ Π²ΠΎΠΏΡΠΎΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠ½ΠΈΠΏΠΏΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π»Π΅Π³ΠΊΠΎ Π³ΡΠ³Π»ΠΈΡΡΡ ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ Π² 20 ΡΡΡΠΎΡΠ΅ΠΊ.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ OpenCV
ΠΡΠ»ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΠΎ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π² OpenCV Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ Π²ΡΠ΅ ΡΠ°ΠΊ Ρ ΠΎΡΠΎΡΠΎ Ρ Π²Π²ΠΎΠ΄ΠΎΠΌ/Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ. Π Π½Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π΅ΠΊΠΎΠ², Π½Π΅Ρ Π»Π΅Π½ΠΈΠ²ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ EXIF ΠΈ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΡΠΈΠ»Ρ.
ΠΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ OpenCV Π΅ΡΡΡ Π΅ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ. ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ, ΡΠΎ Π²ΡΠ·ΠΎΠ² cv2.imread(filename) ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅Ρ JPEG-ΡΠ°ΠΉΠ»Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ EXIF (ΡΠΌ. ΡΠ°Π±Π»ΠΈΡΡ), Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ Π°Π»ΡΡΠ°-ΠΊΠ°Π½Π°Π» Ρ PNG-ΡΠ°ΠΉΠ»ΠΎΠ² β Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΡΠ°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅!
ΠΡΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ»Π°Π³ IMREAD_UNCHANGED, ΡΠΎ OpenCV ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π°Π»ΡΡΠ°-ΠΊΠ°Π½Π°Π» Ρ PNG-ΡΠ°ΠΉΠ»ΠΎΠ², Π½ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ JPEG-ΡΠ°ΠΉΠ»Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ EXIF. Π’ΠΎ Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ»Π°Π³ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π΄Π²Π° ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠ°Π·Π½ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°. ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ, Ρ OpenCV Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ EXIF, ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΡΡΠΈΠΌ ΡΠ»Π°Π³ΠΎΠΌ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΠ½ΡΡΡ JPEG Π²ΠΎΠΎΠ±ΡΠ΅.
Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°ΡΠ°Π½Π΅Π΅ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Ρ Π²Π°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ ΠΈ Π°Π»ΡΡΠ°-ΠΊΠ°Π½Π°Π» Ρ PNG, ΠΈ Π°Π²ΡΠΎΠΏΠΎΠ²ΠΎΡΠΎΡ Ρ JPEG? ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°ΡΡ β OpenCV ΡΠ°ΠΊ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΡΠΈΡΠΈΠ½Π°, ΠΏΠΎΡΠ΅ΠΌΡ Π² OpenCV ΡΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΡΠΎΠ΅ΡΡΡ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π Π½Π΅ΠΉ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·ΡΠ΅Π½ΠΈΡ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΠΎ ΡΡΡΠΈ, OpenCV ΡΠ°ΡΡΡΠΈΡΠ°Π½Π° Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ Π²Π΅ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌΠΈ. ΠΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΌΠ΅ΡΠ° Π½Π°ΡΡΠΆΠ½ΠΎΠ³ΠΎ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π· Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ ΡΠΊΠΈΠ΄ΡΠ²Π°Π΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 5 Π»Π΅Ρ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΡΠΎΡΠΌΠ°ΡΠ΅ ΠΈ ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ. ΠΠ΄Π΅ΡΡ Π½Π΅ Π½ΡΠΆΠ½Π° Π²Π°ΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΡΡΡ Π² Π²ΠΎΠΏΡΠΎΡΠ΅ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°.
ΠΡΠ΄ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠΌ Π½ΡΠΆΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ OpenCV, Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ Π½ΡΠΆΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ.
ΠΠΎ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ Π½ΡΠΆΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ, ΠΈ Π² ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ Π½ΡΠΆΠ½Π° Π²ΡΡ ΠΌΠΎΡΡ OpenCV ΠΏΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ΅?
Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΠ°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ OpenCV ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π½Π° Π±Π°Π·Π΅ numpy, ΠΈ Π² Pillow Π΅ΡΡΡ Π²ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ· Pillow Π² ΠΌΠ°ΡΡΠΈΠ² numpy. Π’ΠΎ Π΅ΡΡΡ ΠΌΡ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² numpy, ΠΈ OpenCV ΠΌΠΎΠΆΠ΅Ρ Π΄Π°Π»ΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΡΠΈΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΎ ΡΠ²ΠΎΠΈΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ:
ΠΠ°Π»ΡΡΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ°Π³ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ OpenCV (ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ), ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ Pillow ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΈΠ· OpenCV ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ Π² ΡΠΎΡΠΌΠ°Ρ Pillow. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ½ΠΎΠ²Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²Π²ΠΎΠ΄ΠΎΠΌ/Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π²Π²ΠΎΠ΄ΠΎΠΌ/Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ΠΎΡ Pillow, ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠ½Π³ΠΎΠΌ ΠΎΡ OpenCV, ΡΠΎ Π΅ΡΡΡ Π±Π΅ΡΠ΅ΠΌ Π»ΡΡΡΠ΅Π΅ ΠΈΠ· Π΄Π²ΡΡ ΠΌΠΈΡΠΎΠ².
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π½Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π³ΡΠ°ΡΠΈΠΊΠΎΠΉ.
Π£Π·Π½Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅ΠΊΡΠ΅ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Python, ΠΏΠ΅ΡΠ΅Π½ΡΡΡ Π±Π΅ΡΡΠ΅Π½Π½ΡΠΉ ΠΈ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠΉ ΠΎΠΏΡΡ, Π° Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ ΡΠ²ΠΎΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΆΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠΊΠΎΡΠΎ Π½Π° Moscow Python Conf++. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΈ ΡΠ΅ΠΌΡ Π² ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΠΈ.