Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Codice in C# di Google DLP e trasformazione di una riga in VB.NET
Forum - C# / VB.NET - Codice in C# di Google DLP e trasformazione di una riga in VB.NET

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
dylan666 (Normal User)
Pro


Messaggi: 129
Iscritto: 08/09/2009

Segnala al moderatore
Postato alle 1:04
Giovedì, 14/05/2020
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

  1. Imports System.IO
  2. Imports Google.Api.Gax.ResourceNames
  3. Imports Google.Cloud.Dlp.V2
  4. Imports Google.Protobuf
  5. Public Class Form1
  6.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  7.         RedactFromImage("PROJECT-NAME-######", "C:\\tmp\\ID.jpg", "C:\\tmp\\ID3.jpg")
  8.     End Sub
  9.  
  10.     Function RedactFromImage(ByVal projectId As String, ByVal originalImagePath As String, ByVal redactedImagePath As String) As Object
  11.         Dim request = New RedactImageRequest
  12.         request.ParentAsProjectName = New ProjectName(projectId)
  13.         request.InspectConfig = New InspectConfig
  14.         request.InspectConfig.MinLikelihood = Likelihood.Likely
  15.         request.InspectConfig.Limits = New InspectConfig.Types.FindingLimits()
  16.         request.InspectConfig.Limits.MaxFindingsPerItem = 5
  17.         request.InspectConfig.IncludeQuote = True
  18.         request.InspectConfig.InfoTypes(Name{"PERSON_NAME"})
  19.         request.ByteItem = New ByteContentItem
  20.         request.ByteItem.Type = ByteContentItem.Types.BytesType.ImagePng
  21.         request.ByteItem.Data = ByteString.FromStream(New FileStream(originalImagePath, FileMode.Open))
  22.  
  23.         Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "C:\tmp\PROJECT-NAME-######.json")
  24.         Dim client As DlpServiceClient = DlpServiceClient.Create()
  25.         Dim response = client.RedactImage(request)
  26.         Console.WriteLine($"Extracted text: {response.ExtractedText}")
  27.  
  28.         ' Writes redacted image into file
  29.         response.RedactedImage.WriteTo(New FileStream(redactedImagePath, FileMode.Create, FileAccess.Write))
  30.         Return 0
  31.     End Function
  32. 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


PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 13:09
Giovedì, 14/05/2020
Il mio convertitore la funzione la converte così:

Codice sorgente - presumibilmente VB.NET

  1. Public Shared Function RedactFromImage(ByVal projectId As String, ByVal originalImagePath As String, ByVal redactedImagePath As String) As Object
  2.                         Dim request = New RedactImageRequest With {
  3.                                 .ParentAsProjectName = New ProjectName(projectId),
  4.                                 .InspectConfig = New InspectConfig With {
  5.                                         .MinLikelihood = Likelihood.Likely,
  6.                                         .Limits = New InspectConfig.Types.FindingLimits() With {.MaxFindingsPerItem = 5},
  7.                                         .IncludeQuote = True,
  8.                                         .InfoTypes = {
  9.                                                 New InfoType With {.Name = "PHONE_NUMBER"},
  10.                                                 New InfoType With {.Name = "EMAIL_ADDRESS"}
  11.                                         }
  12.                                 },
  13.                                 .ByteItem = New ByteContentItem With {
  14.                                         .Type = ByteContentItem.Types.BytesType.ImagePng,
  15.                                         .Data = ByteString.FromStream(New FileStream(originalImagePath, FileMode.Open))
  16.                                 }
  17.                         }
  18.  
  19.                         Dim client As DlpServiceClient = DlpServiceClient.Create()
  20.                         Dim response = client.RedactImage(request)
  21.  
  22.                         Console.WriteLine($"Extracted text: {response.ExtractedText}")
  23.  
  24.                         ' Writes redacted image into file
  25.                         response.RedactedImage.WriteTo(New FileStream(redactedImagePath, FileMode.Create, FileAccess.Write))
  26.  
  27.                         Return 0
  28. 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
PM Quote
Avatar
dylan666 (Normal User)
Pro


Messaggi: 129
Iscritto: 08/09/2009

Segnala al moderatore
Postato alle 14:29
Giovedì, 14/05/2020
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

PM Quote
Avatar
dylan666 (Normal User)
Pro


Messaggi: 129
Iscritto: 08/09/2009

Segnala al moderatore
Postato alle 10:13
Lunedì, 25/05/2020
Ciao a tutti, ma c'è un motivo per il quale VB.Net vede "InfoTypes" come "ReadOnly" mentre C# invece no?

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 12:48
Lunedì, 25/05/2020
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
PM Quote
Avatar
dylan666 (Normal User)
Pro


Messaggi: 129
Iscritto: 08/09/2009

Segnala al moderatore
Postato alle 13:37
Lunedì, 25/05/2020
Mi sa che ci siamo quasi!
Non ho errori in compilazione ma quando richiamo la funzione da un bottone...

Codice sorgente - presumibilmente VB.NET

  1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  2.         RedactFromImage("PROJECT-NAME-######", "C:\\tmp\\ID.jpg", "C:\\tmp\\ID3.jpg")
  3.     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...

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 14:03
Lunedì, 25/05/2020
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
PM Quote
Avatar
dylan666 (Normal User)
Pro


Messaggi: 129
Iscritto: 08/09/2009

Segnala al moderatore
Postato alle 18:25
Lunedì, 25/05/2020
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

PM Quote
Avatar
dylan666 (Normal User)
Pro


Messaggi: 129
Iscritto: 08/09/2009

Segnala al moderatore
Postato alle 18:33
Lunedì, 25/05/2020
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
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo