рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдФрд░ Google рдХреНрд▓рд╛рдЙрдб рд╡рд┐рдЬрд╝рди рдХрд╛ рдЙрдкрдпреЛрдЧ

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ рдЖрдИрдмреАрдПрдо рд╡рд╛рдЯрд╕рди рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдмреЙрдЯ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдерд╛ , рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдмрд┐рд▓реНрд▓реА рдХреА рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП Google рдХреНрд▓рд╛рдЙрдб рд╡рд┐рдЬрд╝рди рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЕрдкрдиреЗ рдмреЙрдЯ рдХреЗ рдЗрдирд╕рд╛рдЗрдЯреНрд╕ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред

рдереЛрдбрд╝реА рд╕реА рдкреГрд╖реНрдарднреВрдорд┐:

рдореЗрд░реЗ рдмреЙрдЯ рдиреЗ рдХреБрдЫ рдорд╣реАрдиреЛрдВ рддрдХ рдЖрдИрдмреАрдПрдо рд╡реЙрдЯрд╕рди рдорд╛рдиреНрдпрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрд╛рдлреА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рддрдм рд╣рдм рдкрд░ рдЧреВрдЧрд▓ рдХреНрд▓рд╛рдЙрдб рд╡рд┐рдЬрд╝рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ Google рдЖрдИрдмреАрдПрдо рд╕реЗ рдмреЗрд╣рддрд░ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИред рдЙрд╕реА рджрд┐рди, рдореИрдВрдиреЗ Google рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд┐рдпрд╛ рдФрд░ рдЕрдкрдиреЗ рдмреЙрдЯ рдореЗрдВ рдХреИрдЯ рдореЙрдбрд░реЗрд╢рди рдмреНрд▓реЙрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред

рдереЛрдбрд╝реА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ GoogleCloudPlatform github рдкрд░ C # рдореЗрдВ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓рд╛ ред рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдПрдХ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ json рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдмрдирд╛рдпрд╛, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдХрдВрд╕реЛрд▓ рдХреЗ "рд╕реЗрд╡рд╛ рдЦрд╛рддреЛрдВ" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд▓рд┐рдпрд╛ рдерд╛ред

c # рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб
private VisionService service;
        private string _JsonPath = @"C:\BOTS\fcatsbot\json.json";       
        private VisionService CreateAuthorizedClient(string JsonPath)
        {
            GoogleCredential credential =
                GoogleCredential.FromStream(new FileStream(JsonPath, FileMode.Open));            
            // Inject the Cloud Vision scopes
            if (credential.IsCreateScopedRequired)
            {
                credential = credential.CreateScoped(new[]
                {
                    VisionService.Scope.CloudPlatform
                });
            }
            var res = new VisionService(new BaseClientService.Initializer
            {
                HttpClientInitializer = credential,
                GZipEnabled = false
            });
            return res;
        }


рдЕрдЧрд▓рд╛, рдореИрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдореЙрдбрд░реЗрд╢рди (рд▓реЗрдмрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ) рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рддрд╛ рд╣реВрдВред Github рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, DetectLabels рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЙрд╕ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рд╕рд░реНрд╡рд░реЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рд╣реИ рддрд╛рдХрд┐ рдЫрд╡рд┐ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рди рдХрд░реЗрдВред рдореИрдВ рдХреЗрд╡рд▓ file_id рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рд╕реЗ рдЧрддрд┐ рдореЗрдВ рдЕрдЪреНрдЫреА рд╡реГрджреНрдзрд┐ рд╣реЛрддреА рд╣реИред

рд▓реЗрдмрд▓ рдкрд╣рдЪрд╛рди рдХреЛрдб
 private async Task<IList<AnnotateImageResponse>> DetectLabels(
            VisionService vision, string imageUrl)
        {
            // Convert image to Base64 encoded for JSON ASCII text based request   
            MemoryStream ms = new MemoryStream();
            using (var client = new HttpClient())
            {
                Stream imageBytes = await client.GetStreamAsync(imageUrl);
                imageBytes.CopyTo(ms);
            }
            byte[] imageArray = ms.ToArray();
            string imageContent = Convert.ToBase64String(imageArray);
            // Post label detection request to the Vision API
            // [START construct_request]
            var responses = vision.Images.Annotate(
                new BatchAnnotateImagesRequest()
                {
                    Requests = new[] {
                    new AnnotateImageRequest() {
                        Features = new []
                        { new Feature()
                            { Type =
                          "LABEL_DETECTION"}
                            },
                        Image = new Image() { Content = imageContent }
                    }
               }
                }).Execute();
            ms.Dispose();
            return responses.Responses;
        }

рдлрд┐рд░ рдореИрдВ рдЬрд╡рд╛рдм рдореЗрдВ рдЦреЛрдЬрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдмрд┐рд▓реНрд▓реА рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд▓реЗрдмрд▓ рд╣реИ, рдЬрд┐рд╕рдХреА рд░реЗрдЯрд┐рдВрдЧ 0.6 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдмреЙрдЯ рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рддрд╕реНрд╡реАрд░ рдореЗрдВ рдПрдХ рдмрд┐рд▓реНрд▓реА рд╣реИ:

рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
foreach (var response in responses.Responses)
{
  foreach (var label in response.LabelAnnotations)
  {
    double _score = label.Score == null ? 0 : Convert.ToDouble(label.Score.Value);
    var class = label.Description.Trim();
    if (class .Contains("kitten") || class .Contains("cat") ) && (_score > 0.60))
    {
      HasCatOrKittenClass = true;//moderation OK
    }
  }
}


рдлрд╝рд╛рдЗрд▓_id рд╕реЗ рдЫрд╡рд┐ рдХрд╛ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИ, рдореИрдВрдиреЗ C # рдЯреЗрд▓реАрдлрд╝реЛрди рдмреЙрдЯ рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ :

рдЯреЗрд▓реАрдЧреНрд░рд╛рдо getFile
var file = await MainParams.TGBot.GetFileAsync(fileid);
var file_path = file.FilePath;
var urlImage = "https://api.telegram.org/file/bot" + MainParams.bot_token + "/" + file_path;


рдФрд░ рдЬрдм рдореИрдВ sendPhoto рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЫрд╡рд┐ рднреЗрдЬрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рд╕рд╣реЗрдЬреЗ рдЧрдП file_id рдХреЛ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреА рдмрд┐рд▓реНрд▓реА рдХреА рддрд╕реНрд╡реАрд░ рдХреЛ рдореЙрдбрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рднреЗрдЬрддрд╛ рд╣реИ (рдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП thecatapi.com рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ), рдореИрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреЗрд╡рд▓ file_id рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реВрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд┐рддреНрд░ рдХрд╛ рд▓рд┐рдВрдХ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ SendPhoto рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреЗрдЬрддрд╛ рд╣реВрдВред рдФрд░ Google рдХреНрд▓рд╛рдЙрдб рд╡рд┐рдЬрд╝рди рдХреЗ рд╕рд╛рде рдЫрд╡рд┐ рдкрд╣рдЪрд╛рди IBM Watson рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ

Source: https://habr.com/ru/post/hi399877/


All Articles