منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : مشكلة في تحويل كود من #c الي vb.net
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم
احاول تحويل هذا الكود
وبعد التحويل اصبح الكود
ولكن يظهر هذا الخطأ


الكود قبل التحويل
كود :
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))
اخي الماجيك
يبدولي ان الخطأ بسبب انك تستخدم مكتبات (استوردتها) قديمة بينما الكود الذي استخدمته  مبني على استخدام  نفس المكتبات التي استوردتها 
لكن باصدار احدث وللتوضيح اكثر سافترض ان اصدار المكتبة المستخدمه التي استوردتها هو 0.1.2 بينما كان الكود مبني على استخدام اصدارات احدث من نفس المكتبة
عموما اذا لم يكن ماقلته نافعا فانصحك بارفاق المشروع لانه بالتاكيد ستجد من يقدم الحل والتوضيح المناسب
(27-09-21, 01:59 AM)معاند الحظ كتب : [ -> ]اخي الماجيك
يبدولي ان الخطأ بسبب انك تستخدم مكتبات (استوردتها) قديمة بينما الكود الذي استخدمته  مبني على استخدام  نفس المكتبات التي استوردتها 
لكن باصدار احدث وللتوضيح اكثر سافترض ان اصدار المكتبة المستخدمه التي استوردتها هو 0.1.2 بينما كان الكود مبني على استخدام اصدارات احدث من نفس المكتبة
عموما اذا لم يكن ماقلته نافعا فانصحك بارفاق المشروع لانه بالتاكيد ستجد من يقدم الحل والتوضيح المناسب

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

وبصراحة اكثر فاني لا اعرف اي شيء عن OpenCVSharp او لما تستخدم لكني اعتقد انك لو ارفقت مشروعك فحتما 
ستجد مساعدة تحل المشكلة لديك سواء مني او من بقية الاخوان
كود :
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
اخوي الماجيك

حاولت اكتشف المشكلة في كودك وان شاء الله اني لقيت الحل
وبعد البحث  في الرابط الذي ارفقته في ردك السابق وجدت كود بلغة  فيجوال بيسك 
حيث  تم استيراد فضاء الاسماء 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 
واتمنى منك ان تخبرني سواء كان الحل صحيح او لا
(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 
واتمنى منك ان تخبرني سواء كان الحل صحيح او لا

نعم الحل صحيح
بارك الله فيك
تسلم ايدك بجد ♥