Oppure

Loading
13/05/20 23:04
dylan666
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:
github.com/GoogleCloudPlatform/dotnet-docs-samples/blob/master/dlp/api/DlpSample/…

Il l'ho modificato in questo (lo so, i WITH erano più eleganti ma preferisco non usarlo per adesso)

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 cloud.google.com/dlp/docs/…. 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

aaa
14/05/20 11:09
Carlo
Il mio convertitore la funzione la converte così:

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 14/05/20 12:00
in programmazione tutto è permesso
14/05/20 12:29
dylan666
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
aaa
25/05/20 8:13
dylan666
Ciao a tutti, ma c'è un motivo per il quale VB.Net vede "InfoTypes" come "ReadOnly" mentre C# invece no?
aaa
25/05/20 10:48
Carlo
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 25/05/20 10:55
in programmazione tutto è permesso
25/05/20 11:37
dylan666
Mi sa che ci siamo quasi!
Non ho errori in compilazione ma quando richiamo la funzione da un bottone...

    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...
aaa
25/05/20 12:03
Carlo
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 25/05/20 13:30
in programmazione tutto è permesso
25/05/20 16:25
dylan666
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
aaa