مشكلة في تحويل كود من #c الي vb.net - الماجيك مسعد - 27-09-21
السلام عليكم
احاول تحويل هذا الكود
وبعد التحويل اصبح الكود
ولكن يظهر هذا الخطأ
الكود قبل التحويل
كود :
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))
RE: مشكلة في تحويل كود من #c الي vb.net - معاند الحظ - 27-09-21
اخي الماجيك
يبدولي ان الخطأ بسبب انك تستخدم مكتبات (استوردتها) قديمة بينما الكود الذي استخدمته مبني على استخدام نفس المكتبات التي استوردتها
لكن باصدار احدث وللتوضيح اكثر سافترض ان اصدار المكتبة المستخدمه التي استوردتها هو 0.1.2 بينما كان الكود مبني على استخدام اصدارات احدث من نفس المكتبة
عموما اذا لم يكن ماقلته نافعا فانصحك بارفاق المشروع لانه بالتاكيد ستجد من يقدم الحل والتوضيح المناسب
RE: مشكلة في تحويل كود من #c الي vb.net - الماجيك مسعد - 27-09-21
(27-09-21, 01:59 AM)معاند الحظ كتب : اخي الماجيك
يبدولي ان الخطأ بسبب انك تستخدم مكتبات (استوردتها) قديمة بينما الكود الذي استخدمته مبني على استخدام نفس المكتبات التي استوردتها
لكن باصدار احدث وللتوضيح اكثر سافترض ان اصدار المكتبة المستخدمه التي استوردتها هو 0.1.2 بينما كان الكود مبني على استخدام اصدارات احدث من نفس المكتبة
عموما اذا لم يكن ماقلته نافعا فانصحك بارفاق المشروع لانه بالتاكيد ستجد من يقدم الحل والتوضيح المناسب
https://skprogramlab.hatenablog.com/entry/OpenCVSharp-Sample10
RE: مشكلة في تحويل كود من #c الي vb.net - معاند الحظ - 27-09-21
اخوي الماجيك
فتحت الرابط وبصراحة اصبحت في حيرة ايضا لاني لا ادري لماذا وضعته لكني اضن ان الصفحة في الرابط هي المكان الذي اخذت منه الكود وقمت بتحويله
لكن هذا ليس ما اردته انا فانا بناءا على حالة سابقة مماثلة لحالتك اكتشفت ان سبب الخطا هو كما ذكرت لك وهو عدم توافق اصدارات المكتبات
وللتوضيح
كنت اعمل على مشروع لتحميل ورفع المقاطع من والى اليوتيوب لذا اضطررت الى استخدام المكتبات التي طورتها جوجل
ثم بحثت عن كود يقوم بجلب البيانات من اليوتيوب ولاحظت الخطا والذي كان ان الكود الذي استخدمته يحتوي على وضيفة او اجراء او كلاس او اكثر ليس موجودا في
اصدار المكتبة التي استخدمتها واستوردتها وعند استيراد المكتبة المطابقة زالت المشكلة.
وبصراحة اكثر فاني لا اعرف اي شيء عن OpenCVSharp او لما تستخدم لكني اعتقد انك لو ارفقت مشروعك فحتما
ستجد مساعدة تحل المشكلة لديك سواء مني او من بقية الاخوان
RE: مشكلة في تحويل كود من #c الي vb.net - anes - 27-09-21
كود :
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
RE: مشكلة في تحويل كود من #c الي vb.net - معاند الحظ - 27-09-21
اخوي الماجيك
حاولت اكتشف المشكلة في كودك وان شاء الله اني لقيت الحل
وبعد البحث في الرابط الذي ارفقته في ردك السابق وجدت كود بلغة فيجوال بيسك
حيث تم استيراد فضاء الاسماء 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.Object, e As System.EventArgs) Handles MyBase.Load Dim detectionNet As New Dnn.Net 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
End Class
واتمنى منك ان تخبرني سواء كان الحل صحيح او لا
RE: مشكلة في تحويل كود من #c الي vb.net - الماجيك مسعد - 27-09-21
(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.Object, e As System.EventArgs) Handles MyBase.Load Dim detectionNet As New Dnn.Net 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
End Class
واتمنى منك ان تخبرني سواء كان الحل صحيح او لا
نعم الحل صحيح
بارك الله فيك
تسلم ايدك بجد ♥
|