تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشكلة في تحويل كود من #c الي vb.net
#1
السلام عليكم
احاول تحويل هذا الكود
وبعد التحويل اصبح الكود
ولكن يظهر هذا الخطأ


الكود قبل التحويل
كود :
var output = detectionNet.Forward();

                        //Analyze the test results
                        var detectionMat = new Mat(output.Size(2), output.Size(3), MatType.CV_32F, output.Ptr(0));
                        for (int i = 0; i < detectionMat.Rows; i++)
                        {
                            float confidence = detectionMat.At<float>(i, 2);

                            if (confidence > 0.60)
                            {
                                int classid = (int)detectionMat.At<float>(i, 1);
                                //Judging the type of recognition, this application scenario only displays the recognized person, improving processing efficiency//if (classid <this.labelNames.Length && (classid == 1 || classid != 1))
                                //if (classid <this.labelNames.Length && (classid == 1))
                                if (classid < this.labelNames.Length && (classid == 1))
                                {
                                    int x1 = (int)(detectionMat.At<float>(i, 3) * frameWidth);
                                    int y1 = (int)(detectionMat.At<float>(i, 4) * frameHeight);
                                    int x2 = (int)(detectionMat.At<float>(i, 5) * frameWidth);
                                    int y2 = (int)(detectionMat.At<float>(i, 6) * frameHeight);

الكود بعد التحويل

كود :
Dim output = detectionNet.Forward()

                        'Analyze the test results
                        Dim detectionMat = New Mat(output.Size(2), output.Size(3), MatType.CV_32F, output.Ptr(0))
                        For i As Integer = 0 To detectionMat.Rows - 1
                            Dim confidence As Single = detectionMat.At(Of Single)(i, 2)

                            If confidence > 0.60 Then
                                Dim classid As Integer = CInt(Fix(detectionMat.At(Of Single)(i, 1)))
                                'Judging the type of recognition, this application scenario only displays the recognized person, improving processing efficiency//if (classid <this.labelNames.Length && (classid == 1 || classid != 1))
                                'if (classid <this.labelNames.Length && (classid == 1))
                                If classid < Me.labelNames.Length AndAlso (classid = 1) Then
                                    Dim x1 As Integer = CInt(Fix(detectionMat.At(Of Single)(i, 3) * frameWidth))
                                    Dim y1 As Integer = CInt(Fix(detectionMat.At(Of Single)(i, 4) * frameHeight))
                                    Dim x2 As Integer = CInt(Fix(detectionMat.At(Of Single)(i, 5) * frameWidth))
                                    Dim y2 As Integer = CInt(Fix(detectionMat.At(Of Single)(i, 6) * frameHeight))
الرد }}}
تم الشكر بواسطة:
#2
اخي الماجيك
يبدولي ان الخطأ بسبب انك تستخدم مكتبات (استوردتها) قديمة بينما الكود الذي استخدمته  مبني على استخدام  نفس المكتبات التي استوردتها 
لكن باصدار احدث وللتوضيح اكثر سافترض ان اصدار المكتبة المستخدمه التي استوردتها هو 0.1.2 بينما كان الكود مبني على استخدام اصدارات احدث من نفس المكتبة
عموما اذا لم يكن ماقلته نافعا فانصحك بارفاق المشروع لانه بالتاكيد ستجد من يقدم الحل والتوضيح المناسب

الرد }}}
تم الشكر بواسطة:
#3
(27-09-21, 01:59 AM)معاند الحظ كتب : اخي الماجيك
يبدولي ان الخطأ بسبب انك تستخدم مكتبات (استوردتها) قديمة بينما الكود الذي استخدمته  مبني على استخدام  نفس المكتبات التي استوردتها 
لكن باصدار احدث وللتوضيح اكثر سافترض ان اصدار المكتبة المستخدمه التي استوردتها هو 0.1.2 بينما كان الكود مبني على استخدام اصدارات احدث من نفس المكتبة
عموما اذا لم يكن ماقلته نافعا فانصحك بارفاق المشروع لانه بالتاكيد ستجد من يقدم الحل والتوضيح المناسب

https://skprogramlab.hatenablog.com/entr...p-Sample10
الرد }}}
تم الشكر بواسطة:
#4
اخوي الماجيك 
فتحت الرابط وبصراحة اصبحت في حيرة ايضا لاني لا ادري لماذا وضعته لكني اضن ان الصفحة في الرابط هي المكان الذي اخذت منه الكود وقمت بتحويله
لكن هذا ليس ما اردته انا فانا بناءا على حالة سابقة مماثلة لحالتك اكتشفت ان سبب الخطا هو كما ذكرت لك وهو عدم توافق اصدارات المكتبات 
وللتوضيح 
كنت اعمل على مشروع لتحميل  ورفع المقاطع من والى اليوتيوب لذا اضطررت الى استخدام المكتبات التي طورتها جوجل
ثم بحثت عن كود يقوم بجلب البيانات من اليوتيوب ولاحظت الخطا والذي كان ان الكود الذي استخدمته يحتوي على وضيفة او اجراء او كلاس  او اكثر ليس موجودا في 
اصدار المكتبة التي استخدمتها واستوردتها وعند استيراد المكتبة المطابقة زالت المشكلة.

وبصراحة اكثر فاني لا اعرف اي شيء عن OpenCVSharp او لما تستخدم لكني اعتقد انك لو ارفقت مشروعك فحتما 
ستجد مساعدة تحل المشكلة لديك سواء مني او من بقية الاخوان

الرد }}}
تم الشكر بواسطة: الماجيك مسعد
#5
كود :
Private Sub SurroundingSub()
       Dim output = detectionNet.Forward()
       Dim detectionMat = New Mat(output.Size(2), output.Size(3), MatType.CV_32F, output.Ptr(0))

       For i As Integer = 0 To detectionMat.Rows - 1
           Dim confidence As Single = detectionMat.At(Of Single)(i, 2)

           If confidence > 0.6 Then
               Dim classid As Integer = CInt(detectionMat.At(Of Single)(i, 1))

               If classid < Me.labelNames.Length AndAlso (classid = 1) Then
                   Dim x1 As Integer = CInt((detectionMat.At(Of Single)(i, 3) * frameWidth))
                   Dim y1 As Integer = CInt((detectionMat.At(Of Single)(i, 4) * frameHeight))
                   Dim x2 As Integer = CInt((detectionMat.At(Of Single)(i, 5) * frameWidth))
                   Dim y2 As Integer = CInt((detectionMat.At(Of Single)(i, 6) * frameHeight))
               End If
           End If
       Next
   End Sub
الرد }}}
تم الشكر بواسطة: معاند الحظ , bidaya
#6
اخوي الماجيك

حاولت اكتشف المشكلة في كودك وان شاء الله اني لقيت الحل
وبعد البحث  في الرابط الذي ارفقته في ردك السابق وجدت كود بلغة  فيجوال بيسك 
حيث  تم استيراد فضاء الاسماء OpenCvSharp و OpenCvSharp.Extensions

لذا بحثت باستخدام جملة البحث  nuget OpenCvSharp 

وقمت بتجربة الاصدارات المختلفة لكن التي نجحت هي OpenCvSharp3-AnyCPU -Version 4.0.0.20181129 ربما لاني استخدم فيجوال ستوديو 2010

حيث قمت بتثبيتها على مشروعي التجريبي باستخدام Nuget Packages Manager  
باستخدام الامر التالي
Install-Package OpenCvSharp3-AnyCPU -Version 4.0.0.20181129

بعدها اختفت الخطوط الحمراء من الكود لكن بقي السطر التالي
Dim output = detectionNet.Forward
والمشكلة كانت ان detectionNet عبارة عن عنصر كلاس لا ادري ماهو مصدرة 
المهم في النهاية تجاوزت المشكلة هذي ايضا  عبر وضع تعريف للمتغير Dim detectionNet As New Dnn.Net
لكن بقيت بعض الخطوط في Me.labelNames.Length حيث لا ادري ماهو وايضا frameWidth

اخيرا اليك محاولتي وارجو ان يكون الحل صحيح
PHP كود :
Imports OpenCvSharp
Imports OpenCvSharp
.Extensions

Public Class Form1
    
Private Sub Form1_Load(sender As System.ObjectAs System.EventArgsHandles MyBase.Load
        Dim detectionNet 
As New Dnn.Net
        Dim output 
detectionNet.Forward
        Dim detectionMat 
= New Mat(output.Size(2), output.Size(3), MatType.CV_32Foutput.Ptr(0))

        For As Integer 0 To detectionMat.Rows 1
            Dim confidence 
As Single detectionMat.At(Of Single)(i2)

            If confidence 0.6 Then
                Dim classid 
As Integer CInt(detectionMat.At(Of Single)(i1))

                If classid Me.labelNames.Length AndAlso (classid 1Then
                    Dim x1 
As Integer CInt((detectionMat.At(Of Single)(i3) * frameWidth))
                    Dim y1 As Integer CInt((detectionMat.At(Of Single)(i4) * frameHeight))
                    Dim x2 As Integer CInt((detectionMat.At(Of Single)(i5) * frameWidth))
                    Dim y2 As Integer CInt((detectionMat.At(Of Single)(i6) * frameHeight))
                End If
            End If
        Next
    End Sub

End 
Class 
واتمنى منك ان تخبرني سواء كان الحل صحيح او لا

الرد }}}
تم الشكر بواسطة: الماجيك مسعد , asemshahen5
#7
(27-09-21, 02:20 PM)معاند الحظ كتب : اخوي الماجيك

حاولت اكتشف المشكلة في كودك وان شاء الله اني لقيت الحل
وبعد البحث  في الرابط الذي ارفقته في ردك السابق وجدت كود بلغة  فيجوال بيسك 
حيث  تم استيراد فضاء الاسماء OpenCvSharp و OpenCvSharp.Extensions

لذا بحثت باستخدام جملة البحث  nuget OpenCvSharp 

وقمت بتجربة الاصدارات المختلفة لكن التي نجحت هي OpenCvSharp3-AnyCPU -Version 4.0.0.20181129 ربما لاني استخدم فيجوال ستوديو 2010

حيث قمت بتثبيتها على مشروعي التجريبي باستخدام Nuget Packages Manager  
باستخدام الامر التالي
Install-Package OpenCvSharp3-AnyCPU -Version 4.0.0.20181129

بعدها اختفت الخطوط الحمراء من الكود لكن بقي السطر التالي
Dim output = detectionNet.Forward
والمشكلة كانت ان detectionNet عبارة عن عنصر كلاس لا ادري ماهو مصدرة 
المهم في النهاية تجاوزت المشكلة هذي ايضا  عبر وضع تعريف للمتغير Dim detectionNet As New Dnn.Net
لكن بقيت بعض الخطوط في Me.labelNames.Length حيث لا ادري ماهو وايضا frameWidth

اخيرا اليك محاولتي وارجو ان يكون الحل صحيح
PHP كود :
Imports OpenCvSharp
Imports OpenCvSharp
.Extensions

Public Class Form1
    
Private Sub Form1_Load(sender As System.ObjectAs System.EventArgsHandles MyBase.Load
        Dim detectionNet 
As New Dnn.Net
        Dim output 
detectionNet.Forward
        Dim detectionMat 
= New Mat(output.Size(2), output.Size(3), MatType.CV_32Foutput.Ptr(0))

        For As Integer 0 To detectionMat.Rows 1
            Dim confidence 
As Single detectionMat.At(Of Single)(i2)

            If confidence 0.6 Then
                Dim classid 
As Integer CInt(detectionMat.At(Of Single)(i1))

                If classid Me.labelNames.Length AndAlso (classid 1Then
                    Dim x1 
As Integer CInt((detectionMat.At(Of Single)(i3) * frameWidth))
                    Dim y1 As Integer CInt((detectionMat.At(Of Single)(i4) * frameHeight))
                    Dim x2 As Integer CInt((detectionMat.At(Of Single)(i5) * frameWidth))
                    Dim y2 As Integer CInt((detectionMat.At(Of Single)(i6) * frameHeight))
                End If
            End If
        Next
    End Sub

End 
Class 
واتمنى منك ان تخبرني سواء كان الحل صحيح او لا

نعم الحل صحيح
بارك الله فيك
تسلم ايدك بجد ♥
الرد }}}
تم الشكر بواسطة: معاند الحظ , معاند الحظ



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم