إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

قراءة الباركود من خلال بايثون و Gtk

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [كود] قراءة الباركود من خلال بايثون و Gtk

    قراءة الباركود من خلال بايثون و Gtk


    اضغط على الصورة لعرض أكبر. 

الإسم:	Screenshot from 2021-05-27 14-58-31.png 
مشاهدات:	57 
الحجم:	571.9 كيلوبايت 
الهوية:	983538

    تمهيد :

    سنحتاج zbar و توابعها المتعلقة ب Gtk حيث يتم توفير widget جاهزة للإستخدام على العموم في فيدورا أسماء هذه الحزم هي .
    كود:
    sudo dnf install zbar zbar-gtk zbar-gi


    الشرح :

    اضغط على الصورة لعرض أكبر. 

الإسم:	1.png 
مشاهدات:	145 
الحجم:	53.8 كيلوبايت 
الهوية:	983535
    1. قمت بإدراج gi , بإختصار حتى أستطيع الوصول لأي برمجيات ومكتبات تستخدم "GObject Introspection (GIR) Gtk bindings" حتى أتمكن من الوصول لبرمجيات تستخدم GObject Introspection من عدة لغات برمجة منها بايثون .
    2. قمت بالتصريح أني أريد إستخدام هذه المكتبات بهذه الإصدارات المحددة .
    3. قمت بإدراج مكتبة Gtk الرسومية وأيضا قمت بإدراج ZBar .
    4. قمت بإنشاء كلاس خاص سميتهMainWindow يرث كلاس Gtk.Window الذي يمثل نافذة البرنامج .
    5. قمت بإنشاء VBox وهو عبارة عن layout أي هو صندوق غير مرئي مهمته ترتيب العناصر وإدراجها بشكل عامودي ثم قمت بإضافته لنافذة البرنامج .
    6. قمت بإنشاء نافذة ثم ربط حدث delete-event (أي عند ضغط المستخدم على علامة X لإغلاق النافذة ) ب دالة Gtk.main_quit التي عملها إنهاء دورة حياة البرنامج أي إيقاف البرنامج عند إغلاق النافذة ثم طلبت من النافذة إظهار نفسها وكل شيء داخلها show_all .
    7. شغلت دورة حياة البرنامج loop .




    اضغط على الصورة لعرض أكبر. 

الإسم:	2.png 
مشاهدات:	76 
الحجم:	53.9 كيلوبايت 
الهوية:	983536
    1. قمت بإنشاء label لأتمكن من إضافة نص له لاحقا ليعرضه , ثم أضفت ال label إلى VBox .
    2. قمت بإنشاء زر وأضفته إلى VBox .
    3. حددت مسار الكاميرا المدمجة في جهازي المحمول لأستخدمه لاحقا .
    4. قمت بإنشاء ZBar وإضافته إلى VBox وهو كلاس عبارة عن عنصر رسومي لعرض الكاميرا أو صورة عليه وعند التعرف على الباركود يرسل signal معينة مع النتيجة .
    5. حددت عرض وإرتفاع أي حددت حجم العنصر ZBar .




    اضغط على الصورة لعرض أكبر. 

الإسم:	3.png 
مشاهدات:	72 
الحجم:	79.4 كيلوبايت 
الهوية:	983537
    1. ربطت الإشارة decoded الخاص بالكلاس ZBar بدالة on_decoded وأرسلت لها عند حصول الإشارة الزر button وال label ,الإشارة decoded سيتم إرسالها عند التعرف على الباركود من خلال صورة أو الفيديو المصور بشكل حي من خلال الكاميرا.
    2. ربطت الإشارة clicked الخاصة بالأزرار أي عند ضغط المستخدم على الزر ربطها بدالة سميتها on_button_clicked وأيضا أرسلت لها عند حصول الإشارة ال label و ZBar .
    3. عند ضغط المستخدم على الزر أي عند حصول هذا الحدث سيتم إرسال إشارة clicked وعندها سيتم تنفيذ دالة on_button_clicked المربوطة فيها من خلال connect , أولا قمت بجعل قيمة ال label نص فارغ تمهيد لإستقبال النتيجة الجديدة طبعا هذا أمر إختياري فقط للتوضيح .
    4. إذا كانت قيمة video_device هي ما حددته في اول البرنامج أي مسار الكاميرا المدمجة في جهازي المحمول أي إذا كانت الكاميرا في البرنامج تعلم بالفعل لإلتقاط الفيديو إذا تحقق هذا الشرط أوقف الكاميرا وإجعل النص الذي يظهر في الزر Start Read Barcode .
    5. عكس رقم 4 إذا كانت قيمة video_device لا تساوي dev/video0/ التي حدتها سابقا إجع قيمة video_device ب dev/video0/ أي شغل الكاميرا لإلتقاط الفيديو وإجعل النص الذي يظهر في الزر Stop Read Barcode .
    6. عند التعرف على الباركود سيتم إرسال إشارة decoded وعندها سيتم تشغيل دالة on_decoded وتسمى أيضا في هذه الحالة callback سيتم تشغيل دالة on_decoded ,وعندها قمت بإيقاف الكاميرا وهو امر إختياري .
    7. غيرت النص في الزر إلى Start Read Barcode بإعتبار اني أوقفت الكاميرا في الخطورة رقم 6 .
    8. غيرت النص في ال label إلى نتيجة قراءة الباركود وبما أن ال label يمكنه أن يعرض النصوص فقط والنتيجة ستكون int حولتهم إلى نص من خلال ()str .



    الكود النهائي :
    https://github.com/yucefsourani/MySc.../zbargtk3_0.py


    كود لإستخدام صورة عندي إسمها apb-qr-code.png بدل الكاميرا :
    https://github.com/yucefsourani/MySc.../zbargtk3_1.py


    يمكن التوسع أكثر و دمج الأمر مع أي شيء يحتاج مسح باركود من خلال صورة أو تصوير فيديو مع ملاحظة لم أجد فعليا وثائق ل zbar-gi zbar-gtk والامر إحتاج مني بعض التجارب .



  • #2
    بداية قوية بارك الله فيك اخي يوسف.
    •°o.O islamux O.o°•
    أنا إن عشت لنفسي عشت حقيرًهزيلا :::ومهما تعلمت لا أزال جهولا
    "يَوْمَ تَجِدُ كُلُّ نَفْسٍ مَا عَمِلَتْ مِنْ خَيْرٍ مُحْضَرا..الايه(آل عمران:30)

    *****
    إذَا لَمْ تَسْتَطِعْ شيئًا فدَعْهُ = وجاوِزْهُ إلى مَا تَستَطِيعُ
    تلميح اليوم

    FreeBSD في كبسولة !
    لا يطلب العلم مستحي ولا مستكبر
    اللهم اجعل عملنا خالصا لوجهك الكريم.
    فان تجد عيبا فسدَ الخللا ****** جلَ من لا عيب فيه وعلا
    كل مشاركاتي في المجتمع وقف لله تعالى
    Tweeter

    تعليق


    • #3
      مشكور على الدرس
      أنا محتاج إليه منذ مدة ولكني لم أبحث عنه للكسل
      اللهم احشرني مع صاحبي نبيك معاوية بن أبي سفيان وعمرو بن العاص فأني أحبهما

      تعليق


      • #4
        لقد اردت تجريبها
        لكني لم أعرف كيف أثبت الحزمة الخاصة بـ: Zbar
        اللهم احشرني مع صاحبي نبيك معاوية بن أبي سفيان وعمرو بن العاص فأني أحبهما

        تعليق


        • #5
          المشاركة الأصلية بواسطة أحمد رغدي مشاهدة المشاركة
          لقد اردت تجريبها
          لكني لم أعرف كيف أثبت الحزمة الخاصة بـ: Zbar
          إذا كنت تستخدم دبيان وما بني عليها بعد بحث وجدت إسم حزمة zbarcam-gtk و libzbargtk0 و...إلخ لا أعلم الحزمة المطلوبة لاحظ .

          https://packages.debian.org/search?keywords=zbar

          تعليق


          • #6
            المشاركة الأصلية بواسطة yucef مشاهدة المشاركة

            إذا كنت تستخدم دبيان وما بني عليها بعد بحث وجدت إسم حزمة zbarcam-gtk و libzbargtk0 و...إلخ لا أعلم الحزمة المطلوبة لاحظ .

            https://packages.debian.org/search?keywords=zbar
            أنا استخدم أبونتوا 21.04 وقد ثبتت كلا الحزمتين بالفعل ولكن بلا جدوى

            رسالة الخطأ:
            ValueError: Namespace ZBar not available
            التعديل الأخير تم بواسطة أحمد رغدي; الساعة 28-05-2021, 09:17 PM.
            اللهم احشرني مع صاحبي نبيك معاوية بن أبي سفيان وعمرو بن العاص فأني أحبهما

            تعليق


            • #7
              اضغط على الصورة لعرض أكبر. 

الإسم:	شاشة من 2021-05-28 19-14-41.png 
مشاهدات:	39 
الحجم:	68.6 كيلوبايت 
الهوية:	983573
              الملفات المرفقة
              اللهم احشرني مع صاحبي نبيك معاوية بن أبي سفيان وعمرو بن العاص فأني أحبهما

              تعليق


              • #8
                المشاركة الأصلية بواسطة أحمد رغدي مشاهدة المشاركة
                اضغط على الصورة لعرض أكبر. 

الإسم:	شاشة من 2021-05-28 19-14-41.png 
مشاهدات:	39 
الحجم:	68.6 كيلوبايت 
الهوية:	983573
                غالبا ستحتاج بنائه بنفسك مع دعم python3 gtk3 لاحظ من رابط zbar على github
                • On version 0.23, since the support for gtk3 and python3 are new, the default is to use gtk2 and python2.

                  If you want to use gtk3 and python3, you should have the development packages for them, and run:
                كود:
                autoreconf -vfi ./configure --with-gtk=auto --with-python=auto make
                https://github.com/mchehab/zbar

                تعليق


                • #9
                  ربما تحتاج تثبيت هذه الأشياء libgtk-3-dev python3-dev libmagick++-dev imagemagick ثم البناء مع خيارات .
                  وأيضا إعتمادات من ملفات debian unstable .
                  http://deb.debian.org/debian/pool/ma..._0.23.90-1.dsc
                  كود:
                  autoreconf -vfi ./configure --with-gtk=auto --with-python=auto --with-gir=auto
                  
                  sudo make install

                  تعليق


                  • #10
                    حدث خطأ أثناء البناء
                    كود PHP:
                    make all-recursive
                    make
                    [1]: Entering directory '/home/rr/zbar-master'
                    Making all in zbar
                    make
                    [2]: Entering directory '/home/rr/zbar-master/zbar'
                    make[2]: Nothing to be done for 'all'.
                    make[2]: Leaving directory '/home/rr/zbar-master/zbar'
                    Making all in po
                    make
                    [2]: Entering directory '/home/rr/zbar-master/po'
                    make[2]: Nothing to be done for 'all'.
                    make[2]: Leaving directory '/home/rr/zbar-master/po'
                    Making all in gtk
                    make
                    [2]: Entering directory '/home/rr/zbar-master/gtk'
                    make all-am
                    make
                    [3]: Entering directory '/home/rr/zbar-master/gtk'
                    make[3]: Nothing to be done for 'all-am'.
                    make[3]: Leaving directory '/home/rr/zbar-master/gtk'
                    make[2]: Leaving directory '/home/rr/zbar-master/gtk'
                    Making all in .
                    make[2]: Entering directory '/home/rr/zbar-master'
                    CCLD zbarcam/zbarcam-gtk
                    /usr/bin/ldgtk/.libs/libzbargtk.soundefined reference to `gdk_window_set_back_pixmap'
                    /usr/bin/ld: gtk/.libs/libzbargtk.so: undefined reference to 
                    `gdk_x11_drawable_get_xid'
                    collect2: error: ld returned 1 exit status
                    make[2]: *** [Makefile:1341: zbarcam/zbarcam-gtk] Error 1
                    make[2]: Leaving directory '
                    /home/rr/zbar-master'
                    make[1]: *** [Makefile:1899: all-recursive] Error 1
                    make[1]: Leaving directory '
                    /home/rr/zbar-master'
                    make: *** [Makefile:979: all] Error 2 
                    اللهم احشرني مع صاحبي نبيك معاوية بن أبي سفيان وعمرو بن العاص فأني أحبهما

                    تعليق


                    • #11
                      المشاركة الأصلية بواسطة أحمد رغدي مشاهدة المشاركة
                      حدث خطأ أثناء البناء
                      كود PHP:
                      make all-recursive
                      make
                      [1]: Entering directory '/home/rr/zbar-master'
                      Making all in zbar
                      make
                      [2]: Entering directory '/home/rr/zbar-master/zbar'
                      make[2]: Nothing to be done for 'all'.
                      make[2]: Leaving directory '/home/rr/zbar-master/zbar'
                      Making all in po
                      make
                      [2]: Entering directory '/home/rr/zbar-master/po'
                      make[2]: Nothing to be done for 'all'.
                      make[2]: Leaving directory '/home/rr/zbar-master/po'
                      Making all in gtk
                      make
                      [2]: Entering directory '/home/rr/zbar-master/gtk'
                      make all-am
                      make
                      [3]: Entering directory '/home/rr/zbar-master/gtk'
                      make[3]: Nothing to be done for 'all-am'.
                      make[3]: Leaving directory '/home/rr/zbar-master/gtk'
                      make[2]: Leaving directory '/home/rr/zbar-master/gtk'
                      Making all in .
                      make[2]: Entering directory '/home/rr/zbar-master'
                      CCLD zbarcam/zbarcam-gtk
                      /usr/bin/ldgtk/.libs/libzbargtk.soundefined reference to `gdk_window_set_back_pixmap'
                      /usr/bin/ld: gtk/.libs/libzbargtk.so: undefined reference to 
                      `gdk_x11_drawable_get_xid'
                      collect2: error: ld returned 1 exit status
                      make[2]: *** [Makefile:1341: zbarcam/zbarcam-gtk] Error 1
                      make[2]: Leaving directory '
                      /home/rr/zbar-master'
                      make[1]: *** [Makefile:1899: all-recursive] Error 1
                      make[1]: Leaving directory '
                      /home/rr/zbar-master'
                      make: *** [Makefile:979: all] Error 2 
                      للأسف لا أعلم أنا أساسا أستخدم فيدورا ولم أحتاج بنائه

                      تعليق


                      • #12
                        وجدت لك الحل وهو إستخدام flatpak الذي عمله بالاساس حل مثل هذه المشاكل .

                        أضف أولا مستودع flathub وثبت الruntime الخاصة بجنوم وأيضا sdk .

                        كود:
                        flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo --user
                        
                        flatpak install flathub org.gnome.Platform/x86_64/40 org.gnome.Sdk/x86_64/40 --user

                        هذه إستمارة كتبتها فقط إستبدل إذا أردت ال app-id وسمي إسم ملف ال json بذات الإسم وأيضا قد يهمك إستبدال command لإسم ملف البرنامج الخاص بك و طبعا في اخر الإستمارة المعلومات عن بناء البرنامج في حالتي مسار المشروع عندي و نقل ملف zbargtk3_0.py بالإضافة للإسم إذا أردت .
                        https://github.com/yucefsourani/MySc....zbarpygi.json
                        كود PHP:
                        {
                        "app-id" "com.github.yucefsourani.zbargtk3_0",
                        "runtime" "org.gnome.Platform",
                        "runtime-version" "40",
                        "sdk" "org.gnome.Sdk",
                        "command" "zbargtk3_0.py",
                        "finish-args" : [
                        "--share=network",
                        "--share=ipc",
                        "--socket=fallback-x11",
                        "--socket=wayland",
                        "--filesystem=home",
                        "--device=all",
                        "--socket=pulseaudio",
                        "--socket=system-bus",
                        "--socket=session-bus",
                        "--filesystem=xdg-run/dconf",
                        "--filesystem=~/.config/dconf:ro",
                        "--talk-name=ca.desrt.dconf",
                        "--env=DCONF_USER_CONFIG_DIR=.config/dconf"
                        ],
                        "cleanup" : [
                        "/include",
                        "/lib/pkgconfig",
                        "/man",
                        "/share/doc",
                        "/share/gtk-doc",
                        "/share/man",
                        "/share/pkgconfig",
                        "*.la",
                        "*.a"
                        ],
                        "modules" : [
                        {
                        "name" "ImageMagick",
                        "sources" : [
                        {
                        "type" "archive",
                        "url" "https://github.com/ImageMagick/ImageMagick/archive/refs/tags/7.0.11-6.tar.gz",
                        "sha256" "8adc1605784653b078572b825e8cd1d3d54f8a1b4ba86b32c a253c038f7e4c37"
                        }
                        ]
                        },
                        {
                        "name" "zbar",
                        "buildsystem" "simple",
                        "sources" : [
                        {
                        "type" "git",
                        "url" "https://github.com/mchehab/zbar"
                        }
                        ],
                        "build-commands" : [
                        "autoreconf -vfi",
                        "./configure --with-gtk=gtk3 --with-gir=yes --with-python=python3 --prefix=/",
                        "make",
                        "make install prefix=/ DESTDIR=/app INSTALL='install -p'"
                        ]
                        },
                        {
                        "name" "zbarpygi",
                        "builddir" true,
                        "buildsystem" "simple",
                        "sources" : [
                        {
                        "type" "dir",
                        "url" "file:///home/yuceff28/Projects/zbargtk3_0"
                        }
                        ],
                        "build-commands" : [
                        "mkdir -p /app/bin",
                        "cp zbargtk3_0.py /app/bin"
                        ]
                        }
                        ],
                        "build-options" : {
                        "env" : { }
                        }



                        ثم أسهل حل أولا نزل برنامج gnome builder وشغله ثم إختار select folder ثم إختار المجلد الذي يحتوي ملفات المشروع ثم تأكد من القسم build preferences من إختيار ملف ال json للإستمارة و من أن التثبيت سيتم في app/ ثم شغل عملية البناء التي ستأخذ وقت بطبيعة الحال في أول مرة ثم شغل البرنامج بالنسبة للصلاحيات لا تحتاجها كلها لكني نقلت الملف وعدلت عليه من مشروع قديم لي ولم أحذف الصلاحيات لكن ستحتاج مثلا device=all للوصول ل *dev/video/ .
                        كود:
                        flatpak install flathub org.gnome.Builder --user
                        مع الملاحظة قبل بدأ عملية البناء أعطي ملف التنفيذ لبرنامجك صلاحيات التنفيذ و أيضا لا تنسى #!/usr/bin/python3 في حالة بايثون .

                        اضغط على الصورة لعرض أكبر. 

الإسم:	Screenshot from 2021-05-30 10-53-17.png 
مشاهدات:	24 
الحجم:	43.0 كيلوبايت 
الهوية:	983614
                        اضغط على الصورة لعرض أكبر. 

الإسم:	Screenshot from 2021-05-30 10-54-25.png 
مشاهدات:	21 
الحجم:	113.3 كيلوبايت 
الهوية:	983615



                        اضغط على الصورة لعرض أكبر.   الإسم:	Screenshot from 2021-05-30 13-07-06.png  مشاهدات:	0  الحجم:	70.6 كيلوبايت  الهوية:	983612

                        اضغط على الصورة لعرض أكبر.   الإسم:	Screenshot from 2021-05-30 13-09-10.png  مشاهدات:	0  الحجم:	129.0 كيلوبايت  الهوية:	983613




                        إذا لم ترد إستخدام gnome builder تابع وثائق flatpak .
                        https://docs.flatpak.org/en/latest/first-build.html
                        التعديل الأخير تم بواسطة yucef; الساعة 30-05-2021, 01:15 PM.

                        تعليق

                        يعمل...
                        X