
dylan666 (Normal User)
Pro
    
Messaggi: 128
Iscritto: 08/09/2009
|
Volevo provare a usare del codice per sfruttare le API di Google Cloud che però è disponibile solo in C# mentre se fosse possibile vorrei portarlo in VB.NET
Il codice è brevissimo e sono riuscito a convertirlo tutto (anche semplificandolo per il mio modo di vedere) e solo UNA riga non mi torna.
Il sorgente sta qui:
https://github.com/GoogleCloudPlatform/dotnet-docs-samples/ ...
Il l'ho modificato in questo (lo so, i WITH erano più eleganti ma preferisco non usarlo per adesso)
Codice sorgente - presumibilmente VB.NET |
Imports System.IO Imports Google.Api.Gax.ResourceNames Imports Google.Cloud.Dlp.V2 Imports Google.Protobuf Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click RedactFromImage("PROJECT-NAME-######", "C:\\tmp\\ID.jpg", "C:\\tmp\\ID3.jpg") End Sub Function RedactFromImage(ByVal projectId As String, ByVal originalImagePath As String, ByVal redactedImagePath As String) As Object Dim request = New RedactImageRequest request.ParentAsProjectName = New ProjectName(projectId) request.InspectConfig = New InspectConfig request.InspectConfig.MinLikelihood = Likelihood.Likely request.InspectConfig.Limits = New InspectConfig.Types.FindingLimits() request.InspectConfig.Limits.MaxFindingsPerItem = 5 request.InspectConfig.IncludeQuote = True request.InspectConfig.InfoTypes(Name{"PERSON_NAME"}) request.ByteItem = New ByteContentItem request.ByteItem.Type = ByteContentItem.Types.BytesType.ImagePng request.ByteItem.Data = ByteString.FromStream(New FileStream(originalImagePath, FileMode.Open)) Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "C:\tmp\PROJECT-NAME-######.json") Dim client As DlpServiceClient = DlpServiceClient.Create() Dim response = client.RedactImage(request) Console.WriteLine($"Extracted text: {response.ExtractedText}") ' Writes redacted image into file response.RedactedImage.WriteTo(New FileStream(redactedImagePath, FileMode.Create, FileAccess.Write)) Return 0 End Function End Class
|
La parte incriminata è la riga di InfoTypes.
Visual studio suggerisce questo:
ReadOnly Property InspectConfig.InfoTypes As Collections.RepeatedField(Of InfoType)
Restricts what info_types to look for. The values must correspond to InfoType values returned by ListlnfoTypes or listed at https://cloud.google.com/dlp/docs/infotypes-reference. When no InfoTypes or CustomInfoTypes are specified in a request, the system may automatically choose what detectors to run. By
default this may be all types, but may change over time as detectors are updated. If you need precise control and predictability as to what detectors are run you should specify specific InfoTypes listed in the reference, otherwise a default list will be used, which may change over time.
Cosa mi consigliate
|
|

Carlo (Member)
Guru
    
Messaggi: 1170
Iscritto: 29/01/2018
|
Il mio convertitore la funzione la converte così:
Codice sorgente - presumibilmente VB.NET |
Public Shared Function RedactFromImage(ByVal projectId As String, ByVal originalImagePath As String, ByVal redactedImagePath As String) As Object Dim request = New RedactImageRequest With { .ParentAsProjectName = New ProjectName(projectId), .InspectConfig = New InspectConfig With { .MinLikelihood = Likelihood.Likely, .Limits = New InspectConfig.Types.FindingLimits() With {.MaxFindingsPerItem = 5}, .IncludeQuote = True, .InfoTypes = { New InfoType With {.Name = "PHONE_NUMBER"}, New InfoType With {.Name = "EMAIL_ADDRESS"} } }, .ByteItem = New ByteContentItem With { .Type = ByteContentItem.Types.BytesType.ImagePng, .Data = ByteString.FromStream(New FileStream(originalImagePath, FileMode.Open)) } } Dim client As DlpServiceClient = DlpServiceClient.Create() Dim response = client.RedactImage(request) Console.WriteLine($"Extracted text: {response.ExtractedText}") ' Writes redacted image into file response.RedactedImage.WriteTo(New FileStream(redactedImagePath, FileMode.Create, FileAccess.Write)) Return 0 End Function
|
I due codici, anche se con diversa sintassi sono uguali, ma nella riga incriminata:
request.InspectConfig.InfoTypes(Name{"PERSON_NAME"})
nel tuo codice manca un New e un uguale.
.InfoTypes = {New InfoType With {.Name = "PHONE_NUMBER"},
New InfoType With {.Name = "EMAIL_ADDRESS"}}
Con la tua sintassi dovrebbe essere così:
request.InspectConfig.InfoTypes = New InspectConfig.InfoTypes(InspectConfig.InfoTypes.Name = {"PERSON_NAME"})
Ho eseguito un'analisi solo visiva, nulla di definitivo, controlla.
Ultima modifica effettuata da Carlo il 14/05/2020 alle 14:00
in programmazione tutto è permesso |
|

dylan666 (Normal User)
Pro
    
Messaggi: 128
Iscritto: 08/09/2009
|
Grazie dell'aiuto ma anche incollando il tuo codice ho lo stesso identico errore (riportato prima) sulla riga incriminata.
Cosa che con il codice C# non avviene
|
|

dylan666 (Normal User)
Pro
    
Messaggi: 128
Iscritto: 08/09/2009
|
Ciao a tutti, ma c'è un motivo per il quale VB.Net vede "InfoTypes" come "ReadOnly" mentre C# invece no?
|
|

Carlo (Member)
Guru
    
Messaggi: 1170
Iscritto: 29/01/2018
|
InfoType è readonly, ma Name è read write.
prova a scrivere la riga incriminata così:
request.InspectConfig.InfoTypes(Name) = New InfoType With {.Name = "PERSON_NAME"}
Ultima modifica effettuata da Carlo il 25/05/2020 alle 12:55
in programmazione tutto è permesso |
|

dylan666 (Normal User)
Pro
    
Messaggi: 128
Iscritto: 08/09/2009
|
Mi sa che ci siamo quasi!
Non ho errori in compilazione ma quando richiamo la funzione da un bottone...
Codice sorgente - presumibilmente VB.NET |
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click RedactFromImage("PROJECT-NAME-######", "C:\\tmp\\ID.jpg", "C:\\tmp\\ID3.jpg") End Sub
|
Ricevo questo errore alla fine della tua nuov riga:
An unhandled exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll
Additional information: Cast non valido dalla stringa "Form1" al tipo 'Integer'.
Non capisco cosa voglia...
|
|

Carlo (Member)
Guru
    
Messaggi: 1170
Iscritto: 29/01/2018
|
Non so, non ho un codice da provare e non so cosa dovrebbe fare.
Ma il programma funziona?, se remmi la riga che ti ho postato che fa?
Sembra che il nome non è obbligatorio impostarlo...
C:\tmp\PROJECT-NAME-######.json il file con le credenziali come dovrebbe essere?
In C#, funziona?
Hai un esempio completo?
Ultima modifica effettuata da Carlo il 25/05/2020 alle 15:30
in programmazione tutto è permesso |
|

dylan666 (Normal User)
Pro
    
Messaggi: 128
Iscritto: 08/09/2009
|
Il programma di esempio completo è quello in cima al primo post e funziona.
La riga in questione dice a Google quali parametri cercare, non è obbligatoria ma ometterla (domani ci provo) significa fare eliminare qualunque testo nel documento, che è poco utile.
La parte del file JSON è corretta e infatti il codice in C# funziona
Grazie per il tuo impegno
|
|

dylan666 (Normal User)
Pro
    
Messaggi: 128
Iscritto: 08/09/2009
|
Aggiungo che il codice serve a usare i servizi di Google Cloud per censurare i testi con dati sensibili, tipo nomi, cognomi, indirizzi, indirizzi email, codici di carte di credito ecc. contenuti in file immagine, testo o PDF.
La variabile della riga che dà errore indica che tipo di dati si vuole rimuovere.
Se omesso vuol dire "qualunque testo"
Ultima modifica effettuata da dylan666 il 25/05/2020 alle 18:34 |
|