تغيير سريع لسيارات جيب الفيديو

في تطبيقات العمل مع الصور ، تعد مهمة تغيير حجم سيارات الجيب (الصور المضغوطة باستخدام خوارزمية JPEG) شائعة جدًا. في هذه الحالة ، لا يمكنك تغيير الحجم على الفور ويجب عليك أولاً فك شفرة البيانات الأصلية. لا يوجد شيء معقد وجديد في هذا الأمر ، ولكن إذا كنت بحاجة إلى القيام بذلك عدة ملايين من المرات في اليوم ، فإن تحسين أداء مثل هذا الحل ، الذي يجب أن يكون سريعًا جدًا ، له أهمية خاصة.



غالبًا ما تتم مواجهة هذه المشكلة عند تنظيم الاستضافة عن بُعد لمستودع الصور ، نظرًا لأن معظم الكاميرات والهواتف يتم تصويرها بتنسيق JPEG. كل يوم ، يتم تجديد أرشيفات صور خدمات الويب الرائدة (الشبكات الاجتماعية والمنتديات واستضافة الصور وغيرها الكثير) بعدد كبير من هذه الصور ، لذا فإن السؤال عن كيفية تخزين هذه الصور مهم للغاية. لتقليل حجم حركة المرور الصادرة وتحسين وقت الاستجابة لطلب المستخدم ، تقوم العديد من خدمات الويب بتخزين عشرات الملفات لصورة واحدة بدرجات دقة مختلفة. سرعة الاستجابة جيدة ، ولكن هذه النسخ تشغل مساحة كبيرة. هذه مشكلة كبيرة ، على الرغم من وجود عيوب أخرى لهذا النهج.

لا تتمثل فكرة حل هذه المشكلة في تخزين العديد من المتغيرات للصورة الأصلية بدرجات دقة مختلفة على الخادم ، ولكن لإنشاء الصورة المرغوبة ديناميكيًا بأحجام معينة من النسخة الأصلية المعدة مسبقًا ، وبأسرع وقت ممكن. وبالتالي ، في الوقت الحقيقي ، يمكنك إنشاء صورة للدقة المطلوبة وإرسالها على الفور إلى المستخدم. من المهم جدًا أن تتم دقة هذه الصورة على الفور حتى لا يقوم جهاز المستخدم بتغيير حجم الشاشة ، لأنها لن تكون ضرورية ببساطة.

استخدام تنسيقات أخرى غير JPEG كأساس لتنظيم مستودع الصور هذا لا يبدو مبررًا. بالطبع ، هناك تنسيقات قياسية مستخدمة على نطاق واسع توفر ضغطًا أفضل بنفس الجودة (JPEG2000 ، WebP) ، ولكن سرعة ترميز وفك تشفير هذه الصور منخفضة جدًا مقارنة بـ JPEG ، لذلك من المنطقي اختيار JPEG كتنسيق أساسي لتخزين الصور الأصلية ، والتي ، إذا لزم الأمر ، سيتم تحجيمها في الوقت الحقيقي بعد تلقي طلب من المستخدم.

بالطبع ، بالإضافة إلى سيارات الجيب ، غالبًا ما يحتوي كل موقع على صور PNG و GIF ، ولكن عادةً ما يكون العدد النسبي صغيرًا وتكون الصور بهذه التنسيقات نادرة للغاية. لذلك ، لن يكون لهذه التنسيقات تأثير كبير على المهمة المعنية في معظم الحالات.

وصف خوارزمية تغيير الحجم على الطاير


لذا ، فإن بيانات الإدخال هي ملفات JPEG ، ولتحقيق فك تشفير سريع (ينطبق ذلك على كل من وحدة المعالجة المركزية ووحدة معالجة الرسومات) ، يجب أن تحتوي الصور المضغوطة على علامات إعادة تشغيل مدمجة. يتم وصف هذه العلامات في معيار JPEG ويمكن أن يعمل جزء من برامج الترميز معهم ، والباقي يعرفون كيفية عدم ملاحظتها. إذا لم يكن لدى سيارات الجيب مثل هذه العلامات ، فيمكن إضافتها مسبقًا باستخدام الأداة المساعدة jpegtran. عند إضافة العلامات ، لا تتغير الصورة ، لكن حجم الملف يصبح أكبر قليلاً. ونتيجة لذلك ، نحصل على مخطط العمل التالي:

  1. احصل على بيانات الصورة من ذاكرة وحدة المعالجة المركزية
  2. إذا كان هناك ملف تعريف ألوان ، احصل عليه من قسم EXIF ​​واحفظه
  3. انسخ الصورة إلى بطاقة الفيديو
  4. فك تشفير JPEG
  5. نقوم بتغيير الحجم وفقًا لخوارزمية Lanczos (نقص)
  6. الحدة
  7. نقوم بتشفير الصورة باستخدام JPEG
  8. نسخ الصورة إلى المضيف
  9. أضف ملف تعريف اللون الأصلي إلى الملف الناتج.

يمكنك اتخاذ قرار أكثر دقة ، عندما قبل تغيير الحجم ، يتم وضع جاما المعكوسة على كل مكون من مكونات البكسل ، بحيث يكون الحجم في مساحة خطية ، ثم يتم تطبيق جاما مرة أخرى ، ولكن بعد شارب. الفرق الفعلي للمستخدم صغير ، ولكنه موجود ، والتكلفة الحسابية لمثل هذا التعديل ضئيلة. من الضروري فقط إدراج تراكب غاما العكسي والمباشر في مخطط المعالجة العام.

هناك أيضًا حل ممكن عند تنفيذ فك ترميز سيارات الجيب على وحدة معالجة مركزية متعددة النواة باستخدام مكتبة libjpeg-turbo. في هذه الحالة ، يتم فك تشفير كل صورة في دفق CPU منفصل ، ويتم تنفيذ كافة الإجراءات الأخرى على بطاقة الفيديو. مع وجود عدد كبير من نوى وحدة المعالجة المركزية ، يمكن أن يحدث هذا بشكل أسرع ، ولكن سيكون هناك خسارة خطيرة في الكمون. إذا كان الكمون عند فك ترميز جيب على وحدة معالجة مركزية واحدة مقبولًا ، فيمكن أن يكون هذا الخيار سريعًا جدًا ، خاصة للحالة عندما يكون لدى سيارات الجيب الأصلية دقة صغيرة. مع زيادة دقة الصورة الأصلية ، سيزداد وقت فك ترميز الجيب في دفق CPU واحد ، لذلك يمكن أن يكون هذا الخيار مناسبًا للدقة الصغيرة فقط.

المتطلبات الأساسية لمهمة تغيير حجم الويب


  • من المستحسن عدم تخزين العشرات من النسخ لكل صورة بدقة مختلفة على الخادم ، ولكن لإنشاء الصورة المطلوبة بسرعة مع الدقة الصحيحة فور استلام الطلب. هذا مهم لتقليل حجم التخزين ، وإلا سيكون عليك تخزين العديد من النسخ المختلفة لكل صورة.
  • يجب حل المشكلة في أسرع وقت ممكن. هذا سؤال حول جودة الخدمة المقدمة من حيث تقليل وقت الاستجابة لطلب المستخدم.
  • يجب أن تكون جودة الصورة المرسلة عالية.
  • يجب أن يكون حجم ملف الصورة المرسلة صغيرًا قدر الإمكان ، ويجب أن يتطابق دقتها تمامًا مع حجم النافذة التي تظهر فيها. النقاط التالية مهمة هنا:

أ) إذا لم يتطابق حجم الصورة مع حجم النافذة ، فسيقوم جهاز المستخدم (الهاتف أو الجهاز اللوحي أو الكمبيوتر المحمول) بتغيير حجم الأجهزة بعد فك التشفير قبل عرض الصورة على الشاشة. في OpenGL ، يتم تغيير حجم هذا الجهاز فقط وفقًا للخوارزمية الثنائية ، والتي غالبًا ما تتسبب في ظهور التموج (البقع) وغيرها من القطع الأثرية في الصور التي تحتوي على تفاصيل صغيرة.

ب) تغيير حجم الشاشة يستهلك أيضًا طاقة الجهاز.

ج) إذا كنت تستخدم سلسلة من الصور التي تم تغيير حجمها مسبقًا لحل المشكلة ، فليس من الممكن دائمًا الحصول على الحجم المناسب تمامًا ، مما يعني أنه سيتعين عليك إرسال صورة بدقة أعلى. يؤدي الحجم المتزايد للصورة إلى المزيد من حركة المرور ، والتي أود أيضًا تجنبها.

وصف مخطط العمل العام


  1. نتلقى صورًا من المستخدمين بأي تنسيقات وبأي دقة. يتم تخزين النسخ الأصلية في قاعدة بيانات منفصلة (إذا لزم الأمر).
  2. في وضع عدم الاتصال ، باستخدام ImageMagick أو برنامج مشابه ، احفظ ملف تعريف اللون ، وقم بتحويل الصور الأصلية الأصلية إلى تنسيق BMP أو PPM القياسي ، ثم قم بتغيير الحجم إلى دقة 1K أو 2K واضغط على JPEG ، ثم نضيف علامات إعادة التشغيل بفاصل ثابت محدد باستخدام الأداة المساعدة jpegtran.
  3. نحن نؤلف قاعدة بيانات تحتوي على صور 1K أو 2K.
  4. عند استلام طلب من المستخدم ، نحصل على معلومات حول الصورة وحجم النافذة حيث يجب عرض هذه الصورة.
  5. نجد الصورة في قاعدة البيانات ونرسلها إلى المقاس.
  6. يستقبل الريسيري ملف الصورة ، ويفك الشفرة ، ويغير الحجم ، والأجزاء الحادة ، ويشفر ويدرج ملف تعريف اللون الأصلي في الجيب الناتج. بعد ذلك ، يعطي الصورة لبرنامج خارجي.
  7. على كل بطاقة فيديو ، يمكنك تشغيل سلاسل رسائل متعددة ، ويمكنك تثبيت بطاقات فيديو متعددة على جهاز الكمبيوتر الخاص بك - وبالتالي تحقيق قياس الأداء.
  8. كل هذا يمكن القيام به على أساس بطاقات الفيديو NVIDIA Tesla (على سبيل المثال ، P40 أو V100) ، لأن بطاقات الفيديو NVIDIA GeForce غير مصممة للتشغيل المستمر على المدى الطويل ، ولدى NVIDIA Quadro العديد من مخرجات الفيديو غير المطلوبة في هذه الحالة. لحل هذه المشكلة ، تكون متطلبات حجم ذاكرة GPU ضئيلة.
  9. أيضا ، من قاعدة البيانات مع الصور المعدة ، يمكنك تخصيص ذاكرة التخزين المؤقت ديناميكيا للملفات المستخدمة بشكل متكرر. هناك من المنطقي تخزين الصور المستخدمة بشكل متكرر وفقًا للإحصاءات من الفترة السابقة.



معلمات البرنامج


  1. عرض وارتفاع الصورة الجديدة. يمكن أن تكون موجودة ومن الأفضل تعيينها بشكل صريح.
  2. وضع ترقق JPEG (عينة فرعية). هناك ثلاثة خيارات: 4: 2: 0 ، 4: 2: 2 و 4: 4: 4 ، لكنهم عادةً ما يستخدمون 4: 4: 4 أو 4: 2: 0. أقصى جودة هي 4: 4: 4 ، الحد الأدنى لحجم الإطار هو 4: 2: 0. الترقق يتم لمكونات اختلاف اللون ، والتي لا تدركها رؤية الشخص وكذلك النصوع. يحتوي كل وضع من رموز التدمير على فاصل زمني مثالي لعلامات إعادة التشغيل لتحقيق أقصى سرعة ترميز أو فك تشفير.
  3. جودة ضغط JPEG ووضع التقليل عند إنشاء قاعدة بيانات صورة.
  4. يتم إجراء Sharp في نافذة 3x3 ، ويمكن التحكم في سيجما (نصف القطر).
  5. جودة ضغط JPEG ووضع التقليل عند تشفير الصورة النهائية. عادةً ما تعني الجودة التي لا تقل عن 90٪ أن هذا الضغط "ضياع بصريًا" ، أي يجب على المستخدمين غير المدربين ألا يشاهدوا عناصر من خوارزمية JPEG في ظل ظروف العرض القياسية. ويعتقد أنه بالنسبة للمستخدم المتدرب ، هناك حاجة إلى 93-95 ٪. كلما كبرت هذه القيمة ، زاد حجم الإطار المرسل إلى المستخدم ، وزادت مدة فك التشفير والتشفير.

قيود مهمة


أعد تشغيل العلامات. لا يمكننا فك تشفير صور JPEG بسرعة على بطاقة فيديو إلا إذا كانت هناك علامات إعادة تشغيل بداخلها. في معيار JPEG الرسمي ، تم وصف هذه العلامات ، هذه معلمة قياسية. إذا لم تكن هناك علامات إعادة تشغيل ، فمن المستحيل موازاة فك تشفير الصورة على بطاقة الفيديو ، مما سيؤدي إلى سرعة منخفضة جدًا لفك الشفرة. لذلك ، نحتاج إلى قاعدة بيانات للصور المحضرة التي توجد بها هذه العلامات.

خوارزمية ثابتة لترميز الصورة. يعد فك تشفير الصور وتشفيرها باستخدام خوارزمية JPEG هو الخيار الأسرع.

يمكن أن تكون دقة الصور في قاعدة البيانات المعدة أيًا ، ولكن كخيارات ، سننظر في 1K و 2 K (يمكنك أخذ 4K). يمكنك أيضًا تقليل ليس فقط ، بل أيضًا زيادة في الصور عند تغيير الحجم.

أداء تغيير الحجم السريع


اختبرنا التطبيق لتغيير الحجم بسرعة من Fastvideo SDK على بطاقة فيديو NVIDIA Tesla V100 (نظام التشغيل Windows Server 2016 ، 64 بت ، برنامج التشغيل 24.21.13.9826) على صور 24 بت 1k_wild.ppm و 2 k_wild.ppm بدقة 1K و 2K (1280x720 و 1920x1080). تم إجراء اختبارات لعدد مختلف من الخيوط التي تعمل على نفس بطاقة الفيديو. هذا لا يتطلب أكثر من 110 ميجا بايت من الذاكرة على بطاقة الفيديو لكل دفق. 4 تيارات لا تحتاج إلى أكثر من 440 ميجا بايت.

أولاً ، نضغط الصورة الأصلية بتنسيق JPEG بجودة 90٪ ، مع ترقيق 4: 2: 0 أو 4: 4: 4. ثم نقوم بفك الشفرة وتغيير الحجم مرتين في العرض والارتفاع ، وقم بعمل ترميز حاد ، ثم التشفير مرة أخرى بجودة 90٪ عند 4: 2: 0 أو 4: 4: 4. البيانات المصدر في ذاكرة الوصول العشوائي ، ويتم وضع الصورة النهائية هناك.

يتم حساب وقت التشغيل من بداية تحميل الصورة الأصلية من ذاكرة الوصول العشوائي إلى حفظ الصورة المعالجة في ذاكرة الوصول العشوائي. لا يتم تضمين وقت تهيئة البرنامج وتخصيص الذاكرة على بطاقة الفيديو في القياسات.

سطر أوامر مثال لصورة ذات 24 بت 1 كيلو
PhotoHostingSample.exe -i 1k_wild.90.444.jpg -o 1k_wild.640.jpg -outputWidth 640 -q 90 -s 444 -sharp_after 0.95 -peat 200

المعيار لمعالجة صورة واحدة 1 ك في خيط واحد


فك التشفير (بما في ذلك نقل البيانات إلى بطاقة الفيديو): 0.70 مللي ثانية
تغيير الحجم مرتين (في العرض والارتفاع): 0.27 مللي ثانية
حاد: 0.02 مللي ثانية
ترميز JPEG (بما في ذلك نقل البيانات من بطاقة الفيديو): 0.20 مللي ثانية
إجمالي الوقت لكل إطار: 1.2 مللي ثانية

أداء ل 1 K


الجودةترققتغيير الحجمتياراتمعدل الإطار (هرتز)
190٪4: 4: 4/4: 2: 02 مرات1868/682
290٪4: 4: 4/4: 2: 02 مرات21039/790
390٪4: 4: 4/4: 2: 02 مرات3993/831
490٪4: 4: 4/4: 2: 02 مرات41003/740


أداء ل 2 K


الجودةترققتغيير الحجمتياراتمعدل الإطار (هرتز)
190٪4: 4: 4/4: 2: 02 مرات1732/643
290٪4: 4: 4/4: 2: 02 مرات2913/762
390٪4: 4: 4/4: 2: 02 مرات3891/742
490٪4: 4: 4/4: 2: 02 مرات4923/763


يعمل التخفيف 4: 2: 0 للصورة المصدر على تقليل السرعة ، لكن حجم ملفات المصدر والوجهة يصبح أصغر. عند التبديل إلى 4: 2: 0 ، تنخفض درجة التوازي 4 مرات ، نظرًا لأن الكتلة 16x16 تعتبر الآن واحدة ، وبالتالي في هذه الحالة تكون السرعة أقل من 4: 4: 4.

يتم تحديد الأداء بشكل أساسي من خلال مرحلة فك تشفير JPEG ، لأنه في هذه المرحلة تتمتع الصورة بأقصى دقة ، كما أن التعقيد الحسابي لمرحلة المعالجة هذه أعلى من جميع المراحل الأخرى.

الملخص


أظهرت نتائج الاختبار أنه بالنسبة لبطاقة الفيديو NVIDIA Tesla V100 ، تكون سرعة معالجة الصور 1K و 2K كحد أقصى عند إطلاق 2-4 تدفقات في نفس الوقت ، وتتراوح من 800 إلى 1000 إطار في الثانية لكل بطاقة فيديو. معالجة صور 1K أسرع من 2K ، والعمل مع صور 4: 2: 0 أبطأ دائمًا من 4: 4: 4. للحصول على النتيجة النهائية للأداء ، تحتاج إلى تحديد جميع معلمات البرنامج بدقة وتحسينه لنموذج محدد لبطاقة الفيديو.

الكمون لترتيب جزء من الثانية هو نتيجة جيدة. على حد علمنا ، لا يمكن الحصول على مثل هذا الكمون لمهمة تغيير حجم مماثلة على وحدة المعالجة المركزية (حتى إذا لم تكن هناك حاجة لتشفير وفك ترميز سيارات الجيب) ، لذا فهذه حجة مهمة أخرى لصالح استخدام بطاقات الفيديو في حلول معالجة الصور عالية الأداء.

قد يلزم ما يصل إلى 16 بطاقة رسومات NVIDIA Tesla V100 لمعالجة مليار سيارة جيب في اليوم بدقة 1K أو 2K. يستخدم بعض عملائنا هذا الحل بالفعل ، بينما يقوم آخرون باختباره في مهامهم.

يمكن أن يكون تغيير حجم سيارات الجيب على بطاقة الفيديو مفيدًا جدًا ليس فقط لخدمات الويب. هناك عدد كبير من تطبيقات معالجة الصور عالية الأداء حيث قد تكون هذه الوظيفة مطلوبة. على سبيل المثال ، غالبًا ما يكون تغيير الحجم سريعًا ضروريًا تقريبًا لأي مخطط معالجة للصور التي يتم تلقيها من الكاميرات قبل عرض صورة على الشاشة. يمكن أن يعمل هذا الحل مع Windows / Linux على أي بطاقة رسومات NVIDIA: Tegra K1 / X1 / X2 / Xavier و GeForce GT / GTX / RTX و Quadro و Tesla.

مزايا حل تغيير الحجم السريع على بطاقة رسومات


  • انخفاض كبير في حجم التخزين لصور المصدر
  • تخفيض التكاليف الأولية لتكاليف البنية التحتية (الأجهزة والبرمجيات)
  • تحسين جودة الخدمة نظراً لوقت الاستجابة القصير
  • تخفيض حركة المرور الصادرة
  • استهلاك أقل للطاقة على أجهزة المستخدم
  • موثوقية وسرعة الحل المقدم ، والذي تم اختباره بالفعل على مجموعات بيانات ضخمة
  • تقليل وقت التطوير لتسويق مثل هذه التطبيقات لنظامي التشغيل Linux و Windows
  • قابلية التوسع في حل يمكن أن يعمل على بطاقة فيديو واحدة وكجزء من مجموعة
  • عائد سريع على الاستثمار لهذه المشاريع

من قد يكون مهتما


يمكن استخدام مكتبة تغيير الحجم السريع لسيارات الجيب في خدمات الويب المحملة بشكل كبير ، والمتاجر الكبيرة عبر الإنترنت ، والشبكات الاجتماعية ، وأنظمة إدارة الصور عبر الإنترنت ، والتجارة الإلكترونية ، تقريبًا في أي برنامج كبير لإدارة المشاريع.

يمكن لمطوري البرامج استخدام هذه المكتبة ، والتي توفر الكمون لترتيب عدة ميلي ثانية لتغيير حجم سيارات الجيب بدقة 1K و 2 K و 4K على بطاقة فيديو.

على ما يبدو ، قد يتحول هذا النهج إلى أن يكون أسرع من حل NVIDIA DALI لفك التشفير السريع لسيارات الجيب ، وتغيير الحجم وإعداد الصور أثناء مرحلة تدريب الشبكات العصبية للتعلم العميق.

ما الذي يمكن فعله


  • بالإضافة إلى تغيير الحجم والحدة ، يمكنك إضافة اقتصاص ، يتحول عند 90/180/270 ، وتراكب للعلامة المائية ، والتحكم في السطوع والتباين للخوارزمية الحالية.
  • تحسين الحل لبطاقات الفيديو NVIDIA Tesla P40 و V100.
  • وحدة فك ترميز JPEG لأداء تحسين إضافي.
  • وضع الاندفاع لفك ترميز سيارات الجيب على بطاقة الفيديو.

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


All Articles